Abfrage solange verzögert wiederholen bis Ergebnis true

Begonnen von Rainer1, 27 Februar 2024, 06:56:41

Vorheriges Thema - Nächstes Thema

Rainer1

...

Damian

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

betateilchen

Zitat von: Rainer1 am 27 Februar 2024, 06:56:41- ein Notify wird nur einmal ausgelöst
- ein dauerhaftes at +3s möchte ich vermeiden

Wie kann man das Problem angehen?

Im notify ein einmal auszuführendes at anlegen lassen, das nach drei Sekunden prüft, ob der Zielzustand erreicht ist und anderenfalls wieder ein at für 3 Sekunden später anlegt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Formuliere doch erstmal die gesamte Aufgabe in einen möglichst einfachen logischen Ablauf, bevor Du versuchst, das in irgendwelchen devices (egal ob DOIF oder was anderes) umzusetzen.

Deine Strichliste vom Anfang des Threads ist übrigens nicht das, was ich damit meine.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Damian

Zitat von: Rainer1 am 27 Februar 2024, 09:11:57
Zitat von: Damian am 27 Februar 2024, 07:43:00
Zitat von: Rainer1 am 27 Februar 2024, 06:56:41Hallo, ich muss eine Abfrage so gestalten, dass diese sooft mit je 3s verzögert erneut aufgerufen wird, bis das Ergebnis true ist.


z. B. damit: https://wiki.fhem.de/wiki/DOIF/Perl-Modus#Anwendungsbeispiele_mit_bedingter_Wiederholung_einer_Ausf%C3%BChrung



Versuche die Bedingung mit DOIF zu erstellen, bekomme es aber nicht hin, da es nicht funktioniert:

defmod di_LED DOIF {[ReadingsVal("Shelly1","relay0","0" eq "on")]

Die Beispiele bezogen sich auf die Funktion set_Exec, die hast du hier gar nicht benutzt. Wie die Funktion aufgebaut ist. steht in der verlinkte Wiki-Dokumentation paar Zeilen davor. Ob im DOIF oder sonst wo in fhem muss man schon genau die beschriebene Syntax befolgen. Du hast eine neue Syntax erfunden, die es so nicht gibt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Zitat von: Rainer1 am 28 Februar 2024, 07:38:20Sorry, hatte ja auch nur die Bedingung gepostet, welche nicht funktioniert - daher habe ich den Rest der Zeile für meine Frage weggelassen...

Dann musst du den kompletten Code posten und vorher genau aufschreiben, was der Code machen soll.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Zitat von: Damian am 28 Februar 2024, 07:39:21
Zitat von: Rainer1 am 28 Februar 2024, 07:38:20Sorry, hatte ja auch nur die Bedingung gepostet, welche nicht funktioniert - daher habe ich den Rest der Zeile für meine Frage weggelassen...

Dann musst du den kompletten Code posten und vorher genau aufschreiben, was der Code machen soll.
Zitat von: Rainer1 am 28 Februar 2024, 07:41:57Der Anteil hinter der [BEDINGUNG] wurde immer ausgeführt,  daher scheint diese nicht korrekt zu sein.

Nachfolgender Code hinter der Bedingung soll nur dann aufgerufen werden, wenn das Relay des Shelly auf "on" wechselt...

Der Trigger beim DOIF wird ohne ReadingsVal angegeben, hier also:

DOIF {[Shelly1:"relay0:on"];.../code]
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

#7
Zwei Dummy zur Simulation, das notify zur Lösung der Aufgabe:
defmod Lampe1 dummy
attr Lampe1 room Test
attr Lampe1 setList on off

defmod Lampe1Strom dummy
attr Lampe1Strom room Test
attr Lampe1Strom setList on off

defmod Lampe1_notify_1 notify Lampe1:off define Lampe1At at +00:00:03 IF ([Lampe1Strom] eq 'on')(sleep 0.1,set Lampe1 off)
attr Lampe1_notify_1 room Test
Event Protokoll der Simulation
2024-03-25 09:07:14.967 dummy Lampe1 on
2024-03-25 09:07:16.260 dummy Lampe1Strom on
2024-03-25 09:07:27.341 at Lampe1At Next: 09:07:30
2024-03-25 09:07:27.352 Global global DEFINED Lampe1At
2024-03-25 09:07:27.353 dummy Lampe1 off
2024-03-25 09:07:30.448 at Lampe1At Next: 09:07:33
2024-03-25 09:07:30.464 Global global DEFINED Lampe1At
2024-03-25 09:07:30.465 dummy Lampe1 off
2024-03-25 09:07:33.562 at Lampe1At Next: 09:07:36
2024-03-25 09:07:33.583 Global global DEFINED Lampe1At
2024-03-25 09:07:33.584 dummy Lampe1 off
2024-03-25 09:07:34.339 dummy Lampe1Strom off
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle

aktives Mitglied des FHEM e.V. (Technik)

Otto123

#8
Weil Du es anders machst als ich! Ich werte den Schaltbefehl vom Licht aus, Du wertest irgendein Relay aus und schaltest anschließend Dein Licht im gleichen notify aus. Das ist etwas völlig anderes!

ZitatShelly1_Hof:relay0:.off set LEDlight off; ...
So war mein Ansatz
LEDlight:off define LEDat at +00:00:03 IF ([MQTT2_shelly1pmminig3:switch_0_apower] > 2)(sleep 0.1,set LEDlight off)Bedingung ist dabei, dass LEDlight auch den notwendigen Event erzeugt! Das set LEDlight off im "Fehlerfall" triggert auch erneut das notify, daher kommt die Wiederholung bis zum Erfolg.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle

aktives Mitglied des FHEM e.V. (Technik)

Otto123

#9
Kannst Du ja machen, ist aber eine weitere Aufgabe. Falls ich Dich richtig verstehe brauchst Du dafür einfach ein zweites notify mit dieser DEF:
Shelly1_Hof:relay0:.off set LEDlight off
Das erste notify übernimmt die Kopplung der Schaltvorgänge,
Das zweite notify überwacht den Erfolg der Ausschaltung.

Falls das funktioniert kann man überlegen ob es sinnvoll ist das noch zu optimieren / kombinieren. Immer auch unter dem Aspekt, dass Du Deine eingerichtet Schaltlogik in 3 Jahren noch verstehst.  ;D
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle

aktives Mitglied des FHEM e.V. (Technik)

frank

mit unbegrenztem anfunken schlecht oder nicht erreichbarer devices kann man ggf auch das gesamte system lahmlegen.  ;)

warum nicht den funk verbessern?
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html