2008-09-22 16 views
9

He instalado owfs y estoy tratando de leer los datos en un iButton temperature logger.¿Cómo uso owfs para leer un registrador de temperatura iButton?

owfs me permite montar el iButton como un sistema de archivos de fusibles y puedo ver todos los datos. Sin embargo, tengo problemas para averiguar cuál es la mejor forma de acceder a los datos. Puedo obtener lecturas individuales por cat ting los archivos, p. cat onewire/{deviceid}/log/temperature.1, pero el archivo onewire/{deviceid}/log/temperature.ALL está "roto" (es posible que sea demasiado grande, ya que histogram/temperature.ALL funciona bien).

Una secuencia de comandos python para leer todos los archivos parece funcionar, pero lleva mucho tiempo. Hay una mejor manera de hacerlo? ¿Alguien tiene algún ejemplo?

Estoy usando Ubuntu 8.04 y no pude ejecutar la aplicación Java "one wire viewer".

actualización: Usando owpython (instalado con owfs), que se puede conseguir la temperatura actual, pero no puede encontrar la manera de obtener acceso a los registros grabados:

>>> import ow 
>>> ow.init("u") # initialize USB 
>>> ow.Sensor("/").sensorList() 
[Sensor("/81.7FD921000000"), Sensor("/21.C4B912000000")] 
>>> x = ow.Sensor("/21.C4B912000000") 
>>> print x.type, x.temperature 
DS1921   22 

x.log da una AttributeError.

Respuesta

2

No creo que haya una manera inteligente. Owpython no es compatible con esa información de la documentación API. Supongo que /proc es su apuesta más segura. Tal vez eche un vistazo a la fuente del módulo owpython y compruebe si puede averiguar cómo funciona.

+0

yo no era capaz de encontrar ninguna documentación distinta de las cadenas de documentación. ¿Hay algo mas? – Tom

3

También he tenido problemas con los búhos. Descubrí que se trata de una solución sobrediseñada para lo que es un problema simple. Ahora estoy usando el código DigiTemp sin ningún problema. Me pareció flexible y confiable. Por ejemplo, puedo almacenar la temperatura de la habitación en un archivo de registro cada minuto ejecutando

/usr/local/bin/digitemp_DS9097U -c /usr/local/etc/digitemp.conf \ 
    -q -t0 -n0 -d60 -l/var/log/temperature 

Para llegar a ese punto he descargado el archivo de origen, descomprimido y luego hizo lo siguiente.

# Compile the hardware-specific command 
make ds9097u 
# Initialize the configuration file 
./digitemp_DS9097U -s/dev/ttyS0 -i 
# Run command to obtain temperature, and verify your setup 
./digitemp_DS9097U -a 
# Copy the configuration file to an accessible place 
cp .digitemprc /usr/local/etc/digitemp.conf 

También he editado manualmente mi archivo de configuración para ajustarlo a mi configuración. Así es como terminó.

TTY /dev/ttyS0 
READ_TIME 1000 
LOG_TYPE 1 
LOG_FORMAT "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F" 
CNT_FORMAT "%b %d %H:%M:%S Sensor %s #%n %C" 
HUM_FORMAT "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F H: %h%%" 
SENSORS 1 
ROM 0 0x10 0xD3 0x5B 0x07 0x00 0x00 0x00 0x05 

En mi caso también creó un archivo /etc/init.d/digitemp y ha permitido que se ejecute en el arranque.

#! /bin/sh 
# 
# System startup script for the temperature monitoring daemon 
# 
### BEGIN INIT INFO 
# Provides: digitemp 
# Required-Start: 
# Should-Start: 
# Required-Stop: 
# Should-Stop: 
# Default-Start: 2 3 5 
# Default-Stop: 0 1 6 
# Description: Start the temperature monitoring daemon 
### END INIT INFO 

DIGITEMP=/usr/local/bin/digitemp_DS9097U 
test -x $DIGITEMP || exit 5 

DIGITEMP_CONFIG=/root/digitemp.conf 
test -f $DIGITEMP_CONFIG || exit 6 

DIGITEMP_LOGFILE=/var/log/temperature 

# Source SuSE config 
. /etc/rc.status 

rc_reset 
case "$1" in 
    start) 
     echo -n "Starting temperature monitoring daemon" 
     startproc $DIGITEMP -c $DIGITEMP_CONFIG -q -t0 -n0 -d60 -l$DIGITEMP_LOGFILE 
     rc_status -v 
     ;; 
    stop) 
     echo -n "Shutting down temperature monitoring daemon" 
     killproc -TERM $DIGITEMP 
     rc_status -v 
     ;; 
    try-restart) 
     $0 status >/dev/null && $0 restart 
     rc_status 
     ;; 
    restart) 
     $0 stop 
     $0 start 
     rc_status 
     ;; 
    force-reload) 
     $0 try-restart 
     rc_status 
     ;; 
    reload) 
     $0 try-restart 
     rc_status 
     ;; 
    status) 
     echo -n "Checking for temperature monitoring service" 
     checkproc $DIGITEMP 
     rc_status -v 
     ;; 
    *) 
     echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload}" 
     exit 1 
     ;; 
esac 
rc_exit 
+0

Gracias por la información, pero no creo que eso ayude a obtener acceso al registro almacenado en el DS1922T. Puedo leer la temperatura actual usando owpython o owfs, solo estoy accediendo a las medidas almacenadas con las que estoy luchando. – Tom

Cuestiones relacionadas