Draadloze schakelaar met Sonoff RF Bridge + TASMOTA + Home Assistant

Ik had dit bericht eigenlijk al eerder deze week willen schrijven, maar niet alleen was het best een drukke week zo net voor de vakantie, ik was ook in afwachting van een reactie van een leverancier die ik wat informatie gevraagd had over een van zijn producten. Dat product, een draadloze schakelaar die op 433Mhz werkt, was namelijk de aanleiding van het geheel. Ik had die via Aliexpress besteld. De link in de vorige zin gaat naar wat zo mooi heet de “transaction screenshot”, het is de weergave van het product op het moment dat ik het bestelde (een tijdje geleden, op 23 november). Nou zijn de schakelaars zoals ik ze heb ontvangen niet precies hetzelfde zoals in de transaction screenshot. De leverancier nam na de bestelling, heel netjes, contact op. Het uiterlijk van de huidige batch van schakelaars was namelijk anders dan in de advertentie. Hij stuurde een paar foto’s mee van renders. Belangrijk ander verschil, een pluspunt wat mij betreft, was dat de schakelaar geen 12V batterij meer gebruikte maar een ‘gewone’ knoopcel batterij. Wat mij betreft geen enkel probleem, dus kreeg ik ze opgestuurd. Maar het lijkt er nu op alsof het een laatste batch is geweest, want bij deze leverancier kan ik ze niet meer vinden en navraag leert ook dat ze ze niet meer hebben.

Hoe dan ook, ze zien er zo uit (zie hiernaast). Er zit een klein schakelaartje in, vergelijkbaar met de schakelaartjes die vaak op een breadboard gebruikt worden en een led die oplicht als je op de knop drukt. Dat zie je alleen in de het donker goed.

Er worden twee kleine stickers meegeleverd zodat je de schakelaar ergens vast kunt plakken, maar je kunt hem ook gewoon als een soort simpele afstandbediening ergens op een tafel of kast leggen. Bijvoorbeeld voor je kerstboom als je ’s avond de lampjes uit wilt doen en geen zin hebt om tegen de Google Home Mini te praten, of je smartphone te pakken.

De schakelaars werken op een knoopcelbatterij en kostten ongeveer een euro of 3 per stuk (ik kreeg een relais erbij geleverd in een nette compacte case, het is even de vraag hoeveel euro je daarover van het totaalbedrag van 10 euro aftrekt). Maar zoals gezegd, de verkoper waar ik ze besteld had heeft ze niet meer, deze exemplaren zien er qua foto’s, specificaties en prijs hetzelfde uit. ik kan je niet naar een werkende link op Aliexpress sturen omdat de verkoper ze niet meer heeft.

Maar natuurlijk werkten de schakelaars niet zomaar, daar moest het een en ander voor gebeuren.

De schakelaar doet uit zichzelf niet veel: hij verstuurd een code via 433Mhz de ruimte in op het moment dat je op de knop drukt. Als er een apparaat in de buurt is dat daar naar luistert dan gebeurt er wellicht iets, maar de schakelaar heeft daar zelf geen weet van (en geeft er ook niet om). De bijgeleverde relais is zo’n apparaat dat naar zulke signalen luistert. Het relais heeft een “leer” knop waarbij je hem kunt leren dat als een bepaalde code ontvangen wordt (elke schakelaar zendt zijn eigen code uit), hij aan/uit moet schakelen.

Als je mijn blog een beetje volgt dat weet je waarschijnlijk dat ik nog een apparaat in huis heb dat zulke 433Mhz signalen ontvangt (en kan uitzenden), dat is een RFXcom. Het is een van de duurdere randapparaten als je bedenkt dat de functionaliteit ook te programmeren is met een ESP8266 en een ontvanger en zender uit China die een paar euro kosten. Ik had teveel problemen met slechte ontvangst gehad bij de zelfbouwoplossing, dus heb ik het geld een tijd geleden maar gewoon uitgegeven.
De RFXcom heeft geen enkel probleem met het ontvangen van de signalen van de verschillende thermometers in huis. Stuurt ook zonder problemen de goedkope schakelaars van de Action aan of de wat duurdere dimmer van KlikAanKlikUit. Maar de afstandsbedieningen die bij de Action schakelaars zaten wilde hij nooit ontvangen en ook nu bij deze schakelaars kwam de RFXcom er niet uit. Hij kwam niet verder dan de conclusie dat er iets binnenkwam, maar dat hij niet wist hoe hij dit signaal moest interpreteren.Vervelend. Had ik die 10 euro dan voor niets uitgegeven?

Gelukkig niet. En dat kwam omdat ik ook 10 euro uitgegeven had aan een Sonoff RF Bridge. De Sonoff RF Bridge zou in principe hetzelfde moeten doen als de RFXcom, maar vreemd genoeg blijken ze elkaar juist perfect aan te vullen. De Sonoff (b)lijkt mijn thermometers niet te willen ontvangen, maar de schakelaars van de Action én de schakelaars van AliExpress, daar blijkt hij helemaal geen moeite mee te hebben, die komen probleemloos binnen.

De Sonoff apparaten zijn echter ook alleen geschikt voor mensen die zelf aan de slag willen. Of eigenlijk niet (en daarom juist weer wel). Dat klinkt niet echt duidelijk, ik zal het uitleggen. Bij de Sonoff apparaten (de RF Bridge, maar ook de schakelaars die je aan het netwerk kunt koppelen) wordt een app bijgeleverd voor op je smartphone. Daarmee kun je de Sonoff apparaten bedienen (inschakelen/uitschakelen etc). Maar als je het apparaat aan bijvoorbeeld Home Assistant (of zoals hier aan OpenHab) wilt koppelen, dan moet je de firmware (de basissoftware op het apparaat) vervangen. Hoe dat moet, daar vind je redelijk wat uitleg en filmpjes over, maar het vereist wel dat je het apparaat open maakt (dag garantie), een viertal pinnen op het board van het apparaat soldeert, USB->UART connector hebt en wat code uitvoert. Als je bij het lezen van die zin al afhaakt, dan is het inderdaad niet iets voor jou. En ik ga hier nu ook niet beweren dat er helemaal niets mis kan gaan. Je gaat met een soldeerbout aan de slag, je zou je board op een verkeerde manier van stroom kunnen voorzien en de zaak al in rook laten opgaan voordat je hem in gebruik genomen hebt, je moet dus een beetje weten wat je doet. Van de andere kant is het ook weer niet moeilijker dan het programmeren van een ESP8266, niet vreemd want die zit er ook daadwerkelijk in.

Er zijn een aantal opties als het gaat om de alternatieve firmware die je op de Sonoff RF Bridge (en de andere Sonoff devices) kunt zetten. Eerder dit jaar heb ik nog gebruik gemaakt van Espurna maar net zoals ik van OpenHab overgestapt ben naar Home Assistant, heb ik nu voor de firmware besloten voor TASMOTA (Theo Arends’ Sonoff-MQTT-OTA-Arduino) te gaan.

Ik was zelf begonnen met het bekijken van dit filmpje:

En deze wiki is ook handig om bij de hand te hebben. De meest recente releases kun je hier vinden.

De eerste stap die je moet zetten is het uit elkaar halen van de Sonoff RF Bridge, er zitten 4 schroefjes onder de ‘pootjes’ aan de onderkant, ik laat het aan jou over of je van plant bent die ooit nog terug te plaatsen (de schroefjes wel, de plakpootjes wat mij betreft niet). Dan zit er een belachelijk grote LED, mooi (ik had ze nog niet eerder in deze vorm gezien), maar functioneel overbodig. Voor nu heb ik hem even naar boven verbogen want de gaatjes waar de 4 headerpinnen moeten worden gesoldeerd zitten eronder.

Je ziet het boardje op de foto hiernaast met de LED omhoog nog naast de behuizing liggen. Zo ligt hij nog sinds vorig weekend. Hij doet het, maar ik moet nog besluiten of ik de LED er vanaf knip. Door de 4 headerpinnen die gesoldeerd zijn, past hij namelijk niet meer plat (zoals hij eerst lag) en kan ik de behuizing er niet terug omheen doen. Functioneel is het alleen een aan/uit lampje, dus eigenlijk kan ik die wel missen.

Het filmpje hierboven van Dr Zzs was behulpzaam, maar zorgde er ook voor dat ik ettelijke uren verspild heb met het tevergeefs proberen te vervangen van de firmware.

Ten eerste, vind ik zijn combinatie van software helemaal niet zo handig. Maar het kan ook zijn dat ESPEasy sinds augustus (toen hij het filmpje opnam) een paar grote sprongen gemaakt heeft. Je kunt daar in de interface nu namelijk al meteen aangeven welke stappen na het flashen uitgevoerd moeten worden. Daarmee kun je de WiFi-instellingen al meteen doen en heb je geen Termite en handmatige Backlog commando’s nodig.

Belangrijker nog was echter zijn opmerking dat je gebruik moest maken van de 3V aansluiting van je USB -> UART kabel. Dat bleek niet helemaal juist in mijn geval.

Mijn kabel heeft de optie om aan te sluiten op apparaten die 5V aankunnen en apparaten die 3V aankunnen. De aansluitingen voor GND, TXD (zenden), RXD (ontvangen) blijven dan hetzelfde, maar je kiest dan 1 van 3 opties: 5V, VCC of 3V3 (3,3V). Ik had (logisch leek me) eerst voor 3V3 gekozen.

Ik kreeg steeds de melding dat de firmware aangepast was, het leek ook alsof er steeds wat naar de Sonoff verstuurd werd (de teller liep op in percentages) maar ik kon de Sonoff daarna niet online vinden. Ik heb het eerst met ESPEasy geprobeerd, daarna met esptool.exe (vanaf de Windows commandline), met esptool.py (de Python versie, zowel onder Windows als in een Linux shell), uiteindelijk zelfs met de optie via de Arduino IDE. Niets werkte. En pas heel laat kwam ik er achter dat het simpelweg zo was dat de originele firmware niet overschreven werd.

Uiteindelijk kwam ik ergens een vraag en antwoord tegen van iemand die het ook niet voor elkaar kreeg (daarmee was hij niet de enige hoor, er zijn online veel berichten te vinden met vaak heel vage antwoorden als tip om het te debuggen). Maar hij had uiteindelijk besloten niet voor de 3V3 te kiezen maar voor de VCC. En warempel, dat was ook in mijn geval de oplossing! (Aaargh).

Daarna was het een fluitje van een cent om de Sonoff RX Bridge aan de praat te krijgen in combinatie met Home Assistant. Ik had een vast IP-adres toegewezen aan de Sonoff RX Bridge.  Door in de browser naar dat adres te gaan kon ik bij de setup komen.

Belangrijke feature van TASMOTA is dat de Sonoff nu ondersteuning heeft voor MQTT. Het is de manier waarop het apparaat gegeven doorstuurt (in dit geval naar Home Assistant) en de manier waarop het commando’s kan ontvangen.

Het achterhalen van de codes van de knoppen kan op een aantal manieren. Ik geef nog steeds de voorkeur aan het gewoon via mosquitto_sub -v -t "#" meekijken naar de berichten die via MQTT binnenkomen. In de screenshot hierboven zie je een voorbeeld waarbij de regels die beginnen met tele/rfbridge/RESULT het resultaat zijn van het op de knop drukken.

Ik heb de volgende instelling in mijn sensor.yaml (let op! voor Home Assistant is het een sensor, geen switch!!) opgenomen:

- platform: mqtt
  name: knop433
  state_topic: "tele/rfbridge/RESULT"
  value_template: "{{ value_json.RfReceived.Data }}"

Dit betekent dat voor alle drie de knoppen een waarde in sensor.knop433 wordt opgeslagen. Om nou te bepalen wat daarmee gedaan moet worden heb ik het volgende in automations.yaml opgenomen:

- id: automation08
  alias: Kerstboom aan of uit
  trigger:
    platform: state
    entity_id: sensor.knop433
    to: '058A52'
  action:
    - service: switch.toggle
      entity_id: switch.kerstboom
    - service: mqtt.publish
      data:
        topic: "tele/rfbridge/RESULT"
        payload: '{"RfReceived":{"Sync":13850,"Low":450,"High":1330,"Data":"000000","RfKey":"None"}}'

Ook hier is wat toelichting nodig:

De trigger reageert op het ontvangen van de code 058A52. Als dat gebeurt dan wordt de schakelaar die aan de Kerstboom hangt omgezet (van aan->uit of van uit->aan afhankelijk van wat de huidige stand was).
Maar daarna is er nóg een service opgenomen: mqtt.publish. Die zet de waarde van sensor.knop433terug op 00000.  Doe ik dat niet, dan reageert Home Assistant niet als ik nóg een keer op de schakelaar druk. Immers, de code was al 058A52 en wijzigt dan niet. Pas als ik dan eerst op een andere knop zou drukken zou de automation weer triggeren. Daarom set ik hem meteen naar het verwerken van de gewenste opdracht zo snel mogelijk op een neutrale waarde.

Ik heb inmiddels ook de standaard afstandsbediening van de Action schakelaars zover dat hij met Home Assistant praat. Die schakelaar heeft 5 x 2 knopjes, steeds een voor aan en een voor uit. De werking is vergelijkbaar alleen geeft hij 10 verschillende codes door (voor elk knopje 1) in tegenstelling tot de enkele code van de andere schakelaar. De code ziet er iets complexer uit, hieronder is een voorbeeld met 4 van de 10 knoppen geprogrammeerd. De bovenste twee weer voor de kerstboom, de twee eronder voor de lamp bij de TV.

- id: automation09
  alias: Woonkamer remote
  trigger:
    platform: template
    value_template: '{{ states.sensor.knop433.state == "05D66F" or states.sensor.knop433.state == "05D66E" or states.sensor.knop433.state == "05D66D" or states.sensor.knop433.state == "05D66C"}}'
  action:
    service_template: >
      {%- if states.sensor.knop433.state == "05D66F" or states.sensor.knop433.state == "05D66D"-%}
      homeassistant.turn_on
      {%- elif states.sensor.knop433.state == "05D66E" or states.sensor.knop433.state == "05D66C" -%}
      homeassistant.turn_off
      {%- endif %}
    data_template:
      entity_id: >
      {%- if states.sensor.knop433.state == "05D66F" or states.sensor.knop433.state == "05D66E"-%}
      switch.kerstboom
      {%- elif states.sensor.knop433.state == "05D66D" or states.sensor.knop433.state == "05D66C" -%}
      switch.tv_lamp
      {%- endif %}

Het principe voor de andere zes knoppen lijkt me duidelijk.

Al met al blijft het principe van het via 433Mhz schakelen van apparaten of verzenden van data in huis geinig. Het is simpel, beperkt (statusinformatie of bevestiging van ontvangst van bericht ontbreken, er is geen beveiliging van het signaal) maar spotgoedkoop. Met name het gebrek aan beveiliging (ja, in principe kun je nu op straat voor mijn huis gaan staan en mijn kerstboom uitschakelen als je de bovenstaande code goed begrijpt) is op de langere termijn natuurlijk wel een ding.

0 0 stemmen
Bericht waardering
1 Reactie
Inline Feedback
Bekijk alle reacties
trackback

Draadloze schakelaar met Sonoff RF Bridge + TASMOTA + Home Assistant https://t.co/rHIwvaFwvK