Rauchmelder bei Alarm identifizieren

Begonnen von tilly001, 23 März 2024, 18:15:38

Vorheriges Thema - Nächstes Thema

tilly001

Hallo,

ich habe meine Rauchmelder über ein DOIF bei Alarm automatisiert.

Es funktioniert soweit auch, ich möchte allerdings zusätzlich gemeldet bekommen welcher Rauchmelder ausgelöst hat.
Ich habe kein Idee wie ich das in die Telebot Nachricht einbaue.

Wer kann helfen?

Hier das Listing:

Internals:
   DEF        ([MQTT2_ioBroker:rauchmelder_ankleiderzimmer_smoke] eq "true" or [MQTT2_ioBroker:rauchmelder_buero_smoke] eq "true" or [MQTT2_ioBroker:rauchmelder_flur1og_smoke] eq "true" or [MQTT2_ioBroker:rauchmelder_flur2og_smoke] eq "true" or [MQTT2_ioBroker:rauchmelder_flureg_smoke] eq "true" or [MQTT2_ioBroker:rauchmelder_haustuer_smoke] eq "true" or [MQTT2_ioBroker:rauchmelder_keller_smoke] eq "true" or [MQTT2_ioBroker:rauchmelder_schlafzimmer_smoke] eq "true" or [MQTT2_ioBroker:rauchmelder_wohnzimmer_smoke] eq "true") (set teleBot message ALARM!! Rauchmelder ausgelöst!!!)(set rauchalarm on) DOELSE (set rauchalarm off)
   FUUID      5fbfbae0-f33f-8863-4d78-d1a85bb1f8bd58d7
   MODEL      FHEM
   NAME       doif_rauchalarm
   NOTIFYDEV  global,MQTT2_ioBroker
   NR         584
   NTFY_ORDER 50-doif_rauchalarm
   STATE      cmd_2
   TYPE       DOIF
   VERSION    28546 2024-02-23 20:11:05
   eventCount 805
   READINGS:
     2024-03-23 18:03:56   Device          MQTT2_ioBroker
     2024-03-23 18:03:56   cmd             2
     2024-03-23 18:03:56   cmd_event       MQTT2_ioBroker
     2024-03-23 18:03:56   cmd_nr          2
     2024-03-23 14:02:12   e_MQTT2_ioBroker_rauchmelder_ankleiderzimmer_smoke false
     2024-03-23 18:03:49   e_MQTT2_ioBroker_rauchmelder_buero_smoke false
     2024-03-23 17:59:11   e_MQTT2_ioBroker_rauchmelder_flur1og_smoke false
     2024-03-23 18:00:06   e_MQTT2_ioBroker_rauchmelder_flur2og_smoke false
     2024-03-23 18:03:56   e_MQTT2_ioBroker_rauchmelder_flureg_smoke false
     2024-03-23 18:02:39   e_MQTT2_ioBroker_rauchmelder_haustuer_smoke false
     2024-03-23 18:02:15   e_MQTT2_ioBroker_rauchmelder_keller_smoke false
     2024-03-23 17:59:42   e_MQTT2_ioBroker_rauchmelder_schlafzimmer_smoke false
     2024-03-23 17:59:15   e_MQTT2_ioBroker_rauchmelder_wohnzimmer_smoke false
     2024-03-23 14:01:56   mode            enabled
     2024-03-23 18:03:56   state           cmd_2
     2024-03-23 17:01:28   wait_timer      no timer
   Regex:
     accu:
     bar:
     barAvg:
     collect:
     cond:
       MQTT2_ioBroker:
         0:
           rauchmelder_ankleiderzimmer_smoke ^MQTT2_ioBroker$:^rauchmelder_ankleiderzimmer_smoke:
           rauchmelder_buero_smoke ^MQTT2_ioBroker$:^rauchmelder_buero_smoke:
           rauchmelder_flur1og_smoke ^MQTT2_ioBroker$:^rauchmelder_flur1og_smoke:
           rauchmelder_flur2og_smoke ^MQTT2_ioBroker$:^rauchmelder_flur2og_smoke:
           rauchmelder_flureg_smoke ^MQTT2_ioBroker$:^rauchmelder_flureg_smoke:
           rauchmelder_haustuer_smoke ^MQTT2_ioBroker$:^rauchmelder_haustuer_smoke:
           rauchmelder_keller_smoke ^MQTT2_ioBroker$:^rauchmelder_keller_smoke:
           rauchmelder_schlafzimmer_smoke ^MQTT2_ioBroker$:^rauchmelder_schlafzimmer_smoke:
           rauchmelder_wohnzimmer_smoke ^MQTT2_ioBroker$:^rauchmelder_wohnzimmer_smoke:
   attr:
     cmdState:
     repeatcmd:
       30
     repeatsame:
     wait:
     waitdel:
     waitsame:
   condition:
     0          ::ReadingValDoIf($hash,'MQTT2_ioBroker','rauchmelder_ankleiderzimmer_smoke') eq "true" or ::ReadingValDoIf($hash,'MQTT2_ioBroker','rauchmelder_buero_smoke') eq "true" or ::ReadingValDoIf($hash,'MQTT2_ioBroker','rauchmelder_flur1og_smoke') eq "true" or ::ReadingValDoIf($hash,'MQTT2_ioBroker','rauchmelder_flur2og_smoke') eq "true" or ::ReadingValDoIf($hash,'MQTT2_ioBroker','rauchmelder_flureg_smoke') eq "true" or ::ReadingValDoIf($hash,'MQTT2_ioBroker','rauchmelder_haustuer_smoke') eq "true" or ::ReadingValDoIf($hash,'MQTT2_ioBroker','rauchmelder_keller_smoke') eq "true" or ::ReadingValDoIf($hash,'MQTT2_ioBroker','rauchmelder_schlafzimmer_smoke') eq "true" or ::ReadingValDoIf($hash,'MQTT2_ioBroker','rauchmelder_wohnzimmer_smoke') eq "true"
   do:
     0:
       0          set teleBot message ALARM!! Rauchmelder ausgelöst!!!
       1          set rauchalarm on
     1:
       0          set rauchalarm off
   helper:
     NOTIFYDEV  global,MQTT2_ioBroker
     event      rauchmelder_flureg_smoke: false
     globalinit 1
     last_timer 0
     sleepdevice MQTT2_ioBroker
     sleepsubtimer 0
     sleeptimer -1
     timerdev   MQTT2_ioBroker
     timerevent rauchmelder_flureg_smoke: false
     triggerDev MQTT2_ioBroker
     timerevents:
       rauchmelder_flureg_smoke: false
     timereventsState:
       rauchmelder_flureg_smoke: false
     triggerEvents:
       rauchmelder_flureg_smoke: false
     triggerEventsState:
       rauchmelder_flureg_smoke: false
   hmccu:
   internals:
   readings:
     all         MQTT2_ioBroker:rauchmelder_ankleiderzimmer_smoke MQTT2_ioBroker:rauchmelder_buero_smoke MQTT2_ioBroker:rauchmelder_flur1og_smoke MQTT2_ioBroker:rauchmelder_flur2og_smoke MQTT2_ioBroker:rauchmelder_flureg_smoke MQTT2_ioBroker:rauchmelder_haustuer_smoke MQTT2_ioBroker:rauchmelder_keller_smoke MQTT2_ioBroker:rauchmelder_schlafzimmer_smoke MQTT2_ioBroker:rauchmelder_wohnzimmer_smoke
   trigger:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   alias      doif_rauchalarm
   do         always
   repeatcmd  30
   room       Sicherheit,System

Danke Gruß Stefan

Per

$EVENT mit Perl zerlegen.
Wobei ich hier eh mit Events (und RegEx) statt mit Status arbeiten würde.

Damian

Mit dem Platzhalter $DEVICE kannst du das triggernde Device in der Nachricht angeben.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Das ist hier immer MQTT2_ioBroker, hilft also nicht weiter.

Sany

Hi,

wie Per schon schrieb, mit Perl den $EVENT zerlegen, z.B. so:
my($dv,$evnt) = split(" ",$EVENT);In $dv sollte dann der Rauchmelder stehen, den kannst du dann weiterschicken.
Für die Syntax in einem fhem-DOIF musst Du mal hier rumsuchen, da gibt es etliche Beispiele, wie man Perl-code einbaut. Ich nutze nur noch Perl-DOIF....

Und für die Triggerung würde ich auch Per's Vorschlag nehmen und auf Eventtriggerung umstellen.
Um da nicht ewig zu probieren und rätseln einfach mal den Eventmonitor auf die Rauchmelder laufen lassen, egal ob true oder false, die Zeile markieren und das DOIF "erzeugen" lassen, also die vorgeschlagene DEF kopieren und in deinem DOIF nutzen. Halt noch etwas anpassen, damit alle Rauchmelder erfasst werden.
In etwa so:
([MQTT2_ioBroker:"^rauchmelder_.*_smoke:.true$"])das sollte alle erfassen, wenn sie entsprechende Namen haben.

Probier mal



Viel Erfolg!



Sany
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Beta-User

Vielleicht wäre es einfacher
- das MQTT2_DEVICE aufzusplitten, oder
- MQTT am ioBroker anders einzustellen...?
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

tilly001

Die Readings kommen an und werden erkannt, aber ich bin aber mit Perl noch nicht so bewandert.

Wo setzte ich den Vorschlag von Sany
my($dv,$evnt) = split(" ",$EVENT);
hier jetzt ein?

([MQTT2_ioBroker:"^rauchmelder_.*_smoke:.true$"]) (set teleBot message ALARM!! Rauchmelder ausgelöst!!!)(set rauchalarm on) DOELSE (set rauchalarm off)

Beta-User

Zitat von: tilly001 am 24 März 2024, 17:00:44Die Readings kommen an und werden erkannt, aber ich bin aber mit Perl noch nicht so bewandert.
Dein "Problem" ist m.E. doch eher, dass du Readings hast, die eigentlich Devices sein sollten, es "hängt" also alles, was von ioBroker (mit diesen Einstellungen) kommt, "eine Ebene zu tief"...
Natürlich kann man auch mit dem weiterarbeiten, was du jetzt hast, aber es ist m.E. halt weder "intuitiv", noch einfacher, weil du nicht nur den Event splitten musst (was passiert, wenn es mal 3 Teile sind...?), sondern dann auch noch $EVTPART1 (bzw. "$dv") nachbearbeiten, weil da vermutlich ein Doppelpunkt steht, wo du ihn nicht haben magst.

Vielleicht zeigst du schlicht ein list (oder "copy for forum" von deinem MQTT2_DEVICE (oder "show MQTT Trafic" am IO)? Dann könnte man das ggf. einfacher beurteilen...
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

tilly001

Listing MQTT2 Device:


define MQTT2_ioBroker MQTT2_DEVICE ioBroker
attr MQTT2_ioBroker DbLogExclude .*
attr MQTT2_ioBroker alias MQTT2_ioBroker
attr MQTT2_ioBroker disable 0
attr MQTT2_ioBroker group MQTT
attr MQTT2_ioBroker readingList ioBroker:alive:.* alive\
ioBroker:down:.* down\
ioBroker:ham/0/Haust\xc3\xbcr/Battery/Haustuer-Battery-Level:.* Haustuer-Battery-Level\
ioBroker:ham/0/Haust\xc3\xbcr/Latch/Haustuer-Latch-Current-State:.* Haustuer-Latch-Current-State\
ioBroker:ham/0/Haust\xc3\xbcr/Lock/Haustuer-Lock-Current-State:.* Haustuer-Lock-Current-State\
ioBroker:Qcells/SolarErtragTag:.* SolarErtragTag\
ioBroker:Qcells/EinspeisungTag:.* EinspeisungTag\
ioBroker:Qcells/BezugTag:.* BezugTag\
ioBroker:Qcells/PVLeistung2:.* PVLeistung2\
ioBroker:Qcells/PVLeistung1:.* PVLeistung1\
ioBroker:QCells/SolarErtragTotal:.* SolarErtragTotal\
ioBroker:QCells/InputEnergyChargeToday:.* InputEnergyChargeToday\
ioBroker:QCells/OutputEnergyChargeToday:.* OutputEnergyChargeToday\
ioBroker:QCells/KapazitaetBatterie:.* KapazitaetBatterie\
ioBroker:BWWP/TemperaturSollSet:.* TemperaturSollSet\
ioBroker:BWWP/TemperaturIst:.* TemperaturIst\
ioBroker:BWWP/Betriebsart:.* Betriebsart\
ioBroker:rauchmelder/buero/smoke:.* rauchmelder_buero_smoke\
ioBroker:rauchmelder/buero/batterylow:.* rauchmelder_buero_batterylow\
ioBroker:rauchmelder/keller/smoke:.* rauchmelder_keller_smoke\
ioBroker:rauchmelder/haustuer/smoke:.* rauchmelder_haustuer_smoke\
ioBroker:rauchmelder/schlafzimmer/smoke:.* rauchmelder_schlafzimmer_smoke\
ioBroker:rauchmelder/flur2og/smoke:.* rauchmelder_flur2og_smoke\
ioBroker:rauchmelder/ankleidezimmer/smoke:.* rauchmelder_ankleidezimmer_smoke\
ioBroker:rauchmelder/wohnzimmer/smoke:.* rauchmelder_wohnzimmer_smoke\
ioBroker:rauchmelder/flureg/smoke:.* rauchmelder_flureg_smoke\
ioBroker:rauchmelder/flur1og/smoke:.* rauchmelder_flur1og_smoke\
ioBroker:rauchmelder/buero/alarm:.* alarm
attr MQTT2_ioBroker room System
#   CID        ioBroker
#   DEF        ioBroker
#   FUUID      61c4a8ae-f33f-8863-2d6f-51a2f4daff8cfb6c
#   IODev      MQTT2_FHEM_Server
#   LASTInputDev MQTT2_FHEM_Server
#   MQTT2_FHEM_Server_CONN MQTT2_FHEM_Server_127.0.0.1_57754
#   MQTT2_FHEM_Server_MSGCNT 406367
#   MQTT2_FHEM_Server_TIME 2024-03-24 17:16:50
#   MSGCNT     406367
#   NAME       MQTT2_ioBroker
#   NR         767
#   STATE      Online
#   TYPE       MQTT2_DEVICE
#   eventCount 406435
#   OLDREADINGS:
#   READINGS:
#     2024-03-17 12:37:35   Betriebsart     1
#     2024-03-24 00:00:34   BezugTag        0
#     2024-03-02 12:58:46   EcoDesign_Temperatur_Ist 52.6
#     2024-03-24 11:33:54   EinspeisungTag  0.01
#     2024-03-24 17:16:39   Haustuer-Battery-Level 60
#     2024-03-24 17:16:39   Haustuer-Latch-Current-State 1
#     2024-03-24 17:16:39   Haustuer-Lock-Current-State 0
#     2024-03-17 17:21:24   IODev           MQTT2_FHEM_Server
#     2024-03-24 17:15:12   InputEnergyChargeToday 6.6
#     2024-03-24 16:50:12   KapazitaetBatterie 96
#     2024-03-24 15:44:22   OutputEnergyChargeToday 4.2
#     2024-03-24 17:16:50   PVLeistung1     812
#     2024-03-24 17:16:50   PVLeistung2     329
#     2024-03-24 17:14:32   SolarErtragTag  10.8
#     2024-03-24 17:14:32   SolarErtragTotal 2790.8
#     2024-03-24 16:54:23   TemperaturIst   53.3
#     2024-03-17 12:37:35   TemperaturSollSet 55
#     2024-03-24 16:43:45   alarm           false
#     2024-03-17 17:21:55   alive           Online
#     2024-03-23 13:57:10   auchmelder_ankleiderzimmer_smoke true
#     2024-03-16 08:51:43   battery         100
#     2024-03-16 08:50:39   battery_low     false
#     2024-03-16 08:51:56   batterylow      false
#     2023-12-01 05:09:02   down            Offline
#     2024-03-24 17:15:58   rauchmelder_ankleidezimmer_smoke false
#     2024-03-24 17:14:57   rauchmelder_buero_batterylow false
#     2024-03-24 17:15:27   rauchmelder_buero_smoke true
#     2024-03-24 17:15:17   rauchmelder_flur1og_smoke false
#     2024-03-24 17:16:10   rauchmelder_flur2og_smoke false
#     2024-03-24 17:14:58   rauchmelder_flureg_smoke false
#     2024-03-24 17:13:46   rauchmelder_haustuer_smoke false
#     2024-03-24 17:13:20   rauchmelder_keller_smoke false
#     2024-03-24 17:15:47   rauchmelder_schlafzimmer_smoke false
#     2024-03-24 17:15:19   rauchmelder_wohnzimmer_smoke false
#     2024-03-17 17:22:22   subscriptions   rauchmelder/buero/alarm rauchmelder/buero/maxduration
#   hmccu:
#
setstate MQTT2_ioBroker Online
setstate MQTT2_ioBroker 2024-03-17 12:37:35 Betriebsart 1
setstate MQTT2_ioBroker 2024-03-24 00:00:34 BezugTag 0
setstate MQTT2_ioBroker 2024-03-02 12:58:46 EcoDesign_Temperatur_Ist 52.6
setstate MQTT2_ioBroker 2024-03-24 11:33:54 EinspeisungTag 0.01
setstate MQTT2_ioBroker 2024-03-24 17:16:39 Haustuer-Battery-Level 60
setstate MQTT2_ioBroker 2024-03-24 17:16:39 Haustuer-Latch-Current-State 1
setstate MQTT2_ioBroker 2024-03-24 17:16:39 Haustuer-Lock-Current-State 0
setstate MQTT2_ioBroker 2024-03-17 17:21:24 IODev MQTT2_FHEM_Server
setstate MQTT2_ioBroker 2024-03-24 17:15:12 InputEnergyChargeToday 6.6
setstate MQTT2_ioBroker 2024-03-24 16:50:12 KapazitaetBatterie 96
setstate MQTT2_ioBroker 2024-03-24 15:44:22 OutputEnergyChargeToday 4.2
setstate MQTT2_ioBroker 2024-03-24 17:16:50 PVLeistung1 812
setstate MQTT2_ioBroker 2024-03-24 17:16:50 PVLeistung2 329
setstate MQTT2_ioBroker 2024-03-24 17:14:32 SolarErtragTag 10.8
setstate MQTT2_ioBroker 2024-03-24 17:14:32 SolarErtragTotal 2790.8
setstate MQTT2_ioBroker 2024-03-24 16:54:23 TemperaturIst 53.3
setstate MQTT2_ioBroker 2024-03-17 12:37:35 TemperaturSollSet 55
setstate MQTT2_ioBroker 2024-03-24 16:43:45 alarm false
setstate MQTT2_ioBroker 2024-03-17 17:21:55 alive Online
setstate MQTT2_ioBroker 2024-03-23 13:57:10 auchmelder_ankleiderzimmer_smoke true
setstate MQTT2_ioBroker 2024-03-16 08:51:43 battery 100
setstate MQTT2_ioBroker 2024-03-16 08:50:39 battery_low false
setstate MQTT2_ioBroker 2024-03-16 08:51:56 batterylow false
setstate MQTT2_ioBroker 2023-12-01 05:09:02 down Offline
setstate MQTT2_ioBroker 2024-03-24 17:15:58 rauchmelder_ankleidezimmer_smoke false
setstate MQTT2_ioBroker 2024-03-24 17:14:57 rauchmelder_buero_batterylow false
setstate MQTT2_ioBroker 2024-03-24 17:15:27 rauchmelder_buero_smoke true
setstate MQTT2_ioBroker 2024-03-24 17:15:17 rauchmelder_flur1og_smoke false
setstate MQTT2_ioBroker 2024-03-24 17:16:10 rauchmelder_flur2og_smoke false
setstate MQTT2_ioBroker 2024-03-24 17:14:58 rauchmelder_flureg_smoke false
setstate MQTT2_ioBroker 2024-03-24 17:13:46 rauchmelder_haustuer_smoke false
setstate MQTT2_ioBroker 2024-03-24 17:13:20 rauchmelder_keller_smoke false
setstate MQTT2_ioBroker 2024-03-24 17:15:47 rauchmelder_schlafzimmer_smoke false
setstate MQTT2_ioBroker 2024-03-24 17:15:19 rauchmelder_wohnzimmer_smoke false
setstate MQTT2_ioBroker 2024-03-17 17:22:22 subscriptions rauchmelder/buero/alarm rauchmelder/buero/maxduration


Beta-User

#9
So könnte dann z.B. einer der Rauchmelder aussehen:
define Rauchmelder_Buero MQTT2_DEVICE
attr Rauchmelder_Buero group Sensor
attr Rauchmelder_Buero room Buero
attr Rauchmelder_Buero readingList \
  rauchmelder/buero/smoke:.* {{smoke => $EVENT eq 'true' ? 'on':'off'}}\
  rauchmelder/buero/batterylow:.* batterylow

Nachtrag: Wenn das mit dem Hash als Rückgabe nicht klappt (oder nicht gewünscht ist):
attr Rauchmelder_Buero readingList \
  rauchmelder/buero/smoke:.* smoke\
  rauchmelder/buero/batterylow:.* batterylow
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

tilly001

Dann für jedes Device ein DOIF??... Ich stehe gerade auf dem Schlauch ...

Beta-User

Zitat von: tilly001 am 24 März 2024, 21:29:42Dann für jedes Device ein DOIF??... Ich stehe gerade auf dem Schlauch ...
Natürlich nicht...

Verwende das Modul nicht, aber ein notify für alle Rauchmelder würde diesen Job erledigen; geht ziemlich sicher auch mit DOIF, wenn man das bevorzugt....
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

tilly001

So es läuft jetzt wie gewollt:

Jeder Rauchmelder hat ein eigenes Device.


(["^Rauchmelder_.*:smoke:.true$"]) (set teleBot message ALARM!! $DEVICE ausgelöst!!!) (set rauchalarm on) DOELSEIF (["^Rauchmelder_.*:smoke:.false$"]) (set rauchalarm off)

Gruß Stefan

Beta-User

Danke erst mal für die Rückmeldung, dass die Aufteilung in mehrere MQTT2_DEVICE-Instanzen nachvollziehbar war.

Zweifel an der Rückstelllogik hatte ich ja bereits per pm addressiert, Danke für's Wiederöffnen des Threads!
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

tilly001

Wie würde dein Notify dazu aussehen?

Zitat von: Beta-User am 26 März 2024, 12:02:44Zweifel an der Rückstelllogik hatte ich ja bereits per pm addressiert, Danke für's Wiederöffnen des Threads!

Beta-User

Hmmm, ist schierig, da eine direkte Antwort (in Code) drauf zu geben.

Zum einen würde ich "Mehrzeiler" immer in myUtils-Code verpacken, und zum anderen ist das mit dem "Status-Dummy" eine Lösung, die ich eher vermeiden würde, weil da Abhängigkeitskaskaden entstehen können, die man nicht sauber auflösen kann, wenn man nicht genau weiß, wie die Event-Abarbeitung in fhem.pl abläuft...

Vermutlich würde ich das eher mit einem monitoring-Device lösen (und damit den Status aller Rauchmelder konsolidieren) und die Message für's Alarmieren (ausgehend von zuverlässig auslösenden Rauchmeldern ohne viele Fehlalarme) direkt über den "msg"-Befehl versenden (siehe msgConfig). Ob das dann direkt über das monitoring-Device ginge oder über ein separates notify (hörend auf alle Rauchmelder) habe ich noch nicht überlegt, vermutlich letzteres; vernetzte Rauchmelder stehen noch auf meiner "todo". Ein Beispiel für notify+myutils für (alle) Fenstersensoren habe ich irgendwo gepostet, aber das macht dann halt auch was anderes... Die Rauchmelder sind zwar jetzt da, aber deconz kennt die (noch?) nicht, so dass ich grade wieder überlege, auf zigbee2mqtt zu wechseln (was aber andere Umfeldarbeiten bedingen würde).
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

Per

Der Vorteil von DOIF ist ja gerade, Device (Status) und Code an einer Stelle zu haben. Bzw bei Perl DOIF sich das Auslagern auf myutil zu sparen. In myutil packe ich (!) nur Code, den ich an verschiedenen Stellen brauche, und das ist seeehr wenig.

tilly001

Zitat von: Per am 27 März 2024, 06:30:15Der Vorteil von DOIF ist ja gerade, Device (Status) und Code an einer Stelle zu haben. Bzw bei Perl DOIF sich das Auslagern auf myutil zu sparen. In myutil packe ich (!) nur Code, den ich an verschiedenen Stellen brauche, und das ist seeehr wenig.

Die Frage wäre, wie bekomme ich die Prüfung in das DOIF, sodass das DOELSEIF nur auslöst wenn alle Rauchmelder "false" melden.

Per

Da kannst du aggregieren. Entweder du zählst die mit Status "false" gg die Anzahl oder "true" und 0.

tilly001

So jetzt läuft es ....


(["^Rauchmelder_.*:smoke:.true$"]) (set teleBot message ALARM!! $DEVICE ausgelöst!!!) (set rauchalarm on) DOELSEIF ([#"^Rauchmelder":smoke:"true"] == 0) (set rauchalarm off)

Per

Wenn du dein DOIF "rauchalarm" nennst und die beiden Status "on" und "off" sparst du eventuell ein Device, wenn es ein Dummy ist