Első lépések az okos otthon felé

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:

Network diagram




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:

Home Assistant dashboard Home Assistant camera Home Assistant Kodi Home Assistant news Home Assistant lab Home Assistant history

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.

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:
Escam G02 night vision

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.
Broadlink RM Mini 3 learn command
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:




Címke: , , , , , ,
Top