Fragen bezüglich on-for-timer und zeitversetztes auswerten eines Readings

Begonnen von thinman, 22 November 2021, 18:18:33

Vorheriges Thema - Nächstes Thema

thinman

Hi,

ich brauchte Hilfe bei eine etwas komplizierteren Steuerungsproblem.
Ich würde gerne eine Steckdose sowohl durch Zeit- als auch durch eine Bewegungsmelder Steuern.
Die Steckdose soll für 15 Minuten angehen wenn es eine Bewegung gibt. Nach Ablauf der 15 Minuten soll es für 10 Minuten aus sein.
Wenn in diese 10 Minuten eine Bewegung gab, soll es wieder für 15 Minuten angehen. Wenn es keine Bewegung in der Pause gab, dann natürlich erst wieder einschalten wenn es neue Bewegung gibt.

Ich könnte bei Bewegung mit set on-for-timer die Steckdose direkt und eine zweite Dummy mit set on-for-timer für (25 Minuten) schalten.
Am Ende der Pause (Ablauf der 25 Minuten) müsste ich schauen ob es in den letzten 10 Minuten der Bewegungsmelder angeschlagen hat und falls ja, das Spiel von Vorne anfangen.

Was ich bisher nicht herausgefunden habe ist, ob und wie ist es möglich etwas auszulösen wenn ein Timer abläuft und wie könnte ich die Bewegungen die in der Pause passieren "speichern" und nach Ablauf der Pause auswerten. Geht sowas nur mit Perl Scripting?
Habt Ihr eventuell ein paar Tipps wie ich dieses Problem angehen soll um möglichst mit eine elegante Lösung es zu lösen?

Grüße,
Steve

betateilchen

Ich habe noch nicht verstanden, was Du nach den 15 Minuten wirklich willst.

Ablauf:


  • Bewegungsmelder schaltet Steckdose für 15 Minuten an
  • nach 15 Minuten geht die Steckdose aus
  • In den nun folgenden 10 Minuten (Minute 16-25) soll "nur" festgestellt werden, ob der Bewegungsmelder etwas registriert, aber dann erst nach Minute 25 wieder die Steckdose angehen
  • Wenn in Minute 16-25 nichts registriert wird, geht es wieder mit 1. los

Soweit richtig?


--
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

thinman

Ja, genau.
Es soll eine Heitzmatte geschaltet werden, welche nach 15 Minuten Betrieb, 10 Minuten Pause einlegen soll.
(Bitte jetzt nicht lachen...  ;D)
- Falls der Kater nicht in seinen Winterquartier ist (keine Bewegung) soll es aus bleiben.
- Wenn er reinkommt (Bewegungsmelder) soll es 15 Minuten angehen. Dann notgedrungen, 10 Minuten pause einlegen.
Hat sich der Kater in diese 10 Minuten bewegt, soll es wieder für 15 Minuten eingeschaltet werden.
(Man könnte hier natürlich einfach darauf warten, dass er nach der 10 Minuten irgendwann wieder sich bewegt, aber das wäre zu einfach...   :D.
Außerdem geht er dann eventuell raus weil er im Haus dann auch friert.)

Ist ein ziemlich lächerliche Setup, ich weiß aber es ist gleichzeitig auch eine (für mich) interessante Aufgabe. Allerdings gibt es einige Methoden die ich in FHEM  noch nicht kenne. Z.B. was passiert wenn eine Timer abläuft.

betateilchen

Wenn ich meinen Großeltern irgendwann erzählt hätte, dass ich einer Katze eine Heizdecke hinlege, damit sie nicht friert, hätten sie mich wahrscheinlich zusammen mit der Katze erschlagen und im Misthaufen versenkt.

Zitat von: thinman am 22 November 2021, 19:32:22
Ist ein ziemlich lächerliche Setup,

Nein, das ist nicht lächerlich. Das ist widernatürlich.

Zitat von: thinman am 22 November 2021, 19:32:22
Allerdings gibt es einige Methoden die ich in FHEM  noch nicht kenne. Z.B. was passiert wenn eine Timer abläuft.

Das hängt davon ab, von welchem Typ der Bewegungsmelder und die Steckdosen sind. Bei Homematic könnte man die Aufgabe einfach durch Setzen entsprechender Register in den Geräten selbst lösen.

Was passiert, wenn ein Timer abläuft: im einfachsten Fall geht die Steckdose aus, was einen entsprechenden event in FHEM triggert, anhand dessen man eine weitere Aktion nach den 15 Minuten "an" starten kann. Dabei wäre zum Beispiel ein watchdog-device ein guter Ansatz sein.

Zitat von: thinman am 22 November 2021, 18:18:33
Ich könnte bei Bewegung mit set on-for-timer die Steckdose direkt und eine zweite Dummy mit set on-for-timer für (25 Minuten) schalten.

Ich behaupte, 99% aller in FHEM irgendwo verwendeten dummy-devices sind überflüssig.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

thinman

Danke für den Tipp mit der Watchdog!

- Es ist eine kleine Streuner die zwar gerne in unsere Nähe ist aber sehr scheu ist. (Hat wahnsinnige Angst von Händen, wahrscheinlich wegen eine unsanfte Zwangskastration.) Die örtliche Tierschutz hatte die Empfehlung eine warme Unterkunft für die kleine zu schaffen falls es draußen tiefe Minus grade herrschen. Ich bastle gerne, also warum nicht.

- Der Bewegungsmelder ist ein Fibaro Motion und die Steckdose ist auch eine Zwave Gerät.

- Ich lese mich in die Watchdog Funktion ein. Hab es bisher nicht gekannt.

- Ist es keine gute Idee eine Dummy gleichzeigt mit der Auslösung der Bewegungsmelder zu starten (15+10 Minuten) und beim Ablauf (Watchdog) checken ob in der Pause eine Bewegung stattgefunden hat?

- Was wäre eine gute Methode für die Bewegung in der Pause? Eine Notify bei dem ich checke ob der Steckdose an ist (erste 15 Minuten) / ob es aus ist aber der Pausen-Timer noch läuft (dann Dummy setzen und beim Ablauf der Pausen-Timer auslesen)? Kann ich es irgendwie sehen ob eine Timer noch läuft?

betateilchen

#5
Naja, Du musst erstmal Deine Anforderung in eine einfache logische Bedingung formulieren. Zum Beispiel:

"Ich möchte die Steckdose bei einer Bewegung nur dann für 15 Minuten einschalten, wenn sie vorher mindestens 10 Minuten aus war."

Da stecken drei Bedingungen drin:


  • Bewegung
  • Steckdose muss "aus" sein
  • das "aus" muss seit 10 Minuten bestehen

Daraus kannst Du vermutlich mit einem einzigen notify arbeiten:

defmod n_Katzengrill notify <bewegungsmelder>:<motion> {if(Readingsval(Steckdose) eq 'off' and ReadingsAge(Steckdose) >= 600)) {set Steckdose on-for-timer 900}}

Achtung - der Code ist nur schematisch dargestellt und wird nicht per copy&paste funktionieren.
Aber das Schema sollte klar werden.

Die weitere Bedingung, dass man den Bewegungsmelder während der 10 Minuten Pause überwacht, kann man auf ähnliche Weise mit einbringen.


--
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

thinman

Klasse, vielen Dank!

Ich muss lernen einfacher bzw. logischer zu denken. Die Aufgabenstellung so wie Du das geschrieben hast macht es deutlich einfacher.
Das Code in der Äußeren {} ist Perl Code, oder?
ReadingsAge kannte ich noch nicht aber bei der Suche danach im FHEM Referenz habe ich die Sektion PERL Modus gefunden mit eine menge Erklärungen und beispiele.
Das werde ich morgen durchlesen und mit meine Devices herumprobieren.
Genau so ein Denkanstoß brauchte ich! Danke!  :)

betateilchen

Zitat von: thinman am 22 November 2021, 22:17:54
Ich muss lernen einfacher bzw. logischer zu denken.

Mit dieser Aufgabe bist Du hier im Forum nicht alleine.
Viele Anwender, die hier im Forum mit irgendwelchen "Problemen" auftreten, können ihre Aufgabenstellung gar nicht einfach ausdrücken.
Es wird in den allermeisten Fällen viel zu kompliziert gedacht.


-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!