2008-09-22 1 views
9

Я установил owfs и пытаюсь прочитать данные с iButton temperature logger.Как использовать owfs для чтения регистратора температуры iButton?

owfs позволяет мне монтировать iButton как файловую систему с предохранителем, и я могу видеть все данные. У меня возникли проблемы с выяснением того, что является лучшим способом доступа к данным. Я могу получить индивидуальные показания с помощью cat ting файлов, например. cat onewire/{deviceid}/log/temperature.1, но файл onewire/{deviceid}/log/temperature.ALL "сломан" (возможно слишком большой, как histogram/temperature.ALL произведение хорошо).

Сценарий python для чтения всех файлов, похоже, работает, но занимает очень много времени. Есть ли лучший способ сделать это? Есть ли у кого-нибудь примеры?

Я использую Ubuntu 8.04 и не могу получить приложение «один проводник для Java» для запуска.

Update: Использование owpython (устанавливается с owfs), я могу получить текущую температуру, но не могу понять, как получить доступ к записанным журналов:

>>> 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 дает оценку AttributeError.

ответ

2

Не думаю, что есть умный способ. owpython не поддерживает это из документации API. Думаю, /proc - это ваша самая безопасная ставка. Возможно, посмотрите на источник модуля owpython и проверьте, можете ли вы узнать, как он работает.

+0

Я не смог найти какую-либо документацию, отличную от строки документации. Есть ли еще что-нибудь? – Tom

3

У меня также были проблемы с персонажами. Я нашел, что это сложное решение для простой проблемы. Теперь я использую код DigiTemp без проблем. Я нашел его гибким и надежным. Например, я храню температуры в помещении в файл журнала каждую минуту, запустив

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

Чтобы достичь этой точки я скачал исходный файл, untarred его, а затем сделал следующее.

# 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 

Я также отредактировал вручную файл конфигурации, чтобы настроить его на мою настройку. Так оно и закончилось.

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 

В моем случае я создал /etc/init.d/digitemp файл и позволяет ей работать при запуске.

#! /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

Спасибо за информацию, но я не думаю, что это поможет получить доступ к журналу, хранящемуся на DS1922T. Я могу прочитать текущую температуру, используя owpython или owfs, это просто доступ к хранимым измерениям, с которыми я борюсь. – Tom