Soll DOIF auch den Erfolg der Instanz kontrollieren?

Begonnen von cwagner, 13 Januar 2018, 08:47:59

Vorheriges Thema - Nächstes Thema

cwagner

Selbst bei drahtgebundenen Devices, häufiger bei Funk-Geräten tritt der Fall ein, dass ein versandter Befehl buchstäblich versandet... Auch hier im Forum tauchen zu diesem Thema immer wieder Fragen auf.
Bei wichtigen DOIFs habe ich daher bei mir inzwischen CTRL-DOIFs eingeführt, die die Kombination "CMD vom kontrollierten DOIF" und "Status vom gesteuerten Device" kontrollieren und beim Mismatch den eigentlich gewünschten Befehl nach einer Wartezeit wiederholen. Auf diese Weise haben sich meine DOIFs aber auch ordentlich auf 72 vermehrt. Beispiel:

(["^DI_Brenner$:^cmd_nr: 1$"] and [?Switch_Heizkeller:Brenner] eq "OFF") (set Switch_Heizkeller output Brenner ON

Hier möchte ich nun einen Gedanken zur Diskussion stellen, der bei mir etwa 1/4 aller DOIfs verbessern könnte. Sollte es nicht beim DOELSEIF neben Bedingungsklammer und Ausführungsklammer noch eine Kontrollklammer geben? Etwa in der Art:
(Bedingung zum Auslösen eines Aktors) (Ausführungsteil) (Kontrollteil: ist nach einer Wartezeit von X Sekunden der Status des Gerätes XYZ)


Wenn der Kontrollteil nach einer Wartezeit von wait=X Sekudnen ein "false" ergibt, soll der Ausführungsteil repeatsame=X mal wiederholt werden

Herzliche Grüße

Christian
PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

Damian

Das kann nur bei bidirektionalen Devices funktionieren und da findet ja eigentlich schon eine Wiederholung statt, wenn die Bestätigung nicht kommt. Die Anzahl der Wiederholung lässt sich z. B. bei HM im Device einstellen. Bei unidirektionalen Devices (z. B. FS20)  kennt man den tatsächlichen Status nicht.

Unabhängig davon kann man das Nachtriggern heute schon ohne großen Aufwand realisieren:

(Bedingung zum Auslösen eines Aktors) (Ausführungsteil) (IF (Status falsch) (Status des Gerätes XYZ noch mal setzen))

wait 0,X-Sekunden

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cwagner

Dass ich nicht an IF() gedacht habe! Danke für den hilfreichen Gedanken...

Christian
PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB