W tym artykule opisuję, jak wysyłać informacje o dostępnym miejscu na dysku oraz liczbie oczekujących aktualizacji do Home Assistant za pomocą MQTT.

Wymagania

  1. Działający broker MQTT (np. Mosquitto).
  2. Zainstalowany klient MQTT (np. mosquitto-clients).
  3. System Linux z zainstalowanym menedżerem pakietów apt.
  4. Home Assistant skonfigurowany do obsługi MQTT.

Konfiguracja skryptu

Skrypt bashowy wykonuje dwie kluczowe operacje:

  1. Sprawdza liczbę oczekujących aktualizacji.
  2. Oblicza ilość wolnego miejsca na dysku.

Przykładowy skrypt

#!/bin/bash
set -e

# Aktualizacja listy pakietów i liczba oczekujących aktualizacji
apt-get update | logger -t 'auto_apt'
updates_count=$(apt-get -s -o Debug::NoLocking=true upgrade | grep ^Inst | wc -l)
/usr/bin/mosquitto_pub -r -t 'system/updates' -m $updates_count

# Obliczanie wolnego miejsca na dysku w MB
free_space=$(df --total | grep /media | awk '{printf "%.0f", $4/1024}')
/usr/bin/mosquitto_pub -r -t 'home-srv/system/free_space' -m $free_space

Wyjaśnienie:

  • apt-get update: Aktualizuje listę dostępnych pakietów.
  • apt-get -s -o Debug::NoLocking=true upgrade: Symuluje proces aktualizacji i zwraca listę pakietów do zaktualizowania.
  • grep ^Inst | wc -l: Zlicza pakiety wymagające aktualizacji.
  • df --total: Wyświetla informacje o dostępnej przestrzeni dyskowej.
  • grep /media : Wyszukuje konkretny wpis dla dysku (w tym przypadku /media) zwracany przez df w celu przekazania przez mqtt
  • awk '{printf "%.0f", $4/1024}': Przelicza bajty na megabajty (MB).
  • mosquitto_pub -r: Wysyła wiadomość MQTT na temat z “retained flag”.

Konfiguracja zadania cron

Aby regularnie uruchamiać skrypt (root jest wymagany do sprawdzenia aktualizacji), można skorzystać z planera zadań cron.

  1. Edytuj listę zadań dla roota:
    sudo crontab -e
    
  2. Dodaj wpis uruchamiający skrypt co godzinę:
    0 */6 * * * /path/to/your/script.sh
    
  3. Zapisz zmiany.

Częste używanie apt-get update może generować znaczące obciążenie systemu i sieci. Zaleca się ograniczenie częstotliwości tej operacji, aby uniknąć niepotrzebnych obciążeń, szczególnie na urządzeniach o ograniczonych zasobach.

Konfiguracja Home Assistant

  1. W pliku configuration.yaml dodaj sensory MQTT:
mqtt:
- sensor:
  name: "System updates"
  state_topic: "system/updates"
  state_class: measurement
  unique_id: "system.updates.hassio"
  value_template: "{{ value | int }}"
- sensor:
  name: "System media space"
  unique_id: 'mqtt.host.media.free.space.hdd'
  device_class: "data_size"
  state_topic: "home-srv/system/free_space"
  suggested_display_precision: 1
  value_template: "{{ value | int }}"
  state_class: measurement
  unit_of_measurement: MB
  1. Zrestartuj Home Assistant, aby załadować nowe ustawienia.

Podsumowanie

Dzięki powyższemu skryptowi i konfiguracji możesz łatwo monitorować stan swojego systemu operacyjnego w Home Assistant. MQTT pozwala na bezproblemową integrację, a cron zapewnia regularne aktualizacje danych. Taka automatyzacja pomaga szybko reagować na potencjalne problemy, takie jak brak miejsca na dysku czy konieczność instalacji aktualizacji.