Gyengus™ weblapja

Adatok hosszú távú tárolása és vizualizációja

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.

Kategóriák: IT
Dátum: 2018. április. 16.
Ha tetszett a cikk, oszd meg barátaiddal:
« »