Einfache Regel mit Dummy Schalter (Abwesenheit Licht Simulation)
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Einfache Regel mit Dummy Schalter (Abwesenheit Licht Simulation)
Genau das ist der Ansatz. Die 14 Tage sind übrigens nicht fix, das ist nur Der Wert, der damals im Beispielcode verwendet wurde. Die Seite im Wiki: https://github.com/openhab/openhab1-add ... -Scheduler
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
-
- Beiträge: 27
- Registriert: 20. Dez 2019 07:17
Re: Einfache Regel mit Dummy Schalter (Abwesenheit Licht Simulation)
Hallo zusammen,
danke für euren Input.
ich hab mir das nun angesehen und finde das für mich nicht passend.
Im Prinzip möchte ich einfach 1 Licht jede Stunde für ca. 5 min Schalten lassen.
Ich werde mir mal eine Rule zusammenstellen und bei fragen an euch wenden
mfg
Pascal
danke für euren Input.
ich hab mir das nun angesehen und finde das für mich nicht passend.
Im Prinzip möchte ich einfach 1 Licht jede Stunde für ca. 5 min Schalten lassen.
Ich werde mir mal eine Rule zusammenstellen und bei fragen an euch wenden

mfg
Pascal
-
- Beiträge: 27
- Registriert: 20. Dez 2019 07:17
Re: Einfache Regel mit Dummy Schalter (Abwesenheit Licht Simulation)
Hallo zusammen,
so nun habe ich mir einen Code zusammengestellt der für meine Bedürfnisse ausreicht.
Wie würde ich den Code nun ausbauen müssen damit diese Rule dann jede Stunde abgearbeitet wird?
Danke
mfg
Pascal
so nun habe ich mir einen Code zusammengestellt der für meine Bedürfnisse ausreicht.
Code: Alles auswählen
var Timer timer = null //Zeiger auf den Timer
rule "Anwesenheit Simulation"
when
item Test_Switch received command //Befehl empfangen
then
timer?.cancel //lösche Timer, falls einer existiert
if(receivedCommand == ON) //Kommando AN
timer = createTimer(now.plusMinutes(10), [ | //Setze Timer auf 10 Minuten
Licht_EG_Flur.sendCommand(ON) //Licht Schaltet sich nach 10 minuten ein
])
else
timer?.cancel //lösche Timer, falls einer existiert
timer = createTimer(now.plusMinutes(5), [ | //Setze Timer auf 5 Minuten
Licht_EG_Flur.sendCommand(OFF) //Licht Schaltet sich nach 5 minuten Aus
])
end
Danke

mfg
Pascal
- peter-pan
- Beiträge: 2768
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Einfache Regel mit Dummy Schalter (Abwesenheit Licht Simulation)
Schau mal hier. Da kannst du dir deinen Cron-Trigger selbst zusammenstellen.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian
-
- Beiträge: 27
- Registriert: 20. Dez 2019 07:17
Re: Einfache Regel mit Dummy Schalter (Abwesenheit Licht Simulation)
Hallo peter-pan,
danke für deine Antwort.
Das bedeutet ich muss nur im code einen Time Cron einfügen?
Der löst dann immer nach einer Stunde aus?
mfg
Pascal
danke für deine Antwort.
Das bedeutet ich muss nur im code einen Time Cron einfügen?
Der löst dann immer nach einer Stunde aus?
Code: Alles auswählen
item Test_Switch received command
Time cron "0 0 * ? * * *"
Pascal
- peter-pan
- Beiträge: 2768
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Einfache Regel mit Dummy Schalter (Abwesenheit Licht Simulation)
So sehe ich dass. Das hat es bei mir auch angezeigt. Ein Beispiel von Udo ist ja auch dabei. Deine Trigger sind jetzt Cron und der Test-Schalter. Bitte achte auf die Schreibweise(Gross-/Klein):
oder besser (falls der Schalter nicht bei ON und OFF schalten soll)
Code: Alles auswählen
Item Test_Switch received command or
Time cron "0 0 * ? * * *"
Code: Alles auswählen
Item Test_Switch received command ON or
Time cron "0 0 * ? * * *"
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Einfache Regel mit Dummy Schalter (Abwesenheit Licht Simulation)
Deine Rule ist Quatsch
Die Rule schaltet abhängig vom gesendeten Kommando entweder nach 10 Minuten das Licht ein oder nach 5 Minuten das Licht aus.
Was Du aber haben willst, ist eine Rule, die das Licht nach einer gewissen Zeit ein- und dann nach einer weiteren Zeitspanne wieder ausschaltet.
das sieht dann so aus:
Die Rule startet den Timer, der das Licht einschaltet. Wenn der Timer das Licht einschaltet, plant er "sich selbst" erneut ein. Dann wird das Licht wieder ausgeschaltet.
In dieser Form kannst Du nun die Integer Werte 10 bzw. 5 auch mit Zufallswerten füllen, solange diese als Integer Werte zur Verfügung stehen. Mehr noch, Du kannst im "Ausschalt-Zweig" des Timers ebenfalls ein reschedule einbauen, so dass sich der Timer immer wieder neu startet und das Licht jeweils toggelt. Also so:
Nun dient der Schalter als Start und Stop für die Zufallsbeleuchtung. Wird ein Befehl empfangen, wird ein laufender Timer gelöscht. Nur falls der Befehl ON empfangen wurde, wird der Timer angelegt und startet nach einer zufälligen Anzahl Minuten (0 bis 10) den Timer, das das Licht nun einachaltet, falls es aus war aund ausschaltet, falls es an war. Beim Einschalten wird der Timer mit 2 bis 7 Minuten neu geplant, beim Ausschalten wird der Timer mit 55 bis 65 Miunten neu geplant.
Du kannst die Rule auch abwandeln und per Timer steuern, dann allerdings gibt es kein receivedCommand, so dass Du nun zwei Rules brauchst, die eine startet den Timer, die andere löscht ihn nur (nicht vergessen, dass das Licht zu diesem Zeitpunkt eventuell auch an sein könnte, also genau wie in der 2. Rule das Licht mit auschalten...)

Die Rule schaltet abhängig vom gesendeten Kommando entweder nach 10 Minuten das Licht ein oder nach 5 Minuten das Licht aus.
Was Du aber haben willst, ist eine Rule, die das Licht nach einer gewissen Zeit ein- und dann nach einer weiteren Zeitspanne wieder ausschaltet.
das sieht dann so aus:
Code: Alles auswählen
var Timer tLicht = null // Zeiger auf den Timer (mit sinnvollem Namen!)
rule "Anwesenheit Simulation"
when
Item Test_Switch received command // Befehl empfangen
then
tLicht?.cancel // lösche Timer, falls einer existiert
tLicht = createTimer(now.plusMinutes(10), [ | // Setze Timer auf 10 Minuten
if(Licht_EG_Flur.state != ON) { // Falls Licht nicht an
Licht_EG_Flur.sendCommand(ON) // einschalten
tLicht.reschedule(now.plusMinutes(5)) // und Timer erneut aufrufen
} else { // Falls Licht an
Licht_EG_Flur.sendCommand(OFF) // ausschalten
}
])
end
In dieser Form kannst Du nun die Integer Werte 10 bzw. 5 auch mit Zufallswerten füllen, solange diese als Integer Werte zur Verfügung stehen. Mehr noch, Du kannst im "Ausschalt-Zweig" des Timers ebenfalls ein reschedule einbauen, so dass sich der Timer immer wieder neu startet und das Licht jeweils toggelt. Also so:
Code: Alles auswählen
var Timer tLicht = null // Zeiger auf den Timer (mit sinnvollem Namen!)
rule "Anwesenheit Simulation"
when
Item Test_Switch received command // Befehl empfangen
then
tLicht?.cancel // lösche Timer, falls einer existiert
if(receivedCommand == ON) // Nur falls Befehl ON war
tLicht = createTimer(now.plusMinutes(Math::random * 10).intValue, [ | // Setze Timer auf 10 Minuten
if(Licht_EG_Flur.state != ON) { // Falls Licht nicht an
Licht_EG_Flur.sendCommand(ON) // einschalten
tLicht.reschedule(now.plusMinutes(2+(Math::random * 5).intValue)) // und Timer erneut aufrufen
} else { // Falls Licht an
Licht_EG_Flur.sendCommand(OFF) // ausschalten
tLicht.reschedule(now.plusMinutes(55+(Math::random * 10).intValue)) // und Timer erneut aufrufen
}
])
else
Licht_EG_Flur.sendCommand(OFF) // ausschalten
end
Du kannst die Rule auch abwandeln und per Timer steuern, dann allerdings gibt es kein receivedCommand, so dass Du nun zwei Rules brauchst, die eine startet den Timer, die andere löscht ihn nur (nicht vergessen, dass das Licht zu diesem Zeitpunkt eventuell auch an sein könnte, also genau wie in der 2. Rule das Licht mit auschalten...)
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
-
- Beiträge: 27
- Registriert: 20. Dez 2019 07:17
Re: Einfache Regel mit Dummy Schalter (Abwesenheit Licht Simulation)
Hallo udo1toni,
wow super danke die Rule sieht Perfekt aus.
Schön langsam verstehe ich den Code.
Nur irgendwo muss sich ein Fehler eingeschlichen haben ich bekomme ein paar Fehler:
item = Item den habe ich schon gefunden.
Danke vorab für eure Unterstützung.
mfg
Pascal
wow super danke die Rule sieht Perfekt aus.
Schön langsam verstehe ich den Code.
Nur irgendwo muss sich ein Fehler eingeschlichen haben ich bekomme ein paar Fehler:
item = Item den habe ich schon gefunden.
Code: Alles auswählen
The method or field timer is undefined
Invalid number of arguments. The method createTimer(AbstractInstant, Procedure0) is not applicable for the arguments (Object)
Type mismatch: cannot convert from double to int
The method or field intValue is undefined for the type DateTime
mismatched input ',' expecting 'end'
mfg
Pascal
- peter-pan
- Beiträge: 2768
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Einfache Regel mit Dummy Schalter (Abwesenheit Licht Simulation)
Ohne es gross geprüft zu haben. Verwende anstelle intValue -> longValue. Kann es sein, dass dein Item "Licht_EG_Flur" ein DateTime-Item ist ?. Ausserdem scheint die Syntax-Notation nicht ganz in Ordnung zu sein. Was mit dem Timer nicht in Ordnung ist, kann dir bestimmt Udo sagen.
Poste am besten nochmal deine Regel, wie sie jetzt aussieht.
Das mit der Gross-Kleinschreibung hast du ja schon gefunden (s.o.).
Poste am besten nochmal deine Regel, wie sie jetzt aussieht.
Das mit der Gross-Kleinschreibung hast du ja schon gefunden (s.o.).
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian
-
- Beiträge: 424
- Registriert: 6. Mär 2019 11:19
Re: Einfache Regel mit Dummy Schalter (Abwesenheit Licht Simulation)
Der Timer in dem Abschnitt ist falsch
Mach daraus
Code: Alles auswählen
var Timer tLicht = null // Zeiger auf den Timer (mit sinnvollem Namen!)
rule "Anwesenheit Simulation"
when
item Test_Switch received command // Befehl empfangen
then
timer?.cancel
Code: Alles auswählen
var Timer tLicht = null // Zeiger auf den Timer (mit sinnvollem Namen!)
rule "Anwesenheit Simulation"
when
item Test_Switch received command // Befehl empfangen
then
tLicht?.cancel