PriorityQueue von Switch Befehlen?

Begonnen von fhemxperte, 28 November 2017, 21:02:42

Vorheriges Thema - Nächstes Thema

fhemxperte

Moin zusammen,

besteht für folgendes Thema Interesse?

Problem:
Ich habe mehrere Automatisierungen, welche die gleichen Devices schalten und möchte keine Abfragen gegenseitig auf diese Automatisierungen machen um ggf. zu erkennen ob geschaltet werden soll oder nicht. Zudem überschreibt eine Automatisierung ggf. den Schaltzustand der anderen Automatisierung. Hier sollen alle Abhängigkeiten voneinander gelöst werden.

Beispiel:
Zielschaltdevice ist das Wohnzimmerlicht
1. Sonnenuntergang Automatisierung schaltet Licht an
2. Eine andere Automatierung schaltet Licht aus
3. Eine Außenlicht Automatisierung schaltet das Licht an
4. Sonnenuntergang Automatisierung schaltet das Licht aus

Was passiert im Normalfall (ohne Abhängigkeiten aller Automatisierungen)?
Es wird sequentiell von oben nach unten abgearbeitet.

Was wäre wünschenswert? (zumindest für mich)
Das Licht geht bedingt durch die Sonnenuntergang Automatisierung an und bleibt an, bis alle Automatisierungen einen Aus-Schaltzustand melden.

Idee:
Meine Idee ist nun dies mittels eines "Priority Queue"-Moduls zu lösen, die alle Queueelemente priorisiert als Reading speichert. So kann man dies auch mit der Prozentangabe eines Rollos nutzen.
Die niedrigste Prio hat immer den Schaltzustand der das Device deaktiviert (aus schaltet). Dieses bleibt immer in der Queue aber kann natürlich auch redefined werden. Alle Ein-Schaltzustände werden dann in der jeweiligen Prio gespeichert. Sobald ein Gerät ausgeschaltet wird, wird der Eintrag, der zuvor vom "Einschalttrigger" hinzugefügt wurde, von der Queue entfernt und das davorherige in der Priorität wird ausgeführt. Bis die Queue irgendwann wieder leer sein sollte. Jede Automatisierung muss so seine eigene Prio bekommen, damit gesichert ist, welche Automatisierung vorrangig vor den anderen ist.

Hier eine Beispiel Logausgabe:
PQ_PriorityQueue: Elements in priorityqueue
[LS_KF_Hauptlicht] -> [00|off] [10|on] [15|on]
[ZS_SZ_GS_EchoDot] -> [00|on] [05|off]
[ZS_SZ_LS_BettRechts] -> [00|off]
[ZS_WZ_GS_EchoDot] -> [00|on]


Erklärung hierzu:
LS_KF_Hauptlicht hat als AUS-Zustand off, und bedingt durch 2 Automatisierungen mit Prio 10 und 15 ([10|on] [15|on]) wurde dieses Licht eingeschaltet. Sofern beide Automatisierungen off melden, schaltet sich das Licht auch auf off.

Beim ZS_SZ_GS_EchoDot funktioniert die Queue genau anders herum. Der AUS-Zustand ist hier on, hier sollen Automatisierungen nur den Echo Dot ausschalten. Zum Beispiel Nachtabschaltung oder Mediacenter. Somit geht der Echo auch nicht mehr an wenn man nach der Nachtabschaltung erst das Mediacenter beendet (bei mir ist der Echo beim Abspielen von Filmen oder TV aus).

Modul:
Eine erste Alphaversion hätte ich fertig, ich würde nur noch die Hilfe im Modul ergänzen und dann bei Interesse veröffentlichen.


Eventuell gibt es sogar so eine ähnliche Anwendung bereits und ich weiß das nur nicht?!?!?! :o

Freue mich auf Feedback.  ;)