Schalter nach bestimmter Zeit und Voraussetzung schalten

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
finn
Beiträge: 6
Registriert: 25. Jul 2020 17:20
Answers: 0

Schalter nach bestimmter Zeit und Voraussetzung schalten

Beitrag von finn »

Hallo,
ich brauche mal eure Hilfe, ich komme mit einer Rule nicht weiter.
Und zwar geht es darum, die Garage zu schließen, wenn Sie mehr als 10 minuten geöffnet ist.
Ob die Garage offen oder geschlossen ist, zeigt mir ein Shelly Door window Sensor an, das item ist schon eingerichtet und funktioniert.
An den Garagenmotor soll nun ein Shelly 1, der als Taster konfiguriert, diesen betätigen soll, wenn die Garage länger als 10 Minuten offen ist.
Wie kann ich diese Voraussetzungen in die Rule schreiben?
Die Rule sollte also folgendermaßen aussehen:

Wenn:
-Garage offen, dann -> 10 Minuten Timer starten
-wenn 10 minuten Timer abgelaufen ist, dann -> Shelly xxxxxx on

Vielen Dank schonmal im Voraus,
Mfg Finn

Pepe1907
Beiträge: 167
Registriert: 1. Jun 2020 17:29
Answers: 2

Re: Schalter nach bestimmter Zeit und Voraussetzung schalten

Beitrag von Pepe1907 »

Nutz doch ganz einfach das expire binding dafür.

https://www.openhab.org/addons/bindings/expire1/

Gesendet von meinem SM-G981B mit Tapatalk


Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: Schalter nach bestimmter Zeit und Voraussetzung schalten

Beitrag von udo1toni »

Oder schreibe eine einfache Rule dafür. Das Expire Binding gibt es (noch) nur als OH1-Version, womit es in openHAB3 nicht mehr zur Verfügung stehen wird. Außerdem ist die Zeit mit Expire fix. Mit einem Timer kann man die Zeit auf Wunsch problemlos über ein Number Item beeinflussen.

Nötige Items:
Contact Item oder Switch Item für obere Endlage des Tors, gleiches für untere Endlage des Tors. Notfalls kann auf einne der beiden Kontakte verzichtet werden. Eigentlich braucht man noch zwei weitere Items, welche über die Laufrichtung und Aktivität des Motors Auskunft geben.
Switch Items, über die der Motor getriggert werden kann. Am besten hat man gezielte Fahrtrichtungsitems (also eines für auf, eines für zu, eines für stoppen), aber meist wird es nur einen Tastereingang geben, der wechselweise auf-stop-zu-stop steuert.

Ich gehe hier von einem Item für die Offen Erkennung aus (Contact, TorOffen OPEN = offen) und einem Item zum Ansteuern des Motors (Switch, TorStartStop, ON löst Impuls aus - automatische Rückstellung auf OFF im Shelly)

Die Rule:

Code: Alles auswählen

var Timer tTor = null // globale Variablen zu Beginn der Datei definieren

rule "Tor Automatik"
when
    Item TorOffen changed
then
    tTor?.cancel
    if(TorOffen.state == OPEN)
        tTor = createTimer(now.plusMinutes(10),[|
            TorStartStop.sendCommand(ON)
        ])
end
Ja, das reicht!

Sobald sich der Zustand des Kontaks ändert, wird die Rule getriggert. Zunächst wird ein eventuell laufender Timer gecancelt.
Falls der Torkontakt OPEN meldet, wird ein neuer Timer angelegt, der nach 10 Minuten abläuft. Läuft der Timer ab, so wird der Motor gestartet.

Es gibt verschiedene Unsicherheiten, die jedoch nicht ohne zusätzliche Hardware lösbar sind (sichere Erkennung der Laufrichtung und beider Endlagen). Beispielsweise könnte das Tor zwischen beiden Endlagen positioniert sein - z.B. zum Lüften. Aber in welche Richtung fährt das Tor beim Startbefehl?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

finn
Beiträge: 6
Registriert: 25. Jul 2020 17:20
Answers: 0

Re: Schalter nach bestimmter Zeit und Voraussetzung schalten

Beitrag von finn »

Hi, vielen Dank für deine ausführliche Antwort und die Rule,
es handelt sich bei dem Antrieb um einen ziemlich alten Garagentorantrieb, der einfach per Taster betätigt wird und dann stoppt, wenn die Garage ganz auf bzw. zu ist. Betätigt man den Taster während die Garage auf oder zu geht, hält das Tor einfach an.
Der Sensor befindet sich in der Endlage, in der das Tor geschlossen ist.

So funktioniert es jetzt perfekt, vielen Dank

finn
Beiträge: 6
Registriert: 25. Jul 2020 17:20
Answers: 0

Re: Schalter nach bestimmter Zeit und Voraussetzung schalten

Beitrag von finn »

Hi,
ich bräuchte nochmal eure Hilfe.
Habe das ganze jetzt so gestaltet, dass Alexa einen Hinweis gibt, wenn die Garage zu lange geöffnet ist.
Unbenannt.PNG
Das funktioniert auch wunderbar und super zuverlässig.
Allerdings gibt es ein kleines Problem, mit dem ich nicht weiterkomme.
Und zwar soll der Hinweis ja nur kommen wenn die Garage nachdem der Timer abgelaufen ist, immer noch offen ist.
Im Moment ist es so, dass Alexa den Hinweis auch gibt, wenn die Garage nur kurz offen war, aber inzwischen schon wieder zu ist.
In Zeile 10 habe ich deswegen nochmal die Bedingung (OPEN) hinzugefügt, allerdings hat dies nicht funktioniert.
Vielen Dank schonmal
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Schalter nach bestimmter Zeit und Voraussetzung schalten

Beitrag von peter-pan »

...kann es sein, dass da noch ein paar geschweifte Klammern fehlen ? Nach der If-Bedingung { und vor ]) }
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

finn
Beiträge: 6
Registriert: 25. Jul 2020 17:20
Answers: 0

Re: Schalter nach bestimmter Zeit und Voraussetzung schalten

Beitrag von finn »

Also egal wie ich es versuche mit Klammern, Visual Studio Code zeigt mir immer Fehler an.
Also entweder es passt mit den Klammern oder ich stelle mich wirklich zu blöd an.
müsste mir Visual Studio Code nicht eigentlich anzeigen, wenn im aktuellen Code Klammern fehlen?

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: Schalter nach bestimmter Zeit und Voraussetzung schalten

Beitrag von udo1toni »

Warum hast Du meine Rule nicht einfach übernommen und den Schaltbefehl durch die Alexa-Anweisungen ersetzt?
Deine Rule triggert genau, wenn das Tor öffnet.
Dann prüfst Du, ob der Kontakt offen ist (das ist der Trigger, warum also prüfen?)
Im Timer musst Du wieder prüfen, ob der Kontakt geöffnet ist, das tust Du auch, aber das if wirkt nur auf die nächste Anweisung, da Du den nachfolgenden Block nicht in {} gesetzt hast. Damit wird also die Lautstärkenanpassung nicht vorgenommen, alles andere wird aber ausgeführt.

Es ist aber viel einfacher, wenn Du Dir meine Rule noch mal anschaust:
Die Rule triggert immer, wenn sich der Kontaktzustand ändert, nicht nur, wenn das Tor öffnet.
Weiterhin wird immer der Timer beendet, falls er noch laufen sollte. Insbesondere, wenn das Tor schließt, ist das von Bedeutung, beim Öffnen stellt es aber auch sicher, dass nicht ein marodierender Timer im Hintergrund hängen bleibt.
Nur wenn das Tor öffnet (if... == OPEN) wird ein Timer erstellt, der nach Ablauf eine Aktion ausführt.

Die Rule erledigt also zwei Dinge, zum einen erstellt sie bei Bedarf den Timer, zum zweiten entfernt sie diesen aber auch wieder, noch bevor er abläuft. Dein Code sollte also besser so aussehen:

Code: Alles auswählen

var Timer tTor = null // globale Variablen zu Beginn der Datei definieren

rule "Tor Automatik"
when
    Item Garagensensor_Garagensensor_openclosed changed // Zustand des Tors hat sich geändert (auf offen oder zu)
then
    tTor?.cancel // immer laufenden Timer abbrechen
    if(Garagensensor_Garagensensor_openclosed.state == OPEN) // Falls Tor offen
        tTor = createTimer(now.plusMinutes(1),[| // erzeuge Timer
            AlexaWohnzimmer_LautstRke.sendCommand(100)
            AlexaWohnzimmer_Sprich.sendCommand("Mach die Garage zu")
            AlexaWohnzimmer_LautstRke.sendCommand(50)
        ])
end
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

finn
Beiträge: 6
Registriert: 25. Jul 2020 17:20
Answers: 0

Re: Schalter nach bestimmter Zeit und Voraussetzung schalten

Beitrag von finn »

Vielen Dank für die Antwort.
Jetzt habe ich auch verstanden was mein Fehler war.
Jetzt funktioniert es :D

Antworten