Hallo zusammen,
eine kurze Frage. Ist es möglich ein Notify über die Änderung von STATE (nicht state als Reading) eines Devices auszulösen? Hintergrund ist, das mein Arduino (Firmata + OWX)als OneWire Busmaster alle paar Tage nicht erreichbar ist und ein Reset des Arduinos das Problem löst.
Wenn alles funktioniert hat mein OWX Device den STATE "Active" sonst "disconnected". Das Reading state bleibt in beiden Fällen "defined". Per Notify würde ich jetzt gerne eine Reset des Arduinos triggern, wenn sich der STATE von "Active" auf "disconnected" ändert. Ist dies möglich?
Danke,
Knurb
nein. internals erzeugen keine events.
du kannst per at regelmäßig nachschauen und dann gegebenfalls resetten.
oder besseren busmaster kaufen :)
gruss
andre
Würde auch ein userReading mit InternalValue gehen?
Zitat von: CoolTux am 03 August 2016, 09:05:31
Würde auch ein userReading mit InternalValue gehen?
Das dürfte auch nicht funktionieren, da ein Internal ja kein Event auslöst, kann auch das UserReading nicht aktualisieren.
Mist hast Recht. Ich danke Dir für den Denkanstoß.
Zitat von: Knurb am 03 August 2016, 08:14:00
Hallo zusammen,
eine kurze Frage. Ist es möglich ein Notify über die Änderung von STATE (nicht state als Reading) eines Devices auszulösen? Hintergrund ist, das mein Arduino (Firmata + OWX)als OneWire Busmaster alle paar Tage nicht erreichbar ist und ein Reset des Arduinos das Problem löst.
Wenn alles funktioniert hat mein OWX Device den STATE "Active" sonst "disconnected". Das Reading state bleibt in beiden Fällen "defined". Per Notify würde ich jetzt gerne eine Reset des Arduinos triggern, wenn sich der STATE von "Active" auf "disconnected" ändert. Ist dies möglich?
Danke,
Knurb
Mit einem notify funktioniert es nicht, aber mit DOIF. Das Internal wird jedesmal abgefragt, wenn das Gerät ein Event erzeugt.
http://fhem.de/commandref_DE.html#DOIF
Etwa so:
([<Gerätename>:&STATE] eq "disconnected") (set $DEVICE reset)
ungetestet, Syntax ergänzen
ZitatDas Internal wird jedesmal abgefragt, wenn das Gerät ein Event erzeugt.
was ja dann auch nicht mehr geht wenn das ding nichts mehr empfängt und es deshalb auch kein anderes event gibt...
gruss
andre
Zitat von: justme1968 am 03 August 2016, 18:59:54
was ja dann auch nicht mehr geht wenn das ding nichts mehr empfängt und es deshalb auch kein anderes event gibt...
gruss
andre
Ja, da ist was dran.
Dann geht es vielleicht so:
(["<Gerätename>"]) (set $DEVICE reset)
Attribute
wait <Etwas mehr als die maximale Zeit zwischen den Geräteereignissen>
do resetwait
Solange es rechtzeitig ein Event gibt wird der Wait-Timer zurück gesetzt, andernfalls wird der Befehl ausgeführt.
oder wie oben vorgeschlagen ein einfaches altmodisches at :)
Das wäre dann kein DOIF ;)
eben :)
Das Neue verdient auch eine Chance. :)
Vielen Dank für die Infos,
Habe mir schon gedacht, dass das nicht so einfach geht.
Aber über einem WD sollte das doch auch klappen. Die Sensoren werden ja alle x Minuten abgefragt, wenn dann kein Wert eintrudelt löst der WD aus.
Knurb
So, als kleines Update.
Mit einem WD klappt die Sache in meinem Fall prima. Wenn der Bus nicht mindestens jede Minute einmal einen Wert vom Sensor "T_Sensor1" (Abfrageintervall 30 Sekunden) bekommt, dann wird der Arduino über den RPI mittels Relais resettet.
T_Sensor1:.* 00:01:00 T_Sensor1:.* set Arduino_reset on-for-timer 2
Danke an alle.
Knurb