Philips Hue API "lastupdated" und rules

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
djmg_uli
Beiträge: 38
Registriert: 10. Jan 2020 11:47
Answers: 0

Philips Hue API "lastupdated" und rules

Beitrag von djmg_uli »

Hallo zusammen!

Ich verwende einen Philips Hue Outdoor Motion Sensor, der mir diverse Lichter einschaltet.
Verwendet sowohl mittels Hue Binding, als auch HTTP Binding (Hue JSON API).

Mittels einer Regel lasse ich das Licht 60 Sekunden nach Erkennen einer Bewegung laufen, das klappt auch.
Nämlich nur, wenn der Lux-Wert unter 1000 ist (sprich Dämmerung oder Nacht).

hue.items

Code: Alles auswählen

DateTime Hue_Vorgarten_Bewegungszeit    { channel="hue:0107:1:Hue_Vorgarten_Bewegungssensor:last_updated" }
Number   HueAPI_Vorgarten_Lux             {http="<[hueapi:5000:JSONPATH($.8.state.lightlevel)]"}
hue.rules

Code: Alles auswählen

rule "Bewegungsmelder Licht XY"
when
    Item Hue_Vorgarten_Bewegung changed from OFF to ON
then
    if(HueAPI_Vorgarten_Lux.state < 1000 && stopMotionTimerBWMVorgarten === null){ 
        Licht_Einfahrt.sendCommand(ON)
            stopMotionTimerBWMVorgarten = createTimer(now.plusSeconds(60)) [| //60 Sekunden warten, dann Variable wieder auf NULL setzen
                stopMotionTimerBWMVorgarten = null
                Licht_Einfahrt.sendCommand(OFF) //Licht nach Ablauf der Zeit wieder ausschalten
                Hue_Vorgarten_Bewegung.sendCommand(OFF) //Bewegungsmelder zurücksetzen
            ]
    }
end
Klappt alles wunderbar. :mrgreen:

Und jetzt zum eigentlichen Problem: Die API/Binding mit Philips Hue und dessen Info "lastupdated".
Der Bewegungsmelder schickt nämlich an seine Bridge/an die API nur alle 5min ein Update. Ärgerlich! :evil:
Das bedeutet in meinem Fall: Obwohl das Licht nach 1min schon wieder ausgegangen ist, hat das item "HueAPI_Vorgarten_Lux" immer noch einen Lux-Wert, wie wenn das Licht leuchten würde (23714 Lux).

Anmerkung 2020-02-17 192641.png
Anmerkung 2020-02-17 192754.png


Das ist nun dahingehend bescheiden, weil ich für die nächsten 5 Minuten (oder bis eben Hue API/Binding das "lastupdated" einen aktuellen Lux-Wert schickt, nämlich 0 bei Nacht), die Lichtregel nicht auslösen kann (weil: "nur bei Lux kleiner 1000").

Hat da jemand eine Idee, wie man das lösen könnte?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
sihui
Beiträge: 1827
Registriert: 11. Apr 2018 19:03
Answers: 21

Re: Philips Hue API "lastupdated" und rules

Beitrag von sihui »

djmg_uli hat geschrieben: 17. Feb 2020 19:30 Hat da jemand eine Idee, wie man das lösen könnte?
Mit https://www.zigbee2mqtt.io/gibt es bei diesem Sensor Updates wenn sich der Luxwert um einen bestimmten Wert ändert:

Code: Alles auswählen

2020-02-16 20:48:21.710 [vent.ItemStateChangedEvent] - Hue_Out_1_Lux changed from 22 to 0
2020-02-17 07:22:34.525 [vent.ItemStateChangedEvent] - Hue_Out_1_Lux changed from 0 to 1
...
2020-02-17 20:07:12.661 [vent.ItemStateChangedEvent] - Hue_Out_1_Lux changed from 73 to 75
2020-02-17 20:07:22.628 [vent.ItemStateChangedEvent] - Hue_Out_1_Lux changed from 75 to 97
2020-02-17 20:07:27.599 [vent.ItemStateChangedEvent] - Hue_Out_1_Lux changed from 97 to 0
2020-02-17 20:07:37.530 [vent.ItemStateChangedEvent] - Hue_Out_1_Lux changed from 0 to 75
Wie man sieht werden Nachts bei Lux 0 keine Updates geliefert, tagsüber bei größeren Änderungen jedoch regelmäßig.
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.

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

Re: Philips Hue API "lastupdated" und rules

Beitrag von udo1toni »

Nutze nicht den Luxwert des Bewegungsmelders :)

So schön es auch ist, dass da ein Sensor verbaut ist... Wenn das eingeschaltete Licht den Sensor stark beeinflusst, dann ist der Sensor eben unbrauchbar.
Du kannst natürlich den Sensor trotzdem auswerten, aber den Sensorwert über ein Proxy Item zur Verfügung stellen. Das Proxy Item aktualisierst Du nur dann, wenn der gelieferte Luxwert innerhalb der Aus-Phase der Lampe erfasst wurde.
Leider hört sich das nicht nur kompliziert an, sondern ist es auch. Du wirst mit Persistence arbeiten müssen und alle möglichen Fallen umschiffen müssen, ich denke nicht, dass der Aufwand lohnt (außer zum auf die eigene Schulter klopfen...).
Nutze stattdessen das Astro Binding, bestimme einmalig, ab wann es zu dunkel ist und notiere Dir beispielsweise den Sonnenwinkel. Dann kannst Du innerhalb der Rule einfahc entscheiden, ob es schon zu dunkel ist oder nicht. Alternativ könntest Du natürlich einen separaten Sensor verbauen, der nicht von der Lampe angestrahlt wird.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

djmg_uli
Beiträge: 38
Registriert: 10. Jan 2020 11:47
Answers: 0

Re: Philips Hue API "lastupdated" und rules

Beitrag von djmg_uli »

udo1toni hat geschrieben: 17. Feb 2020 20:14 Nutze nicht den Luxwert des Bewegungsmelders :)
...
Nutze stattdessen das Astro Binding, bestimme einmalig, ab wann es zu dunkel ist und notiere Dir beispielsweise den Sonnenwinkel. Dann kannst Du innerhalb der Rule einfahc entscheiden, ob es schon zu dunkel ist oder nicht.
Empfehlung angenommen, Lux-Sensor wird nicht benutzt :D
Das mit dem Astro Binding klingt super, habe es auch schon eingebunden:

items:

Code: Alles auswählen

DateTime              CurrentTime1                    "Zeit-Datetime [%1$tH:%1$tM]"                               <time>            (gAstro)      {channel="ntp:ntp:local:dateTime" }
DateTime              Sunset_Time                     "Sonnenuntergang [%1$tH:%1$tM]"                     <sunset>                  (gAstro)      {channel="astro:sun:local:set#start"}

Wie kann ich in der Rule nun zwei Uhrzeiten miteinander vergleichen?

Code: Alles auswählen

rule "BWM Vorgarten schaltet Licht Einfahrt ein, nur nach Sonnenuntergang und für 60 Sekunden"
when
    Item Hue_Vorgarten_Bewegung changed from OFF to ON
then
    if(CurrentTime1.isAfter(Sunset_Time) && stopMotionTimerBWMVorgarten === null){
        logWarn("myLog", CurrentTime1) 
        logWarn("myLog", Sunset_Time) 
        Licht_Einfahrt.sendCommand(ON)
            stopMotionTimerBWMVorgarten = createTimer(now.plusSeconds(60)) [| //60 Sekunden warten, dann Variable wieder auf NULL setzen
                stopMotionTimerBWMVorgarten = null
                Licht_Einfahrt.sendCommand(OFF) //Licht nach Ablauf der Zeit wieder ausschalten
                Hue_Vorgarten_Bewegung.sendCommand(OFF) //Bewegungsmelder zurücksetzen
            ]
    }
end
Das Logfile gibt aus:

Code: Alles auswählen

2020-02-18 07:59:18.074 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'BWM Vorgarten schaltet Licht Einfahrt ein, nur nach Sonnenuntergang und für 60 Sekunden': 'isAfter' is not a member of 'org.eclipse.smarthome.core.library.items.DateTimeItem'; line 24, column 8, length 33
Warum wird hier isAfter() nicht erkannt?

djmg_uli
Beiträge: 38
Registriert: 10. Jan 2020 11:47
Answers: 0

Re: Philips Hue API "lastupdated" und rules

Beitrag von djmg_uli »

Da es mir keine Ruhe gelassen hat, habe ich jetzt auf folgende Variante gewechselt.
Und funktioniert auch :)

Code: Alles auswählen

rule "BWM Vorgarten schaltet Licht Einfahrt ein, nur Nachts und für 60 Sekunden"
when
    Item Hue_Vorgarten_Bewegung changed from OFF to ON
then
    var Number jetzt = (CurrentTime1.state as DateTimeType).zonedDateTime.toInstant.toEpochMilli
    var Number sunset = (Sunset_Time.state as DateTimeType).zonedDateTime.toInstant.toEpochMilli
    var Number sunrise = (Sunrise_Time.state as DateTimeType).zonedDateTime.toInstant.toEpochMilli

    if(jetzt > sunset || jetzt < sunrise && stopMotionTimerBWMVorgarten === null){
        Licht_Einfahrt.sendCommand(ON)
            stopMotionTimerBWMVorgarten = createTimer(now.plusSeconds(60)) [| //60 Sekunden warten, dann Timer wieder auf NULL setzen (resettieren)
                stopMotionTimerBWMVorgarten = null
                Licht_Einfahrt.sendCommand(OFF) //Licht nach Ablauf der Zeit wieder ausschalten
                Hue_Vorgarten_Bewegung.sendCommand(OFF) //Bewegungsmelder zurücksetzen
            ]
    } else {
        logInfo("BWM Vorgarten", "Es ist noch hell, es wird kein Licht eingeschaltet!")
        Hue_Vorgarten_Bewegung.sendCommand(OFF)
    }
end

Antworten