Home Assistant: Philips Hue Motion Sensor

Door nickyb2 op woensdag 26 oktober 2016 06:41 - Reacties (20)
CategorieŽn: home assistant, philips hue, Views: 8.720

Nog niet zo heel lang geleden heeft Philips een Motion Sensor uitgebracht voor de Hue lijn. Ik heb wel even getwijfeld of ik deze motion sensor wilde hebben, ik was immers best tevreden met mijn huidige Aeon Labs Multi sensoren. Echter de combinatie van AAA batterijen en de mogelijkheid ze overal op te hangen heeft mij toch doen besluiten om er twee (nummer drie is in bestelling) aan te schaffen.

Ik heb van een aantal mede-tweakers de vraag gekregen hoe ik ze gekoppeld heb in Home Assistant, mijn domotica oplossing. Dus tijd voor een korte post over hoe ik, mijn manier, ze binnen Home Assistant beschikbaar maak om ze te kunnen gebruiken.

Het doel van deze blog post is dat je aan het eind voor elke Hue Motion Sensor het volgende hebt:
  • Binary Sensor - Beweging on/off
  • Sensor - Lichtsterkte in Lux
  • Sensor - Temperatuur (de Hue Motion Sensor meet ook temperatuur)
om bovenstaand te bereiken heb je het volgende nodig:
  • Home Assistant - :X
  • API-key/User van de Bridge - zie hier (Het Hue systeem is heel wat meer dan enkel wat je met de default Philips App kunt, meld je aan, lees de documentatie)
  • Web Browser - om de CLIP API Debugger aan te spreken
Hoe je je Motion Sensor aan de bridge koppelt kun je in je handleiding vinden en ga dat ook vooral doen want anders kun je niet verder.


Lichtsterkte sensor en temperatuur sensor
Het toevoegen van de lichtsterkte en temperatuur sensor is erg eenvoudig Beide zijn beschikbaar door de Bridge uit te vragen via een REST call en laat Home Assistant nu een REST sensor hebben.

Ga naar de CLIP API debugger (http://<JOUW BRIDGE IP>/debug/clip.html) met je webbrowser en voer een GET uit op de volgende URL: /api/<API-key>/sensors
Dit geeft je een lijst met al je sensoren, ga nu op zoek naar de lichtsterkte sensor (type ZLLLightLevel) en de temperatuur sensor (type ZLLTemperature) en noteer het sensor nummer.

Je kunt nu in Home Assistant twee sensoren maken als volgt:

code:
1
2
3
4
5
6
7
8
9
10
11
- platform: rest
  resource: http://[bridge IP]/api/[API-key]/sensors/[sensor id]
  value_template: '{{ value_json.state.lightlevel }}'
  unit_of_measurement: Lux
  name: 'Woonkamer'
  
- platform: rest
  resource: http://[bridge IP]/api/[API-key]/sensors/[sensor id]
  value_template: '{{ value_json.state.temperature | float / 100 }}'
  unit_of_measurement: įC
  name: 'Woonkamer'


Vul uiteraard je bridge IP, API-key en gevonden sensor id's in op de juiste plekken. Als het goed is zou Home Assistant je nu de twee sensoren moeten tonen.


Bewegings Sensor
Je kunt de bewegingssensor op dezelfde manier te ontsluiten als de lichsterkte en temperatuur sensor, echter zou ik je willen adviseren even door te lezen voor een andere oplossing. Waarom?

Als de sensor beweging detecteert wordt presence=true aan de bridge gemeld en kun je dit uitlezen door de bridge te raadplegen. Tot zover niet anders dan de andere sensoren. Na +/- 30 seconden meld de sensor bij de bridge een presence=false, omdat je bijvoorbeeld even buiten bereik bent of te stil zit. In principe is dit precies de werking van hoe we een beweging sensor willen hebben, maar...

De bewegings sensor meld het bij de bridge en niet bij Home Assistant, dit betekent dat Home Assistant actief moet 'pollen' om de juiste status te kunnen tonen en gebruiken in eventuele automation regels. Ik meen dat de standaard (scan_interval) tijd van Home Assistant op 30 seconden staat en hoewel je dit kan aanpassen door vaker te pollen hoeft dat niet. Het risico wat je loopt is dat je een 'presence' melding mist, omdat Home Assistant niet op de juiste tijd gekeken heeft. Dit veroorzaakt een vertraging in je domotica oplossing en hoewel dat niet altijd even erg is kan je er ook last van hebben.

Als ik dit vergelijk met mijn ZWave motion sensors (standaard tijd is 4 minuten) is de tijd instelbaar en zou ik dat graag ook willen in de Hue Motion Sensors. Naar mijn weten is dit (op dit moment) niet instelbaar, maar omdat de Bridge ook een Rule Engine heeft kunnen we het in de Bridge inbouwen.

Wat we gaan doen is een 'virtuele bewegingssensor' toevoegen die actief gezet wordt door de fysieke bewegingssensor, na een instelbare tijd van X aantal minuten (ik ga voor 5 minuten) geen beweging wordt de status van de virtuele gereset naar geen beweging. Door deze virtuele bewegingssensor in Home Assistant te ontsluiten hebben we een stabiele sensor die prima te gebruiken is in automation regels.

De werkzaamheden hieronder dienen allemaal uitgevoerd te worden in de CLIP API Debugger.


Toevoegen virtuele bewegingssensor
Voer een POST uit op de volgende URL /api/[API -key]/sensors met onderstaande body om de virtuele bewegingssensor aan te maken. Je kunt de namen aanpassen aan wat je wilt.

code:
1
2
3
4
5
6
7
8
9
{   
    "name": "Wnk.Presence",
    "type": "CLIPGenericStatus",
    "modelid": "PHA_STATE",
    "manufacturername": "Philips",
    "swversion": "1.0",
    "uniqueid": "Wnk.Presence",
    "recycle": false
}



Als resultaat krijg je het sensor id terug van de virtuele bewegingssensor.


Verbinden fysieke aan virtuele bewegingssensor
Mijn fysieke bewegingssensor heeft ID: 8
Mijn virtuele bewegingssensor heeft ID: 17

Voer een POST uit op de volgende URL /api/[API-key]/rules met onderstaande body voor het toevoegen van een regel in de bridge die beide sensoren verbindt. Vervang de drie sensor ID's door die van jou.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
    "name": "Wnk.Presence",
    "conditions": [
        {
            "address": "/sensors/8/state/presence",
            "operator": "eq",
            "value": "true"
        },
        {
            "address": "/sensors/8/state/presence",
            "operator": "dx"
        }
    ],
    "actions": [
        {
            "address": "/sensors/17/state",
            "method": "PUT",
            "body": {
                "status": 1
            }
        }
    ]
}




Resetten virtuele bewegingssensor
Mijn fysieke bewegingssensor heeft ID: 8
Mijn virtuele bewegingssensor heeft ID: 17

Voer een POST uit op de volgende URL /api/[API-key]/rules met onderstaande body om een regel toe te voegen die de virtuele bewegingssensor reset na 5 minuten geen beweging. Vervang wederom de drie sensor ID's door die van jou.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
    "name": "Wnk.Presence.Reset",
    "conditions": [
        {
            "address": "/sensors/8/state/presence",
            "operator": "eq",
            "value": "false"
        },
        {
            "address": "/sensors/8/state/presence",
            "operator": "ddx",
            "value": "PT00:05:00"
        }
    ],
    "actions": [
        {
            "address": "/sensors/17/state",
            "method": "PUT",
            "body": {
                "status": 0
            }
        }
    ]
}



Als het goed is, zal de virtuele bewegingssensor nu mee aan schakelen als je fysieke bewegingssensor schakelt en uit schakelen als je fysieke bewegingssensor vijf minuten geen beweging detecteert.


Koppeling virtuele bewegingssensor met Home Assistant
Als laatste voegen we een Binary Sensor toe aan Home Assistant met als sensor ID het ID van de virtuele bewegingssensor.

code:
1
2
3
4
- platform: rest
  resource: http://[bridge IP]/api/[API-key]/sensors/[sensor id]
  value_template: '{{ value_json.state.status }}'
  name: 'Woonkamer'



Ben bovenstaande oplossing automatiseer ik een aantal zaken, zoals het aan/uit doen van de keukenboiler. Aan op beweging, uit na 15 minuten geen beweging. Daarnaast de 'niet hue' lampen die ik nog heb worden geschakeld op basis van beweging en lichtsterkte, etc, etc.

Ik hoop dat jullie er wat aan hebben en ik zie de verbeteringen graag tegemoet.

Volgende: EnerZIE: energieverbruik bijhouden in een Google Spreadsheet 29-05 EnerZIE: energieverbruik bijhouden in een Google Spreadsheet
Volgende: bijmij-grafana: OpenTherm Gateway 04-'16 bijmij-grafana: OpenTherm Gateway

Reacties


Door Tweakers user Kecin, woensdag 26 oktober 2016 11:57

Bedankt voor je blog. Ik was niet op de hoogte van Home Assistant en zou in mijn nieuwe huis graag een koppeling willen hebben tussen Nest Rookmelders, Thermostaat, Hue producten en wellicht meer. Ik denk dat dit dan een zeer geschikte variant kan zijn!

Thanks!

Door Tweakers user PuckStar, woensdag 26 oktober 2016 16:35

Kecin schreef op woensdag 26 oktober 2016 @ 11:57:
Bedankt voor je blog. Ik was niet op de hoogte van Home Assistant en zou in mijn nieuwe huis graag een koppeling willen hebben tussen Nest Rookmelders, Thermostaat, Hue producten en wellicht meer. Ik denk dat dit dan een zeer geschikte variant kan zijn!

Thanks!
Ik kan het je van harte aanbevelen :)
Er is ook een tweakers topic: Home Assistant - Open source Python3 home automation

Door Tweakers user SeenD, woensdag 26 oktober 2016 22:59

Ja. Home assistent was mij ook onbekend. Je blog is helder. Ik ga er eens in duiken. Jammer dat ik programmeertechnisch niet zo sterk ben.

Ik heb ook 2 sensoren maar ik vind ze via hue instellingen heel erg dom, en dit kan wellicht een betere oplossing zijn.

Btw heb je Home assistent op een raspberry pi of dedicated box?

[Reactie gewijzigd op woensdag 26 oktober 2016 23:02]


Door Tweakers user nickyb2, donderdag 27 oktober 2016 06:45

SeenD schreef op woensdag 26 oktober 2016 @ 22:59:
Ja. Home assistent was mij ook onbekend. Je blog is helder. Ik ga er eens in duiken. Jammer dat ik programmeertechnisch niet zo sterk ben.

Ik heb ook 2 sensoren maar ik vind ze via hue instellingen heel erg dom, en dit kan wellicht een betere oplossing zijn.

Btw heb je Home assistent op een raspberry pi of dedicated box?
Je kunt met de rules in je Bridge de Motion Sensoren veel slimmer maken, enige nadeel is dat je de 'standaard' rules die aangemaakt worden moet verwijderen. In de Hue APP komt de Motion sensor dan als ongeconfigureerd te staan. Ik wil je dan adviseren om eens te gaan kijken naar de Hue API, in principe prima gedocumenteerd wat allemaal mogelijk is.

Ik draai HA op een PI2, maar heb het ook op een Ubuntu box gehad.

Door Tweakers user SeenD, donderdag 27 oktober 2016 11:48

En op de pi draait het lekker?
Misschien kun je daar een blogje over schrijven, wat je allemaal al hebt en wat je allemaal wilt doen. :)

[Reactie gewijzigd op donderdag 27 oktober 2016 11:48]


Door Tweakers user nickyb2, donderdag 27 oktober 2016 12:38

Op de PI2 draait het allemaal prima. Ik geloof dat ze zelf een PI installer gemaakt hebben, al gebruik ik die zelf niet.

Ik ben altijd nieuwsgierig wat anderen allemaal verzinnen. Ik probeer zelf zo min mogelijk te doen. Dat klinkt misschien raar, maar stel je wilt automatisch verlichting in de hal. Dan ga ik daar niet een Hue Motion Sensor + Hue Lamp voor kopen. Bij mij komt er dan gewoon een lamp met bewegings sensor van 2 tientjes.

Enkel als ik iets echt nuttig vind, bijvoorbeeld om op die manier energie te besparen, ga ik kijken hoe ik dat voor elkaar ga krijgen.

Door Tweakers user SeenD, vrijdag 28 oktober 2016 07:41

Yes! Het werkt. Nu verder de wondere wereld in duiken van regels en andere componenten. :) Ik heb de sensor aan de praat. Nou de lichtsensor en temperatuur.

[Reactie gewijzigd op vrijdag 28 oktober 2016 07:42]


Door Tweakers user Duumke, vrijdag 28 oktober 2016 22:01

Ziet er op zich goed uit. Maar lees ik het nu goed dat dit op basis van polling werkt (en je dus in het slechtste geval 29 seconden in het donker zit)?
Voor bewegingssensoren ben ik meer voor een systeem die het direct door kan geven.

Door Tweakers user nickyb2, vrijdag 28 oktober 2016 22:30

Duumke schreef op vrijdag 28 oktober 2016 @ 22:01:
Ziet er op zich goed uit. Maar lees ik het nu goed dat dit op basis van polling werkt (en je dus in het slechtste geval 29 seconden in het donker zit)?
Voor bewegingssensoren ben ik meer voor een systeem die het direct door kan geven.
Ja en Nee.. Als je je scan_interval op de default laat staan kun je inderdaad in het slechtste geval 29 seconden in en donker zitten. Echter:
  • Niets weerhoudt je er van om de scan_interval naar 5 seconden te zetten voor de binary_sensors
  • Lampen gebaseerd op Hue, kun je uiteraard direct schakelen zonder tussenkomst van HA
Helaas ondersteund de huidige Hue API niet het aanroepen van externe URLs, anders zou het direct ook aan HA doorgegeven kunnen worden. Voor nu is het dus enkel mogelijk om te pollen en dat heeft inderdaad nadelen.

Voor mij persoonlijk vind ik die 30 seconden totaal niet boeiend, mijn verlichting is hoofdzakelijk Hue en wordt rechtstreeks door de Bridge/Motion Sensor geschakeld zonder tussen komst van HA. Sterker nog, de Hue implementatie van HA gebruik ik niet. Ik heb mijn eigen regels in de Bridge gestopt en dat werkt tot nu toe feilloos. Zo goed zelfs dat mijn Zwave MultiSensoren te koop staan/verkocht zijn.

Mijn wens om de Motion Sensor door te geven aan HA is het schakelen voor de laatste zwave lamp, helaas verkoopt Philips geen stekker meer anders was die al vervangen. Een keukenboiler en audio/video set worden ook geschakeld en alle drie mogen best 30 seconden duren. In de praktijk is het uiteraard gemiddeld 15 seconden en dat valt voor mijn toepassingen reuze mee.

Door Tweakers user Duumke, zaterdag 29 oktober 2016 11:48

nickyb2 schreef op vrijdag 28 oktober 2016 @ 22:30:
[...]


Ja en Nee.. Als je je scan_interval op de default laat staan kun je inderdaad in het slechtste geval 29 seconden in en donker zitten. Echter:
  • Niets weerhoudt je er van om de scan_interval naar 5 seconden te zetten voor de binary_sensors
  • Lampen gebaseerd op Hue, kun je uiteraard direct schakelen zonder tussenkomst van HA
Helaas ondersteund de huidige Hue API niet het aanroepen van externe URLs, anders zou het direct ook aan HA doorgegeven kunnen worden. Voor nu is het dus enkel mogelijk om te pollen en dat heeft inderdaad nadelen.

Voor mij persoonlijk vind ik die 30 seconden totaal niet boeiend, mijn verlichting is hoofdzakelijk Hue en wordt rechtstreeks door de Bridge/Motion Sensor geschakeld zonder tussen komst van HA. Sterker nog, de Hue implementatie van HA gebruik ik niet. Ik heb mijn eigen regels in de Bridge gestopt en dat werkt tot nu toe feilloos. Zo goed zelfs dat mijn Zwave MultiSensoren te koop staan/verkocht zijn.

Mijn wens om de Motion Sensor door te geven aan HA is het schakelen voor de laatste zwave lamp, helaas verkoopt Philips geen stekker meer anders was die al vervangen. Een keukenboiler en audio/video set worden ook geschakeld en alle drie mogen best 30 seconden duren. In de praktijk is het uiteraard gemiddeld 15 seconden en dat valt voor mijn toepassingen reuze mee.
Bedankt voor de uitleg.5 seconden is wat realistischer, echter voor op het toilet toch misschien te lang :)

Door Tweakers user Doubt, dinsdag 1 november 2016 22:16

Misschien kan iemand mij helpen. Ik ben ook er druk mee bezig alleen krijg nog elke keer deze melding in de log:

16-11-01 21:06:00 homeassistant.helpers.template: Error parsing value: 'list object' has no attribute 'state' (value: [{"error":{"type":3,"address":"/sensors/00:17:88:01:02:00:a8:01-02-0402","description":"resource, /sensors/00:17:88:01:02:00:a8:01-02-0402, not available"}}], template: {{ value_json.state.temperature | float / 100 }})

Daarnaast zie ik ook geen waarde in de sensor staan in hass. In de Api Debug van Hue zelf wel.

Door Tweakers user nickyb2, woensdag 2 november 2016 08:21

Doubt schreef op dinsdag 01 november 2016 @ 22:16:
16-11-01 21:06:00 homeassistant.helpers.template: Error parsing value: 'list object' has no attribute 'state' (value: [{"error":{"type":3,"address":"/sensors/00:17:88:01:02:00:a8:01-02-0402","description":"resource, /sensors/00:17:88:01:02:00:a8:01-02-0402, not available"}}], template: {{ value_json.state.temperature | float / 100 }})
Kun je van je temperatuur sensor de json output tonen uit de bridge en hoe je deze sensor in hass hebt geconfigureerd?

Door Tweakers user ThinkPad, dinsdag 8 november 2016 14:50

Duumke schreef op vrijdag 28 oktober 2016 @ 22:01:
Ziet er op zich goed uit. Maar lees ik het nu goed dat dit op basis van polling werkt (en je dus in het slechtste geval 29 seconden in het donker zit)?
Voor bewegingssensoren ben ik meer voor een systeem die het direct door kan geven.
Die 30 seconden vind ik ook wat traag. Heb even wat gezocht en hier zijn er een aantal die de bridge elke 2 seconden pollen, zonder problemen.

Edit 23/11/2016: Heb het nu een aantal weken draaien met scan interval op 2 sec. en dat werkt prima. Geen gekke dingen meegemaakt, beweging wordt nu snel opgepakt door HASS en bridge functioneert nog steeds prima zonder vastlopers o.i.d.

[Reactie gewijzigd op woensdag 23 november 2016 09:56]


Door Tweakers user Kroontje, maandag 5 december 2016 14:05

Fijn artikel nickyb2, bedankt daarvoor.

Nu is het alleen zo dat de Hue Motion Sensor de lux-waarde anders weergeeft dan het daadwerkelijke aantal lux, zie hoofdstuk 2.7.1. De formule die gebruikt wordt is, zoals daar staat aangegeven: 10000*LOG10(WerkelijkeLuxWaarde)+1, dus 150lux (Fibaro Motion Sensor) is volgens de Hue Motion Sensor: 21761. Nu zou ik graag in HASS de daadwerkelijke lux-waarde willen zien en deze is terug te rekenen met de formule: 10^(HueMotionSensorMeasuredValue/10000).

Ik heb geprobeerd om dit in een template te bakken, maar zonder succes. Volgens mij ondersteunt HASS geen complexere berekeningen is het wel?

Heb jij nog tips?

Door Tweakers user Kroontje, woensdag 7 december 2016 17:41

Terugkomend op mijn eigen vraag hierboven, ik heb na wat gepuzzel het juiste resultaat weten te bereiken...

Wanneer je de daadwerkelijke lux-waarde wil zien, gebruik dan als sensor value het volgende:
code:
1
value_template: '{{ (10 ** (float(value_json.state.lightlevel) / 10000) -1) | round (1)}}'

in plaats van:
code:
1
value_template: '{{ value_json.state.lightlevel }}'

:)

[Reactie gewijzigd op woensdag 7 december 2016 18:50]


Door Tweakers user nickyb2, donderdag 8 december 2016 07:06

Kroontje schreef op woensdag 7 december 2016 @ 17:41:
Terugkomend op mijn eigen vraag hierboven, ik heb na wat gepuzzel het juiste resultaat weten te bereiken...

Wanneer je de daadwerkelijke lux-waarde wil zien, gebruik dan als sensor value het volgende:
code:
1
value_template: '{{ (10 ** (float(value_json.state.lightlevel) / 10000) -1) | round (1)}}'

in plaats van:
code:
1
value_template: '{{ value_json.state.lightlevel }}'

:)
Goed zo.. Maar wat wil je er precies mee bereiken? Zelf vind ik die 'hoge' waarden wel fijn.

Door Tweakers user Kroontje, donderdag 8 december 2016 07:49

Ik gebruik ook motion sensors van Fibaro en geef de LUX weer in een view. Dan vind ik het wel zo fijn om de daadwerkelijke waarde te zien.. :)

Door Tweakers user vandalon, dinsdag 13 december 2016 10:45

Hey Nicky,

Hoe is jouw ervaring met de nauwkeurigheid van de temperatuursensor in de philips hue motion sensor? Ik heb wat tests gedaan, maar ik merk op dat met mijn motion sensor er toch een flinke afwijking in zit. Heb met een prof. temperatuur sensor wat tests gedaan maar de afwijking tussen deze sensor en die van van philips is toch zo'n 1.5 tot 2 graden. Wellicht heb ik gewoon een pech met deze Philips hue sensors. Wellicht heb jij hier ook wat tests gedaan?

Groet,
Joris

Door Tweakers user nickyb2, dinsdag 13 december 2016 11:14

vandalon schreef op dinsdag 13 december 2016 @ 10:45:
Hey Nicky,

Hoe is jouw ervaring met de nauwkeurigheid van de temperatuursensor in de philips hue motion sensor? Ik heb wat tests gedaan, maar ik merk op dat met mijn motion sensor er toch een flinke afwijking in zit. Heb met een prof. temperatuur sensor wat tests gedaan maar de afwijking tussen deze sensor en die van van philips is toch zo'n 1.5 tot 2 graden. Wellicht heb ik gewoon een pech met deze Philips hue sensors. Wellicht heb jij hier ook wat tests gedaan?

Groet,
Joris
Hoi Joris,

Die van mij wijken ook flink af. Sommige 1 graad, sommige 2. Ik vind het zelf niet zo spannend omdat ik ze enkel gebruik om verschil te detecteren en gebruik de 'actuele' waarde niet.

Ik denk ook niet dat je veel meer kan verwachten van een sensor die maar 40 euro kost.

Door Tweakers user Mafkees, vrijdag 30 december 2016 17:41

Kroontje schreef op woensdag 7 december 2016 @ 17:41:
Terugkomend op mijn eigen vraag hierboven, ik heb na wat gepuzzel het juiste resultaat weten te bereiken...

Wanneer je de daadwerkelijke lux-waarde wil zien, gebruik dan als sensor value het volgende:
code:
1
value_template: '{{ (10 ** (float(value_json.state.lightlevel) / 10000) -1) | round (1)}}'

in plaats van:
code:
1
value_template: '{{ value_json.state.lightlevel }}'

:)
Bijna, je moet alleen eerst de 1 van de ruwe waarde afdoen in plaats van delen door 10000. Als y de waarde is die Hue rapporteert, zijn we op zoek naar x in onderstaande formule. Je kunt alles redelijk makkelijk naar de andere kant brengen:


code:
1
2
3
4
10000 * log10(x) + 1 = y
    10000 * log10(x) = y - 1
            log10(x) = (y - 1) / 10000
                   x = 10 ^ ((y - 1) / 10000)



value_template wordt dan:

code:
1
value_template: '{{ (10 ** (float(value_json.state.lightlevel - 1) / 10000))|round(1) }}'

[Reactie gewijzigd op vrijdag 30 december 2016 17:41]


Reageren is niet meer mogelijk