Home Assistant, InfluxDB i Grafana. A jak mam wrzucić wykres do HA?

Dzień dobry. 

Kontynuując temat Grafana (Grafany? Nigdy nie wiem czy to powinienem odmieniać, raczej tak…) – prosty sposób na dorzucenie wykresu, zegara, itp. na interface Lovelace.

Po pierwsze primo, trzeba na Panelu wybrać Share:

Po drugie primo, przejść na zakładkę Embed i skopiować tekst 'w ciapkach':

Po trzecie primo, w ui-lovelace.yaml dodać:

      – type: iframe

        id: graf1

        url: http://192.168.1.133:8123/api/hassio_ingress/fp2s44paqPGdZR2V3M7Sr1vI5K0TQu9jH10omYz4w38/d-solo/AHwE-k5Gz/cezar_ha?orgId=1&from=1602835941663&to=1602922341663&panelId=9

        aspect_ratio: 65%

Po czwarte primo, efekt widoczny od razu!

Aktualizacja: najpierw trzeba przejść na zakładkę Grafan, inaczej będziemy mieli błąd autoryzacji :/ Pracuję nad tym.

Kod lada chwila będzie dostępny również na GitHub: http://blog.asobczak.pl/2020/09/29/home-assistant-moje-repozytorium-dostepne-na-github/. Tylko muszę sobie to wszystko poustawiać.

Home Assistant, InfluxDB i Grafana. Ponownie na tapecie. Cześć druga.

Tekst jest kontynuacją artykułu: http://blog.asobczak.pl/2020/10/12/home-assistant-influxdb-i-grafana-ponownie-na-tapecie-czesc-pierwsza/.

Dobra, dane już mamy. Pora je jakoś gdzieś pokazać. Do tego posłuży nam właśnie Grafana. Instalacja podobnie bezproblemowa jak w przypadku innych dodatków.

Pora dodać źródło danych, w naszym przypadku będzie to wcześniej skonfigurowana baza InfluxDB.

W konfiguracji BARDZO ważna sprawa – wszystkie te dodatki są osobnymi kontenerami Dockera, dlatego musimy się posłużyć specjalnym adresem URL aby skierować Grafana na nasz InfluxDB.
Ten adres to: http://a0d7b954-influxdb:8086

Później już standard, który skonfigurowaliśmy: 
– Database: home_assistant
– User: homeassistant
– Password: jak podawaliśmy przy konfiguracji bazy InfluxDB

WAŻNE po raz kolejny. Najpierw ustawiłem HTTP Method na GET, co jest raczej logiczne – w końcu pobieramy dane. Jednak po jednej z aktualizacji nie udało mi się pobrać danych. Zmieniłem za zaleceniem znalezionych sugestii w internecie na POST i zadziałało. Magia…

Skoro źródło mamy, to możemy dodać pierwszy Dashboard. Czyli pulpit na którym umieścimy nasze wykresy, dane, itp. 

Zwróćcie uwagę na opcję Convert to row – przyda nam się później.

Od razu pojawia nam się panel z możliwością wpisania kwerendy (Query – w języku SQL zapytanie do bazy danych, które ma zwrócić pożądane przez nas wyniki). W naszym przykładzie dodaliśmy dwa czujniki temperatury, nie jest więc niczym wielce niezwykłym, że na razie w miarach (czyli typie danych które chcemy pozyskać) jest wyłącznie stopień Celsjusza. Jeżeli dodacie kolejne, pojawi się ich więcej (wilgotność, %, Mbit/s, Watt, cm, kwh) – wszystko zależy od tego co mierzycie.

Świetnie, coś się pojawia. W prawym górnym rogu macie zasięg czasowy jaki nas interesuje (godzina, 24 godziny, dzień, miesiąc, miesiąc do teraz, poprzedni miesiąc, itp.), w prawym dolnym dość ważny parametr. Dane z czujników czasem są podawane w sposób ciągły (na przykład co kilka sekund), ale niektóre robią to przy zmianie ich wartości. Tak jest na przykład z czujnikami temperatury Xiaomi – jeżeli nie ma zmiany w odczycie, to aktualizują się bodajże co 15 minut. To by powodowało na wykresie 'dziury' – dlatego zaznaczcie 'connected'. Stworzy nam to sensowny wykres. 
Rozwińcie później strzałkę przy Legend i sprawdźcie sekcję Values – tam możecie wstawić na wykres pewne informacje dotyczące minimalnej, maksymalnej, średniej i aktualnej temperatury. Ja sobie lubię ją zrobić w formie tabeli, jak poniżej.
Takie panele można duplikować (najedźcie na panel, rozwińcie strzałką w dół -> More… -> Duplicate), dzięki temu możemy później w nie szybko wejść, zmodyfikować kwerendę o nazwę czujnika i wyklikać jak poniżej kilka z nich. Teraz czujecie moc? Nie zapomnijcie zapisywać Dashboardu.

No dobra, wykresy mamy. Do wielu zastosowań jednak przydają się zegary. W poprzednich wersjach Grafana robiło się to trochę inaczej, teraz po dodaniu panelu wybieramy Visualization i zmieniamy jak chcemy, na przykład na Gauge.

Podstawowo wygląda to jak poniżej. Jest pewna wartość, którą system interpretuje w formie 'prędkościomierza'. 

Aby ją trochę ubarwić i zrobić mniej monotonną, więcej znaczącą musicie przejść na zakładkę Fields i zdefiniować Thresholds, czyli zakresy w których mają się zmieniać kolory na podstawie danych.

Od -20 (w sumie to od -max) do 5 stopni – niebieski kolor, bo zimno, później zielony aż do 25, 25 w górę – czerwony. 
Jest tu mnóstwo opcji, możliwości – pokazałem Wam zaledwie mały zarys, można spędzić nad tym wiele godzin. Co jest fantastyczne – można te wykresy osadzić bezpośrednio w HA, ale o tym później. Wcześniej kilka dodatkowych sugestii.
Aby po wejściu w zakładkę Grafana od razu pojawił się Wasz piękny, stworzony w pocie czoła pulpit wejdźcie w Configuration -> Preferences i tam wybierzcie go z listy.

Kolejna sugestia – aby rozdzielić logicznie wykresy, zegary, dane o temperaturze, systemie, itp. – przy dodawaniu panelu wybierzcie Convert to row, o którym pisałem wcześniej. Dodacie sekcję, którą później możecie zwijać, rozwijać – jak Wam wygodnie. Bardzo ułatwia nawigację, gdy będziecie mieli kilkadziesiąt paneli.
Na wykres można oczywiście wrzucić więcej niż jedną serię danych (Download/Upload, Temperatura/Wilgotność), odpowiednią ją sformatować, itp. itd. Ale to już innym razem.

Powodzenia!

Home Assistant, InfluxDB i Grafana. Ponownie na tapecie. Cześć pierwsza.

Dobry wieczór! Coś za często ostatnio witam się wieczorem. Cóż, skoro sezon biegowy jeszcze trwa, dzieci jeszcze przez paręnaście lat samodzielne nie będą, dom się sam nie posprząta – pozostają noce 😀

Dość marudzenia, do sedna. Jakiś czas temu (jak widzę – dokładnie dwa lata temu) opisywałem InfluxDB i Grafan spięte z Domoticz – http://blog.asobczak.pl/2018/10/05/grafana-tworzymy-dashboardy/. Czasy się zmieniły, teraz wszystko jest spięte z Home Assistant, więc i to trzeba było doszlifować. Kolejny raz okazało się, że niepotrzebnie podchodziłem do tego jak 'pies do jeża', bo konfiguracja okazała się prosta, przyjemna i bezproblemowa. Jak to bywa z Home Assistant 😀

Krótkie wyjaśnienie: InfluxDB to relatywnie nowy system baz danych służących to szybkiego zapisu/odczytu ciągów danych uporządkowanych w szeregach czasowych. Brzmi enigmatycznie, ale jest bardzo przydatne do monitorowania parametrów, system IoT (Internet of Things). Czyli dokładnie tego co robimy tutaj 😀 Grafana z kolei jest systemem wizualizacji tych danych. Co prawda InfluxDB ma podobny system już zawarty – Chronograf, ale nie jest on tak potężny i konfigurowalny jak Grafana. Te dwa elementy spięte ze sobą dają prawdziwe 'killer-combo' (jak ktoś grał w Mortal Kombat to może to przyrównać do Fatality, które robił Johnny Cage waląc po jajkach oponentów). Szybkie, efektywne i efektowne. I to wszystko dostępne za kliknięciem w Supervisor Home Assistant. Repozytorium jednego i drugiego dostępne jest na github: https://github.com/hassio-addons/addon-influxdbhttps://github.com/hassio-addons/addon-grafana. W Hass.io instalacja jest bardziej niż prosta, podstawowa konfiguracja w sumie zawiera to, co potrzebujemy do pracy.

Po włączeniu obu dodatków wyciągnąłem je sobie na boczny pasek, aby na razie łatwiej się pracowało.
Dobra, to co już mamy? Mamy dane źródłowe, czyli czujniki (sensors) Home Assistant -> przekazywane do InfluxDB -> z których to później danych skorzysta Grafana.
Co przekazuje InfluxDB dalej? Tak zwane miary (measurement), termin spotykany również w bazach OLAP.

Kolejna sprawa, aby uzmysłowić Home Assistant, że powinien zacząć przekazywać dane czujników, musimy w configuration.yaml dodać wpis jak poniżej:

influxdb:

  username: homeassistant

  password: !secret my_password

  max_retries: 3

  default_measurement: state

#  include:

#    entities:

#      – sensor.temperature_158d0001b95f89

#      – sensor.temperature_158d0002239fbb

Opatrzona komentarzem sekcja (#) mówi o wyborze czujników, których wartości powinny być przekazane do InfluxDB. Ja zdecydowałem na ten moment na wysłanie wszystkiego, dla testów, zabaw i konfiguracji.
Zaczynamy z 'mięsem', czyli konkretami.
Jak widać InfluxDB działa, połączył się.

Pora stworzyć bazę danych w zakładce InfluxDB Admin, gdzie będą zapisywane dane z naszego Home Assistant.

Zakładamy bazę home_assistant, jako domyślną dla HA. Jeżeli chcecie nadać inną, musicie to również uwzględnić w configuration.yaml.
Dalej użytkownik i uprawnienia do bazy. Albo standardowy homeassistant, albo taki jak uważacie – i tak musicie później podać go w configuration.yaml.

Co zrobiliśmy? Uruchomiliśmy dodatek InfluxDB w Home Assistant, stworzyliśmy bazę danych, użytkownika który będzie z niej korzystał oraz przyznaliśmy mu uprawnienia dostępu.
Jeżeli wszystko jest skonfigurowane, dla pewności restart Home Assistant i powinniśmy już widzieć dane w zakładce Explore. Na dole, po lewej, macie nazwę naszej bazy danych – home_assistant.autogen. Ja na początku wybrałem sobie dwa czujniki temperatury, które w powyższym wycinku konfiguracji zostały później wykluczone. Jak widać, pojawiła się jedna miara – stopnie Celsjusza. Gdy je rozwiniemy, pod entity_id widzimy dwa czujniki. Po prawej ujawni nam się lista pól – możemy wybrać 'value'. Coś jest – kropka. No, to już dobry znak!
Z tego co wyczytałem, powinienem się pozbyć miar w stylu °C, co jest całkiem logiczne, bo konia z rzędem temu, kto potrafi znak ° znaleźć na klawiaturze przy pisaniu kwerendy. To będzie następny krok, są na to sposoby.

Na ten moment to tyle. InfluxDB działa, możemy pobrać dane. O tym w następnej części arykułu.

Grafana – tworzymy Dashboardy

Jakiś czas temu (jak sprawdziłem to ponad rok…) opisywałem sposób instalacji InfluxDB i Grafana – http://blog.asobczak.pl/2017/08/14/influx-grafana/. Dopiero ostatnio się zorientowałem, że nie dopisałem kontynuacji tego artykułu – o tworzeniu wykresów. Niniejszym nadrabiam!
Najpierw musimy się dostać do samego serwisu. Jeżeli instalowaliście standardowo, to Grafana jest na porcie 3000, użytkownik to admin, hasło admin. Czyli na przykład http://192.168.1.200:3000.
Po zalogowaniu pierwszym miejscem do którego musicie się udać jest sekcja Configuration -> Data sources -> Add data source. Źródeł jest wiele, między innymi MySQL, Microsoft SQL oraz interesujący nas tutaj InfluxDB. 

Śmiało wybieramy (do odważnych świat należy) i konfigurujemy jak poniżej. Oczywiście, jeżeli zainstalowaliście InfluxDB na innym serwerze, odpowiednio wypełniacie pole URL. Nie zapomnijcie o polu Database, User oraz Password. Jeżeli robiliście to tak jak poprzednio opisałem, jest to domoticz/domoticz/domoticz. Szczyt bezpieczeństwa, którego oczywiście powinniście unikać 😉

Dobra, dążymy do czegoś, co jest przestawione poniżej. Wykresy, wskaźniki, itp. Grafana jest bardzo przyjemnym w pracy narzędziem. Obsługuje Drag and Drop, skalowanie wykresów, układanie ich w sekcje, ustalanie wartości progowych, alarmowanie. Kwestia poświęconego czasu i zaangażowania.
Nadmieniam, że jestem samoukiem w tym temacie, mogę się mylić, pewne rzeczy robić w sposób bardziej skomplikowany niż nakazuje sztuka, ale… Działa 😀
Jedziemy.
Po pierwsze – Create -> Dashboard -> Graph.
I tutaj się na początku zatrzymałem na dłuższą chwilę, bo jakoś nie mogłem zaskoczyć co i jak mam zrobić.
Klikamy Panel Title -> Edit.
I powoli temat zaczyna się rozjaśniać, Grafana automatycznie przenosi nas na zakładkę Metrics, gdzie będziemy budować proste (lub bardziej zaawansowane) kwerendy (czyli zapytania) do bazy danych. Mój konik, więc mogę się trochę rozpędzić i używać niezrozumiałych słów 😉
Aby sobie zbyt życia nie komplikować na początku, wybieramy 'select measurement'. Zawartość tego pola jest oczywiście zależna od miar (czyli na przykład Ciśnienia, Temperatury, Wilgotności) jakie przesyłacie do InfluxDB z Domoticz.
Następnie (po 'where') wybieracie jakiego identyfikatora chcecie użyć. Idx lub nazwa. Ja osobiście wybieram nazwę, ponieważ czujniki 433MHz mają tendencję do zmiany idx po wymianie baterii, co zmusiłoby mnie do zmiany zapytań za każdym razem. W tym przypadku wystarczy podmienić czujnik w Domoticz i sprawa załatwiona. No i oczywiście kiepsko będzie się wybierało, jeżeli 10 czujników nazwiecie Temperatura, ale to raczej mało logiczne.
Po podjęciu decyzji wybieramy wartości czujnika jaki nas interesuje. Powiedzmy, że u mnie jest to Temperatura-Salon. 
Jest możliwe, że jakieś dane już zobaczycie, ale bardziej prawdopodobne jest to, że będziecie musieli wybrać zakładkę Display. Wybieracie typ wykresu (Bars, Lines, Points) i teraz kolejny temat, który sprawiał mi na początku problemy. W salonie mam czujnik Xiaomi Mi Flora, który jest ustawiony tak, aby raportował dane co godzinę. Czyli nie ciągle. Na początku pojawiały mi się kropki i nie wiedziałem co z tym zrobić. A wystarczy wybrać opcję Null value -> Connected. Jeżeli macie na przykład termometry 433MHz, czy inne, raportujące dane ciągle – powinniście zobaczyć wykres od razu.
Jeżeli chcecie widzieć wartości średnie, minimalne oraz maksymalne w którymś z miejsc obok wykresu – operujcie check-boxami w sekcji Options oraz Values, jak poniżej. Nazwę zmienimy na zakładce General.
Fajnie. Pierwszy wykres gotowy, wracamy na Dashboard ikoną w prawym górnym rogu.
Jak zdefiniować wykres, na którym będzie więcej niż jedna wartość? Na przykład tak jak poniżej – wilgotność i temperatura.
Trzeba na zakładce Metrics dodać kolejną kwerendę – w kolejności A, B, itd. W ten sposób możecie dać porównania temperatury w kilku pomieszczeniach w domu, aby wiedzieć, gdzie w jakimś momencie drastycznie się różni.
Kolejna funkcjonalność dodana. Teraz zegary, z angielskiego Gauges. W tym przypadku musimy ponownie założyć kolejny Panel, tym razem Singlestat.

Powiedzmy, że chcę zobaczyć aktualną temperaturę w salonie i ustawić sobie przedziały, gdy jest zimno, komfortowo i ciepło. Również błyskawiczne do wyklikania, chociaż finalnie z mnóstwem opcji.

Zaczynamy oczywiście od kwerendy na zakładce Metrics. Wybrałem wartości jednego z czujników temperatury.

Skoro się pojawiła, to teraz możemy zacząć ubarwiać. Wybór należy do Was, ja zmieniłem:
1. Value
– Stat na Current, czyli aktualną. Można wybrać minimum, maksimum, średnią w danym przedziale czasowym
– Unit – stopnie Celsjusza
2. Coloring – wybór, że tak powiem, sposobu kolorowania na podstawie wartości, czyli:
– Background – jeżeli tło ma się zmieniać wraz z wartościami
– Value – kolor wartości zmienia się wraz z nią
– Thresholds – brzegowe wartości
– Colors – kolory, jakie mają reprezentować nasze przedziały
3. Gauge
– Show – czy pokazywać w ogóle zegar?
– Min – wartość minimalna
– Max – wartość maksymalna
– Thresholds labels – czy pokazywać brzegowe wartości?
– Thresholds markers – czy pokazywać znaczniki wartości brzegowych?

W moim przypadku, w pokoju zegar pokazuje wartości od 10 do 40 stopni Celsjusza, pierwszy zakres zaczyna się od 10 stopni, kończy na 18 (niebieski), kolejny od 18 do 23 (zielony), ostatni od 23 do 40 (czerwony).

Ciekawa jest zakładka Value Mappings, gdzie możecie zamiast wartości pokazać tekst – przykładowo od 10 do 17 – 'Jest chłodno', itd.

Kolejna funkcjonalność – w prawym górnym rogu widzicie ikonę zegara. To tam można zmienić zakres pokazywanych danych. A wybór jest duży, bo oprócz własnego zakresu, są między innymi:
– Wczoraj
– Ten dzień w zeszłym tygodniu
– Poprzedni tydzień
– Poprzedni miesiąc
– Poprzedni rok
– Ten tydzień (wartości z dni przyszłych puste)
– Ten tydzień do dnia dzisiejszego
– Ten miesiąc
– Ten rok
– Ostatnie 15 minut
– Ostatnie pół godziny
– Ostatnie 24 godziny
– itp., itd.

Jest co analizować 😀

Wykresy miesięczne wyglądają na przykład tak:
Zwróćcie uwagę na pewną rzecz – zdefiniowałem wiersze, w które możecie przesunąć Wasze wykresy i zwijać je w razie potrzeby:
– Energia
– Powietrze
– Systemowe
Można to zrobić poprzez dodanie Rows, dostępnego z Add New Panel.

Systemowe u mnie wyglądają tak:

Porada: Dla ułatwienia sobie życia, nie musimy każdego wykresu tworzyć od nowa, wystarczy wybrać Panel title -> More -> Duplicate i zmień jedynie zawartość zapytania w nowo powstałym wykresie.

W sumie na ten moment to tyle, wiele teraz zależy od Waszych potrzeb, zaangażowania, pomysłowości i zmysłu estetycznego. U mnie ten zmysł często przysłania pragmatyzm, także wybaczcie, jeżeli któryś z elementów wydaje się brzydki.