Loop für Alarmanlage (Licht blinken)
-
- Beiträge: 74
- Registriert: 19. Jan 2020 10:39
Loop für Alarmanlage (Licht blinken)
Hallo zusammen,
mit verschiedenen Fenster/Tür-Sensoren und Bewegungsmeldern bin ich aktuell dabei eine Alarmanlage zu bauen. Also unterschiedliche Stati, "Scharf, Nachtmodus, Aus....".
Wenn jetzt im Status "Scharf" zum Beispiel unberechtigt ein Fenster oder eine Tür geöffnet werden passieren verschiedene Aktionen, Push Mail aufs Handy, Licht in verschiedenen Räumen geht an etc.
Ich würde jetzt gerne das zum Beispiel eine Lampe für 5 Minuten blinkt, wahlweise meine Türklingel für 5 Min klingelt.
Die Lampen sind alle via Sonoff Mini gesteuert, die Klingel über einen Sonoff Basic der einfach kurz die 230V meiner Klingel freigibt.
Gibt es eine art "loop" den man für eine bestimmte Zeit ausführen kann innerhalb einer Rule?
mit verschiedenen Fenster/Tür-Sensoren und Bewegungsmeldern bin ich aktuell dabei eine Alarmanlage zu bauen. Also unterschiedliche Stati, "Scharf, Nachtmodus, Aus....".
Wenn jetzt im Status "Scharf" zum Beispiel unberechtigt ein Fenster oder eine Tür geöffnet werden passieren verschiedene Aktionen, Push Mail aufs Handy, Licht in verschiedenen Räumen geht an etc.
Ich würde jetzt gerne das zum Beispiel eine Lampe für 5 Minuten blinkt, wahlweise meine Türklingel für 5 Min klingelt.
Die Lampen sind alle via Sonoff Mini gesteuert, die Klingel über einen Sonoff Basic der einfach kurz die 230V meiner Klingel freigibt.
Gibt es eine art "loop" den man für eine bestimmte Zeit ausführen kann innerhalb einer Rule?
---------------------------------
OpenHAB 3 auf Dell ThinClient unter Debian Bullseye und ConBee II
RaspberryPi 4b 2GB in Din Rail Gehäuse mit PiVCCU3
Allerlei Sonoff, Shelly, NodeMCU, Sensoren, Aqara Krams und und und.
OpenHAB 3 auf Dell ThinClient unter Debian Bullseye und ConBee II
RaspberryPi 4b 2GB in Din Rail Gehäuse mit PiVCCU3
Allerlei Sonoff, Shelly, NodeMCU, Sensoren, Aqara Krams und und und.
- udo1toni
- Beiträge: 15269
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Loop für Alarmanlage (Licht blinken)
Das wäre keine gute Idee (besonders wenn es um 5 Minuten geht)- Es ist ken Problem, etwas einzuschalten und nach 5 Minuten wieder auszuschalten, es ist ebenfalls kein Problem, für 5 Minuten (z.B.) alle 5 Sekunden einen Switch zu toggeln, aber bitte nicht eine Rule 5 Minuten lang laufen lassen.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
-
- Beiträge: 74
- Registriert: 19. Jan 2020 10:39
Re: Loop für Alarmanlage (Licht blinken)
Hallo Udo,
herzlichen Dank für die Infos.
Ein toggeln über 5 minuten alle 5 sekunden wäre grundsätzlich genau die Lösung die ich anstrebe.
Aber wie mache ich das denn konkret das die rule nicht die entsprechenden 5 Minuten läuft. Das verstehe ich noch nicht ganz.
Hast du ggf. ein Beispiel?
besten Dank und liebe Grüße
herzlichen Dank für die Infos.
Ein toggeln über 5 minuten alle 5 sekunden wäre grundsätzlich genau die Lösung die ich anstrebe.
Aber wie mache ich das denn konkret das die rule nicht die entsprechenden 5 Minuten läuft. Das verstehe ich noch nicht ganz.
Hast du ggf. ein Beispiel?
besten Dank und liebe Grüße
---------------------------------
OpenHAB 3 auf Dell ThinClient unter Debian Bullseye und ConBee II
RaspberryPi 4b 2GB in Din Rail Gehäuse mit PiVCCU3
Allerlei Sonoff, Shelly, NodeMCU, Sensoren, Aqara Krams und und und.
OpenHAB 3 auf Dell ThinClient unter Debian Bullseye und ConBee II
RaspberryPi 4b 2GB in Din Rail Gehäuse mit PiVCCU3
Allerlei Sonoff, Shelly, NodeMCU, Sensoren, Aqara Krams und und und.
- udo1toni
- Beiträge: 15269
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Loop für Alarmanlage (Licht blinken)
Na ja, Du benutzt dazu einen Timer, der sich selbst aufruft. z.B. so:
ferrdisch...
Code: Alles auswählen
var Timer tToggle = null // Timer
var Number nCount = 0 // Zähler
val Integer iTimeOn = 5 // Einschaltdauer
val Integer iTimeOff = 5 // Ausschaltdauer
rule "toggle"
when
Item Alarm changed // Alarmitem hat Zustand geändert
then
tToggle?.cancel // Falls Timer läuft, abbrechen
nCount = 60 // und Zähler initialisieren
if(Alarm.state == OFF) { // Falls Alarm OFF
Licht.sendCommand(OFF) // Licht aus
return; // und Rule abbrechen
}
// Ab hier wird der Timer initialisiert
tToggle = createTimer(now,[| // Timer initialisieren und sofoert ausführen
var Integer iSched = 0 // Variable für geplante Dauer
nCount = nCount - 1 // Zähler runterzählen
if((nCount/2).intValue == (nCount/2)) { // gerade oder ungerade? Falls gerade
Licht.sendCommand(OFF) // Licht aus
iSched = iTimeOff // und Timerzeit für Off übernehmen
} else { // falls ungerade
Licht.sendCommand(ON) // Licht an
sched = iTimeOn // und Timerzeit für On übernehmen
}
if(nCount > 0) // Falls Zähler > 0
tToggle.reschedule(now.plusSeconds(iSched)) // Timer erneut in iSched Sekunden ausführen
])
end
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
-
- Beiträge: 74
- Registriert: 19. Jan 2020 10:39
Re: Loop für Alarmanlage (Licht blinken)
Lieber Udo,
vielen Dank für das Beispiel, ich habe es auf meine Bedürfnisse angepasst und es funktioniert SUPER.
Eine Bitte habe ich aber noch,
währen des wild Blinkt und Bimmelt benötige ich die Funktion, diese Situation zu unterbrechen. Und zwar wenn die Alarmanlage ausgeschaltet wird.
Ich nutze verschiedene Stati:
AlamanlageStatus = 3 ist der Modus "Alarmanlage scharf"
AlamanlageStatus = 4 ist der Modus "Alarmanlage scharf Nachtmodus" (Hier sind nicht alle Bewegungsmelder eingebunden)
AlamanlageStatus = 5 ist der Modus "Alarmanlage AUS"
Es soll also der der Timer quasi unterbrochen werden sobald ich während des Blinken den Status "5" setze.
Ein Beispiel wann Alarm ausgelöst wird. Dann wird auch "AlarmAktiv" auf ON gesetzt um dann den "Toggle" zu starten.
Der angepasste Toggle nach Udos Vorlage
vielen Dank für das Beispiel, ich habe es auf meine Bedürfnisse angepasst und es funktioniert SUPER.
Eine Bitte habe ich aber noch,
währen des wild Blinkt und Bimmelt benötige ich die Funktion, diese Situation zu unterbrechen. Und zwar wenn die Alarmanlage ausgeschaltet wird.
Ich nutze verschiedene Stati:
AlamanlageStatus = 3 ist der Modus "Alarmanlage scharf"
AlamanlageStatus = 4 ist der Modus "Alarmanlage scharf Nachtmodus" (Hier sind nicht alle Bewegungsmelder eingebunden)
AlamanlageStatus = 5 ist der Modus "Alarmanlage AUS"
Es soll also der der Timer quasi unterbrochen werden sobald ich während des Blinken den Status "5" setze.
Ein Beispiel wann Alarm ausgelöst wird. Dann wird auch "AlarmAktiv" auf ON gesetzt um dann den "Toggle" zu starten.
Code: Alles auswählen
rule "Alarm Balkontür"
when
Item M_BalkontuerDataOpen changed to OPEN
then
if (AlamanlageStatus.state == "3" || AlamanlageStatus.state == "4"){
AlarmAktiv.sendCommand(ON)
sendBroadcastNotification("!!! ALARM !!! - Balkontür wurde geöffnet!")
sendBroadcastNotification("!!! ALARM !!! - Balkontür wurde geöffnet!")
sendBroadcastNotification("!!! ALARM !!! - Balkontür wurde geöffnet!")
sendBroadcastNotification("!!! ALARM !!! - Balkontür wurde geöffnet!")
M_Text_to_Speech_Vol_1.sendCommand('100')
M_Text_to_Speech_1.sendCommand('ALARM ALARM ALARM - Balkontür wurde unberechtigt geöffnet')
M_Text_to_Speech_Vol_2.sendCommand('100')
M_Text_to_Speech_2.sendCommand('ALARM ALARM ALARM - Balkontür wurde unberechtigt geöffnet')
AlarmAktiv.sendCommand(OFF)
}
end
Der angepasste Toggle nach Udos Vorlage
Code: Alles auswählen
rule "Alarm Toggle"
when
Item AlarmAktiv changed to ON
then
tToggle?.cancel // Falls Timer läuft, abbrechen
nCount = 10 // und Zähler initialisieren
if(AlamanlageStatus.state == "5") { // Falls Alarm OFF
MFlurlichtPOWERSwitch.sendCommand(OFF) // Licht aus
return; // und Rule abbrechen
}
// Ab hier wird der Timer initialisiert
tToggle = createTimer(now,[| // Timer initialisieren und sofoert ausführen
var Integer iSched = 0 // Variable für geplante Dauer
nCount = nCount - 1 // Zähler runterzählen
if((nCount/2).intValue == (nCount/2)) { // gerade oder ungerade? Falls gerade
MFlurlichtPOWERSwitch.sendCommand(OFF) // Licht aus
iSched = iTimeOff // und Timerzeit für Off übernehmen
} else { // falls ungerade
MFlurlichtPOWERSwitch.sendCommand(ON) // Licht an
iSched = iTimeOn // und Timerzeit für On übernehmen
}
if(nCount > 0) // Falls Zähler > 0
tToggle.reschedule(now.plusSeconds(iSched)) // Timer erneut in iSched Sekunden ausführen
])
end
---------------------------------
OpenHAB 3 auf Dell ThinClient unter Debian Bullseye und ConBee II
RaspberryPi 4b 2GB in Din Rail Gehäuse mit PiVCCU3
Allerlei Sonoff, Shelly, NodeMCU, Sensoren, Aqara Krams und und und.
OpenHAB 3 auf Dell ThinClient unter Debian Bullseye und ConBee II
RaspberryPi 4b 2GB in Din Rail Gehäuse mit PiVCCU3
Allerlei Sonoff, Shelly, NodeMCU, Sensoren, Aqara Krams und und und.
-
- Beiträge: 74
- Registriert: 19. Jan 2020 10:39
Re: Loop für Alarmanlage (Licht blinken)
Die Lösung ist eigentlich logisch und einfach
Manchmal sieht man den Wald vor lauter Bäumen nicht


Manchmal sieht man den Wald vor lauter Bäumen nicht

Code: Alles auswählen
rule "Alarm unterbrechen"
when
Item AlamanlageStatus changed to "5"
then
tToggle?.cancel
AlleLampen.sendCommand(ON)
end
---------------------------------
OpenHAB 3 auf Dell ThinClient unter Debian Bullseye und ConBee II
RaspberryPi 4b 2GB in Din Rail Gehäuse mit PiVCCU3
Allerlei Sonoff, Shelly, NodeMCU, Sensoren, Aqara Krams und und und.
OpenHAB 3 auf Dell ThinClient unter Debian Bullseye und ConBee II
RaspberryPi 4b 2GB in Din Rail Gehäuse mit PiVCCU3
Allerlei Sonoff, Shelly, NodeMCU, Sensoren, Aqara Krams und und und.
-
- Beiträge: 175
- Registriert: 13. Dez 2018 17:42
Re: Loop für Alarmanlage (Licht blinken)
Mein Plan ist es beim Auslösen von Türsensoren in der Nacht die Aussenbeleuchtung im Intervall blinken zu lassen.
Leider funktioniert es mit der Rule nicht....ich erhalt die folgende Fehlermeldung
Was mache ich falsch?
Leider funktioniert es mit der Rule nicht....ich erhalt die folgende Fehlermeldung
Code: Alles auswählen
[WARN ] [ore.internal.scheduler.SchedulerImpl] - Scheduled job failed and stopped
- udo1toni
- Beiträge: 15269
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Loop für Alarmanlage (Licht blinken)
Mit DER Rule? wie sieht Deine Rule aus?
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
-
- Beiträge: 175
- Registriert: 13. Dez 2018 17:42
Re: Loop für Alarmanlage (Licht blinken)
Ich habe im Grunde deine Rule aus diesem Thema genommen und nur ein wenig angepasst.
Getriggert wird diese wenn ein Item der Gruppe Kontaktsensoren auslöst gleichzeitig das Dummy Item "Alarmanlage" aktiv gesetzt ist.
Derzeit habe ich den Code nur ein Testrule drin
Getriggert wird diese wenn ein Item der Gruppe Kontaktsensoren auslöst gleichzeitig das Dummy Item "Alarmanlage" aktiv gesetzt ist.
Derzeit habe ich den Code nur ein Testrule drin
Code: Alles auswählen
var Timer tToggle = null // Timer
var Number nCount = 0 // Zähler
val Integer iTimeOn = 5 // Einschaltdauer
val Integer iTimeOff = 5 // Ausschaltdauer
var Timer timer = null
rule "TEST"
when
Item test_switch changed
then
tToggle?.cancel // Falls Timer läuft, abbrechen
nCount = 60 // und Zähler initialisieren
// Ab hier wird der Timer initialisiert
tToggle = createTimer(now,[| // Timer initialisieren und sofoert ausführen
var Integer iSched = 0 // Variable für geplante Dauer
nCount = nCount - 1 // Zähler runterzählen
if((nCount/2).intValue == (nCount/2))
{
gshelly_dachboden_vorne_switch.sendCommand(OFF) // Licht aus
gshelly_dachboden_hinten_switch.sendCommand(OFF) // Licht aus
iSched = iTimeOff // und Timerzeit für Off übernehmen
}
else
{ // falls ungerade
gshelly_dachboden_vorne_switch.sendCommand(ON) // Licht an
gshelly_dachboden_hinten_switch.sendCommand(ON) // Licht an
isched = iTimeOn // und Timerzeit für On übernehmen
}
if(nCount > 0) // Falls Zähler > 0
tToggle.reschedule(now.plusSeconds(iSched)) // Timer erneut in iSched Sekunden ausführen
])
end
- udo1toni
- Beiträge: 15269
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Loop für Alarmanlage (Licht blinken)
Also, von der Formatierung abgesehen sieht die Rule erst mal gut aus. Es kann sein, dass der erste Timer zu schnell gestartet wird. ersetze bitte
(now, durch (now.plusMillis(10),
Die Rule läuft in openHAB2, in openHAB3 kann es sein, dass man ein paar Anpassungen vornehmen muss. Insbesondere gibt es dort kein .plusMillis(), stattdessen muss man mit plusNanos() arbeiten, was dann also now.plusNanos(10000000) ergibt. plusNanos() steht nur unter openHAB3 zur Verfügung.
(now, durch (now.plusMillis(10),
Die Rule läuft in openHAB2, in openHAB3 kann es sein, dass man ein paar Anpassungen vornehmen muss. Insbesondere gibt es dort kein .plusMillis(), stattdessen muss man mit plusNanos() arbeiten, was dann also now.plusNanos(10000000) ergibt. plusNanos() steht nur unter openHAB3 zur Verfügung.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet