Home-Assistant
integrácia open-source systému pre automatizáciu domácnosti
About
Home-Assistant je open-source nástroj na správu inteligentnej domácnosti. Je napísaný v jazyku Python a je široko konfigurovateľný. Je obľúbený aj vďaka integrácii veľkého množstva zariadení určených pre inteligentnú domácnosť. Príklady jeho použitia si môže pozrieť na demo stránke.
My si dnes vyskúšame do neho integrovať vlastné zariadenia, ktoré budú komunikovať prostredníctvom protokolu MQTT - jednoduchý teplotný senzor a jednoduchý spínač.
Goals
- zoznámiť sa so základmi používania aplikácie Home-Assistant
- vytvoriť dashboard senzorov inteligentného laboratória OpenLab
- naučiť sa vytvárať vlastné MQTT ovládače
Content
Get Ready
V prvom kroku rozšírime konfiguráciu nášho
docker-compose.yaml
súboru a vykonáme prvotnú konfiguráciu
tohto nástroja.
Task
Rozšírte svoj súbor docker-compose.yaml
o nástroj
Home-Assistant.
- obraz
homeassistant/home-assistant:stable
- volume pre nastavenie rovnakého času ako na hosťovskom počítači
/etc/localtime:/etc/localtime:ro
- volume konfiguráciu v lokálnom priečinku
./homeassistant:/config
- sieť spoločná s ostatnými kontajnermi v kompozícii
- zverejnený port
8123
Poznámka
V dokumentácii HA môžete nájsť, že kontajner treba spúšťať s režimom
siete host
. To znamená, že kontajner HA bude zdieľať
rovnakú sieť ako hostiteľský systém. To sa používa, ak plánujeme HA
nasadiť do reálnej prevádzky a potrebujeme, aby mal konektivitu
identickú s hostiteľským systémom. Pre naše účely však postačí iba
zverejniť port.
Upozornenie
Ak použijete režim siete host
a spustíte kompozíciu vo
WSL systému Windows, nebudete sa môcť na rozhranie HA pripojiť. Je to
kvôli tomu, že WSL využíva vlastnú sieť, ktorá nie je z
localhost
-u dostupná.
Task
Spustite kompozíciu.
Výsledkom spustenia sa v priečinku spustenia vytvorí priečinok
homeassistant/
, ktorý obsahuje aktuálnu konfiguráciu
HA.
Task
Otvorte prehliadač na adrese http://localhost:8123 a prejdite prvotnou konfiguráciou.
- vytvorte si účet používateľa zadaním prihlasovacieho mena a hesla
- nastavte svoju lokáciu
- v zozname nájdených zariadení (integrácií) zvoľte možnosť More a pridajte integráciu MQTT
- nastavte adresu MQTT broker-a na
openlab.kpi.fei.tuke.sk
- potvrďte zariadenia, ktoré sa HA podarilo zistiť pri prvom spustení
Task
Rozhliadnite sa v prostredí systému.
Upozornenie
Zatiaľ nijak neupravujte panel v základnom prehľade - prídete o možnosť automatického detegovania nových entít (prvkov v dashboard-e).
Task
Skontrolujte, či je pridaná a nastavená integrácia MQTT
Integrácie nájdete v
Configuration -> Devices & Services
. Po stlačení
tlačidla Configure môžete skontrolovať nastavenie
integrácie MQTT.
Ak tam integráciu nemáte, pridajte ju a nastavte adresu MQTT broker-a
na openlab.kpi.fei.tuke.sk
. Integráciu je možné pridať
priamo na obrazovke integrácií tlačidlom Add
integration, alebo je možné integráciu pridať manuálne v ďalšom
kroku.
Task
Otvorte súbor s konfiguráciou configuration.yaml
v
priečinku homeassistant/
.
V tomto súbore sa nachádza manuálna konfigurácia HA.
Ak ste predtým nepridali integráciu MQTT cez webové rozhranie HA,
pridajte do konfigurácie časť mqtt
, kde špecifikujete MQTT
broker (openlab.kpi.fei.tuke.sk
).
mqtt:
broker: openlab.kpi.fei.tuke.sk
discovery: false
Upozornenie
Predvolená hodnota vlastnosti discovery
je
true
. Ak ju necháte nastavenú na túto hodnotu, HA urobí
operáciu discovery nad verejným broker-om, čo znamená, že
nájdete kopec zariadení, o ktoré nemáte záujem. Naopak - prípadný
útočník by o ne záujem mal. Pre naše experimenty si vystačíme s verejným
broker-om. Pre reálne nasadenie však svoju domácnosť nevystavujte na
verejnosti ;) Môžete použiť napr. obraz eclipse-mosquitto.
Pre aplikovanie zmien v manuálnej konfigurácii reštartujte HA pomocou
menu Configuration > Server Controls > Restart
.
Creating a MQTT Sensor Device
V tomto kroku využijeme senzory, ktoré nám ponúka OpenLab.
Task
Do manuálnej konfigurácie HA pridajte do časti sensor
senzor reprezentujúci teplotný senzor OpenLab-u.
sensor:
- platform: mqtt
state_topic: "openlab/sensorkits/<MAC>/atmp"
name: "OpenLab Temperature Sensor"
Namiesto časti <MAC>
je potrebné doplniť MAC
adresu senzora v OpenLab-e, ktorý ste si vybrali. Informácie o senzoroch
nájdete v dokumentácii OpenLab-u.
Poznámka
Senzor alebo obecne entita môže mať samozrejme výrazne viac
vlastností, ako len uvedené. Môžete si ho rozlične upravovať napr.
pridaním ikony (kľúč icon
) alebo jedinečného identifikátora
(kľúč unique_id
). Viac informácií o upravovaní entít
nájdete v dokumentácii.
Upozornenie
Ak nie ste pripojený ku školskej sieti TUKE, nastavte si TUKE VPN, aby ste mohli komunikovať so zariadeniami v OpenLab-e.
Task
Overte, či bol senzor naozaj vytvorený.
Po reštartovaní by sa vám senzor mal zobraziť na prehľadovej obrazovke HA.
Task
Vytvorte entity v HA aj pre ďalšie senzory OpenLab-u
Okrem teploty OpenLab ponúka aj meranie:
- intenzity svetla
- atmosférického tlaku
- vlhkosti
- hluku
OpenLab Floorplan
Aby veci vyzerali ešte zaujímavejšie, umožňuje HomeAssistant vytvoriť aj náhľad vašej domácnosti pomocou obrázkového podkladu. Ak tento obrázok predstavuje pôdorys domácnosti, viete naň umiestniť jednotlivé senzory a zariadenia na ich presné lokácie. V tomto kroku si ukážeme, ako na to.
Task
Do panelu Prehľad vložte kartu Obrázkový element.
Task
Upravte konfiguráciu Obrázkového elemtu pridaním pôdorysu podlahy OpenLab-u a jednotlivých senzorov a akčných členov, ktoré máte nakonfigurované.
Obrázok pôdorysu OpenLab-u vo formáte .svg
môžete získať z tejto
adresy.
Jednotlivé senzory môžete reprezentovať ako ikony, ktoré zobrazia
aktuálnu teplotu po kliknutí na príslušný senzor. HomeAssistant
používa Material Design
Icons, takže ak chcete napríklad použiť ikonu teplotného senzora,
môžete použiť identifikátor mdi:thermometer
.
Samozrejme môžete experimentovať aj s inými spôsobmi vizualizácie.
Konfigurácia pre zobrazenie jedného teplotného senzora môže vyzerať napríklad takto:
type: picture-elements
title: OpenLab Floorplan
elements:
- type: state-icon
entity: sensor.openlab_temperature_sensor_1
icon: mdi:thermometer
style:
bottom: 5%
left: 36%
image: http://mirek.s.cnl.sk/download/openlab-podorys.svg
Task
Overte úspešnosť svojej implementácie.
Ak ste postupovali správne, na pôdoryse laboratória uvidíte teplotný senzor, na ktorý ak kliknete, tak sa vám zobrazí jeho aktuálna hodnota.
Creating an MQTT Device as a Remote Controller
Teraz vytvoríme jednoduchý svetelný ovládač.
Okrem manuálneho pridávania entít do konfigurácie HA môžeme nechať zariadenia sa automaticky „ohlásiť” pri spustení. Využitím špeciálnej MQTT Discovery témy sa zariadenie automaticky pridá do nášho HA.
Task
V Node-RED vytvorte nový
flow
reprezentujúci ďiaľkový ovládač
Task
V novom flow-e pridajte MQTT uzol na odosielanie Discovery správ
MQTT
Discovery téma musí spĺňať špeciálny formát
<discovery_prefix>/<component>/[<node_id>/]<object_id>/config
.
- Časť
<discovery_prefix>
je v základehomeassistant
, ale je možné ju nastaviť na inú hodnotu v manuálnej konfigurácii HA. - Časť
<component>
predstavuje typ entity, ako napríkladsensor
z predošlého kroku. V tomto prípade však chceme ovládať svetlá, takže komponent sa bude volaťlight
. - Časť
<node_id>
je dobrovoľná pre štruktúrovanie MQTT tém a nemusíme ju využívať. - Časť
<object_id>
je ID zariadenia, ktoré sa má „ohlásiť“. Využíva sa na identifikáciu zariadení, aby bolo jasné, ku ktorému Discovery správa patrí. Pre účely tohto cvičenia použite jednoznačný identifikátor, ako napríklad svoj jedinečný LDAP username. - Téma končí kľúčovým slovom
config
.
Výsledná téma teda bude vyzerať nejak takto:
homeassistant/light/<username>/config
.
Task
Pridajte uzol inject
pre generovanie Discovery správ
Ako Discovery správy budeme posielať konfiguráciu zariadenia, ktorá
je identická s tou, ktorú by sme zadávali do manuálnej konfigurácie HA.
Na generovanie týchto správ môžeme využiť uzol inject
, v
ktorom do payload
budeme ukladať objekt typu JSON.
Obsah správy môže vyzerať napríklad takto:
{
"name": "Loidyho svetlo",
"unique_id": "fg855ni_lights",
"~": "kpi/iot/fg855ni/lights",
"command_topic": "~",
"brightness_command_topic": "~/brightness",
"rgb_command_topic": "~/rgb",
"retain": true,
"qos": 1,
"icon": "mdi:lightbulb"
}
Poznámka
Vlnovku "~"
môžeme využiť ako premennú pre uloženie
časti MQTT správy pre ovládanie svetiel.
Poznámka
Atribút "unique_id"
nie je nutné zadávať, avšak ak ho
tam nedáme, pripravíme sa o možnosť konfigurovať toto zariadenie priamo
vo webovom rozhraní HA.
Poznámka
Ak by sme toto zariadenie pridávali do konfigurácie HA manuálne, v
configuration.yaml
by to vyzeralo nasledovne:
light:
- platform: mqtt
name: "Loidyho svetlo"
unique_id: fg855ni_lights
command_topic: "kpi/iot/fg855ni/lights"
brightness_command_topic: "kpi/iot/fg855ni/lights/brightness"
rgb_command_topic: "kpi/iot/fg855ni/lights/rgb"
retain: true
qos: 1
icon: mdi:lightbulb
Task
Overte, či bol ovládač pridaný do panelu HA a či funguje správne.
Na paneli lovelace
by sa vám malo automaticky zobraziť
tlačidlo pre ovládanie svetiel. Po jeho zapnutí sa vám zobrazí aj paleta
farieb pre ovládanie RGB. Ikona entity sa sfarbí podľa stavu
svetiel.
Poznámka
Počas cvičenia uvidíte entity aj svojich spolužiakov, keďže aj ich Discovery správy sa šíria cez spoločný MQTT broker.
Creating custom Home Assistant dashboard
Na záver vytvoríme panel s vlastnými druhmi kariet.
Task
Pridajte si v prehľade ďalšie karty pre zobrazenie hodnoty z teplotného senzora iným spôsobom.
V pravom hornom rohu prehľadu si rozbaľte menu a vyberte si položku
Edit Dashboard
. V nej môžete upraviť vzhľad a rozloženie
celého prehľadu. Napríklad môžete:
- zobraziť teplotu vo forme budíka (gauge)
- zobraziť graf buď pomocou karty
History Graph
aleboSensor
Additional Tasks
Task
Vytvorte ovládač pre svetlá v OpenLab-e
Svetlá v OpenLab-e využívajú MQTT tému openlab/lights
.
Tvar správy je však vo veľmi špecifickom formáte, ako je vysvetlené v dokumentácii
OpenLab-u. Ovládanie je možné dosiahnuť dvoma spôsobmi:
Je možné využiť schémy typu
template
priamo v HA. Šablónytemplate
v HA využívajú šablonovací systém Jinja. Konfigurácia sa môže pridať manuálne doconfiguration.yaml
alebo sa získa automaticky cez Discovery správu.Druhou možnosťou je vytvoriť adaptér medzi štandardným HA typom správ (využije sa základná schéma) a komunikáciou so svetlami. Toto je možné vytvoriť napríklad aj ako flow v Node-RED s uzlami
mqtt in
(na príjem správ z HA),function
(na konverziu správy na špeciálny formát pre OpenLab) amqtt out
/http request
(na ovládanie svetiel). Podobným spôsobom by to malo byť spravené aj opačným smerom pre aktualizáciu stavu svetiel v HA.
Additional Links
Home-Assistant - domovská stránka nástroja Home-Assistant