[Gelöst] DOIF mit Prozentzahlen und Operanten

Begonnen von ekur, 23 Juli 2024, 22:40:28

Vorheriges Thema - Nächstes Thema

ekur

Hallo zusammen,

ich habe ein kleines Problem mit den Operanten zu einer Schaltung einer Steckdose. Hierbei sollen Werte mit %-Zeichen verglichen werden, gemäß Syntax für Pearl sollte das DOIF so aussehen:
([Status:battery] lt '30%') (set Schalter on) DOELSEIF ([Status:battery] gt '90%') (set Schalter off)Es werden, da keine numerische Zahl die Operanten lt und gt verwendet.
Ergebnis: Keine Fehlermeldung, aber es wird auch nichts geschaltet, das DOIF bleibt im ersten Befehl stecken.
Mit der "falschen" Syntax:
([Status:battery] < '30%') (set Schalter on) DOELSEIF ([Status:battery] > '90%') (set Schalter off)Ergebnis: Fehlermeldung "Argument "30%" isn't numeric in numeric lt (<) at " für alle Werte, aber das DOIF schaltet richtig  :o

Kann mir einer auf die Sprünge helfen?
FHEM 5.8 auf Intel NUC, Visualisierung TabletUI auf Lenovo Tab10, Datenlogging MySQL
CUL_HM  HM-CC-RT-DN, HM-RC, HM-LC-BL1-FM, HM-PBI-4-FM, HM-SEC-SD, HM-SEC-SCo
ZWave
OWDevice:DS1420,DS18B20 an Intel NUC

Damian

Zitat von: ekur am 23 Juli 2024, 22:40:28Hallo zusammen,

ich habe ein kleines Problem mit den Operanten zu einer Schaltung einer Steckdose. Hierbei sollen Werte mit %-Zeichen verglichen werden, gemäß Syntax für Pearl sollte das DOIF so aussehen:
([Status:battery] lt '30%') (set Schalter on) DOELSEIF ([Status:battery] gt '90%') (set Schalter off)Es werden, da keine numerische Zahl die Operanten lt und gt verwendet.
Ergebnis: Keine Fehlermeldung, aber es wird auch nichts geschaltet, das DOIF bleibt im ersten Befehl stecken.
Mit der "falschen" Syntax:
([Status:battery] < '30%') (set Schalter on) DOELSEIF ([Status:battery] > '90%') (set Schalter off)Ergebnis: Fehlermeldung "Argument "30%" isn't numeric in numeric lt (<) at " für alle Werte, aber das DOIF schaltet richtig  :o

Kann mir einer auf die Sprünge helfen?


Zahlen solltest du nicht mit lt vergleichen. Wenn in Status:battery das Prozentzeichen vorkommt, dann kannst du es mit :d herausfiltern und mit < vergleichen:

([Status:battery:d] < 30)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ekur

Merci Damian, meistens ist die Lösung einfach, aber man sieht diese nicht.
FHEM 5.8 auf Intel NUC, Visualisierung TabletUI auf Lenovo Tab10, Datenlogging MySQL
CUL_HM  HM-CC-RT-DN, HM-RC, HM-LC-BL1-FM, HM-PBI-4-FM, HM-SEC-SD, HM-SEC-SCo
ZWave
OWDevice:DS1420,DS18B20 an Intel NUC