Home Assistant: EnOcean-wandschakelaars

Home automation, ook wel domotica genoemd, draait om het automatiseren van apparaten in woonhuizen. Whirlwind volgt deze ontwikkelingen met interesse en schrijft uit eigen ervaring zo nu en dan een artikel over dit onderwerp. In dit artikel combineren we de draad- en batterijloze EnOcean-wandschakelaar Eltako FT55 met het domoticaprogramma Home Assistant. Met deze wandschakelaar is het mogelijk om bijvoorbeeld Philips Hue, IKEA Tradfri of KlikAanKlikUit te schakelen.

Philips Hue-wandschakelaars

Zowel Philips Hue als KlikAanKlikUit bieden schakelaars aan die op een muur bevestigd kunnen worden. Philips heeft de Hue Dimmer (± € 25), een rechthoekige, draadloze wandschakelaar met 4 knoppen die gevoed wordt door een knoopcel (ronde, platte batterij). Daarnaast biedt Philips de Hue Tap (± € 53) aan, een ronde, draadloze wandschakelaar met eveneens 4 knoppen. De Hue Tap heeft een EnOcean-module die energie opwekt bij het indrukken van een knop. Deze kinetische energie wordt gebruikt om een signaal naar de Hue Bridge te sturen, waarna de Hue Bridge de gewenste actie uitvoert. Kortom, de Hue Tap is draad- en batterijloos.

Zowel de Hue Dimmer als Hue Tap hebben niet het formaat van een reguliere wandschakelaar. De houder van de draadloze Hue Dimmer kan eventueel met een montageplaatje op een inbouwdoos gemonteerd worden, maar niet iedereen vindt dat een mooie oplossing. Bovendien moet de Hue Bridge regelmatig, bijvoorbeeld iedere seconde, gepolld worden zodat Home Assistant weet dat een knop is ingedrukt op de Hue Dimmer of Hue Tap. In plaats van 'local polling' is het efficiënter om een schakelaar te gebruiken die werkt op basis van 'local push'.

IKEA Tradfri-wandschakelaars

IKEA biedt een draadloze dimmer (€ 9,99) en een afstandsbediening (€ 14,95) aan die met het Zigbee-protocol werken. Deze wandschakelaars zijn echter niet bedoeld om een traditionele schakelaar te vervangen; ze hebben een ander formaat.

KlikAanKlikUit-wandschakelaars

Ook KlikAanKlikUit biedt wandschakelaars aan, namelijk de AWST-8800 (± € 18) met 2 knoppen en de AWST-8802 (± € 20) met 4 knoppen. Dit zijn 433,92 MHz-wandschakelaars die bijvoorbeeld op een inbouwdoos gemonteerd kunnen worden. Ook zij versturen een signaal zodra op een knop wordt gedrukt. Middels een RFXcom-transceiver kunnen deze signalen opgevangen worden. Echter, in de praktijk is het signaal vaak te zwak waardoor het niet aankomt bij de RFXcom-transceiver. Waarschijnlijk zijn de KlikAanKliKUit-wandschakelaars bedoeld om bijvoorbeeld een lamp binnen dezelfde ruimte te schakelen, terwijl de RFXcom vaak verder weg is geplaatst. Dit heeft als gevolg dat meerdere keren op de KlikAanKlikUit-wandschakelaar gedrukt moet worden om de lamp via Home Assistant te schakelen.

Eltako FT55-wandschakelaars

Dit probleem kan opgelost worden met een EnOcean-wandschakelaar zoals de Eltako FT55 (± € 35, verkrijgbaar op o.a. Amazon.de). De Duitse fabrikant Eltako produceert wandschakelaars die dezelfde EnOcean-module bevatten als de Hue Tap, namelijk de EnOcean PTM215. De EnOcean-module in de Hue Tap gebruikt het Zigbee-protocol voor communicatie met de Hue Bridge. De EnOcean-module in de Eltako FT55 gebruikt het standaard EnOcean-protocol op 868,3 MHz.

Evenals de Hue Tap heeft de Eltako FT55-wandschakelaar 4 knoppen. Bij de schakelaar worden bedieningswippen geleverd die u op de schakelaar kunt klikken. Zodoende kunt u ervoor kiezen om een enkele schakelaar (1 bedieningswip) of een dubbele schakelaar (2 bedieningswippen) te gebruiken. In dit artikel gaan we uit van een dubbele schakelaar omdat we 4 knoppen willen bedienen.

Evenals de Hue Tap en de KlikAanKlikUit-schakelaars kunnen de Eltako-schakelaars alleen signalen versturen; geen signalen ontvangen. Zodoende is sprake van 1-weg-communicatie, ondanks dat 2-weg-communicatie wordt ondersteund door het EnOcean-protocol.

EnOcean

EnOcean lijkt in Nederland minder gebruikt te worden dan bijvoorbeeld Zigbee en Z-wave. EnOcean is ontwikkeld door EnOcean GmbH, een spin-off van Siemens. In Duitsland en Frankrijk wordt EnOcean vaker toegepast. EnOcean onderscheidt zich van andere technieken doordat het batterijloos gebruikt kan worden.

EnOcean-module vervangen voor Philips Hue

Sommige Hue-gebruikers kopen een Hue Tap en halen daar de Zigbee-EnOcean-module uit. Vervolgens maken ze een Eltako FT55-wandschakelaar open, verwijderen de standaard EnOcean-module en plaatsen de Zigbee-EnOcean-module in de Eltako FT55-wandschakelaar. Zo hebben zij als het ware een Hue Tap in een ‘gewone’ wandschakelaar die via Zigbee met de Hue Bridge communiceert. Zie eventueel de onderstaande video.

Het voordeel van een 'gewone' wandschakelaar ten opzichte van een Hue Dimmer of Hue Tap is het standaard formaat (vierkant, buitenmaat 8 cm, binnenmaat 5,5 cm) en het uiterlijk. De Eltako FT55 ziet er hetzelfde uit als het reeds aanwezige schakelmateriaal of lijkt er veel op en kan vaak gecombineerd worden met bestaand materiaal. Het nadeel zijn de relatief hoge kosten (Hue Tap van € 53 + Eltako FT55 van € 35 = € 88 per schakelaar).

EnOcean-wandschakelaars via Home Assistant

In dit artikel wordt behandeld hoe een standaard Eltako FT55-wandschakelaar via een EnOcean-USB-stick (€ 49, verkrijgbaar via o.a. G-media) aan Home Assistant gekoppeld kan worden. Bijvoorbeeld een Raspberry Pi kan door middel van deze EnOcean-USB-stick de signalen van de Eltako-wandschakelaar ontvangen en vervolgens een bepaalde actie uitvoeren, zoals het in-/uitschakelen van een lamp of apparaat. Afgezien van de aanschaf van de EnOcean-USB-stick bedragen de kosten per schakelaar dan € 35. Bovendien kunt u niet alleen verlichting schakelen met de wandschakelaar, maar ook andere acties binnen Home Assistant uitvoeren.

We adviseren de EnOcean USB310-stick aangezien deze een externe antenne heeft, in tegenstelling tot de EnOcean USB300. Voor de Raspberry Pi is ook een uitbreidingsmodule beschikbaar, genaamd EnOcean Pi. We raden de USB-stick aan omdat deze ook op andere systemen dan de Raspberry Pi gebruikt kan worden.

Standaard wandschakelaars maken de lamp spanningsloos

Traditionele wandschakelaars stoppen de stroomtoevoer naar de lamp indien de wandschakelaar in de uit-stand gezet wordt. Hierdoor kunt u de lamp niet inschakelen zonder de wandschakelaar aan te raken. Bij domoticatoepassingen wordt vaak  een pulsdrukker gebruikt. Een pulsdrukker veert terug naar de middenstand na het indrukken van een knop. Hierdoor staat de knop nooit in de aan- of uit-stand. De Eltako FT55 is ook een pulsdrukker.

Als u uw traditionele wandschakelaars vervangt door nieuwe schakelaars, dan kunt u de 2 draden van de wandschakelaar permanent met elkaar verbinden zodat de lamp altijd stroom krijgt. Dit kunt u doen door beide draden die aangesloten waren op de traditionele wandschakelaar in een lasklem van bijvoorbeeld Wago te steken. Vervolgens kunt u de nieuwe wandschakelaar op de inbouwdoos monteren. Nu kunt u de lamp in- en uitschakelen met de Eltako FT55-wandschakelaar, via Home Assistant of met behulp van bijvoorbeeld de Hue-app. En mocht u uw huis verkopen, dan kunt u de lasklem verwijderen en de originele wandschakelaar terugplaatsen.

Stap 1: DolphinView Basic

Deze stap is niet verplicht, maar wel aan te raden omdat u hiermee controleert of de USB-stick en wandschakelaar goed functioneren en of het bereik voldoende is. Installeer de drivers en DolphinView Basic op een Windows-computer, plug de USB-stick in en klik op Connect. In het venster Telegram Log toont DolphinView de EnOcean-signalen die worden verstuurd zodra u op een knop van de wandschakelaar drukt.

Bij ieder bericht wordt in de kolom dBm aangegeven hoe sterk het signaal is. Een goed signaal heeft een sterkte van -40 tot -70. Zie ook de ontvangstindicator in de linkerkolom (groen, geel of rood). Controleer of u een goed ontvangst heeft op de locaties waar u een wandschakelaar wilt plaatsen. Als het signaal niet sterk genoeg is, kunt u een andere antenne en/of repeater gebruiken.

Stap 2: USB-stick koppelen aan Home Assistant

Plug de USB310 in op de Raspberry Pi en voer het volgende commando in:
ls /dev/serial/by-id

Kopieer het ID van de EnOcean USB-stick, bijvoorbeeld:

  • USB300: usb-EnOcean_GmbH_EnOcean_USB_300_DB_FT1M2IIA-if00-port0
  • USB310: usb-FTDI_FT232R_USB_UART_A90551IL-if00-port0

Plaats het volgende in configuration.yaml waarbij u [id] vervangt door het bovenstaande ID:

enocean:
  device: /dev/serial/by-id/[id]

Schakel de debug logging van de EnOcean-component van Home Assistant in met:

logger:
  logs:
    homeassistant.components.enocean: debug

In het debug log verschijnt het volgende zodra u op een knop van de EnOcean-schakelaar drukt:

2017-11-12 21:41:09 DEBUG (Thread-22) [homeassistant.components.enocean] Received radio packet: FE:F8:D1:34->FF:FF:FF:FF (-57 dBm): 0x01 ['0xf6', '0x30', '0xfe', '0xf8', '0xd1', '0x34', '0x30'] ['0x2', '0xff', '0xff', '0xff', '0xff', '0x4d', '0x0'] OrderedDict()

Stap 3: binary sensor aanmaken in Home Assistant

Zoals vermeld in de documentatie van de EnOcean-component van Home Assistant dient een muurschakelaar als binary sensor geconfigureerd te worden. Dit gaat als volgt:

binary_sensor:
  - platform: enocean
    id: [0xfe,0xf8,0xd1,0x34]
    name: SwitchB

Het ID dat u hierboven moet invullen, staat op de achterzijde van de wandschakelaar (bijvoorbeeld FEF8D134). Dit ID dient op de bovenstaande wijze ingevoerd te worden, namelijk verdeeld in 4 delen met 0x ervoor: 0xfe,0xf8,0xd1,0x34. Het name-veld is overigens optioneel. Deze naam verschijnt in Home Assistant bij de binary sensor.

De EnOcean-component genereert alleen button_pressed events; in Home Assistant staat de status van de binary sensor altijd op off. De status van de wandschakelaar kan middels bijvoorbeeld een automation uitgelezen worden.

Stap 4: automation voor verwerking van button_pressed events

Zoals hierboven vermeld, genereert de EnOcean-component van Home Assistant button_pressed events zodra op een knop van de wandschakelaar wordt gedrukt. Met de volgende automation is het mogelijk iedere knop een eigen actie te geven.

- id: switchb
  alias: 'SwitchB'
  trigger:
    platform: event
    event_type: button_pressed
    event_data:
      id: [0xfe,0xf8,0xd1,0x34]
      pushed: 1
  action:
    service_template: >
      {% if trigger.event.data.which == 1 %}
        {% if trigger.event.data.onoff == 0 %}
          switch.toggle
        {% elif trigger.event.data.onoff == 1 %}
          light.toggle
        {% endif %}
      {% elif trigger.event.data.which == 0 %}
        {% if trigger.event.data.onoff == 0 %}
          light.toggle
        {% elif trigger.event.data.onoff == 1 %}
          light.toggle
        {% endif %}
      {% endif %}
    data_template:
      entity_id: >
        {% if trigger.event.data.which == 1 %}
          {% if trigger.event.data.onoff == 0 %}
            switch.deskb
          {% elif trigger.event.data.onoff == 1 %}
            light.lampb1
          {% endif %}
        {% elif trigger.event.data.which == 0 %}
          {% if trigger.event.data.onoff == 0 %}
            light.lampb2
          {% elif trigger.event.data.onoff == 1 %}
            light.lampb3
          {% endif %}
        {% endif %}

De bovenstaande automation doet het volgende: zodra een van de knoppen (event_type: button_pressed) van de wandschakelaar met het opgegeven ID is ingedrukt (pushed: 1), worden de onderstaande 2 variabelen uitgelezen om te weten welke knop is ingedrukt. Overigens wordt pushed: 1 gebruikt zodat de automation al gestart wordt als de knop nog is ingedrukt; Home Assistant wacht niet totdat de knop is losgelaten. 

  • Variabele 1 heet which en kan de waarde 0 of 1 hebben. De knoppen aan de linkerkant worden aangeduid met which 1 en de knoppen aan de rechterkant met which 0.
  • Variabele 2 heet onoff en kan de waarde 0 of 1 hebben. De knoppen aan de bovenkant worden aangeduid met onoff 0 en de knoppen aan de onderkant met onoff 1.

De service_template bepaalt de gewenste actie: 

  • Als which 1 en onoff 0 is, dan wordt switch.toggle uitgevoerd.
    In dit voorbeeld wordt een KlikAanKlikUit-switch getoggled.
  • Als which 1 en onoff 1 is, dan wordt light.toggle uitgevoerd.
    In dit voorbeeld wordt een Hue-lamp getoggled.
  • Als which 0 en onoff 0 is, dan wordt light.toggle uitgevoerd.
    In dit voorbeeld wordt een Hue-lamp getoggled.
  • Als which 0 en onoff 1 is, dan wordt light.toggle uitgevoerd.
    In dit voorbeeld wordt een Hue-lamp getoggled.

Vervolgens wordt middels de volgende data_template bepaald welke entity (apparaat) bij de hierboven genoemde actie hoort:

  • Als which 1 en onoff 0 is, dan wordt switch.deskb doorgegeven aan de actie.
  • Als which 1 en onoff 1 is, dan wordt light.lampb1 doorgegeven aan de actie.
  • Als which 0 en onoff 0 is, dan wordt light.lampb2 doorgegeven aan de actie.
  • Als which 0 en onoff 1 is, dan wordt light.lampb3 doorgegeven aan de actie.

Bij eventuele problemen raden we aan de debug logging van de Home Assistant automation component in te schakelen:

logger:
  logs:
    homeassistant.components.automation: debug

Zodra op een knop van de wandschakelaar wordt gedrukt, wordt als het goed is de automation direct gedraaid:

2017-11-12 21:41:09 INFO (MainThread) [homeassistant.components.automation] Executing SwitchB

Conclusie

Na het volgen van dit artikel kunt u via standaard EnOcean-wandschakelaars, via Home Assistant en/of via de Hue-app uw verlichting en/of andere apparaten bedienen.