Schalten nach abgelaufenen Zeit

Begonnen von Superposchi, 02 Juni 2023, 11:11:13

Vorheriges Thema - Nächstes Thema

Superposchi

Hallo, ich wollte fragen ob es eine Möglichkeit gibt nach einer gewissen Zeit einer Readings-Änderung zu reagieren.

Hintergrund:
Ich habe einen Brunnen auf dem Balkon, der bei geöffneter Tür eingeschaltet wird. Damit das Wasser nicht abstehen kann, soll der Brunnen  auch eingeschaltet werden wenn die Balkontür länger als 24h nicht geöffnet wird - z.b. bei Abwesenheit.

Mein Ansatz wäre das Auslesen des Datums vom state-reading, aber zum einen fällt mir der Perl-Befehl nicht ein, zum Anderen darf das Alter nur bei Readingsänderung gelten, nicht bei Readingsaktualisierung.

PotatoFritz

Ich gehe mal davon aus, dass der Brunnen regelmäig einen Status schickt.
Kannst Du nicht einfach beim Schalten des Brunnens ein Reading 'Schalte_Brunnen' setzen und diesen dann per ReadingsAge lesen?

Superposchi

Der Brunnen wird über einen Zwischenstecker von AVM geschaltet, also ja, er sendet regelmäßig.
Du meinst also mit Setreading ein zusätzliches Reading manuell setzen und bei dem das Alter auslesen?

Wie müsste denn die Auswertung mit ReadingsAge in einem DOIF aussehen?
([ReadingsAge("Device","Reading",0)] > datum)
Wäre die Syntex so korrekt?
Wie müsste das Datum für den Platzhalter datum aussehen?

PotatoFritz

Ja, genau so meine ich dies.
Mit dem DOIF habe ich mich nie richtig beschäftigt.
Ich selbst würde dies über ein notify auf den regelmäßig gesendeten Status machen und nativ im notify das Alter des gesetzten Readings lesen.
Das Alter des Readings wird in Sekunden ermittelt.
Also if (ReadingsAge("Device","Reading",0) > 86400) ....


Superposchi

Ich persönlich nutze lieber DOIF, da man dort praktisch alle Zustände für eine Schaltung in einem Device zusammen hat und somit überschneidungen verhindern kann. Aber jedem natürlich das seine.

Wie meinst du das mit dem regelmäßig gesendeten Status - das verwirrt mich jetzt. Das Alter davon wird doch bei jeder Statusmeldung aktualisiert, also nicht

PotatoFritz

Wenn ich Dich richtig verstehe, dann sendet der AVM-Zwischenstecker doch regelmäßig einen Status-Update.
Dieser Status-Update beeinflusst das 'state' Reading bzw. den Timestamp dieses Readings, korrekt?
Damit kannst Du das Alter von 'state' nicht nutzen.

Ergo setzt Du beim Schalten ein User-Reading "Schalte_Brunnen".
Deine Balkontür geht auf, Du Schaltest den Brunnen ein und setzt das User-Reading "Schalte_Brunnen".
Deine Balkontür geht zu, Du Schaltest den Brunnen aus und setzt wieder das User-Reading "Schalte_Brunnen".
Nach jedem Schalten hat das User-Reading "Schalte_Brunnen" einen Timestamp.

Nun bist Du 24 Stunden nicht auf dem Balkon.
Dann kommt doch trotzdem vom AVM-Stecker ein Status-Update.
Und genau bei diesem Status-Update (state) würde ich nun das Alter des User-Readings "Schalte_Brunnen" abfragen.
Wenn das Alter dann > 86400 Sekunden ist, dann schaltest Du einfach den Brunnen wieder für einige Minuten.




Superposchi

So hatte ich es auch verstanden.
Mich hatte nur dein Satz
ZitatIch selbst würde dies über ein notify auf den regelmäßig gesendeten Status machen und nativ im notify das Alter des gesetzten Readings lesen.
verwirrt, weil er so klang als wenn du jetzt doch das Alter des state-Readings zum Vergleich meinst. War ein Missverständnis meinerseits.