FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: ronzo am 27 August 2020, 12:49:58

Titel: [gelöst] DOIF-Fehler
Beitrag von: ronzo am 27 August 2020, 12:49:58
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?
Titel: Antw:DOIF-Fehler
Beitrag von: Otto123 am 27 August 2020, 13:07:44
[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
Titel: Antw:DOIF-Fehler
Beitrag von: ronzo am 27 August 2020, 14:09:04
Danke. An das hatte ich nicht gedacht.
Titel: Antw:[gelöst] DOIF-Fehler
Beitrag von: Otto123 am 27 August 2020, 14:20:32
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
Titel: Antw:[gelöst] DOIF-Fehler
Beitrag von: ronzo am 27 August 2020, 14:29:36
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.
Titel: Antw:[gelöst] DOIF-Fehler
Beitrag von: Otto123 am 27 August 2020, 14:42:37
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 ?
Titel: Antw:[gelöst] DOIF-Fehler
Beitrag von: ronzo am 27 August 2020, 14:49:02
Verstehe. Momentan habe ich bei der problematischeren* der beiden im state ein

RESPONSE TIMEOUT:RegisterRead

*Die Firmwares unterscheiden sich.
Titel: Antw:[gelöst] DOIF-Fehler
Beitrag von: Otto123 am 27 August 2020, 14:58:01
anderes Reading? Klingt nach Homematic - Spontane Idee sowas wie motor stop:on oder level / pct ?
Titel: Antw:[gelöst] DOIF-Fehler
Beitrag von: ronzo am 28 August 2020, 16:32:33
Danke. Hab es auf pct umgestellt! (Sollte mir mal ein/zwei Tage für Grundlagen gönnen...)