# Home Assistant

## Installation

Hass lässt sich in nur wenigen Schritten auf dem Raspberry mit Hilfe eines Terminals installieren. Zu erst wird eine ssh-Verbindung zum Pi aufgebaut:

```
ssh pi@192.168.178.X
```

Dann wird die auf dem Raspberry installierte Software aktualisiert:

```
sudo apt update
sudo apt upgrade -y
```

Anschließend werden noch ein paar benötigte Pakete installiert:

```
sudo apt install python3 python3-venv python3-pip libffi-dev libssl-dev
```

Danach wird der Benutzer `homeassistant` angelegt und in entsprechende Gruppen eingeführt um zum Beispiel Zugriffe auf die Programmier-Pins des Pis zu bekommen.

```
sudo useradd -rm homeassistant -G dialout,gpio,i2c
```

Jetzt werden die notwendigen Verzeichnisse erstellt und die Besitzrechte entsprechend verändert.

```
cd /srv
sudo mkdir homeassistant
sudo chown homeassistant:homeassistant homeassistant
```

Nun wechseln wir zum Benutzer `homeassistant` und erstellen und aktivieren eine Python virtuelle Umgebung (virtual environment / venv). Dies ermöglicht die Installation von Python Paketen isoliert in einem Verzeichnis und schafft eine Art Container.

```
sudo -u homeassistant -H -s
cd /srv/homeassistant
python3 -m venv .
source bin/activate
```

Nun beginnen wir mit der Installation der notwendigen Python-Pakete:

```
python3 -m pip install wheel
pip3 install homeassistant
```

Anschließend wird Hass gestartet:

```
hass
```

Die akutelle version dieser Anleitung ist stets [hier](https://www.home-assistant.io/docs/installation/raspberry-pi) verfügbar.

## Home Assistant automatisch starten

Damit Hass bei einem Systemneustart automatisch wieder gestartet wird, bedarf es einer Konfiguration von `systemd`, dass Programm welches unter Linux für die Verwaltung von automatisch startender Software zuständig ist. Hierzu muss eine Datei im Terminal editiert werden:

```
sudo nano -w /etc/systemd/system/home-assistant@homeassistant.service
```

Nun wird folgender Text eingefügt:

```
[Unit]
Description=Home Assistant
After=network-online.target

[Service]
Type=simple
User=%i
ExecStart=/srv/homeassistant/bin/hass -c "/home/%i/.homeassistant"

[Install]
WantedBy=multi-user.target
```

Verlassen wird der Editor mit `strg + x` und ein anschließendes `y` bestätigt das Speichern der Datei. Nun ist ein homeassistant Service bei `systemd` registriert. Anschließend wird `systemd` noch entsprechend neugestartet und der Service aktiviert:

```
sudo systemctl --system daemon-reload
sudo systemctl enable home-assistant@homeassistant
```

## Home Assistant updaten

Um Hass zu aktualisieren verbinden wir uns zum Pi per ssh, wechseln wir zum Benutzer Home Assistant, aktivieren die virtuelle Umgebung und updaten dann das hass Paket.

```
ssh pi@192.168.178.X
sudo -u homeassistant -H -s
source /srv/homeassistant/bin/activate
pip3 install --upgrade homeassistant
```

Um die Veränderungen zu aktivieren muss Hass neu gestartet werden. Ebenfalls empfiehlt sich ein Blick auf die sogennanten `breaking changes`, dh. Veränderungen die unter Umständen dazu führen, dass Geräte nicht mehr sachgemäß funktionieren. Die Veränderungen sind [hier](https://github.com/home-assistant/home-assistant/releases) einzusehen.

## Neue Geräte in Home Assistant einbinden <a href="#new" id="new"></a>

Hass unterstützt diverse Geräte schon von Hause aus, ohne komplizierte Konfiguration. Nach Anmeldung des Geräts im WLAN und einem Neustart von Hass, erscheint es meist schon in der Komponentenregistrierung (einsehbar auf der Hass-Seite auf dem Symbol `< >`). Falls das Gerät nirgends erscheint oder nicht per WLAN gekoppelt wird, sollte zunächst auf der [Webseite von Hass](https://www.home-assistant.io/components/) nach der Komponente gesucht werden. Nachdem die Dokumentation für das Gerät ([hier](https://www.home-assistant.io/components/netatmo) zB. die Netatmo Integration) identifiziert wurde, kann die manuelle Konfiguration gestartet werden. Zunächst aber sollte die komplette Dokumentation des Geräts ausfürlich studiert werden.

Nachdem der Eintrag verinnerlicht wurde, wird das Programm `Forklift` auf dem Mac geöffnet. Links in der Favoritenleiste wird der Eintrag angewählt, der zum Hass-Konfigurationsverzeichnis führt. Und jetzt die Datei `configuration.yaml` doppelt geklickt, jetzt sollte sich der Editor `Visual Studio Code` öffnen und die live-Bearbeitung des Dokumentes ermöglichen.

Aus der Dokumentation des Geräts wird der YAML-Code aus dem Abschnitt `configuration` kopiert und bei `Visual Studio Code` am besten ganz unten eingefügt. Hierbei ist lediglich zu beachten, wenn die Konfiguration mit einer Kategorie zum Beispiel `sensor` und nicht dem Hersteller anfängt, muss der entsprechende Abschnitt, bei den anderen Sensoren eingefügt werden, dass Kategoriewort `sensor` darf nur einmal in der Datei ganz vorn stehen (ohne Einrückung). Nun werden die entsprechenden in Großbuchstaben geschriebenen Felder editiert und das Dokument gespeichert.

## Benutzer Pi Schreibrechte auf die Hass config gewähren

```bash
usermod -a -G homeassistant pi
sudo chmod g+rwx /home/homeassistant/.homeassistant
```

## Dash-button in Hass einbinden

\--- Wie es aussieht hat Amazon die Dashbuttons für immer deaktiviert Stand: 5.10.2019 ---

Um dies zu bewerkstelligen, ist ein mobiles Endgerät mit Amazon-App von Nöten. In der App wird nun oben Links das Menü aufgerufen und auf "Meine Dashbuttons" getippt. Dann oben die Schaltfläche "MENÜ" und dann ganz unten "Dash Button-Geräte verwalten". Nun erscheint die Anleitung zum einrichten des Buttons, das WLAN Passwort sollte nicht bei Amazon gespeichert werden. Das Setup wird nun durchgeführt bis zum auswählen des zu bestellenden Produkts. Jetzt wird die Amazon-App einfach geschlossen.

Ein notwendiges Programm names `tcpdump` wird auf dem Pi mit: `sudo apt install tcpdump` installiert.

Nun wird wie in diesem Abschnitt beschrieben (link) das Netzwerk permanent gescannt und dann der Button gedrückt. Er sollte nun bei den Scans auftauchen, wichtig ist seine MAC-Adresse, diese kopieren wir in `Lanscan` mit dem Rechtsklick-Menü.

Auf dem Pi mit Hilfe von `ssh` wird nun das Python-Programm `amazon-dash` installiert mit dem Befehl: `sudo -H pip install amazon-dash`. Jetzt verschieben wir die vorhandene Konfigurationsdatei mit: `sudo mv /etc/amazon-dash.yaml /etc/amazon-dash.yaml.bak` (mehr zum [verschieben von Dateien](https://majusss.gitbook.io/d/#mv)). Nun editieren wir die Konfigurationsdatei des Programmes mit `sudo nano /etc/amazon-dash.yaml` und fügen folgenden Code hinzu:

```yaml
settings:
  AC:57:97:2C:FA:AF:
    name: Fairy
    homeassistant: localhost:8123
    event: dash_tv_on
    access_token: iashdf789hm9a8whf9c78ihwgbp9fduioaj...
```

Die MAC-Adresse des Buttons wird nun ganz oben unter "settings" eingerückt eingefügt, der Name kann so gelassen werden, der Parameter `homeassistant` beschreibt die Hass-IP und Port, `localhost` in unserem Fall, da Hass und `amazon-dash` auf dem selben Gerät laufen. Der Paramter `event` beschreibt den Name des Events, dass in Hass geworfen wird. Der `acces_token` muss über die Hass Weboberfläche generiert werden. Dazu bei Hass links oben auf den Anfangsbuchstabe des Benutzers klicken, dann ganz nach unten scrollen, zum Abschnitt "Langlebige Zugangs-Token", dort unten auf "Token erstellen" klicken und den Token kopieren und im `nano` Fenster einfügen. Alle Parameter angepasst, kann nano mit `strg + x` geschlossen werden. Anschließend wird der Dash-Button-Service mit `sudo service amazon-dash restart` neu gestartet.

Die letzte Komponente ist die entsprechende Hass-Automation. Diese wird mit `Forklift` und `Visual Studio Code` bearbeitet (link). Nun wird folgende Automation hinzugefügt:

```yaml
- alias: dash
  initial_state: true
  trigger:
  - event_data: {}
    event_type: dash_tv_on
    platform: event
  action:
    service: script.turn_on
    entity_id: script.some_script
```

Der Button sendet ein Event mit dem Typ `event_name` an Hass, und Hass reagiert entsprechend der `event_type` Konfiguration. Alle anderen Parameter, wie Alias und Aktion der Automation können individuell angepasst werden, lediglich der `event_type` muss exakt dem entsprechen, was bei `/etc/amazon-dash.yaml` eingetragen wurde.

## Xiaomi / Yeelight Lampen einbinden

Um diese Geräte in Hass einzubinden, ist ein Mi-Account notwendig, der [hier](https://account.xiaomi.com) erstellt werden kann. Auf einem mobilen Endgerät ist dann die Yeelight-App notwendig. In der App wird der Mi-Account eingeloggt und durch ein Tipp auf das Plus-Symbol eine neue Lampe hinzugefügt. Nachdem diese hinzugefügt wurde, muss undbedingt die "Lan-Steuereung" jeder einzelnen Lampe aktiviert werden, damit Hass diese über HTTP-Befehle steuern kann. Nun sollte der Lampe eine statische IP zugewiesen werden, dazu siehe [diesen Abschnitt](https://majusss.gitbook.io/d/#static). Die vergebene statische IP wird dann entsprechend dieser [Anleitung](https://majusss.gitbook.io/d/#new) in Hass eingetragen.

## Apple Home und Siri

Um sämtliche in Hass registrierten Geräte über die Apple Home-App zu steuern, wird die Integration `HomeKit` benötigt. Diese wird wie jede andere Hass-Komponente in der `configuration.yaml` nach dieser [Anleitung](https://www.home-assistant.io/components/homekit/) hinzugefügt.

```yaml
homekit:
  filter:
    include_domains:
      - alarm_control_panel
      - light
      - media_player
```

Bei `include_domains` werden nun alle Kategorien der Geräte eingetragen, die in Apple Home übernommen werden sollen, zum Beispiel alle Sensoren (sensors) oder alle Lichter (light). Das iPad sollte nun als Apple Home-Server fungieren, wenn es zuhause im WLAN ist. Das bedeutet, Apple Home kann von überall gesteuert werden, weil das externe Gerät, zum Beispiel ein iPhone, über die Apple-ID und der iCloud eine Verbindung zum iPad und somit zu Hass aufbaut. Es ist hierbei kein DynDNS (link) oder [VPN](https://majusss.gitbook.io/d/#vpn)  notwendig.

## Tuya Temperatur beheben

Zuerst werden alle `custom_componens` gelöscht um Konflikte mit älteren Versionen zu vermeiden. Danach wird ein neues `custom_componens` Verzeichnis erstellt und die aktuelle `tuya` Komponente hineinkopiert. Danach werden einige `sed` Befehle ausgeführt, die bestimmte Zeichenketten suchen und ersetzen. Dies führt dazu, dass die Temperatur durch zwei geteilt wird, und Hass weiß, dass es halbe Gradzahlen gibt.

```bash
sudo rm -rf /home/homeassistant/.homeassistant/custom_components
sudo mkdir /home/homeassistant/.homeassistant/custom_components
sudo cp -R /srv/homeassistant/lib/python3.7/site-packages/homeassistant/components/tuya/ /home/homeassistant/.homeassistant/custom_components/
sudo sed -i 's/PRECISION_WHOLE/PRECISION_HALVES/g' /home/homeassistant/.homeassistant/custom_components/tuya/climate.py
sudo sed -i "s/return self.tuya.current_temperature().*/return self.tuya.current_temperature()\/2/g" /home/homeassistant/.homeassistant/custom_components/tuya/climate.py
sudo sed -i "s/return self.tuya.target_temperature().*/return self.tuya.target_temperature()\/2/g" /home/homeassistant/.homeassistant/custom_components/tuya/climate.py
sudo chown -R homeassistant:homeassistant /home/homeassistant/.homeassistant/custom_components
```

## Webcam mit motion und Hass steuern

Zuerst sollte `motion` direkt vom git repository installiert werden (<https://github.com/Motion-Project/motion>).  Nach Installation, sollten zwei motion config Dateien angelegt werden:

```bash
sudo cp /etc/motion/motion.conf /etc/motion/motion_notify.conf
sudo cp /etc/motion/motion.conf /etc/motion/motion_video.conf
```

> Zu beachten ist auch, dass in der Hass-config das `/tmp` Verzeichnis auf die Whitelist muss.

Die `motion_notify.conf` wird so bearbeitet, dass ein Video erstellt wird: `movie_output on` dieses kann dann per hass versendet werden.

Bei der `motion_video.conf` werden die einzelnen Video frames als Bilder gespeichert mit Hilfe von `picture_output on`. Zusätzlich muss ein bash-Script mit folgendem Inhalt erstellt werden:

```bash
#!/bin/bash
cd /tmp
f=$(ls *.jpg -t | head -n1)
unlink lastsnap
ln -s $f lastsnap
```

Dieses sollte dann mit `chmod +x` ausführbar gemacht werden und über `on_picture_save /home/pi/symlink_motion.sh` in der motion config eingebunden werden.
