EVTPART im notify mit Liste übersetzen

Begonnen von Otto123, 08 Dezember 2020, 23:37:17

Vorheriges Thema - Nächstes Thema

Otto123

Hi,

ich habe immer mal das Problem auf zwei Events genau mit zwei Aktionen zu reagieren. Beispiel:
start -> on
end -> off
Oder konkret: Es gibt die Events event: enter und event: leave
leave -> 4Move
enter -> 3Significant
Ist diese "Übersetzung" mit einer Liste bzw. einem Hash mit Key=>Value guter Perl Code? Oder ist das Mist und es gibt was Besseres? Oder hab ich es falsch verstanden?
defmod n_OwnMode notify MQTT2_owntracks_user_dev:event:.enter|MQTT2_owntracks_user_dev:event:.leave {my %h =('leave','4Move','enter','3Significant');;fhem("set $NAME mode $h{$EVTPART1}")}


Grüße Otto
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

amenomade

Eher hash. Aber für zwei Werte kann man auch if nutzen ;)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Beta-User

Tendenziell scheint mir das eher in einem userReadings-Eintrag besser aufgehoben zu sein, und bei nur zwei Optionen müßte das auch mit einem ternären Operator kürzer/verständlicher zu scheiben gehen.
Falls dasselbe Reading geändert werden soll (=> userReadings klappt nicht), gibt es noch readingsChange, wie ich jüngst gelernt habe (ohne es allerdings erfolgreich angewendet zu haben).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Otto123

Moin,

wegen der Optik nochmal der Ausgangspunkt
{my %h =('leave','4Move','enter','3Significant');;fhem("set $NAME mode $h{$EVTPART1}")}
In der Tat wäre set magic am kürzesten und im Fall "2 Werte" auch übersichtlich - wenn man auf die extra Prüfung der Alternative verzichtet.
Bei set magic rollen alle (außer rudi ;) ) immer mit den Augen :)
set $NAME mode {($EVTPART1 eq 'leave'?'4Move':'3Significant')}
Wenn man die Alternative noch eindeutig prüft wird es schon etwas holprig und nicht kürzer, wenn jetzt noch was dazu kommt. ::)
set $NAME mode {($EVTPART1 eq 'leave'?'4Move':($EVTPART1 eq 'enter'?'3Significant':''))}
Der if else Wurm ... muss man den Befehl zweimal schreiben
{if ($EVTPART1 eq 'leave'){set $NAME mode '4Move'} else {set $NAME mode '3Significant'}}
Ist mit Prüfung der Alternative schon länger
{if ($EVTPART1 eq 'leave'){set $NAME mode '4Move'} elsif ($EVTPART1 eq 'enter') {set $NAME mode '3Significant'}}
Mit zusätzlicher Variable hätte man den Kram am Anfang des Codes geprüft, braucht den Befehl bloß einmal und der Code muss langsam in die 99_myUtils :)
{my $c;;if ($EVTPART1 eq 'leave'){$c='4Move'} elsif ($EVTPART1 eq 'enter'){$c='3Significant'};;set $NAME mode $c}
Da gibt es sicher noch viele Möglichkeiten. Ich finde jetzt erstmal meinen Ansatz gar nicht schlecht. Man muss ja auch was haben was man quasi aus der Schublade zieht und was gut wartbar ist :)

Gruß Otto
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

amenomade

Zitat von: Otto123 am 09 Dezember 2020, 10:54:14
Moin,

wegen der Optik nochmal der Ausgangspunkt
{my %h =('leave','4Move','enter','3Significant');;fhem("set $NAME mode $h{$EVTPART1}")}


Ich finde hash lesbarer, insb wenn man eine längere Liste hat. Mit hash sind die Eingabe-/Ausgangswerte klärer und deutlich zu erkennen

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

rudolfkoenig

Besonders wenn man statt 'leave','4Move' die leave=>'4Move' Notation verwendet. :)

Otto123

ich finde den Hash auch viel besser lesbar!
Was da "intern" entsteht ist aber von der Notation unabhängig? Also 'leave','4Move' und leave=>'4Move' ist am Ende das Gleiche?
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

amenomade

Zitat von: Otto123 am 09 Dezember 2020, 20:28:47
ich finde den Hash auch viel besser lesbar!
Was da "intern" entsteht ist aber von der Notation unabhängig? Also 'leave','4Move' und leave=>'4Move' ist am Ende das Gleiche?

Ok Rudi, hast mich erwischt ;)
Genau das meinte ich !
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus