Przejdź do treści

Parametry serwera w Home Assistant

Moim serwerem jest minikomputer Intel NUC. Jak każdy komputer ma on procesor, pamięć czy dysk. Zrobię w Home Assistant podgląd na parametry tych i innych elementów mojego serwera.

Konfiguracje czujników dla sprawdzanych parametrów umieszczę w pliku konfiguracyjnym Home Assistant.
Wykorzystam oczywiście do tego dodatek File Editor.

Wyświetlanie danych odbywa się na panelu Home Assistant we widokach dostępnych pod opcją Przegląd.
Na początku istnieje aby jeden widok o nazwie HOME. Ale można oczywiście dodawać kolejne.
Wszystkie nowe widoki jakie będę dodawał będą tematycznie nawiązywać do pomieszczeń lub elementów jakiś.
Do wyświetlania informacji i parametrów mojego serwera utworzę nowy widok o nazwie SERWER.

Wyodrębnienie osobnego pliku konfiguracyjnego

Wyświetlane parametry będą tak naprawdę traktowane jako czujniki.
Utworzę wpierw osobny plik konfiguracyjny dla grupy modułu czujników, który ma identyfikator sensor:

Otwieram główny plik konfiguracyjny configuration.yaml i na jego końcu dopisuję:

sensor: !include sensor.yaml

Zapisuję plik.

Teraz utworzę nowy plik o nazwie sensor.yaml, w którym będę umieszczał wszystkie konfiguracje dotyczące modułu sensor:
Na górnym niebieskim pasku klikam na ikonę folderu i wybieram ikonę dodawania pliku New File.
Wpisuję nazwę pliku sensor.yaml i potwierdzam OK.

Plik do konfiguracji encji sensorów przygotowany.

Platforma – System Monitor

Home Assistant ma wbudowaną platformę System Monitor, która potrafi odczytywać wiele różnych parametrów komputera.
Oczywiście wykorzystam ją.
Dodam przez nią monitorowanie:

  • obciążenia procesora oraz jego temperatury
  • zajęcie procentowe pamięci RAM
  • zajęcia procentowe dysku głównego
  • ilości danych przechodzących przez interfejs sieciowy o nazwie eno1
  • czasu ostatniego restartu serwera

Platforma potrafi oczywiście odczytywać o wiele więcej parametrów, ja zdecydowałem się na razie na te.

Odpowiednią konfigurację dopisuję w pliku sensor.yaml z wykorzystaniem dodatku File Editor.

- platform: systemmonitor
  resources:
    - type: processor_use
    - type: processor_temperature
    - type: memory_use_percent
    - type: disk_use_percent
      arg: '/'
    - type: network_in
      arg: eno1
    - type: network_out
      arg: eno1
    - type: last_boot

Zapisuje plik i restartuję Home Assistant.

Pora na wyświetlenie wartości parametrów we widoku.

Na panelu Home Assistant w górnym prawym narożniku klikam na ikonę z trzema kropkami i wybieram Edytuj dashboard.

Jako, że pierwszy raz to robię, to pojawia się okno z informacją o przejęciu kontroli nad interfejsem.
Klikam PRZEJMUJĘ KONTROLĘ i cały widok przechodzi w tryb edycji.

Dodam osobny widok do wyświetlania parametrów serwera.

Na górnej belce klikam na ikonę z plusem.

W oknie konfiguracji widoku w polu Tytuł wpisuję nazwę SERWER dla mojego nowego widoku i wciskam ZAPISZ.
Mam teraz nowy widok i w nim dodam wyświetlanie pierwszych parametrów mojego serwera w odpowiednich kartach.

Na widoku mogę dodać dowolną dostępną kartę jakie oferuje Home Assistant i dodatki do niego.
Tu można się na prawdę dowolnie bawić tym jak może wyglądać cały widok.
Na początku utworzę proste karty typu sensor oraz zwykłe wyświetlanie stanów encji.

Klikam na przycisk DODAJ KARTĘ i wybieram ostatnią opcję – Edytor konfiguracji YAML.

Wklejam do edytora moją konfigurację i zapisuję.

type: vertical-stack
cards:
  - type: horizontal-stack
    cards:
      - type: sensor
        entity: sensor.processor_use_percent
        graph: line
        name: Użycie CPU
        detail: 1
        hours_to_show: 168
      - type: sensor
        graph: line
        entity: sensor.processor_temperature
        name: Temperatura CPU
        hours_to_show: 168
  - type: horizontal-stack
    cards:
      - type: sensor
        graph: line
        entity: sensor.memory_use_percent
        name: Użycie RAM
        hours_to_show: 168
      - type: sensor
        graph: line
        entity: sensor.disk_use_percent
        name: Użycie dysku /
        hours_to_show: 168
  - type: entities
    entities:
      - entity: sensor.network_in_eno1
        name: Karta sieciowa - dowlnoad
      - entity: sensor.network_out_eno1
        name: Karta sieciowa - upload
      - entity: sensor.last_boot
        name: Ostatni restart serwera
Moja pierwsza karta wygląda tak:

Informacja o ważności certyfikatu SSL

Certyfikat SSL dla mojej subdomeny ha.loginhome.pl wystawiany jest na 90 dni. Mam też skrypt co odnawia go automatycznie.
Zawsze jednak może coś pójść nie tak. Dlatego chcę mieć w Home Assistant podgląd na to jak długo jest jeszcze ważny ten certyfikat.
W przyszłości stworzę też proces, który będzie powiadamiał mnie w przypadku problemów z certyfikatem.
Na razie jednak zajmę się samym pozyskaniem informacji i wyświetlaniem w Home Assistant informacji o certyfikacie.

Home Assistant ma integracje Certificate Expiry, która tworzy encję z datą ważności podanego certyfikatu, którą sprawdza i aktualizuje co 12 godzin.
Zainstaluje ją.

Na panelu Home Assistant z lewego menu wybieram Konfiguracja, a dalej w oknie wybieram Integracje i klikam po prawej stronie na dole na przycisk DODAJ INTEGRACJĘ.

Szukam integracji o nazwie Ważność certyfikatu i ją wybieram.

W oknie w polu Nazwa hosta wpisuje swoją subdomenę ha.loginhome.pl, a port zmieniam na 8123 i klikam ZATWIERDŹ.

Teraz encja o nazwie sensor.cert_expiry_timestamp_ha_gostyn_co_8123 w swoim stanie przechowuje datę i godzinę do kiedy certyfikat jest ważny.
Wyświetlaniem jej zajmę się w następnym akapicie.

Informacja o ważności certyfikatu SSL – inna metoda

Powyższa integracja daje mi encję z datą wygaśnięcia certyfikatu, która aktualizuje się co 12 godzin.
Ja chce jednak otrzymywać wynik z ilością dni, by móc w przyszłości łatwiej to wykorzystać też w procesach do powiadomień np. o zbliżającym się terminie wygaśnięcia certyfikatu.
A także by mieć możliwość ustawienia własnego czasu i częstotliwości sprawdzania ważności certyfikatu.

Spróbuję takie dane wyciągnąć pośrednio przez Linux Debian na moim serwerze.

Jako że Home Assistant mam zainstalowany w kontenerze Docker to nie ma on dostępu do całego serwera.
Dlatego wiele informacji czy parametrów bezpośrednio z jego poziomu nie odczytam.
Jest na to jednak rozwiązanie. Mogę na poziomie Linux Debian to sprawdzać, a wyniki zapisywać w plikach w katalogu do którego ma kontener dostęp.
W ten sposób zaciągnę do Home Assistant interesujące mnie dane z wykorzystaniem odpowiedniego programu.

Do odczytu ważności certyfikatu wykorzystam pakiet ssl-cert-check, który zainstaluje na Linux Debian.
W Cronie dopisze cykliczne wykonywanie polecenia z tego pakietu, które zapisywać będzie wynik – ilością dni jakie pozostały do końca ważności certyfikatu.
A Home Assistant będzie miał encję ze stanem, który będzie zasilany tym wynikiem, i będzie go pokazywać na karcie we widoku SERWER.

Loguję się programem putty przez SSH na mój serwer NUC na konto root.
Instaluję pakiet ssl-cert-check.

root@nuc:~# apt install -y ssl-cert-check

Utworzę teraz w /opt/scripts nowy skrypt o nazwie cert_expire_days.sh, który będzie poleceniem ssl-cert-check w pliku certyfikatu sprawdzał ilość dni  do końca ważności certyfikatu i wynik zapisywał w katalogu /opt/hassio/ssl/ w pliku days2expire.

Wywołanie tego polecenia ssl-cert-check z odpowiednimi parametrami zwraca różne informacje, a w nich także na samym końcu interesującą mnie ilość dni. I tą wartość będę wyłuskiwał programem awk i zapisywał do pliku days2expire.

root@nuc:~# echo -e "ssl-cert-check -b -c /opt/hassio/ssl/letsencrypt/live/ha.loginhome.pl/cert.pem | awk '{print \$6}' \
            > /opt/hassio/ssl/days2expire" > /opt/scripts/cert_expire_days.sh 
root@nuc:~# chmod 755 /opt/scripts/cert_expire_days.sh

Uruchomię go dla sprawdzenia czy plik days2expire się poprawnie tworzy

root@nuc:~# sh /opt/scripts/cert_expire_days.sh

Chcę by serwer w Cronie uruchamiał skrypt raz dziennie o godzinie 1 w nocy
Uruchamiam Cron w trybie edycji

root@nuc:~# crontab -e

I w edytorze dopisuję na końcu linię:

0 1 * * * sh /opt/scripts/cert_expire_days.sh

Zapisuję plik i zamykam edytor.

Dopiszę teraz konfigurację w Home Assistant, która utworzy encję i będzie jej stan zasilać wartością z pliku days2expire.
Musze aby pamiętać że z poziomu Home Assistant ten plik jest widoczny w /ssl/days2expire.

Do odczytania wartości z tego pliku wykorzystam platformę Command Line, która wykonuje polecenia w powłoce systemu.
Poleceniem jakie wywołam będzie cat, które odczyta mi zawartość pliku dla encji cert_expiry_days_ha_loginhome_pl_8123.

Odpowiednią konfigurację dopisuję w pliku sensor.yaml z wykorzystaniem dodatku File Editor.

- platform: command_line
  command: cat /ssl/days2expire
  name: cert_expiry_days_ha_loginhome_pl_8123
  scan_interval: 43200
  unit_of_measurement: days

Zapisuje plik i restartuję Home Assistant.

Encja gotowa.
Wyświetlę jej stan na karcie typu Encje.

Przełączam widok SERWER na tryb edycji i klikam na przycisk DODAJ KARTĘ i wybieram kartę o nazwie Encje.

W oknie konfiguracji przełączam przyciskiem na dole na EDYTOR YAML.

Wklejam do edytora moją konfigurację i zapisuję.

type: entities
entities:
  - entity: sensor.cert_expiry_days_ha_loginhome_pl_8123
    name: Certyfikat domeny wygaśnie za
title: Domena ha.loginhome.pl
state_color: false
Moja karta wygląda tak:

Gdybym chciał wyświetlić tutaj encję z integracji Certificate Expiry, która przechowuje datę, to w konfiguracji karty musiał bym zmienić nazwę tej encji na:

- entity: sensor.cert_expiry_timestamp_ha_loginhome_pl_8123

Wówczas koniec okresu ważności certyfikatu wyświetlany jest w trochę inny sposób. Mnie jednak bardziej odpowiada ilość dni.

Dyski i partycje serwera

Mój serwer ma dwie partycje na jednym dysku – główną root – / i drugą /home. Mam też drugi dysk w nim a na nim partycje /data utworzoną.
Home Assistant z poziomu kontenera widzi parametry tylko partycji głównej, a chciałbym też aby pokazywał mi procent zajętości pozostałych partycji.

Zrobię więc podobnie jak z certyfikatem. Stworze skrypt który zapisywać będzie cyklicznie dane o tych partycjach do kontenera z Home Assistant.

Loguję się programem putty przez SSH na mój serwer NUC na konto root.

Utworzę w /opt/scripts/ skrypt o nazwie disks_usage.sh, który będzie w /opt/hassio/share/ w pliku disk_usage_data zapisywał odpowiednie parametry dla Home Assistant o partycjach, które mnie interesują, czyli /home i /data.

W skrypcie wywoływać się będzie polecenie df czyli program wyświetlający informacje o wolnym miejscu na zamontowanych systemach plików.
Ale zapisywać ono będzie w pliku disk_usage_data tylko fragment dotyczący interesującej mnie partycji, wykorzystując program grep.

root@nuc:~# echo -e "df -h | grep /home > /opt/hassio/share/disk_usage_data" > /opt/scripts/disks_usage.sh
root@nuc:~# echo -e "df -h | grep /data >> /opt/hassio/share/disk_usage_data" >> /opt/scripts/disks_usage.sh
root@nuc:~# chmod 755 /opt/scripts/disks_usage.sh

Uruchomię go dla sprawdzenia czy plik disk_usage_data się poprawnie tworzy

root@nuc:~# sh /opt/scripts/disks_usage.sh

Serwer będzie w Cronie uruchamiał skrypt co 10 minut.
Uruchamiam Cron w trybie edycji

root@nuc:~# crontab -e

I w edytorze dopisuję na końcu linię:

*/10 * * * * sh /opt/scripts/disks_usage.sh

Zapisuję plik i zamykam edytor.

Dopiszę teraz konfigurację w Home Assistant, która utworzy encje dla moich partycji i będzie ich stan zasilać wartościami z pliku disk_usage_data.
Z poziomu Home Assistant ten plik jest widoczny w /share/disk_usage_data.

Do odczytania wartości z tego pliku wykorzystam znów platformę Command Line z odpowiednia składnią polecenia.
W pliku disk_usage_data mam dużo więcej informacji niż potrzebuje. Zapisane są one w dwóch liniach, odpowiednio dla dwóch partycji.
Użyję znów programu cat do odczytu oraz dodatkowo programu sed do wskazania linii w pliku, a także awk do wskazania miejsca w linii, gdzie jest interesująca nie wartość zajętości partycji w procentach, która będzie przekazywana do encji disk_use_percent_home i w drugim przypadku do disk_use_percent_data.

Odpowiednią konfigurację dopisuję w pliku sensor.yaml z wykorzystaniem dodatku File Editor.

- platform: command_line
  command: cat /share/disk_usage_data | sed -n '1p' | awk '{print $5}' | sed 's/.$//'
  name: disk_use_percent_home
  scan_interval: 600
  unit_of_measurement: percent
- platform: command_line   
  command: cat /share/disk_usage_data | sed -n '2p' | awk '{print $5}' | sed 's/.$//'
  name: disk_use_percent_data
  scan_interval: 600
  unit_of_measurement: percent

Zapisuje plik i restartuję Home Assistant.

Nowe encje gotowe. Je też dodam do widoku, ale do już istniejącej karty, którą robiłem jako pierwszą.

Przełączam widok SERWER na tryb edycji i klikam na karcie przycisk EDYTUJ, a następnie EDYTOR YAML.

Tu na końcu konfiguracji doklejam dalszą część.

  - type: horizontal-stack
    cards:
      - type: sensor
        graph: line
        entity: sensor.disk_use_percent_home
        name: Użycie dysku /home
        unit: '%'
        hours_to_show: 168
        icon: 'mdi:harddisk'
      - type: sensor
        graph: line
        entity: sensor.disk_use_percent_data
        name: Użycie dysku /data
        unit: '%'
        hours_to_show: 168
        icon: 'mdi:harddisk'
        detail: 1
W efekcie moja cała karta wygląda teraz tak:


Oczywiście na poziomie edycji karty mogę także zmieniać rozmieszczenie poszczególnych elementów karty.
Wszystko można robić bardzo elastycznie.

Prędkość łączą internetowego – Speed Test

Problemy z łączem internetowym też mogą się zdarzać. Będę więc monitorował je także.

Home Assistant ma gotową integracje Speed Test, która tworzy encję z datą ważności podanego certyfikatu, którą sprawdza i aktualizuje co 12 godzin.
Zainstaluje ją.

Na panelu Home Assistant z lewego menu wybieram Konfiguracja, a dalej w oknie wybieram Integracje i klikam po prawej stronie na dole na przycisk DODAJ INTEGRACJĘ.

Szukam integracji o nazwie i ją wybieram.
Zatwierdzam pytanie o to czy chcę rozpocząć konfigurację.

   

Po krótkiej chwili dostaje komunikat o powodzeniu instalacji i mam dostępną nową integrację z trzema encjami, które przechowują stan parametrów łącza: download, upload i ping.
Dodatkowo wybierając OPCJE mogę ustawić serwer i częstotliwość sprawdzania prędkości łącza. Zostawiam tam jednak domyślne wartości.

Wyświetlę te encje na osobnej karcie.

Przełączam widok SERWER na tryb edycji i klikam na przycisk DODAJ KARTĘ i wybieram ostatnią opcję – Edytor konfiguracji YAML.

Wklejam do edytora moją konfigurację i zapisuję.

type: vertical-stack
cards:
  - type: sensor
    entity: sensor.speedtest_ping
    graph: line
    hours_to_show: 168
  - type: horizontal-stack
    cards:
      - type: sensor
        graph: line
        entity: sensor.speedtest_download
        hours_to_show: 168
      - type: sensor
        graph: line
        entity: sensor.speedtest_upload
        hours_to_show: 168
Karta wygląda tak:

Podsumowanie

Oczywiście tych parametrów i najróżniejszych informacji o serwerze mógłbym wyświetlać o wiele więcej.
Pewnie z czasem będę dodawał kolejne rzeczy.

Na pewno wykorzystam też w przyszłości niektóre z tych encji jakie tu stworzyłem przy automatyzacjach czy powiadomieniach.
Zaczyna się już coś pojawiać na Home Assistant. Może to jeszcze nie jest nic co dotyczy inteligentnego domu, ale takie informacje też mogą być ciekawe i przydatne.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *