Ich habe ein DOIF definiert, das zu funktionieren scheint:
(([MarkiseUnten] > 0 or [MarkiseOben] > 0) and [Wetterstation:windSpeed] >= 27)
(set JabberInterface msgmuc smarthome@conference.mydomain.at Markisen werden wegen zu viel Wind eingefahren., set MarkiseUnten off, set MarkiseOben off)
Im Log sehe ich aber folgenden Fehler:
2020-08-27 12:36:12 DOIF MarkisenBeiRegenEinfahren error: condition c01: Can't modify non-lvalue subroutine call of &main::ReadingValDoIf in scalar assignment, line 1, at EOF
2020-08-27 12:36:12 DOIF markisenEinfahrenTest warning: condition c01: Argument "off" isn't numeric in numeric gt (>)
Was passt hier nicht?
[MarkiseUnten] oder [MarkiseOben] liefert offenbar nicht nur Zahlen sondern auch Texte wie on und off.
Perl sagt Dir, Du kannst Äpfel(Texte) nicht mit Birnen(Zahlen) vergleichen. Tipp: mit eq ne gt lt kannst Du auch Texte vergleichen.
Gruß Otto
Danke. An das hatte ich nicht gedacht.
Bitte überarbeite das tiefergreifend: [MarkiseOben] triggert auf jeden Event des Gerätes und gibt meines Wissen den STATE des Gerätes zurück.
Fehleranfälliger geht es praktisch nicht!
1. Nimm ein Reading dazu
[MarkiseOben:state] Du willst ja offenbar den state des Gerätes
2. Wenn Du nur Zahlen auswerten willst, lass Dir nur Zahlen zurück geben (Schau in der Commandref was es noch so gibt):
[MarkiseOben:state:d]
3. Wenn Du gar nicht triggern sondern nur abfragen willst, frage nur ab:
[?MarkiseOben:state:d] Dein wirkliches Kriterium hier ist doch offenbar der Wind?
Oder (trifft hier offenbar nicht zu) lass Dir als Ausgangspunkt Geräte mit exakten Triggern definieren: Mit dem Eventmonitor (ausführliche Beschreibung auch im Wiki)!
Gruß Otto
Danke für deinen Input. Richtiger wäre vermutlich
[MarkiseOben:state] ne "off"
Da mich der Wind ja nur dann interessiert, wenn eine der Markisen ausgefahren ist.
Naja vorsicht, das wird dann auch wahr wenn die Markise fährt? Also wenn im state irgendwas reingeschrieben wird. Da müsstest Du "Sperrfeuer" verhindern? mit wait ?
Verstehe. Momentan habe ich bei der problematischeren* der beiden im state ein
RESPONSE TIMEOUT:RegisterRead
*Die Firmwares unterscheiden sich.
anderes Reading? Klingt nach Homematic - Spontane Idee sowas wie motor stop:on
oder level / pct ?
Danke. Hab es auf pct umgestellt! (Sollte mir mal ein/zwei Tage für Grundlagen gönnen...)