Hauptmenü

Case insensitive Vergleich im DOIF

Begonnen von hanske, 25 September 2024, 09:31:54

Vorheriges Thema - Nächstes Thema

hanske

Moin, mein Zigbee/MQTT Device bekommt die Schaltvorgänge manchmal nicht mit.
availability_state  online 2024-09-25 08:59:59
set_state           OFF    2024-09-25 07:47:00
state               on     2024-09-25 09:24:29


Jetzt wollte ich, wenn das Gerät sich meldet, set_state und state vergleichen.
Nun ist aber anscheinend set_state immer in Großbuchstaben und state immer in Kleinbuchstaben.
Wie kann ich einen case insensitiven Vergleich machen?

([?sw_zb_bad_01:availability_state] eq online and [?sw_zb_bad_01:set_state] ne [?sw_zb_bad_01:set_state])
(set sw_zb_bad_01 [?sw_zb_bad_01:set_state])


Raspberry Pi (Wheezy), Aeon Labs Z-Wave USB Stick 2, HM-USB Adapter, EBUS 2.0 mit Wemos
diverse HM und Z-Wave Geräte

Damian

z. B. mit lower case: lc

([?sw_zb_bad_01:availability_state] eq online and lc([?sw_zb_bad_01:set_state]) ne lc([?sw_zb_bad_01:set_state]))
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

hanske

Danke, wird das lc() den auch im nicht Perl Modus richtig aufgelöst?

(set sw_zb_bad_01 lc([?sw_zb_bad_01:set_state]))
liefert folgenden Fehler:
set sw_zb_bad_01 lc(OFF): Unknown argument lc(OFF)
Raspberry Pi (Wheezy), Aeon Labs Z-Wave USB Stick 2, HM-USB Adapter, EBUS 2.0 mit Wemos
diverse HM und Z-Wave Geräte

Damian

Zitat von: hanske am 26 September 2024, 08:55:02Danke, wird das lc() den auch im nicht Perl Modus richtig aufgelöst?

(set sw_zb_bad_01 lc([?sw_zb_bad_01:set_state]))
liefert folgenden Fehler:
set sw_zb_bad_01 lc(OFF): Unknown argument lc(OFF)

Der Ausführungsteil ist im FHEM-Modus, den musst du in Perl umschreiben und in geschweifte Klammern setzen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

hanske

Ich hatte es erst so probiert:
({fhem("set sw_zb_bad_01 lc([?sw_zb_bad_01:set_state])")})und dann so:
({fhem("set sw_zb_bad_01 ".lc([?sw_zb_bad_01:set_state]))})letztendlich ging es dann so:
({fhem("set sw_zb_bad_01 ".lc("[?sw_zb_bad_01:set_state]"))})
Raspberry Pi (Wheezy), Aeon Labs Z-Wave USB Stick 2, HM-USB Adapter, EBUS 2.0 mit Wemos
diverse HM und Z-Wave Geräte

Damian

Wenn du in der Bedingung mit lc arbeitest, dann kannst du dir lc im Ausführungsteil sparen, denn es ist ja dann egal, ob da Groß- oder Kleinbuchstaben drin stehen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

passibe

Irgendetwas scheint da aber mit deinem Device nicht ganz richtig zu sein, wenn du die Readings bzw. set-Kommandos in unterschiedlichen Groß-/Kleinschreibungen sendest bzw. zurückbekommst. Würde das Problem lieber an der Wurzel angehen.

Kannst du mal die Ausgabe vonlist sw_zb_bad_01posten?