Sluit je standaard rookmelder aan op Home Assistant

Home Assistant is een krachtige tool om je huis te automatiseren. Vele verschillende componenten zijn geintegreerd: Zigbee, 433MhZ, Z-wave et cetera. Maar slimme sensoren zijn vaak wel duur... Wie handig is, kan veel geld uitsparen: vaak kun je een ESP01 (de kleinste ESP8266-microprocessor) aan een bestaand apparaat toevoegen. In deze blog ga ik in op een rookmelder.

Disclaimer: deze blog is niet geheel origineel. YouTuber Martin Ger heeft over het technische aspect een video gemaakt. Mijn toevoeging ligt hoofdzakelijk in de koppeling met Home Assistant.

Zoals Martin Ger in zijn video uitlegt, werken rookmelders doorgaans met een IC (bijvoorbeeld de MC145010). Niet alle pinnen van dat IC worden in de rookmelder daadwerkelijk gebruikt. Zo is er een I/O-pin die bij alarm naar HIGH springt. Die pin doet in de goedkope rookmelders niets. Tijd dus, om iets aan te hangen!

Hardware

Het idee werkt als volgt. Je programmeert een ESP01 zo dat deze bij het inschakelen contact maakt met een ander systeem om de rookmelding door te geven. De ESP01 is dus bepaald niet slim: inschakelen is alarm slaan. Eerst moeten we er dus voor zorgen dat de ESP01 wordt ingeschakeld bij alarm. Daarvoor heb je nodig:

  • rookmelder;
  • diode (in geval van nood volstaat een LED);
  • twee weerstanden, 580 Ohm en 6,8 kOhm;
  • transistor BC547;
  • spanningsregelaar LD1117 of vergelijkbaar;
  • een ESP01!

Rookmelders werken doorgaans op 9V. Dat is veel meer dan de 3,3V waarop een ESP01 werkt, dus we moeten een spanningsregelaar plaatsen. Tussen de spanningsregelaar en het IC plaatsen we een transistor. De transistor werkt als een schakelaar. Hij heeft drie pootjes: de collector, emitter en de basis. Als de basis spanning krijgt (via de HIGH output van het IC), worden collector en emitter met elkaar verbonden. Daardoor wordt de spanningsregelaar verbonden met 9V en GROUND, begint te werken en geeft de ESP01 de vereiste 3,3V.

Het schema van Martin Ger bevat verder nog een diode (zie het als een terugslagventiel dat voorkomt dat er iets terugstroomt naar het IC) en een spanningsverdeler bestaande uit twee weerstanden (al is mij niet duidelijk waarom).

Ik heb ook enkele First Alert rookmelders die op twee penlites werken (2 x 1,5V = 3V). Daarop kun je hetzelfde principe loslaten, want ook het IC dat daarin zit (een ander type dan Martin Ger beschrijft) heeft een I/O-pin. Ik vraag mij echter af of twee penlites voldoende vermogen bevatten om de rookmelder te laten werken en een ESP01 aan te drijven. Omdat het mogelijk is dat daardoor zowel de rookmelder als de ESP01 ophouden te werken, laat ik de First Alert rookmelder ongemoeid.

Software

Er zijn verschillende methodes om de rookmelder in Home Assitant te integreren. De eerste methode houdt in dat je in de configuratie een input_boolean aanmaakt. De ESP01 stel je dan zo in, dat deze een HTTP-request uitvoert naar de web-API. Vervolgens maak je een automation die bijvoorbeeld alle lichten inschakelt (en via je Google Home of Chromecast een text-to-speech-opdracht uitvoert).

Maak je al gebruik van de MQTT-component van Home Assistant? Of wil je meerdere melders toevoegen? Dan ligt het voor de hand om een MQTT binary sensor aan te maken. Als je die in de configuratie als device_class "smoke" meegeeft, herkent Home Assistant deze bovendien automatisch als rookmelder.

Zoals intussen bekend is, ben ik fan van Espruino. Espruino is firmware met ingebouwde javascript-interpreter. Espruino heeft een standaard MQTT-module, maar die gebruik niet. De ESP01 heeft heel weinig geheugen, en daarom gebruik ik tinyMQTT:

// Settings
  var w = {
    ssid    : 'ssid',
    pass    : 'passwd',
  };
  var m = {
    host    : 'mqtt-server',
    topic   : 'thuis/verdieping/kamer/rookmelder',
    payload : 'on'
  };

  // MQTT-lib; Espruino's MQTT could also be used but is bigger
  var mqtt = require("https://github.com/olliephillips/tinyMQTT/blob/master/tinyMQTT.js").create( m.host );

  // Setup event handlers (before connecting)
  mqtt.on("connected", function(){
    mqtt.subscribe( m.topic );
    mqtt.publish( m.topic, m.payload );
  });

  mqtt.on("message", function(msg){
    console.log("Topic   : ", msg.topic);
    console.log("Message : ", msg.message);
  });

  mqtt.on("published", function(){
    console.log("message sent");
  });

  mqtt.on("disconnected", function(){
    console.log("disconnected");
  });

  // Connect to wifi and initialize MQTT
  require("Wifi").connect( w.ssid, { password: w.pass }, function(){
    mqtt.connect();
  });

Ga je voor de MQTT-optie, dan is een MQTT-client op de PC een must om te testen. Ik kan MQTTBox, de Chrome-plugin, aanbevelen.

Het testen van de batterijen wordt leuk, want je kijkt meteen of Home Assistant meepiept! Onthoud: jaarlijks de batterij vervangen, en een etiketje met de datum erop zodat je niet vergeet wanneer de batterij is geplaatst.

Over Thijsmans

Thijsmans houdt van internet, techniek en het snijvlak daarvan. Hij klopt vloeiend PHP, MySQL, HTML, CSS en Javascript, maar is niet gehinderd door enige elektrotechnische kennis. De hier beschreven gebeurtenissen moeten dan ook vooral niet worden opgevat als advies of wijsheid, maar als verslaglegging voor de mensheid. Do not try this at home!

 

Meer inhoud als dit:

© 2019 @Thijsmans