|
|
(8 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
− | [[File:Home Assistant Logo.svg.png|right|thumb|Homeassistant]] | + | [[File:Home Assistant Logo.svg.png|right|thumb|Home Assistant]] |
| Im Attraktor läuft eine Home-Assistant-Instanz in einer VM für alle Smart-Home-Projekte. | | Im Attraktor läuft eine Home-Assistant-Instanz in einer VM für alle Smart-Home-Projekte. |
| | | |
Zeile 15: |
Zeile 15: |
| Weitere Bestandteile des Systems sind eine Influx DB, welche die Daten aufnimmt und ein Mosquitto MQTT Server. | | 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. | | Die VM hat regelmäßige Backups, sollte mal etwas kaputt gespielt werden. |
| + | |
| + | Mittels Home Assistant Supervisor (einem Dockerverwalter) wurde ebenfalls eine Influx DB erstellt, welche als Sensordaten-Dump dient um Langzeitdaten zu erfassen. |
| | | |
| | | |
| = Projekte = | | = Projekte = |
| + | |
| + | ==Smarte [[Heizung]]== |
| + | |
| + | In den Räumen Vortragsraum, Textilwerkstatt und Holzwerkstatt sind Smarte Heizungssteuerungsgeräte verbaut. |
| + | |
| + | |
| + | == Zigbee == |
| + | |
| + | Es befindet sich ein Zigbee Stick im Attraktor, welcher die Zigbee Pakete per ZHA an den Homeassistant Server weiterreicht. |
| + | |
| | | |
| == Tasmota == | | == Tasmota == |
Zeile 45: |
Zeile 57: |
| | style="text-align:right;" | [http://192.168.15 Local IP] | | | style="text-align:right;" | [http://192.168.15 Local IP] |
| |} | | |} |
| + | |
| + | ==Stromzähler== |
| + | * Der Stromzähler wurde per ESPHome und S0 Schnittstelle in Homeassistant integriert. [[Stromzähler]]. |
| | | |
| == ESPHome == | | == ESPHome == |
Zeile 54: |
Zeile 69: |
| 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. | | 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. |
| | | |
| + | ==[[Getränkeautomat]]== |
| + | Die Temperatursteuerung des Getränkeautomats wird mittels ESPHome und Homeassistant gesteuert. Die Schaltung läuft ausfallsicher lokal. Weitere Infos in [[Getränkeautomat]]. |
| | | |
| ==Ideen-Ecke== | | ==Ideen-Ecke== |
− | *Integration des Stromzählers | + | * Temperaturüberwachung der Räume per Zigbee |
| + | * Suche der versteckten Standby-Verbrauchern (1kW Standby) |
| + | |
| + | == 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: |
| + | <pre> |
| + | 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') }} |
| + | </pre> |
| + | |
| + | === Schritt 2: Backups auf Netzwerk-Share speichern === |
| + | Home Assistant wird so eingerichtet, dass es die Backups auf ein Netzwerk-Share im Unraid speichert. |
| + | * In Unraid einen neuen User für Home Assistant einrichten |
| + | * In Unraid einen neuen Share für die Backups einrichten. Der neue User muss read/write-access haben |
| + | * In Home Assistant das Netzlaufwerk einrichten: Settings => System => Storage |
| + | * In Home Assistant das Netzlaufwerk als Standard Backup-Destination einrichten: Settings => System => Backups => ... => Change default backup location |
| + | |
| + | === 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. |
| + | |
| + | * [https://forums.unraid.net/topic/99218-support-borgmatic/ Doku zum Borgmatic Docker-Container] |
| + | * Initial muss das Borg-Repo aus dem Borgmatic-Container heraus erstellt werden: <code>borg init --encryption repokey /path/to/repo</code> |
| + | |
| + | |
| + | borgmatic_config/config.yaml: |
| + | <pre> |
| + | 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 |
| + | </pre> |
| + | |
| + | Neue Borg-Archive werden täglich angelegt und wöchentlich wird das Repo gecheckt: |
| + | |
| + | borgmatic_config/crontab.txt: |
| + | <pre> |
| + | 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 |
| + | </pre> |
| + | |
| + | 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: |
| + | <pre> |
| + | #!/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 |
| + | </pre> |
| + | |
| + | 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: |
| + | <pre> |
| + | #!/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 -- |
| + | </pre> |
| | | |
| | | |
Aktuelle Version vom 2. Juli 2024, 17:56 Uhr
Im Attraktor läuft eine Home-Assistant-Instanz in einer VM für alle Smart-Home-Projekte.
Benutzung
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.
Mittels Home Assistant Supervisor (einem Dockerverwalter) wurde ebenfalls eine Influx DB erstellt, welche als Sensordaten-Dump dient um Langzeitdaten zu erfassen.
Projekte
In den Räumen Vortragsraum, Textilwerkstatt und Holzwerkstatt sind Smarte Heizungssteuerungsgeräte verbaut.
Zigbee
Es befindet sich ein Zigbee Stick im Attraktor, welcher die Zigbee Pakete per ZHA an den Homeassistant Server weiterreicht.
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:
Stromzähler
- Der Stromzähler wurde per ESPHome und S0 Schnittstelle in Homeassistant integriert. Stromzähler.
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.
Die Temperatursteuerung des Getränkeautomats wird mittels ESPHome und Homeassistant gesteuert. Die Schaltung läuft ausfallsicher lokal. Weitere Infos in Getränkeautomat.
Ideen-Ecke
- Temperaturüberwachung der Räume per Zigbee
- Suche der versteckten Standby-Verbrauchern (1kW Standby)
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: Backups auf Netzwerk-Share speichern
Home Assistant wird so eingerichtet, dass es die Backups auf ein Netzwerk-Share im Unraid speichert.
- In Unraid einen neuen User für Home Assistant einrichten
- In Unraid einen neuen Share für die Backups einrichten. Der neue User muss read/write-access haben
- In Home Assistant das Netzlaufwerk einrichten: Settings => System => Storage
- In Home Assistant das Netzlaufwerk als Standard Backup-Destination einrichten: Settings => System => Backups => ... => Change default backup location
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