[Gelöst] Rule für Bewegungsmelder Schaltung ?

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
KellerK1nd
Beiträge: 432
Registriert: 17. Jun 2019 16:45
Answers: 1
Wohnort: Griesheim

Re: [Gelöst] Rule für Bewegungsmelder Schaltung ?

Beitrag von KellerK1nd »

EMaster hat geschrieben: 2. Feb 2021 16:19
KellerK1nd hat geschrieben: 2. Feb 2021 13:55 Na deine Bedingung Dunkel greift auf die ganze Rule! Normal brauchst du doch die Bedingung nur zum Einschalten.
Ich bräuchte eigentlich die Bedingung "Dunkel" gar nicht, da es im Kleiderschrank immer dunkel ist. :-)
Ich habe nur das Beispiel von Udo übernommen und angepasst.
Mit Dunkel:

Code: Alles auswählen

var Timer tBewegung = null

rule "Bewegungsmelder Licht Kleiderschrank mit Timeout"
when
    Item Huemotionsensor1_Bewegung changed
then
        tBewegung?.cancel
        if(Huemotionsensor1_Bewegung.state == ON && deConz_Tageslichtsensor_Lightlevel.state.toString == "Dark")
            if(Swi_Kleiderschrank.state != ON) 
                Swi_Kleiderschrank.sendCommand(ON)
        else
            tBewegung = createTimer(now.plusSeconds(20), [ |
                if(Swi_Kleiderschrank.state != OFF)
                    Swi_Kleiderschrank.sendCommand(OFF)
                tBewegung = null
            ])
end
und ohne Dunkel:

Code: Alles auswählen

var Timer tBewegung = null

rule "Bewegungsmelder Licht Kleiderschrank mit Timeout"
when
    Item Huemotionsensor1_Bewegung changed
then
        tBewegung?.cancel
        if(Huemotionsensor1_Bewegung.state == ON)
            if(Swi_Kleiderschrank.state != ON) 
                Swi_Kleiderschrank.sendCommand(ON)
        else
            tBewegung = createTimer(now.plusSeconds(20), [ |
                if(Swi_Kleiderschrank.state != OFF)
                    Swi_Kleiderschrank.sendCommand(OFF)
                tBewegung = null
            ])
end
Betriebssystem: Proxmox 7.3-4
openHAB Container: debian11 LXC
openHAB Version: 3.4
Hardware: HomeServer Eigenbau mit einem Intel i5 9600K
Smarthome-Equipment:
- Rasperrymatic
- deConz
- HUE
- Shellys
- Mosquitto
- AVM Fritz!Box

EMaster
Beiträge: 107
Registriert: 13. Dez 2018 21:02
Answers: 2

Re: [Gelöst] Rule für Bewegungsmelder Schaltung ?

Beitrag von EMaster »

Danke aber leider besteht immer noch das gleiche Problem. Das Licht schaltet EIN aber nicht mehr AUS. :-(
(Ich habe zunächst die Rule ohne "Dunkel" probiert.)

Kann ich das als optional ansehen?

Code: Alles auswählen

 && deConz_Tageslichtsensor_Lightlevel.state.toString == "Dark"
&& bedeutet ja UND, oder?

Danke
openHAB 4.3.4 im Docker@Synology

Benutzeravatar
KellerK1nd
Beiträge: 432
Registriert: 17. Jun 2019 16:45
Answers: 1
Wohnort: Griesheim

Re: [Gelöst] Rule für Bewegungsmelder Schaltung ?

Beitrag von KellerK1nd »

Und dein "Huemotionsensor1_Bewegung" sendet definitiv ein OFF?

funktioniert diese Version?:

Code: Alles auswählen


var Timer tBewegung = null

rule "Bewegungsmelder Licht Kleiderschrank mit Timeout"
when
    Item Huemotionsensor1_Bewegung changed
then
    switch (newState) {
        case ON :{
        	tBewegung?.cancel
        	if(Swi_Kleiderschrank.state != ON){
               		Swi_Kleiderschrank.sendCommand(ON)
               	}
        }
        case OFF :{
            tBewegung = createTimer(now.plusSeconds(20), [ |
                if(Swi_Kleiderschrank.state != OFF){
                    Swi_Kleiderschrank.sendCommand(OFF)
                }
                tBewegung = null
            ])
	    }
    }
end

Betriebssystem: Proxmox 7.3-4
openHAB Container: debian11 LXC
openHAB Version: 3.4
Hardware: HomeServer Eigenbau mit einem Intel i5 9600K
Smarthome-Equipment:
- Rasperrymatic
- deConz
- HUE
- Shellys
- Mosquitto
- AVM Fritz!Box

EMaster
Beiträge: 107
Registriert: 13. Dez 2018 21:02
Answers: 2

Re: [Gelöst] Rule für Bewegungsmelder Schaltung ?

Beitrag von EMaster »

KellerK1nd hat geschrieben: 2. Feb 2021 18:42 Und dein "Huemotionsensor1_Bewegung" sendet definitiv ein OFF?

funktioniert diese Version?:

Code: Alles auswählen


var Timer tBewegung = null

rule "Bewegungsmelder Licht Kleiderschrank mit Timeout"
when
    Item Huemotionsensor1_Bewegung changed
then
    switch (newState) {
        case ON :{
        	tBewegung?.cancel
        	if(Swi_Kleiderschrank.state != ON){
               		Swi_Kleiderschrank.sendCommand(ON)
               	}
        }
        case OFF :{
            tBewegung = createTimer(now.plusSeconds(20), [ |
                if(Swi_Kleiderschrank.state != OFF){
                    Swi_Kleiderschrank.sendCommand(OFF)
                }
                tBewegung = null
            ])
	    }
    }
end

Das funktioniert!!! Vielen herzlichen Dank!!!
Wenn ich jetzt noch verstehen würde, was da wie und warum verschachtelt wurde... :!: :?:
Wo müsste denn jetzt bei dieser Version noch die Abfrage "Dunkel" rein?

Hier mal noch ein Auszug aus dem Log bzgl. Deiner Frage, ob ein OFF gesendet wird.

Code: Alles auswählen

2021-02-02 20:31:01.010 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Huemotionsensor1_Bewegung' changed from OFF to ON
2021-02-02 20:31:19.490 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Huemotionsensor1_Bewegung' changed from ON to OFF
2021-02-02 20:31:39.492 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'Swi_Kleiderschrank' received command OFF
2021-02-02 20:31:39.494 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'Swi_Kleiderschrank' predicted to become OFF
2021-02-02 20:31:39.495 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Swi_Kleiderschrank' changed from ON to OFF
openHAB 4.3.4 im Docker@Synology

Benutzeravatar
KellerK1nd
Beiträge: 432
Registriert: 17. Jun 2019 16:45
Answers: 1
Wohnort: Griesheim

Re: [Gelöst] Rule für Bewegungsmelder Schaltung ?

Beitrag von KellerK1nd »

EMaster hat geschrieben: 2. Feb 2021 20:38
KellerK1nd hat geschrieben: 2. Feb 2021 18:42 Und dein "Huemotionsensor1_Bewegung" sendet definitiv ein OFF?

funktioniert diese Version?:

Code: Alles auswählen


var Timer tBewegung = null

rule "Bewegungsmelder Licht Kleiderschrank mit Timeout"
when
    Item Huemotionsensor1_Bewegung changed
then
    switch (newState) {
        case ON :{
        	tBewegung?.cancel
        	if(Swi_Kleiderschrank.state != ON){
               		Swi_Kleiderschrank.sendCommand(ON)
               	}
        }
        case OFF :{
            tBewegung = createTimer(now.plusSeconds(20), [ |
                if(Swi_Kleiderschrank.state != OFF){
                    Swi_Kleiderschrank.sendCommand(OFF)
                }
                tBewegung = null
            ])
	    }
    }
end

Das funktioniert!!! Vielen herzlichen Dank!!!
Wenn ich jetzt noch verstehen würde, was da wie und warum verschachtelt wurde... :!: :?:
Wo müsste denn jetzt bei dieser Version noch die Abfrage "Dunkel" rein?

Hier mal noch ein Auszug aus dem Log bzgl. Deiner Frage, ob ein OFF gesendet wird.

Code: Alles auswählen

2021-02-02 20:31:01.010 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Huemotionsensor1_Bewegung' changed from OFF to ON
2021-02-02 20:31:19.490 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Huemotionsensor1_Bewegung' changed from ON to OFF
2021-02-02 20:31:39.492 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'Swi_Kleiderschrank' received command OFF
2021-02-02 20:31:39.494 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'Swi_Kleiderschrank' predicted to become OFF
2021-02-02 20:31:39.495 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Swi_Kleiderschrank' changed from ON to OFF

Mit Dunkel sähe es so aus:

Code: Alles auswählen


var Timer tBewegung = null

rule "Bewegungsmelder Licht Kleiderschrank mit Timeout"
when
    Item Huemotionsensor1_Bewegung changed
then
    switch (newState) {
        case ON :{
            if(deConz_Tageslichtsensor_Lightlevel.state.toString == "Dark"){
        	    tBewegung?.cancel
        	    if(Swi_Kleiderschrank.state != ON){
               		Swi_Kleiderschrank.sendCommand(ON)
               	}
            }
        }
        case OFF :{
            tBewegung = createTimer(now.plusSeconds(20), [ |
                if(Swi_Kleiderschrank.state != OFF){
                    Swi_Kleiderschrank.sendCommand(OFF)
                }
                tBewegung = null
            ])
	    }
    }
end

" if(deConz_Tageslichtsensor_Lightlevel.state.toString == "Dark")" setzt du als Bedingung vor dem Einschalten, damit wird auch nicht der Timer resetet. nur der OFF muss unangetastet bleiben davon, sonst schaltet der auch nur aus, wenn es dunkel ist, und das geht schlecht wenn die Lampe an ist.

so und jetzt gute Nacht. XD
Betriebssystem: Proxmox 7.3-4
openHAB Container: debian11 LXC
openHAB Version: 3.4
Hardware: HomeServer Eigenbau mit einem Intel i5 9600K
Smarthome-Equipment:
- Rasperrymatic
- deConz
- HUE
- Shellys
- Mosquitto
- AVM Fritz!Box

EMaster
Beiträge: 107
Registriert: 13. Dez 2018 21:02
Answers: 2

Re: [Gelöst] Rule für Bewegungsmelder Schaltung ?

Beitrag von EMaster »

Danke!!!
openHAB 4.3.4 im Docker@Synology

LDG
Beiträge: 14
Registriert: 3. Apr 2021 10:08
Answers: 0

Re: [Gelöst] Rule für Bewegungsmelder Schaltung ?

Beitrag von LDG »

Guten Morgen,
erstmal zu mir: ich bin Elektroniker und angehender Techniker. Arbeiten tue ich in der Gebäudeautomation aber arbeite hier nur Siemens PX.
Bei mir zuhause habe ich jetzt erst angefangen mit der Wohnungsautomation.
Der Bewegungsmelder im Bad sollte mein erste Regel werden aber nach 2 Tagen bin ich langsam am verzweifeln.

Erstmal zu meiner Hardware:
2x Tradfri Gu10 mit 400LM (BZ_Licht)
1x Hue Bewegungsmelder von Philipps (BM_BZ)
Raspberry Pi 4 mit 64GB SD Karte und Openhab V1.6.4 =>Also Openhab3 Oberfläche

Zimmer: Badezimmer

BZ_Licht ist ein Point in der Location Badezimmer welche die beiden Lampen "BZ_Lampe" & "BZ_Lampe_Dusche". Der Bz_Licht beinhaltet per channel link die Helligkeiten der Beiden Lampen.
Aktuell ist der Bewegungsmelder in der HUE-APP mit dem Raum "Badezimmer" verbunden. Stellt dies ein Problem bei Openhab?

Gewünschte Situation:
Wenn BM_BZ_Bewegung ein wird soll das BZ_Licht auch eingeschaltet werden und nach 2 min automatisch ausgehen.

Mein Code der Regel lautet wie folgt:

Code: Alles auswählen

triggers:
  - id: "1"
    configuration:
      itemName: BZ_BM
      state: ON
      previousState: OFF
    type: core.ItemStateChangeTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      type: application/javascript
      script: |-
        var Timer tBewegung = null

        rule "BZ BM + Timeout"
        
        then
            switch (newState) {
                case ON :{
                	tBewegung?.cancel
                	if(BZ_Licht.state != ON){
                       		BZ_Licht.sendCommand(ON)
                       	}
                }
                case OFF :{
                    tBewegung = createTimer(now.plusSeconds(20), [ |
                        if(BZ_Licht.state != OFF){
                            BZ_Licht.sendCommand(OFF)
                        }
                        tBewegung = null
                    ])
        	    }
            }
        end
    type: script.ScriptAction
Vielen Dank im Vorraus

Edit: habe nun meine Bewegungsmelder einmal aus der App rasugekickt und unkonfiguriert gelassen.
nun bekomme ich im Log mit dem Code oben:

Code: Alles auswählen

2021-04-03 11:33:21.374 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'e90297901e' failed: <eval>:1:10 Expected ; but found tBewegung

var Timer tBewegung = null

          ^ in <eval> at line number 1 at column number 10
______________________________________________________________________________________________
Hardware:
- Docker openhab/openhab:3.2.0.M5
- Philips Hue RGB Leuchtmittel + HUE Motion Sensoren
- Ikea Tradfri Leuchtmittel über Hue Bridge
- 2x Shelly 1pm
- Amazon Alexa
- Staubsaugroboter Irobot über Alexa

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

Re: [Gelöst] Rule für Bewegungsmelder Schaltung ?

Beitrag von udo1toni »

LDG hat geschrieben: 3. Apr 2021 10:44 Guten Morgen,
erstmal zu mir: ich bin Elektroniker und angehender Techniker. Arbeiten tue ich in der Gebäudeautomation aber arbeite hier nur Siemens PX.
Bei mir zuhause habe ich jetzt erst angefangen mit der Wohnungsautomation.
Moin und willkommen im Forum!
LDG hat geschrieben: 3. Apr 2021 10:44 Raspberry Pi 4 mit 64GB SD Karte und Openhab V1.6.4 =>Also Openhab3 Oberfläche
~Grummel~ Das geht ja gut los... ;)

Du meinst ziemlich sicher das openHABian Image. openHABian ist eine Scriptsammlung, um openHAB und diverse andere Dinge zu installieren. Für den Raspberry gibt es ein Image, welches das offizielle Raspberry Pi OS lite als Unterbau nutzt und die Scripte schon fertig installiert hat.
LDG hat geschrieben: 3. Apr 2021 10:44

Code: Alles auswählen

type: application/javascript
      script: |-
        var Timer tBewegung = null

        rule "BZ BM + Timeout"
        
        then
            switch (newState) {
                case ON :{
                	tBewegung?.cancel
                	if(BZ_Licht.state != ON){
                       		BZ_Licht.sendCommand(ON)
                       	}
                }
                case OFF :{
                    tBewegung = createTimer(now.plusSeconds(20), [ |
                        if(BZ_Licht.state != OFF){
                            BZ_Licht.sendCommand(OFF)
                        }
                        tBewegung = null
                    ])
        	    }
            }
        end
    type: script.ScriptAction
Dein Problem ist hier, dass der Code kein javascript ist. Ein weiteres Problem: Du möchtest einen Timer verwenden. Das geht über die Main UI so nicht.

Du hast nun mehrere Möglichkeiten... Du kannst den Rule-Code durch Java Script ersetzen. Da bin ich dann raus, weil ich bisher nur sehr wenig in Java Script gelöst habe und nicht sattelfest bin :) aber es gibt hier durchaus andere Anwender :) welche Dir da helfen können.
Das Timer Problem kannst Du lösen, indem Du ein Switch Item, welches ungebunden ist (das ist nur für den Timer zuständig) verwendest. Für dieses Item stellst Du in den Metadaten expire ein, dort kannst Du dann z.B. hinterlegen, dass es ein OFF sendet, wenn der Status des Items nicht OFF ist und mehr als 20 Sekunden nicht aktualisiert wurde. In der Rule setzt Du dieses Item dann bei einem empfangenen OFF (vom Bewegungsmelder) auf ON. Nach 20 Sekunden läuft expire ab und das Item sendet seinerseits ein OFF, welches Du über eine Rule auswerten und zum Abschalten des Lichts verwenden kannst. Nachteil: Die expire Zeit ist fix im Item eingestellt. theoretisch sollte es möglich sein, die Metadaten eines Items durch eine Java Script Rule zu manipulieren, das erscheint mir persönlich aber umständlich ;)

Die einfachste Möglichkeit (in meinen Augen...) ist, die Rule über Textkonfiguration anzulegen. dazu brauchst Du Schreibzugriff auf das Verzeichnis /etc/openhab/rules/, in dem Du dann eine Datei meine.rules anlegst (Name ist egal, Endung muss exakt .rules lauten).
In diese Datei schreibst Du dann die Rule, welche Du ursprünglich in der Main UI eingeben hast, etwa so:

Code: Alles auswählen

var Timer tBewegung = null  // globale Variablen müssen vor der 1. Rule definiert werden!

rule "BZ BM + Timeout"
when
    Item BZ_BM changed
then
    switch(newState) {
        case ON :{
            tBewegung?.cancel
            if(BZ_Licht.state != ON){
                BZ_Licht.sendCommand(ON)
            }
        }
        case OFF :{
            tBewegung = createTimer(now.plusSeconds(20), [ |
                if(BZ_Licht.state != OFF){
                    BZ_Licht.sendCommand(OFF)
                }
                tBewegung = null
            ])
        }
    }
end
Allerdings kann die switch-case Anweisung hier nicht punkten :) es ist also sinnvoll, die Rule etwas anders zu gestalten:

Code: Alles auswählen

var Timer tBewegung = null  // globale Variablen müssen vor der 1. Rule definiert werden!

rule "BZ BM + Timeout"
when
    Item BZ_BM changed
then
    tBewegung?.cancel
    if(BZ_BM.state == ON) {
        if(BZ_Licht.state != ON)
            BZ_Licht.sendCommand(ON)
    } else
        tBewegung = createTimer(now.plusSeconds(20), [ |
            if(BZ_Licht.state != OFF)
                BZ_Licht.sendCommand(OFF)
        ])
end
es ist auch wichtig, den Timer in beiden Fällen zu canceln, falls er existiert, ansonsten kann es theoretisch passieren, dass Du einen marodierenden Timer hast, den Du nicht mehr kontrollieren kannst.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

LDG
Beiträge: 14
Registriert: 3. Apr 2021 10:08
Answers: 0

Re: [Gelöst] Rule für Bewegungsmelder Schaltung ?

Beitrag von LDG »

Danke
Du meinst ziemlich sicher das openHABian Image. openHABian ist eine Scriptsammlung, um openHAB und diverse andere Dinge zu installieren. Für den Raspberry gibt es ein Image, welches das offizielle Raspberry Pi OS lite als Unterbau nutzt und die Scripte schon fertig installiert hat.
ja genau. Da ich am Anfang bin denke ich macht es eher Sinn wenn ich das Image downloade, welches das OS Lite nutzt. Hast du da nen Link wo ich das finde? mir würde nach dem installieren des Image auch auch ne Anleitung helfen wie ich weiter fortfahre. hast du da auch ne gute Internetseite parat?
______________________________________________________________________________________________
Hardware:
- Docker openhab/openhab:3.2.0.M5
- Philips Hue RGB Leuchtmittel + HUE Motion Sensoren
- Ikea Tradfri Leuchtmittel über Hue Bridge
- 2x Shelly 1pm
- Amazon Alexa
- Staubsaugroboter Irobot über Alexa

LDG
Beiträge: 14
Registriert: 3. Apr 2021 10:08
Answers: 0

Re: [Gelöst] Rule für Bewegungsmelder Schaltung ?

Beitrag von LDG »

Danke @udo!

es hat ein wenig gebraucht um zu verstehen was du mir geschrieben hast, aber nun habe ich es verstanden.
Habe mit nano auf der Konsole die Datei im richtigen Verzeichnis angelegt und den Code reingeschrieben. Funktionierte auf Anhieb! Vielen Dank nochmal.
______________________________________________________________________________________________
Hardware:
- Docker openhab/openhab:3.2.0.M5
- Philips Hue RGB Leuchtmittel + HUE Motion Sensoren
- Ikea Tradfri Leuchtmittel über Hue Bridge
- 2x Shelly 1pm
- Amazon Alexa
- Staubsaugroboter Irobot über Alexa

Antworten