Home Assistant

Aus Attraktor Wiki

Wechseln zu: Navigation, Suche
Home Assistant

Im Attraktor läuft eine Home-Assistant-Instanz in einer VM für alle Smart-Home-Projekte.

Benutzung

Taster am Eingang
Taster im Hackcenter

Die Benutzung steht allen Mitgliedern frei und ist local unter homeassistant.local:8123 oder 192.168.1.10:8123 erreichbar.

Die grundsätzlichen Funktionen (Licht an/aus/bunt) sind über die Knöpfe am Eingang und im Hackcenter steuerbar (s. Bilder).


Technik

Home Assistant läuft hier auf einer virtuellen Maschine auf unserem Server. Die VM läuft mit Hass.io und unterstützt damit die dockerbasierten Plugins und Sicherungs-Funktionen. Weitere Bestandteile des Systems sind eine Influx DB, welche die Daten aufnimmt und ein Mosquitto MQTT Server. Die VM hat regelmäßige Backups, sollte mal etwas kaputt gespielt werden.


Projekte

Tasmota

Im Attaktor verteilen sich immer mehr Tasmota-WLAN-Steckdosen, um diverse Lampen an- und auszuschalten. Diese sind zusätzlich zu ihrem Webinterface auch per Home Assistant steuer- und automatisierbar.

Es gibt folgende Steckdosen:

outlet1 Demo auf Automaten Local IP
outlet2 Demo Vitrine Local IP
outlet3 Hackcenter Beleuchtung Local IP
outlet4 Beleuchtung Drucker Local IP
outlet5 DMX & Eingangsbereich Local IP

ESPHome

  • Scheinwerfer am DMX-Bus. Näheres dazu auf der Seite DMX512.
  • Taster am Eingang und im Hackcenter (s. Bilder)


LED-Ringe

Die LED-Ringe kommunizieren (noch) mit einem anderen MQTT-Server. Deshalb sind diese (nur ausgehend) über einen Helper-Schalter integriert. Wird der Helper-Schalter geschaltet, sendet Node-Red (Add-On in Home Assistant) einen entsprechenden Befehl an den anderen MQTT-Server.


Ideen-Ecke

  • Integration des Stromzählers


Automatisches Backup

Es werden täglich Backups erstellt und in ein Borg-Repository geschrieben. Diese werden inkrementell, dedupliziert und komprimiert gespeichert und nach einer üblichen Backup-Strategie aufbewahrt. Hier grob dokumentiert, falls das jemand nachbauen möchte:

Schritt 1: Backup-Archiv erstellen

Das Home Assistant erstellt über eine Automation einmal täglich ein komplettes Backup:

alias: 'Home Assistant: Daily Backup'
trigger:
  - platform: time
    at: '02:04:00'
action:
  - service: hassio.backup_full
    data_template:
      name: automated_backup_{{ now().strftime('%Y-%m-%d_%H-%M') }}

Schritt 2: Backup-Verzeichnis über Samba in Unraid einbinden

  • Unraid-Plugin: Unassigned Devices
  • Home-Assistant-Add-On: Samba Share


Schritt 3: Backup mit borgmatic in einem borg-Repository speichern

Borgmatic läuft als Docker-Container und speichert 1x täglich inkrementell und dedupliziert die Änderungen im Backup-Verzeichnis.


borgmatic_config/config.yaml:

location:
    source_directories:
        - /mnt/homeassistant_backup
    repositories:
        - /mnt/borg-repository
    one_file_system: true
    files_cache: mtime,size
    patterns:
	- '- [Tt]rash'
        - '- [Cc]ache'
    exclude_if_present:
        - .nobackup
        - .NOBACKUP

storage:
    encryption_passphrase: "XXXXXXXXXXX"
    compression: lz4
    archive_name_format: 'backup-{now}'

retention:
    keep_hourly: 2
    keep_daily: 7
    keep_weekly: 4
    keep_monthly: 12
    keep_yearly: 10
    prefix: 'backup-'

consistency:
    checks:
	- repository
        - archives
    prefix: 'backup-'

hooks:
    before_backup:
        - /etc/borgmatic.d/before_backup.sh
        - echo "Starting a backup"
    after_backup:
        - /etc/borgmatic.d/after_backup.sh
        - echo "Finished a backup"
    on_error:
	- echo "Error during prune/create/check."
    healthchecks: https://hc-ping.com/XXXXXXXX

Neue Borg-Archive werden täglich angelegt und wöchentlich wird das Repo gecheckt:

borgmatic_config/crontab.txt:

0 3    * * * PATH=$PATH:/usr/bin /usr/bin/borgmatic prune create -v 1 --stats 2>&1
0 6    * * 3 PATH=$PATH:/usr/bin /usr/bin/borgmatic check -v 1 2>&1

Vor dem Backup wird geprüft:

  • ob überhaupt Backup-Archive vorhanden sind (wenn keine da sind, ist das SMB-Verzeichnis wahrscheinlich nicht gemounted)
  • ob das letzte Backup nicht älter als 24 Stunden ist (wenn es älter ist, läuft die HA-Backup-Automation wahrscheinlich nicht mehr, deshalb Abbruch)

borgmatic_config/before_backup.sh:

#!/bin/sh

# Abort backup if the newest backup archive is older than 24h

# Changelog:
# 2022-03-31: creaded (Flo)

SRC_DIR=/mnt/homeassistant_backup
MAX_AGE=86400 # 24h

num_files=$(ls -l "${SRC_DIR}/"*.tar|wc -l)
if [ "${num_files}" -eq 0 ]; then
    echo "No backup archives found. Is the SMB share mounted?"
    echo "Aborting."
    exit 1
fi

latest_file=$(ls -d -t "${SRC_DIR}/"*.tar|head -n1)
latest_file_modified_friendly=$(date -r "${latest_file}")

echo "Latest backup archive: ${latest_file} (created on ${latest_file_modified_friendly})"

latest_file_timestamp=$(date -r "${latest_file}" +%s)

current_timestamp=$(date +%s)

diff_seconds=$(expr "${current_timestamp}" - "${latest_file_timestamp}")

if [ "${diff_seconds}" -gt "${MAX_AGE}" ]; then
    echo "Latest backup archive is too old."
    echo "Aborting."
    exit 1
fi

Nach dem Backup werden Backup-Archive, die älter als 7 Tage sind, aus dem SMB-Share entfernt (damit die VM nicht irgendwann volläuft):

borgmatic_config/after_backup.sh:

#!/bin/sh

# Changelog:
# 2022-03-31: created (Flo)

SRC_DIR=/mnt/homeassistant_backup
MAX_DAYS=7


echo "Deleting backup archives older than ${MAX_DAYS} days"
find "${SRC_DIR}" -type f -mtime "+${MAX_DAYS}" -name '*.tar' -print0 | xargs -r0 rm --


Hilfe

Bei Fragen zum Tresor bitte an Lucas wenden.


Siehe auch