in DOIF erstellte Abläufe werden nicht komplett abgearbeitet

Begonnen von BroToTyp, 05 September 2023, 08:31:15

Vorheriges Thema - Nächstes Thema

BroToTyp

Liebes Forum,
ich bin mit der Suche leider nicht fündig geworden - vermutlich habe ich die falschen Begriffe gewählt...
Ich habe mir einen Alarm als DOIF gebastelt: Wenn ein Rauchmelder den Status "smoke:true" annimmt, dann sollte der Ablauf wie folgt passieren: Alle Musiccast-Geräte mit dem Namen MC_Bad, MC_KUECHE, MC_Arbeitszimmer sollten den Favoritenkanal 39 (ist in den Geräten eingestellt) einschalten und auf Lautstärke 55 schalten, alle (Zigbee & 433 MHz-Funksteckdosen-)Lampen sollten angehen und die Fritzbox sollte eine Rufnummer anrufen. Allerdings funktioniert das leider nicht zufriedenstellend. Die Musiccastgeräte spielen nur teilweise den Alarm auf der Favoritenliste ab, die Lautstärke wird auch nicht korrekt angehoben - ein Anruf funktioniert bei mehreren Testläufen auch nicht immer. Einzeln eingegeben laufen die Befehle hingegen problemlos - nur bei Ausführung des DOIF "verschluckt" sich der Rapsberry regelmäßig.

_Zwei auf den selben Alarm laufende NOTIFY (Benachrichtigung per Telegram und GCM, welcher Rauchmelder aktiv ist) laufen hingegen einwandfrei._

=> Und zu allem Überfluss wird der Raspberry quälend langsam und scheint überfordert mit den Abläufen.<=

Daher meine Frage:
Was mache ich falsch?
Und wieso wird der Raspberry so ultra langsam bzw. schaltet nicht alles (nacheinander) so, wie gewünscht?
Das DOIF und die Attribute habe ich hier angefügt:
----------------------------------------
DEF
([Rauchmelder_EG_WoZi:"^smoke:.true$"] or
[Rauchmelder_EG_ArZi:"^smoke:.true$"] or [Rauchmelder_EG_Kueche:"^smoke:.true$"] or [Rauchmelder_Keller_Gang:"^smoke:.true$"] or [Rauchmelder_OG_ArZi:"^smoke:.true$"] or [Rauchmelder_OG_KiZi:"^smoke:.true$"] or
[Rauchmelder_OG_SchlZi:"^smoke:.true$"]) (set MC_.* TurnFavNetRadioChannelOn 39)(set MC_.* volume 55)(set AlleZigbeeLampen pct 100, set LampeWoZi on, set FRITZBOX call *******NUMMER***** 30) DOELSE (set MC_.* volume 15)(set MC_.* playback stop)(set MusicCast TurnFavNetRadioChannelOn 1)(set MC_.* off, set LampeWoZi on-for-timer 7200, set AlleZigbeeLampen on-for-timer 7200, set AlleZigbeeLampen pct 30)
----------------------------------------
Attributes
repeatsame 50
room ALARM,MQTT2_DEVICE
wait 0,5,2:0,1,2
----------------------------------------   


Zusatzinfo: Raspberry Pi 3, 32GB SD,
PRETTY_NAME="Raspbian GNU/Linux 11 (bullseye)"
NAME="Raspbian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=raspbian
ID_LIKE=debian


Per

Wenn deine Rauchmelder ein anderes Event senden als smoke true (Batteriestatus oder was auch immer) schlägt DOELSE zu und alles im wait wird verworfen.
Ich würde mit Aggregation arbeiten...

BroToTyp

Das mit dem DOELSE hat mich auf die Idee gebracht, dieses auch zu definieren - wenn alle Rauchmelder auf smoke:false stehen -> schalte alles ab

([Rauchmelder_EG_WoZi:"^smoke:.true$"] or
[Rauchmelder_EG_ArZi:"^smoke:.true$"] or [Rauchmelder_EG_Kueche:"^smoke:.true$"] or [Rauchmelder_Keller_Gang:"^smoke:.true$"] or [Rauchmelder_OG_ArZi:"^smoke:.true$"] or [Rauchmelder_OG_KiZi:"^smoke:.true$"] or
[Rauchmelder_OG_SchlZi:"^smoke:.true$"]) (set MC_.* TurnFavNetRadioChannelOn 39)(set MC_.* volume 55)(set AlleZigbeeLampen pct 100, set LampeWoZi on, set TELLERSUELZE call 01797612969 30) DOELSEIF ([Rauchmelder_EG_WoZi:"^smoke:.false$"] and
[Rauchmelder_EG_ArZi:"^smoke:.false$"] and [Rauchmelder_EG_Kueche:"^smoke:.false$"] and [Rauchmelder_Keller_Gang:"^smoke:.false$"] and [Rauchmelder_OG_ArZi:"^smoke:.false$"] and [Rauchmelder_OG_KiZi:"^smoke:.false$"] and
[Rauchmelder_OG_SchlZi:"^smoke:.false$"]) (set MC_.* volume 15)(set MC_.* playback stop)(set MusicCast TurnFavNetRadioChannelOn 1)(set MC_.* off, set LampeWoZi on-for-timer 7200, set AlleZigbeeLampen on-for-timer 7200, set AlleZigbeeLampen pct 30)

Das mit der Aggregation muss ich mir nochmals durchlesen - da müsste ich überlegen, wie ich das einbaue.

Vielen herzlichen Dank schon mal für den Denkanstoss!

BroToTyp

Nachtrag:

Ich habe das Attribut EVENT-AGGREGATOR eingerichtet:
event-aggregator smoke::none:count:20

Dieser sollte nun bei einer Änderung von "smoke" anschlagen und dann 20 Sekunden den Wert halten. Kann das jemand bestätigen, dass das so korrekt ist?

Die Readings der Rauchmelder sehen so aus:
Readings
IODev MQTT2_FHEM_Server 2023-09-04 18:43:39
ac_status false 2023-09-04 18:41:27
battery 75.5 2023-09-04 18:41:27
battery_low false 2023-09-04 18:41:27
enrolled false 2023-03-23 18:12:32
linkquality 32 2023-09-04 18:41:27
restore_reports true 2023-09-04 18:41:27
smoke false 2023-09-04 18:41:27
supervision_reports false 2023-09-04 18:41:27
tamper false 2023-09-04 18:41:27
test false 2023-09-04 18:41:27
trouble false 2023-09-04 18:41:27

Per

Ich dachte eher an sowas.
Dein Event-Aggregator dient ja, bestimmte Ausreißer eines Readings einzufangen. Die hast du aber nicht. Du hattest nur deine Liste auf zu viele Readings gefiltert.

BroToTyp

Ahh, vielen Dank!
Ich werde mich mal einlesen - wäre doch gelacht, wenn ich das nicht hinbekomme... 8)

BroToTyp

#6
Update:
Scheint zu funktionieren:
([#"^Rauchmelder_":smoke:"true"] >=1) (set Status_Rauchmelder [@"^Rauchmelder_":smoke:"true"])(set TELEGRAM send Rauch gemeldet: [@"^Rauchmelder_":smoke:"true"]) (set MC_.* on) (set MC_.* playback stop)(set MC_.* volume 5)(set MC_.* TurnFavNetRadioChannelOn 39)(set MC_.* volume 15)(set FRITZBOX call NUMMER 30)(set AlleZigbeeLampen pct 100, set LampeWoZi on) DOELSEIF ([#"^Rauchmelder_":smoke:"true"] < 1) (set Status_Rauchmelder aus)(set TELEGRAM send Feueralarm beendet)(set MC_.* playback stop)(set MC_.* volume 15)(set MusicCast TurnFavNetRadioChannelOn 1)(set MC_.* off)(set LampeWoZi on-for-timer 7200, set AlleZigbeeLampen on-for-timer 7200, set AlleZigbeeLampen pct 30)

Musiccast läuft noch nicht ganz rund - es werden nicht immer alle Lautsprecher angesprochen, aber das ist nur eine Frage des WAIT-Timers... Da gehen vermutlich Pakete verloren...
Und bei AlleZigbeeLampen pct gibt es Fehlermeldungen, dass pct nicht unterstützt wird. Aber alle schalten und dimmen, wie gewünscht.

Vielen Dank nochmals!

Per

Jetzt kannst du nochmal mit DOELSE statt DOELSEIF probieren. Aber mit einer Kopie, falls es nicht klappt.
Und Code bitte mit Code Tags klammern, dann kann man das besser lesen.