perjantai 10. helmikuuta 2017

Wifi langaton sähkökytkin

Taloautomaatioprojektiin pikkuista päivitystä. Edelleen on ikuisuusprojekti ohjata kaksikärkisiä releita vielä vaiheessa odottamassa kesän isyyslomia, mutta tässä hieman status päivitystä automaatioprojektin etenemiselle.

Muutaman lisäpalikan olen saanut pystyyn projektin edistämiseksi. Muutaman kappaleen olen tilannut Sonoffin ESP8266 pohjaisia langattomia kytkimiä, jotka maksaa 5-6e kappale kotiin toimitettuna (https://www.itead.cc/sonoff-wifi-wireless-switch.htm).

Noiden sisällä oleviin ESP8266 piireihin saa helposti flashattua oman custom firmwaren. Joten muokkasin custom NodeMCU palikan, jota voi ohjata ja kuunnella MQTT:n yli.


Ensimmäiseksi pystytin kotiverkkoon Docker swarm-verkon, jonka päälle sitten asensin clusteroidun Hight Availibility MQTT:n. Suomennettuna siis se tarkoittaa, että MQTT palvelu pysyy pystyssä vaikka yksittäinen kone sattuisi sammumaan tai reboottaamaan. HAProxyn avulla kolme nodea pystyy käsittelemään satoja tuhansia yhtäaikaisia yhteyksiä, joka on enemmän kuin tarpeeksi alle 100:n sähkölaitteen ohjailuun. Eli joo, vähän ammuin yli, kun HA:n ja Docker swarmin opiskelu sattui vain kiinnostamaan. Kotiautomaatioon riittäisi kyllä ihan yksittäinen mqtt serverikin. Mutta eipä tuosta haittaakaan ole :).

Julkaisin emqtt docker ja haproxy containerit githubissa ja docker hubissa, jos joku muukin sattuisi tarvitsemaan itselleen. https://github.com/rainisto/docker-emqtt ja https://github.com/rainisto/haproxy-emqtt
docker network create --driver overlay --subnet 10.0.1.0/24 mqtt
docker service create --constraint "node.hostname==node1.local" --name emqtt-master --network mqtt -e NODE_IP=emqtt-master rainisto/emqtt
docker service create --constraint "node.hostname==node2.local" --name emqtt-node1 --network mqtt -e NODE_IP=emqtt-node1 -e MASTER=emqtt-master rainisto/emqtt
docker service create --constraint "node.hostname==node3.local" --name emqtt-node2 --network mqtt -e NODE_IP=emqtt-node2 -e MASTER=emqtt-master rainisto/emqtt
docker service create --name haproxy-emqtt --network mqtt -p 1883:1883 -p 18083:18083 rainisto/haproxy-emqtt
docker service scale haproxy-emqtt=3
Releen tilaa voi ohjata ihan manuaalisesti Sonoff:ssa olevaa nappia painamalla, tai sitten mqtt publish/subscribe avainta muuttamalla. Esim:

# esimerkki kuunnella lastenhuoneen pilvilampun tilaa
mosquitto_sub -v -t "/home/leikkihuone/pilvi/state" -h 192.168.1.9
# lampun laitto päälle
mosquitto_pub -t "/home/leikkihuone/pilvi" -m "ON" -h 192.168.1.9
# lampun laitto pois
mosquitto_pub -t "/home/leikkihuone/pilvi" -m "OFF" -h 192.168.1.9
Esimerkissä käytetyt NodeMCU lua scriptit voi ladata täältä: https://github.com/rainisto/sonoff-nodemcu

Pikkuisen vielä muokkasin tuota, että kuumaliimasin nelireikäisen dupont liittimen tuohon kylkeen kiinni, niin on helppo tehdä mahdollisia softapäivityksiä jälkeenpäin ilman että tarvii koteloa avata.