[Gelöst] MQTT2_DEVICE: Notify reagiert 'falsch'?

Begonnen von fettgu, 12 November 2024, 22:44:51

Vorheriges Thema - Nächstes Thema

fettgu

Guten Abend,

ich spiele mit einem externen MQTT Server... Die Verbindung funktioniert, das Device wird aktualisiert (= empfängt Daten), mein notify reagiert auf mir unklare weise.

Das ist der Client
defmod MQTT2 MQTT2_CLIENT 172.18.0.1:1883
attr MQTT2 autocreate no
attr MQTT2 room System->FHEM
attr MQTT2 username hass

setstate MQTT2 opened
setstate MQTT2 2024-11-12 22:19:09 state opened

Hier ist das Device
defmod ha.hausstatus MQTT2_DEVICE MQTT2
attr ha.hausstatus readingList MQTT2:homeassistant/input_select/hausstatus/state:.* state
attr ha.hausstatus room System->Hass_receive

setstate ha.hausstatus Normal
setstate ha.hausstatus 2024-11-12 22:19:02 IODev MQTT2
setstate ha.hausstatus 2024-11-12 22:38:09 state Normal

Hier ist das notify
defmod ntfy.ha.hausstatus notify ha.hausstatus:.* { \
 if ($EVENT= 'Normal') {\
   fhem "set Haus.Rolladensteuerung:FILTER=partyMode!=off partyMode off";;\
   {Log 1, "Das Device $NAME hat ausgeloest, der Event sah so aus: $EVENT"}\
 }\
 elsif($EVENT= 'Gast') {\
   fhem "set Haus.Rolladensteuerung:FILTER=partyMode!=off partyMode off";;\
   {Log 1, "Das Device $NAME hat ausgeloest, der Event sah so aus: $EVENT"}\
 }\
 elsif ($EVENT= 'Party') { \
   fhem "set Haus.Rolladensteuerung:FILTER=partyMode!=on partyMode on";;\
   {Log 1, "Das Device $NAME hat ausgeloest, der Event sah so aus: $EVENT"}\
 }\
}\


setstate ntfy.ha.hausstatus 2024-11-12 22:38:09
setstate ntfy.ha.hausstatus 2024-11-12 22:33:33 state active
setstate ntfy.ha.hausstatus 2024-11-12 22:38:09 triggeredByDev ha.hausstatus
setstate ntfy.ha.hausstatus 2024-11-12 22:38:09 triggeredByEvent Normal

Ich habe den Eindruck das passt. Und das ist der Event log

2024.11.12 22:38:07 1: PERL WARNING: Found = in conditional, should be == at (eval 3337) line 14.
2024.11.12 22:38:07 3: eval: my $EVENT= $evalSpecials->{'%EVENT'};my $EVTPART0= $evalSpecials->{'%EVTPART0'};my $NAME= $evalSpecials->{'%NAME'};my $SELF= $evalSpecials->{'%SELF'};my $TYPE= $evalSpecials->{'%TYPE'};{ if ($EVENT= 'Normal') { fhem "set Haus.Rolladensteuerung:FILTER=partyMode!=off partyMode off"; {Log 1, "Das Device $NAME hat ausgeloest, der Event sah so aus: $EVENT"} } elsif($EVENT= 'Gast') { fhem "set Haus.Rolladensteuerung:FILTER=partyMode!=off partyMode off"; {Log 1, "Das Device $NAME hat ausgeloest, der Event sah so aus: $EVENT"} } elsif ($EVENT= 'Party') { fhem "set Haus.Rolladensteuerung:FILTER=partyMode!=on partyMode on"; {Log 1, "Das Device $NAME hat ausgeloest, der Event sah so aus: $EVENT"} } }
2024.11.12 22:38:07 1: Das Device ha.hausstatus hat ausgeloest, der Event sah so aus: Normal
2024-11-12 22:38:07 MQTT2_DEVICE ha.hausstatus Party

Das Notify reagiert auf das Event Normal...- das komt aber gar nicht, siehe nächste Zeile. Es wurde (auch tatsächlich) Party geschaltet. Es ist auch nicht das 'letzte' Event. Ich bin ein wenig ratlos.

Viele Grüße
Guido Fett

Otto123

#1
Zitat von: fettgu am 12 November 2024, 22:44:51if ($EVENT= 'Normal')
Lösung steht doch im Log
ZitatPERL WARNING: Found = in conditional, should be == at (eval 3337) line 14.
Also immer  ($EVENT == 'Normal') wenn Du vergleichen willst. So wird es eine Zuweisung:
my $willi='lustig'
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rudolfkoenig

== ist Zahlenvergleich (beide Seiten werden zu Zahl konvertiert und dann verglichen).
eq ist Stringvergleich.
$EVENT == 'Normal' sollte zu einem Fehler im Log fuehren, da 'Normal' nicht ohne Weiteres zu einem Zahl konvertiert werden kann.

fettgu

Vielen Dank, stimmt leider...

Ich muss zugeben, dass ich das auch schon probiert hatte zwischendurch, und anscheinend noch einen anderen Fehler hatte. Jetzt funktioniert es.

Guido Fett