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

Я установил owfs и пытаюсь прочитать данные с регистратор температуры iButton.

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

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

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

Обновить. Используя 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.

9
задан Tom 22 сент. '08 в 7:30
источник поделиться

3 ответов

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

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

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

# 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
3
ответ дан Diomidis Spinellis 08 окт. '08 в 9:07
источник поделиться

Ну, я только начал смотреть на ibuttons и хочу использовать python.

Это выглядит более многообещающим:

http://www.ohloh.net/p/pyonewire

2
ответ дан Buteman 01 авг. '10 в 21:22
источник поделиться

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

2
ответ дан Armin Ronacher 22 сент. '08 в 23:47
источник поделиться

Другие вопросы по меткам