Régi vágyam egy okos otthon létrehozása. Elindultam a megvalósítás rögös útján, ebben a cikkben az első lépésekről lesz szó. Megtudhatjátok, milyen szervert, milyen platformot, milyen kamerát, szenzort, távirányítót választottam.
Szerver
Van ugyan otthoni szerverem, de nekem fontos, hogy az okos otthon független legyen tőle, működjön akkor is, ha a szervert újraindítom valamiért. Ezért szükséges egy külön szerver beüzemelése, az Orange Pi Zero-ra esett a választásom. Kicsi, 4 magos, 512 MB RAM-mal rendelkezik, képes vezetékes és WiFi hálózatra is csatlakozni.
Hálózat
Biztonsági okok miatt szükséges, hogy az okos otthonhoz tartozó eszközök el legyenek különítve az itthoni hálózat számítógépeitől és csak az az eszköz érje el az internetet amelyiknek feltétlenül szükséges. Nem szeretném, pl ha idegenek is elérnék a kamerámat. Elővettem tehát a régi routeremet és a segítségével létrehoztam egy fizikailag elkülönített alhálózatot. A számítógépemről, mobilomról viszont szeretném elérni a rendszert, ezért az Orange Pi Zero tagja mindkét hálózatnak. Az nem elég, ha csak itthonról tudom vezérelni az eszközöket, ezért Tor hidden service segítségével érem el kívülről a rendszert.
Valahogy így néz ki:
Home Assistant, MQTT
A rendszer központjának a Home Assistant nevű nyílt forráskódú otthon automatizáló platformot választottam. Rengeteg (jelenleg 829) komponense van, melyek segítségével különböző eszközöket lehet a rendszerbe kötni. Az MQTT segítségével saját fejlesztésű eszközzel is képes kommunikálni. Képes különböző események és feltételek esetén automatizmusra. Szép grafikonokat rajzol a különböző adatokból. Lentebb látható néhány kép a webes felületéről:
MQTT brokernek a Mosquitto-t használom.
Szenzor
A nappaliban egy NodeMCU alapú eszköz méri a hőmérsékletet, páratartalmat és a légnyomást, és persze lehet kapcsolgatni a rajta lévő kék LED-et :). Természetesen MQTT-n keresztül tartja a kapcsolatot a Home Assistant-al. Már írtam egy cikket Arduino csatlakoztatása Mosquitto MQTT szerverhez címmel, az abban említett eszközt fejlesztettem tovább: egy témába küldi az adatokat JSON formátumban és lecseréltem a szenzort BME280-ra. A firmware változások megtalálhatóak GitHub-on.
Csak néhány sor kell a Home Assistant configuration.yaml nevű fájljába:
sensor:
- platform: mqtt
state_topic: "smarthome/livingroom/state"
name: "Nappali hőmérséklet"
unit_of_measurement: "°C"
value_template: "{{ value_json.temperature }}"
- platform: mqtt
state_topic: "smarthome/livingroom/state"
name: "Nappali légnyomás"
unit_of_measurement: "Pa"
value_template: "{{ value_json.pressure }}"
- platform: mqtt
state_topic: "smarthome/livingroom/state"
name: "Nappali páratartalom"
unit_of_measurement: "%"
value_template: "{{ value_json.humidity }}"
- platform: mqtt
state_topic: "smarthome/livingroom/state"
name: "Nappali szenzor feszültség"
unit_of_measurement: "V"
value_template: "{{ value_json.vcc }}"
switch:
- platform: mqtt
name: "Kék LED"
state_topic: "smarthome/livingroom/blueled"
command_topic: "smarthome/livingroom/blueled"
payload_on: "1"
payload_off: "0"
qos: 1
retain: true
És a groups.yaml-be, hogy megjelenjen a felületen:
groups:
nappali:
name: Nappali
control: hidden
entities:
- light.nappali_vilagitas
- sensor.nappali_homerseklet
- sensor.nappali_legnyomas
- sensor.nappali_paratartalom
- sensor.nappali_szenzor_feszultseg
- switch.kek_led
A light.nappali_vilagitas
sor már a világításhoz tartozik, arról lentebb fogok írni.
[]{#escamg02}
IP kamera
A bejárati ajtót egy Escam G02 figyeli. Támogatja az ONVIF protokollt, elvben egyszerű lett volna bekötni a Home Assistant-ba, a gyakorlatban meg volt egy olyan problémám, hogy a Home Assistant HTTP-n keresztül akart a kamerával kommunikálni, miközben az TCP-n tud csak. Hosszas keresgélés után megtaláltam a snapshot linkjét. Nem baj, hogy kép, ugyanis a Home Assistant periodikusan frissíteni fogja miközben a felületet nézzük.
configuration.yaml:
camera:
- platform: generic
name: Kamera
still_image_url: http://192.168.1.10/cgi-bin/hi3510/snap.cgi?&-getstream&-chn=1
username: !secret camera1_user
password: !secret camera1_password
groups.yaml:
groups:
camera:
name: Kamera
icon: mdi:camera
entities:
- camera.kamera
Szép képe van sötétben is:
Távirányító
Sokszor jól jött volna tavaly nyáron, ha távolról be tudjuk kapcsolni a klímát. Ennek megoldására egy Broadlink RM Mini 3 lett a rendszerbe kötve. Ez egy WiFi-s infra távirányító. A programját csak addig használtam, míg beállítottam rajta a hálózatot. Őt is ismeri a Home Assistant.
Néhány sor kell a konfigurációs fájlba:
switch:
- platform: broadlink
host: 192.168.0.153
mac: B4:43:0D:F9:33:75
timeout: 15
switches:
airconditioner:
friendly_name: Légkondi
command_on: JgCSAAABKJIWNRYRFxEWNRcRFhEWNRcRFhEXERYRF...
command_off: JgCSAAABJ5IXNRYRFhIWERYRFxEWNRYSFhEWERcR...
A parancsok végét levágtam, azt úgyis ki kell deríteni. Először a fenti kódrészlet első 4 sorát kell beállítani. Majd a Home Assistant újraindítása után a webes felület Services oldalán lévő űrlapot kitöltve, lehet elindítani a gomb tanulási folyamatot. Mint a lenti képen is látszik a domain mezőben ki kell választani a broadlink-et, a service mezőben, pedig a learn_command kezdetű opciót kell kiválasztani.
Ha minden jól megy, a Broadlink RM Mini 3 LED-je fehéren fog világítani, ezután a klíma (vagy más eszköz) távirányítóját felé fordítva, azon megnyomhatjuk a tanítani kívánt gombot. Majd a Home Assistant webes felületének a States oldalán lesz egy új panel a parancs kódjával, ezt kell beírni a fenti konfigurációba. Ezeket a lépéseket minden gombbal és eszközzel meg kell csinálni amit meg akarunk vele tanítani.
Világítás
Nézegettem a Sonoff Touch nevű villanykapcsolót, de albérletben lakunk ezért nem akarom lecserélni a jelenlegit. Maradtak az okos izzók, a Xiaomi Yeelight okos izzóit választottam, mert jó árban vannak és a Home Assistant támogatja. Próbaképp egy Xiaomi Yeelight Smart White LED Bulb került a nappaliba, a hálóba pedig egy Xiaomi Yeelight RGB.
Az okos izzók beállításához fel kell telepíteni a Yeelight alkalmazást. Mint később kiderült, sajnos az izzóknak szükségük van internet elérésre induláskor. Valószínűleg "haza telefonálnak" és amíg ez meg nem történt nem lehet őket irányítani. A beállításuk a configuration.yaml-ben:
light:
- platform: yeelight
devices:
192.168.1.103:
name: Hálószoba világítás
transition: 1000
use_music_mode: true
192.168.1.104:
name: Nappali világítás
transition: 1000
use_music_mode: true
További tervek
Az, hogy nem akarok nagy átalakításokat végezni az albérletben eléggé behatárolja a lehetőségeket. Azért van néhány dolog amit mindenképpen szeretnék megvalósítani:
- Továbbfejleszteni a szenzort, hogy képes legyen OTA frissítést fogadni
- Szeretnék a hálószobába is egy szenzort
- A kamera most minden mozgásnál menti a képet, ez pazarlás, kelleni fog egy érzékelő az ajtóra.
- Akvárium vezérlő (ez még nincs eldöntve, mennyire lesz integrálva a rendszerbe)
- Ugyan elég kezelhető a Home Assistant mobilról, de én szeretnék írni egy android alkalmazást amivel elérem a rendszert bárhonnan
- Automatizált folyamatokat létrehozni
Prezentáció
Volt szerencsém előadni a II. DIY Okosotthon Meetupon, lentebb megtekinthetitek az előadás diáit: