如何使用owfs读取iButton温度记录器?

问题描述:

我已经安装了owfs,并试图从iButton temperature logger中读取数据。如何使用owfs读取iButton温度记录器?

owfs让我安装iButton作为熔丝文件系统,我可以看到所有的数据。我无法弄清楚什么是访问数据的最佳方式。我可以通过cat获得单独的读数,例如, cat onewire/{deviceid}/log/temperature.1,但onewire/{deviceid}/log/temperature.ALL文件被“破坏”(可能太大,因为histogram/temperature.ALL工作正常)。

用于读取所有文件的python脚本似乎可行,但需要很长时间。有没有更好的方法来做到这一点?有没有人有任何例子?

我使用的是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

我不认为有一个聪明的方法。 owpython不支持从API文档告知。我猜/proc是你最安全的选择。也许看看owpython模块的来源,并检查是否可以找出它的工作原理。

+0

我没能找到一个比其他文档字符串任何文件。还有别的事吗? – Tom 2008-09-23 06:26:02

我也有owfs问题。我发现它是一个过度工程的解决方案,是一个简单的问题。现在我使用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 
+0

感谢您的信息,但我不认为这有助于访问存储在DS1922T上的日志。我可以使用owpython或owfs读取当前温度,它只是访问我正在努力处理的存储测量。 – Tom 2008-10-08 07:18:59

那么我刚开始看看ibuttons并想使用python。

这看起来更有前途:

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