Hauptmenü

[gelöst] DOIF-Fehler

Begonnen von ronzo, 27 August 2020, 12:49:58

Vorheriges Thema - Nächstes Thema

ronzo

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?

Otto123

[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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

ronzo

Danke. An das hatte ich nicht gedacht.

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

ronzo

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.

Otto123

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 ?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

ronzo

Verstehe. Momentan habe ich bei der problematischeren* der beiden im state ein

RESPONSE TIMEOUT:RegisterRead

*Die Firmwares unterscheiden sich.

Otto123

anderes Reading? Klingt nach Homematic - Spontane Idee sowas wie motor stop:on oder level / pct ?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

ronzo

Danke. Hab es auf pct umgestellt! (Sollte mir mal ein/zwei Tage für Grundlagen gönnen...)