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])
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]))
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)
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.
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]"))})
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.
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_01
posten?