Schalter nach bestimmter Zeit und Voraussetzung schalten
-
- Beiträge: 6
- Registriert: 25. Jul 2020 17:20
Schalter nach bestimmter Zeit und Voraussetzung schalten
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
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
-
- Beiträge: 167
- Registriert: 1. Jun 2020 17:29
Re: Schalter nach bestimmter Zeit und Voraussetzung schalten
Nutz doch ganz einfach das expire binding dafür.
https://www.openhab.org/addons/bindings/expire1/
Gesendet von meinem SM-G981B mit Tapatalk
https://www.openhab.org/addons/bindings/expire1/
Gesendet von meinem SM-G981B mit Tapatalk
- udo1toni
- Beiträge: 15249
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Schalter nach bestimmter Zeit und Voraussetzung schalten
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:
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?
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
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
-
- Beiträge: 6
- Registriert: 25. Jul 2020 17:20
Re: Schalter nach bestimmter Zeit und Voraussetzung schalten
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
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
-
- Beiträge: 6
- Registriert: 25. Jul 2020 17:20
Re: Schalter nach bestimmter Zeit und Voraussetzung schalten
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.
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
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.
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.
- peter-pan
- Beiträge: 2758
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Schalter nach bestimmter Zeit und Voraussetzung schalten
...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
-
- Beiträge: 6
- Registriert: 25. Jul 2020 17:20
Re: Schalter nach bestimmter Zeit und Voraussetzung schalten
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?
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?
- udo1toni
- Beiträge: 15249
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Schalter nach bestimmter Zeit und Voraussetzung schalten
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:
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
-
- Beiträge: 6
- Registriert: 25. Jul 2020 17:20
Re: Schalter nach bestimmter Zeit und Voraussetzung schalten
Vielen Dank für die Antwort.
Jetzt habe ich auch verstanden was mein Fehler war.
Jetzt funktioniert es
Jetzt habe ich auch verstanden was mein Fehler war.
Jetzt funktioniert es
