如何使用owfs读取iButton温度记录器?
我已经安装了" 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模块的源代码,并检查是否可以找到它是如何工作的。
我也有关于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 "" 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) ##代码## status >/dev/null && ##代码## restart rc_status ;; restart) ##代码## stop ##代码## start rc_status ;; force-reload) ##代码## try-restart rc_status ;; reload) ##代码## try-restart rc_status ;; status) echo -n "Checking for temperature monitoring service" checkproc $DIGITEMP rc_status -v ;; *) echo "Usage: ##代码## {start|stop|status|try-restart|restart|force-reload|reload}" exit 1 ;; esac rc_exit
好吧,我刚刚开始研究ibuttons并想使用python。
这看起来更有希望:
http://www.ohloh.net/p/pyonewire