2008-09-22 26 views
9

Tôi đã cài đặt owfs và đang cố gắng đọc dữ liệu theo số iButton temperature logger.Làm cách nào để sử dụng các cú pháp để đọc bộ ghi nhiệt độ iButton?

owfs cho phép tôi gắn kết iButton dưới dạng hệ thống tệp cầu chì và tôi có thể xem tất cả dữ liệu. Tôi đang gặp khó khăn trong việc tìm ra cách tốt nhất để truy cập dữ liệu là gì. Tôi có thể nhận các bài đọc riêng lẻ bằng cách cat ghi các tệp, ví dụ: cat onewire/{deviceid}/log/temperature.1, nhưng tệp onewire/{deviceid}/log/temperature.ALL bị "hỏng" (có thể quá lớn, vì histogram/temperature.ALL hoạt động tốt).

Tập lệnh python để đọc tất cả các tệp có vẻ hoạt động nhưng mất một thời gian rất dài. Có cách nào tốt hơn để làm điều đó không? Có ai có bất kỳ ví dụ?

Tôi đang sử dụng Ubuntu 8.04 và không thể tải ứng dụng java "một trình xem dây" để chạy.

Cập nhật: Sử dụng owpython (cài đặt với owfs), tôi có thể nhận được nhiệt độ hiện tại nhưng không thể tìm ra cách để có được quyền truy cập vào các bản ghi ghi:

>>> 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 đưa ra một AttributeError.

Trả lời

2

Tôi không nghĩ có cách thông minh. owpython không hỗ trợ việc kể từ tài liệu API. Tôi đoán /proc là đặt cược an toàn nhất của bạn. Có thể có một cái nhìn tại nguồn của mô-đun owpython và kiểm tra xem bạn có thể tìm hiểu cách nó hoạt động.

+0

tôi đã không thể tìm thấy bất kỳ tài liệu khác so với docstrings. Có gì khác? – Tom

3

Tôi cũng gặp sự cố với cú pháp. Tôi tìm thấy nó là một giải pháp overengineered cho một vấn đề đơn giản là gì. Bây giờ tôi đang sử dụng mã DigiTemp mà không có sự cố. Tôi thấy nó linh hoạt và đáng tin cậy. Ví dụ: tôi lưu trữ nhiệt độ của phòng trong một tệp nhật ký mỗi phút bằng cách chạy

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

Để đạt được điểm đó, tôi đã tải xuống tệp nguồn, hủy cố định và sau đó thực hiện như sau.

# 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 

Tôi cũng đã chỉnh sửa tệp cấu hình của mình để điều chỉnh nó thành thiết lập của tôi. Đây là cách nó kết thúc.

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 

Trong trường hợp của tôi, tôi cũng đã tạo tệp /etc/init.d/digitemp và cho phép nó chạy khi khởi động.

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

Cảm ơn thông tin, nhưng tôi không nghĩ rằng sẽ giúp truy cập vào nhật ký được lưu trữ trên DS1922T. Tôi có thể đọc nhiệt độ hiện tại bằng cách sử dụng owpython hoặc owfs, nó chỉ truy cập vào các phép đo được lưu trữ mà tôi đang gặp khó khăn. – Tom

Các vấn đề liên quan