Ich betreibe einen W1-Temperatursensor an einem Raspberry Pi. In der Datei /sys/bus/w1/devices/28-{Id}/w1_slave befindet sich die aktuelle Temperatur. Um diese auszulesen, müsste ich sie in einer Endlosschleife alle paar Sekunden auslesen. Das möchte ich vermeiden, da unschön und inperformant. Leider konnte ich keine Library finden, die mir eine Art OnTemperatureChangedEvent zur Verfügung stellt. Bin auf das Tool inotifywait gestoßen und wollte nun auf Änderungen dieser Datei reagieren.

Dazu habe ich folgendes Bash-Skript geschrieben:
Code:
#!/bin/bash

sensor_class=28
sensor_id=<Id>
sensor_slave_file=/sys/bus/w1/devices/${sensor_class}-${sensor_id}/w1_slave 

inotifywait -m $sensor_slave_file -e close_write |
    while read path action file; do
        temp_raw=$(cat $sensor_slave_file | grep 't=' | awk -F '=' '{print $2}')
        echo "Temp raw: $temp_raw"
    done
Leider funktioniert es nicht: Skript wurde gestartet und der Sensor mit der Hand erwärmt. Die Temperatur hat sich verändert, wie man an der Datei selbst sieht von 24 auf 29 Grad:
Code:
pi@pi2:/sys/bus/w1/devices/28-<Id>$ cat w1_slave | grep t=
86 01 4b 46 7f ff 0c 10 f4 t=24375
pi@pi2:/sys/bus/w1/devices/28-<Id>$ cat w1_slave | grep t=
d1 01 4b 46 7f ff 0c 10 39 t=29062
Am Skript liegt es nicht. Habe es mit einer selbst angelegten Datei versucht, die ich per echo füllte. Das klappte problemlos. Meine Vermutung ist, dass /sys/bus/w1/devices/28-{Id}/w1_slave keine richtige Datei im Dateisystem ist, sondern eine Art Pseudo-Datei. Der Pi schreibt die aktuelle Temperatur nicht hinein, sondern die Temperatur wird vom Sensor geladen, wenn ein lesender Zugriff stattfindet. Dies habe ich auch aus der Performance geschlossen: Das reine Ausgeben der Datei (cat) benötigt fast 1 Sekunde. Ich vermute, dass beim Ausgeben die Temperatur direkt vom Sensor abgefragt wird. Im Netz finde ich dazu nichts. Lediglich Varianten, die Pollen, z.B. per Cron.

Gibt es keine Möglichkeit, dass mir der Sensor bei Temperaturänderungen ein Event feuert?