Egy okos otthonnál a különböző szenzorok rengeteg adatot összegyűjtenek az idők folyamán. Persze, el lehet őket dobni, de ha már gyűlnek, akkor kezdeni akartam velük valamit. Érdekes lehet például összehasonlítani két egymást követő tél adatait, ha a kettő között volt egy hőszigetelés vagy fűtéskorszerűsítés. Ehhez el kell menteni az adatokat, melyekből a Grafana grafikonokat tud generálni.
Influxdb és Chronograf
A Home Assistant alapbeállítás szerint egy SQLite adatbázisba menti az események és az állapotok adatait. A Logbook és a History komponense onnan olvassa ki az adatokat. Nálam egy Orange Pi Zero-n fut a rendszer és sajnos ez a művelet nagyon erőforrásigényes. Volt, hogy kilépett a Home Assistant miután a Logbook menüpontra kattintottam. Minél több az adat, annál kezelhetetlenebb. Ezért az adatok hosszú távú tárolására az InfluxDB-t használom.
Szerencsére van hivatalos Docker image belőle, így könnyen fel lehet telepíteni. A következő paranccsal lehet legeneráltatni az alapértelmezett konfigurációs fájlt:
$ docker run --rm influxdb influxd config > influxdb.conf
Készítettem egy docker-compose.yml fájlt:
version: '2'
services:
influxdb:
image: influxdb:alpine
container_name: influxdb
restart: always
ports:
- "8086:8086"
volumes:
- ./data/:/var/lib/influxdb
- ./influxdb.conf:/etc/influxdb/influxdb.conf:ro
environment:
INFLUXDB_ADMIN_USER: "admin_user"
INFLUXDB_ADMIN_PASSWORD: "admin_password"
Adatbázis inicializálása:
$ docker run --rm \\
-e INFLUXDB_DB=db_name \\
-e INFLUXDB_ADMIN_USER=admin_user -e INFLUXDB_ADMIN_PASSWORD=admin_password \\
-v ./data:/var/lib/influxdb \\
influxdb /init-influxdb.sh
Majd egy
$ docker-compose up -d
parancssal elindítható az InfluxDB.
Az InfluxDB-nek nincs adminisztrációs felülete, ha szükségünk van rá, akkor a Chronograf nevű programot kell használni. Ez is elérhető a Docker Hub-ról. Ő is kapott egy docker-compose.yml fájlt a könnyebb kezelhetőség miatt:
version: '2'
services:
chronograf:
image: chronograf:alpine
container_name: chronograf
restart: always
ports:
- "8888:8888"
volumes:
- ./data/:/var/lib/chronograf
Miután elindult az InfluxDB majd a Chronograf docker konténer, a Chronograf felületét a http://gépnév:port címen lehet elérni. Először meg kell adni a kapcsolódási adatokat. Az InfluxDB-hez annak HTTP API-ján keresztül kapcsolódik, a telegraf adatbázis nevét mindenképpen meg kell adni, anélkül nem engedett tovább, cserébe nem baj, ha nem létezik.
Biztonsági okokból érdemes felhasználókat létrehozni, ezt az InfluxDB Admin menüpont alatt lehet megtenni.
A Chronograf-ot le lehet állítani, ha éppen nincs rá szükség.
Home Assistant InfluxDB kapcsolat
Az alábbiak szerint állítottam be a Home Assistant InfluxDB komponensét:
influxdb:
host: influxdb_host
username: influxdb_user
password: influxdb_password
exclude:
domains:
- group
- updater
- weblink
- camera
- zone
entities:
- sun.sun
- sensor.since_last_boot
- sensor.ipv4_address_eth0
- sensor.ipv4_address_wlan0
- sensor.load_1m
- sensor.load_5m
- sensor.load_15m
- sensor.date
- sensor.time
- sensor.date__time
- sensor.pws_weather
- sensor.pws_uv
- sensor.pws_weather_1d_metric
- sensor.pws_weather_1n_metric
- sensor.pws_weather_2d_metric
- sensor.pws_weather_2n_metric
- sensor.pws_weather_3d_metric
- sensor.pws_weather_3n_metric
- sensor.pws_weather_4d_metric
- sensor.pws_weather_4n_metric
tags:
source: homeassistant
tags_attributes:
- friendly_name
Megadtam néhány domaint és entityt amit nem akarok elmenteni, ill hozzáadattam az entityk friendly_name attribútumát. A Home Assistant ujraindítás után folyamatosan továbbítja az adatokat az InfluxDB adatbázisba.
Grafana
Mit ér a sok elmentett adat, ha nem jelenítjük meg? A Grafana segítségével könnyen létre lehet hozni látványos és interaktív grafikonokat az adatokból. Szintén letölthető a Docker Hub-ról. Ehhez is készítettem egy docker-compose.yml fájlt:
version: '2'
services:
grafana:
image: grafana/grafana
container_name: grafana
restart: always
ports:
- "3000:3000"
volumes:
- ./data/:/var/lib/grafana
Így már könnyedén indítható egy
$ docker-compose up -d
parancssal. A Grafana oldalán lehet találni hozzá különböző plugineket, vannak adatforrások és grafikonok is. A webes felületről telepítés nekem nem sikerült, szóval a data/plugins könyvtárba csomagoltam ki a kiválasztott plugineket. A docker konténer újraindítása után lehet őket használni.
Először az adatforrást állítottam be, a Grafana is HTTP API-n keresztül kapcsolódik az InfluxDB-hez. Beállítottam neki az InfluxDB IP címét, a felhasználói adatokat és az adatbázis nevét.
Létrehoztam egy dashboardot, hozzáadtam egy panelt amit szerkesztve lehet állítani a grafikont, megadni a queryt:
Mint látható, egy szerkesztőben lehet összekattintgatni a lekérdezést amiből egy grafikonhoz többet is hozzá lehet adni. Közben mutatja is, hogy fog kinézni. Rengeteg beállítási lehetőség van, többek között megadhatjuk a színeket, a tengelyek beosztását. El lehet vele szórakozni :) Jelenleg két dashboardom van, az egyiken az okos otthonhoz kapcsolódó mért adatok vannak, a másikon a szerver adatai (pl processzor használat, processzor hőmérséklet, éppen futó lekérdezések és hasonlók). Így néznek most ki:
Létre lehet hozni úgynevezett playlisteket is, ekkor a Grafana a megadott időközönként vált a beállított grafikonok között. Jól néz ki nagy monitoron.
Home Assistant MySQL kapcsolat
Sajnos az InfluxDB adatbázisból kiolvasni nem tud a Home Assistant History és Logbook komponense, tehát szükségem van egy MySQL adatbázisra, ha szeretném őket továbbra is használni. Továbbá a Home Assistant SQLite adatbázisa egy fájlban van, a könyvtárában az SD kártyán. Kímélni akartam az SD kártyát, ezért beállítottam, hogy ezek az adatok az otthoni szerveremen lévő MySQL adatbázisba kerüljenek mentésre. Létrehoztam tehát egy új adatbázist és egy új felhasználót ami csak ahhoz az egy adatbázishoz fér hozzá, majd megadtam a hozzáférési adatokat a Home Assistant konfigurációjában:
recorder:
db_url: mysql://felhasznalo:jelszo@192.168.x.x/adatbazis?charset=utf8
purge_keep_days: 7
purge_interval: 1
Természetesen a megfelelő adatokat be kell helyettesíteni. Mint látható, a recordert úgy állítottam be, hogy csak 1 hétig őrizze meg az adatokat.
Mint látható, két docker konténerben futó program (InfluxDB és Grafana) segítségével készíthetünk látványos grafikonokat, melyeken látszanak az okos otthon által gyűjtött adatok közötti összefüggések.