Flügeltorsteuerung mit mehreren Auslösern

Begonnen von timmy2000, 09 September 2021, 23:09:46

Vorheriges Thema - Nächstes Thema

timmy2000

Guten Abend liebes Forum,
leider begrenzen sich meine Fhem Fähigkeiten doch auf einen recht engen Horizont und ich stehe vor einem Problem. Ich versuche jedenfalls mal die Ausgangssituation recht genau zu beschreiben, in der Hoffnung, dass ich hier ein wenig Hilfe finde.
Ich steuere eine Relaiskarte von Fhem aus, welche zwei Torantriebe steuert. Das klappt so weit auch recht gut. Dafür nutze ich ein Notify, welches mehrere set Befehle in einer Abfolge mit kurzen Pausen (sleep) durchfeuert. Das Notify regiert auf verschiedene Auslöser (Schalter, Funkschlater, Codschloss, Gtag)

Also z.b. startet ein Schalter eine Öffnen warten Schließen Abfolge über ein Notify, das Notify löst dann mehrer "set" Befehle hintereinander aus, bis das Tor geöffnet ist, danach laufen nach einer längeren Verzögerung wieder mehrere "set" Befehle, welches die Relais dazu bringen das Tor wieder zu schließen.

Nun würde ich es gerne so gestallten, dass wenn ein anderer Auslöser die Befehlsabfolge zum Öffnen warten Schließen neu beginnt, wärend die alte Abfolge noch läuft, diese dann auch Stoppt. Ich weiss nur leider nicht wie ich mehrere in folge ablaufende Set befehle, welche durch ein notify ausgelöst werden stoppen und quasi löschen kann. Kann mir hierzu vieleicht jemand einen Tip geben?





Beta-User

Moin.

Eine Option wäre, den sleep-Anweisungen Namen zu geben, Stichwort "benanntes sleep" (siehe auch den Befehl cancel: https://fhem.de/commandref_modular_DE.html#cancel)

Alternative (z.B.): defmod-Anweisungen in ein "at" packen, dann überschreibt auch ein neues "at" ein altes.

Meine Vermutung: Du könntest mit ROLLO arbeiten. Das übernimmt dann die Timer-Verwaltung ganz (bis auf das "mach nach x Minuten wieder zu", das ein watchdog übernehmen könnte)  und du kannst z.B. auch neben Öffnen und Schließen (ggf. unterschiedliche) Stop-Befehle angeben oder nur teilweise auffahren. Hilfreich wäre es dafür aber ggf., wenn deine Relay-Ansteuerung on-for-timer-Befehle verstehen würde (ggf. via SetExtensions).

Sollte zufällig vor der Relais-Karte ein ESP8266 werkeln, könntest du ggf. auch Tasmota darauf flashen - das kann als Unterpunkt der Shutter-Steuerung auch Torantriebe mit Impulsen...
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

Sany

Hi,

ohne jetzt den gesamten Rahmen der Anforderungen zu überblicken (da fehlen ein paar Details wie: welche/wieviele Aktoren, was senden die Auslöser, wie fahren die Tore etc) würde ich das mit DOIF-Perl lösen. Solltest Du DOIF (die fhem-Variante DOIF - DOELSEIF ...) kennen, dann vergiss bitte bis auf die [Device:Reading] Syntax (fast) alles zu DOIF.
Im DOIF-Perl schreibst Du Perl-Code. Das machst Du ja bei notify uns at in gewisser Weise auch. Im DOIF-Perl kannst Du beliebig viele Timer kreieren, auch so, dass sie sich gegenseitig aufrufen. Du kannst sie abfragen, ob sie gerade laufen und jedezeit löschen. Du kannst auch sehr simpel Schleifen mit den Timern bilden, die rauf/runterzählen. Weiterhin kannst Du Laufzeitvariablen anlegen (um "Zustände" deiner Schalterei abzubilden und/oder Readings innerhalb Deines DOIF sehr bequem schreiben, lesen, darauf triggern etc. Und auch eigene Unterroutinen kannst Du anlegen, falls Du wiederkehrenden Code hast.
allerdings: Du musst das alles selbst schreiben.
Aber: dafür bekommst Du einen performanten Code (dein DOIF wird beim "modify" kompiliert und läuft dann auf der perl-Ebene) und hast alles an genau einer Stelle. Wenn Du möchtest kannst Du das auch gleich visualisieren, alles in einem DOIF.

Denk mal drüber nach, lies mal in der cRef zu DOIF Perl Modus, ob das für Dich in Frage kommt. Ich sag mal so: Ein wenig Programmier-Übung, am besten mit Perl, sollte vorhanden sein, ein wenig Mut, da mal dranzugehen. Deine Aufgabe ist aber lösbar, weit weg von "Rocket-science"  ;)
Und wenn Du das geschafft hast, dann wirst Du mehr und mehr mit DOIF-Perl machen.

Gruß

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  ....

Damian

Zitat von: Sany am 10 September 2021, 13:00:53
Hi,

ohne jetzt den gesamten Rahmen der Anforderungen zu überblicken (da fehlen ein paar Details wie: welche/wieviele Aktoren, was senden die Auslöser, wie fahren die Tore etc) würde ich das mit DOIF-Perl lösen. Solltest Du DOIF (die fhem-Variante DOIF - DOELSEIF ...) kennen, dann vergiss bitte bis auf die [Device:Reading] Syntax (fast) alles zu DOIF.
Im DOIF-Perl schreibst Du Perl-Code. Das machst Du ja bei notify uns at in gewisser Weise auch. Im DOIF-Perl kannst Du beliebig viele Timer kreieren, auch so, dass sie sich gegenseitig aufrufen. Du kannst sie abfragen, ob sie gerade laufen und jedezeit löschen. Du kannst auch sehr simpel Schleifen mit den Timern bilden, die rauf/runterzählen. Weiterhin kannst Du Laufzeitvariablen anlegen (um "Zustände" deiner Schalterei abzubilden und/oder Readings innerhalb Deines DOIF sehr bequem schreiben, lesen, darauf triggern etc. Und auch eigene Unterroutinen kannst Du anlegen, falls Du wiederkehrenden Code hast.
allerdings: Du musst das alles selbst schreiben.
Aber: dafür bekommst Du einen performanten Code (dein DOIF wird beim "modify" kompiliert und läuft dann auf der perl-Ebene) und hast alles an genau einer Stelle. Wenn Du möchtest kannst Du das auch gleich visualisieren, alles in einem DOIF.

Denk mal drüber nach, lies mal in der cRef zu DOIF Perl Modus, ob das für Dich in Frage kommt. Ich sag mal so: Ein wenig Programmier-Übung, am besten mit Perl, sollte vorhanden sein, ein wenig Mut, da mal dranzugehen. Deine Aufgabe ist aber lösbar, weit weg von "Rocket-science"  ;)
Und wenn Du das geschafft hast, dann wirst Du mehr und mehr mit DOIF-Perl machen.

Gruß

Sany

Der Perlmodus ist im Vergleich im FHEM-Modus relativ jung, gewinnt aber langsam an Bedeutung. Ich programmiere meine Automatisierung fast nur noch im Perlmodus, weil er wesentlich flexibler ist. Um den Einstieg in die Programmierung der Automatisierung im Perlmodus zu erleichtern, werde ich eine Wiki-Seite zum Perlmodus erstellen, die ausführlich alle Aspekte  der Programmierung der Automatisierung im Perlmodus beleuchtet. Natürlich wird alles ebenfalls anhand typischer Beispiele erklärt. Das wird die Commandref entlasten und gleichzeitig die Dokumentation besser lesbar machen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF