[gelöst] Alias anstelle $DEVICE in Telegram ausgeben

Begonnen von locodriver, 09 Juni 2021, 12:22:26

Vorheriges Thema - Nächstes Thema

locodriver

Hallo, ich arbeite mich schon einige Zeit an dem Thema ab...

Ich habe meine Türen aus anderen Gründen umbenannt, damit sie in mein "Fensterschema" passen. Als Alias habe ich jedem Fenster und den Türen den Klarnamen mitgegeben.
Meine Überwachung reagiert auf offen bzw. gekippt und soll dann nach einer Wartezeit von drei Sekunden die Telegrammeldung absetzen, wenn ich nicht da bin bzw. der Heizmodus "Urlaub" ist. Das funzt mit dem $DEVICE auch, allerdings ist es mir nicht gelungen, die Meldung auf Alias umzustellen. Ich möchte allerdings auch keine zusätzlichen Dummies anlegen.

Hier mal die Überwachung:

Internals:
   CFGFN      ./FHEM/16_Heizung_Lueftung.cfg
   DEF        (["\D\D_Fenster:offen"] or ["\D\D_Fenster:gekippt"])
()(IF ([androiduwe] ne "1.0" or [Heizmodus] eq "Urlaub") (set Nachrichten message ACHTUNG! $DEVICE ist $EVENT))
DOELSEIF
([WZ_Fenster] eq "geschlossen" and
[KU_Fenster] eq "geschlossen" and
[SZ_Fenster] eq "geschlossen" and
[BD_Fenster] eq "geschlossen" and
[AZ_Fenster] eq "geschlossen" and
[BK_Fenster] eq "geschlossen" and
[FL_Fenster] eq "geschlossen")
()(IF ([androiduwe] ne "1.0" or [Heizmodus] eq "Urlaub") (set Nachrichten message INFO Tür und alle Fenster sind geschlossen))
   DOIFDEV    ^global$|^SZ_Fenster$|^KU_Fenster$|\D\D_Fenster|^BD_Fenster$|^FL_Fenster$|^AZ_Fenster$|^BK_Fenster$|^WZ_Fenster$
   FUUID      5c443db2-f33f-b425-75b7-db869794e75f6349
   MODEL      FHEM
   NAME       Fenster_check
   NR         445
   NTFY_ORDER 50-Fenster_check
   STATE      initialized
   TYPE       DOIF
   VERSION    24595 2021-06-06 17:52:38
   READINGS:
     2021-06-09 12:08:52   cmd             0
     2021-06-09 09:56:28   ftui_background red
     2021-06-09 12:08:52   mode            enabled
     2021-06-09 12:08:52   state           initialized
   Regex:
     accu:
     collect:
     cond:
       :
         0:
           "\D\D_Fenster:gekippt" \D\D_Fenster:gekippt
           "\D\D_Fenster:offen" \D\D_Fenster:offen
       AZ_Fenster:
         1:
           &STATE     ^AZ_Fenster$
       BD_Fenster:
         1:
           &STATE     ^BD_Fenster$
       BK_Fenster:
         1:
           &STATE     ^BK_Fenster$
       FL_Fenster:
         1:
           &STATE     ^FL_Fenster$
       KU_Fenster:
         1:
           &STATE     ^KU_Fenster$
       SZ_Fenster:
         1:
           &STATE     ^SZ_Fenster$
       WZ_Fenster:
         1:
           &STATE     ^WZ_Fenster$
   attr:
     cmdState:
     wait:
       0:
         0
         3
       1:
         0
         20
     waitdel:
   condition:
     0          ::EventDoIf('\D\D_Fenster',$hash,'offen',0) or ::EventDoIf('\D\D_Fenster',$hash,'gekippt',0)
     1          ::InternalDoIf($hash,'WZ_Fenster','STATE') eq "geschlossen" and ::InternalDoIf($hash,'KU_Fenster','STATE') eq "geschlossen" and ::InternalDoIf($hash,'SZ_Fenster','STATE') eq "geschlossen" and ::InternalDoIf($hash,'BD_Fenster','STATE') eq "geschlossen" and ::InternalDoIf($hash,'AZ_Fenster','STATE') eq "geschlossen" and ::InternalDoIf($hash,'BK_Fenster','STATE') eq "geschlossen" and  ::InternalDoIf($hash,'FL_Fenster','STATE') eq "geschlossen"
   devices:
   do:
     0:
       0         
       1          IF ([androiduwe] ne "1.0" or [Heizmodus] eq "Urlaub") (set Nachrichten message ACHTUNG! $DEVICE ist $EVENT)
     1:
       0         
       1          IF ([androiduwe] ne "1.0" or [Heizmodus] eq "Urlaub") (set Nachrichten message INFO Tür und alle Fenster sind geschlossen)
     2:
   helper:
     DEVFILTER  ^global$|^SZ_Fenster$|^KU_Fenster$|\D\D_Fenster|^BD_Fenster$|^FL_Fenster$|^AZ_Fenster$|^BK_Fenster$|^WZ_Fenster$
     NOTIFYDEV  global|SZ_Fenster|KU_Fenster|.*\D\D_Fenster.*|BD_Fenster|FL_Fenster|AZ_Fenster|BK_Fenster|WZ_Fenster
     globalinit 1
     last_timer 0
     sleeptimer -1
   internals:
     all         WZ_Fenster:STATE KU_Fenster:STATE SZ_Fenster:STATE BD_Fenster:STATE AZ_Fenster:STATE BK_Fenster:STATE FL_Fenster:STATE
   uiState:
   uiTable:
Attributes:
   alias      Sicherheit
   appOptions {
  "template": "contact",
    "home": true
}
   devStateIcon cmd_1:LED.red cmd_2:LED.green cmd_2_1:LED.green
   do         always
   group      Bedienung
   icon       building_security
   room       000Wohnung
   sortby     00
   wait       0,3:0,20


Und ein Fenster als Beispiel, das sind HM-RHS bzw. IT-Kontakte:
Internals:
   CFGFN      ./FHEM/065_AZ.cfg
   DEF        1527xea41a 1110 0111 1011 0000
   FUUID      5c443da8-f33f-b425-7bac-3db3e8d21ed34522
   IODev      CUNO2
   NAME       AZ_Fenster
   NR         264
   STATE      offen
   TYPE       IT
   XMIT       1dddf00fdd
   XMITdimdown 0000
   XMITdimup  1011
   XMIToff    0111
   XMITon     1110
   CODE:
     1          1527xea41a
   READINGS:
     2021-03-10 08:05:00   Activity        alive
     2019-06-11 17:15:31   Batteriedauer_alt 461
     2021-06-09 08:05:00   Batteriewechsel 702
     2021-06-07 09:49:58   IODev           CUNO2
     2021-03-10 08:05:00   Last_closed     2021-03-09 09:30:04
     2020-05-12 08:05:00   Last_open       2020-05-12 07:53:55
     2021-06-08 12:33:26   dim             on
     2021-06-08 12:33:26   ftui_background red
     2017-06-17 19:23:19   lastDimValue   
     2017-06-16 19:29:34   protocol        EV1527
     2021-06-08 12:33:26   state           on
Attributes:
   IODev      CUNO2
   alias      Arbeitszimmerfenster
   appOptions {"template":"contact"}
   eventMap   off:geschlossen on:offen dimup:Sabotage dimdown:Batt?
   model      itdimmer
   room       005Arbeitszimmer
   webCmd     :


Ich habe versucht, das mit AttrVal zu lösen oder das "IF" mit "if" zu ersetzen -ich war dabei nicht erfolgreich.
Könnt ihr mir auf die "Sprünge" helfen.
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

CoolTux

(set Nachrichten message ACHTUNG! [$DEVICE:alias] ist $EVENT)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Ralli

#2
Zitat von: locodriver am 09 Juni 2021, 12:22:26
Ich habe versucht, das mit AttrVal zu lösen oder das "IF" mit "if" zu ersetzen -ich war dabei nicht erfolgreich.
Könnt ihr mir auf die "Sprünge" helfen.

Der Ansatz mit AttrVal ist doch schon mal ok. Du musst halt den Ausführungsteil des DOIF in Perl definieren. Z.B.:


... (["\D\D_Fenster:offen"] or ["\D\D_Fenster:gekippt"] and ([?androiduwe] ne "1.0" or [?Heizmodus] eq "Urlaub"))
() ({fhem("set Nachrichten message ACHTUNG! ".AttrVal($device,'alias','')." ist ".$event)})
DOELSEIF
([WZ_Fenster] eq "geschlossen" and
[KU_Fenster] eq "geschlossen" and
[SZ_Fenster] eq "geschlossen" and
[BD_Fenster] eq "geschlossen" and
[AZ_Fenster] eq "geschlossen" and
[BK_Fenster] eq "geschlossen" and
[FL_Fenster] eq "geschlossen" and ([?androiduwe] ne "1.0" or [?Heizmodus] eq "Urlaub"))
()(set Nachrichten message INFO Tür und alle Fenster sind geschlossen)
DOELSE ()


Edit:
Cooltux war schneller und besser.
Gruß,
Ralli

Proxmox 8.1 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.6.20240316) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

locodriver

@Cooltux: das funzt so leider nicht:
Als Telegrammeldung kommt nur: "ACHTUNG! ist" und im log (Reverse!) kommt die Felermeldung:

2021.06.09 12:57:33.561 2: Fenster_check: IF ([androiduwe] eq "1.0" or [Heizmodus] eq "Urlaub") (set Nachrichten message ACHTUNG! [FL_Fenster:alias] ist offen): IF: unknown reading: FL_Fenster:alias
2021.06.09 12:57:30.501 3: CUNO2 IT: FL_Fenster geschlossen->on


Es wird ein Reading erwartet - Alias ist aber ein Attribut.
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

locodriver

@Ralli:

Du hast die Anwesenheits- und Urlaubabfrage mit in den Bedingungsteil gepackt, diese Bedingungen sollen aber erst im zweiten Ausführungsteil geprüft werden, der erste - leere - Ausführungsteil dient dazu, die IF-Abfrage eindeutig dem Ausführungsteil zuzuordnen. DOIF könnte sonst "denken", das IF gehört noch zum Bedingungsteil (IF kann in beiden Teilen verwendet werden).
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

Ralli

#5
Was spricht dagegen?

Wenn das unbedingt im Ausführungsteil abgefragt werden soll, musst du das in ein Perl-if umsetzen.


... (["\D\D_Fenster:offen"] or ["\D\D_Fenster:gekippt"])
() ({if (Value('androiduwe') ne '1.0' || Value('Heizmodus') eq 'Urlaub') {fhem("set Nachrichten message ACHTUNG! ".AttrVal($device,'alias','')." ist ".$event)}})
...
Gruß,
Ralli

Proxmox 8.1 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.6.20240316) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

locodriver

#6
Der Status von Fenster_Check soll immer aktualisiert werden, die Meldung möchte ich nur haben, wenn ich nicht da bin bzw. im Urlaub.

Evtl. ist das Anlegen eines Userreadings zielführend, dann könnte es mit der Lösung von Cooltux funzen...

Edit:
Ich habe es gerade probiert, es klappt. Damit ist das für mich die einfachste Lösung, ich muss nur bei allen Türen bzw. Fenstern den Alias als Userreading anlegen.

Falls es doch noch eine Lösung nur mit dem Attribut gibt, dann würde ich sie auch noch ausprobieren. Bei ähnlichen Fällen ist es evtl. zu mühsam viele Userreadings anzulegen...

Danke für den Input.
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

locodriver

@Ralli: ich habe deine Lösung auch noch getestet - die funzt leider nicht:

Das ist die resultierende Fehlermeldung:
Global symbol "$event" requires explicit package name (did you forget to declare "my $event"?) at (eval 204167) line 1.
2021.06.09 13:34:24.120 1: ERROR evaluating {if (Value('androiduwe') eq '1.0' || Value('Heizmodus') eq 'Urlaub') {fhem("set Nachrichten message ACHTUNG! ".AttrVal($device,'alias','')." ist ".$event)}}: Global symbol "$device" requires explicit package name (did you forget to declare "my $device"?) at (eval 204167) line 1.
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

MadMax-FHEM

#8
Weil $event $EVENT heißen muss (oder $EVTPART1 usw. je nachdem).

Also sofern das in einem notify etc. genutzt wird (bzw. dort wo eben $EVENT auch existiert)... ;)

EDIT: ich würde von Value() abstand nehmen! Value() "frägt" STATE (also das INTERNAL!) ab! Das kann durch z.B. stateFormat etc. "umgebogen" werden. Besser mittels ReadingsVal("Devicename","Readingname","Ersatzwert") bzw. ReadingsNum("Devicename","Readingname",Ersatzwert) einen Reading-Wert abfragen oder wenn wirklich Internal interessieren mittels InternalVal("Devicename","Internalname","Ersatzwert") dann halt das...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

locodriver

Danke für die zusätzlichen Erläuterungen.

Ich werde erstmal bei den extra angelegten Userreadings bleiben...
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster