2008-09-22 75 views
9

我已經安裝了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

回答

2

我不認爲有一個聰明的方法。 owpython不支持從API文檔告知。我猜/proc是你最安全的選擇。也許看看owpython模塊的來源,並檢查是否可以找出它的工作原理。

+0

我沒能找到一個比其他文檔字符串任何文件。還有別的事嗎? – Tom 2008-09-23 06:26:02

3

我也有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