FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: hanske am 25 September 2024, 09:31:54

Titel: Case insensitive Vergleich im DOIF
Beitrag von: hanske am 25 September 2024, 09:31:54
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])


Titel: Aw: Case insensitive Vergleich im DOIF
Beitrag von: Damian am 25 September 2024, 21:13:29
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]))
Titel: Aw: Case insensitive Vergleich im DOIF
Beitrag von: hanske am 26 September 2024, 08:55:02
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)
Titel: Aw: Case insensitive Vergleich im DOIF
Beitrag von: Damian am 26 September 2024, 13:26:19
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.
Titel: Aw: Case insensitive Vergleich im DOIF
Beitrag von: hanske am 04 November 2024, 08:46:33
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]"))})
Titel: Aw: Case insensitive Vergleich im DOIF
Beitrag von: Damian am 04 November 2024, 08:55:36
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.
Titel: Aw: Case insensitive Vergleich im DOIF
Beitrag von: passibe am 04 November 2024, 12:43:56
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?