bookmark_borderremote mySensors serial gateway

Das mySensors gateway ist bei mir als serielles gateway fest mit einem seriellen Port eines Orange Pi Zero verdrahtet. Früher lief Home Assistant selber auch auf diesem Rechner, so dass der Zugriff auf das gateway direkt erfolgen konnte.

Mit dem Umzug von Home Assistant auf einen performanteren NUC Server hätte ich eigentlich auch ein neues mySensors-gateway bauen müssen, entweder als USB-Variante oder als Ethernet- bzw Wifi-gateway.

Den Aufwand habe ich mir vorerst erspart, indem ich den seriellen Port des Orange Pi auf einen TCP-Port mappe.

Dazu erstellte ich eine Datei /usr/local/bin/mysensors-eth.sh mit folgendem Inhalt:


#!/bin/bash

port=5003
serial=/dev/ttyS1
baudrate=b38400

#stty $baudrate -F $serial
#ncat --listen --broker --keep-open 0.0.0.0 $port &
#socat $serial TCP:127.0.0.1:$port
socat TCP4-LISTEN:$port,reuseaddr,fork $serial,$baudrate,raw,echo=0

Diese Datei wird jetzt ausführbar gemacht mit
sudo chmod +x mysensors-eth.sh

Damit die „Umleitung“ bei jedem Systemstart neu gesetzt wird muss noch eine systemd-unit erstellt werden. Dazu wird eine neue Datei
/etc/systemd/system/mysensors-eth.service mit folgendem Inhalt angelegt:


[Unit]
Description=mysensors-gateway serial to ethernet bridge
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/mysensors-eth.sh

[Install]
WantedBy=multi-user.target

Diese unit muss jetzt nur noch aktiviert und erstmalig gestartet werden.


sudo systemctl daemon-reload
sudo systemctl enable mysensors-eth.service
sudo systemctl start mysensors-eth.service

Fertig! Ab jetzt kann das serielle gateway auch von anderen Rechnern als ethernet-gateway genutzt werden.

In Home Assistant zB lautet der entsprechende Eintrag in der configuration.yaml in meinem Fall:


mysensors:
  gateways:
    - device: "192.168.2.30"
      tcp_port: 5003
  optimistic: false
  persistence: true
  version: "3.2"

bookmark_borderHome Assistant core händisch installieren

Voraussetzung ist eine Python3.8 Installation. Debian 10 bringt leider nur Python3.7 mit, welche auch installiert sein sollte. Home Assistant ist damit zwar scheinbar noch lauffähig, allerdings spuckt die Installation einige Fehler und Warnmeldungen aus.
Daher installieren wir zusätzlich zur 3.7 erstmal manuell die Version 3.8.

sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install python3 python3-dev python3-venv python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential libopenjp2-7 libtiff5

Eine detaillierte Anleitung zur Installation von Python 3.8, verfasst von Pascal Roeleven, der auch die Python 3.8 backports bereitstellt, findet sich unter folgendem link in der Home Assistant Community.
Daher hier nur eine schnelle Kurzzusammenfassung. Falls etwas nicht klappt, im obigen Link nachschauen.

Zuerst den PGP-key für APT bereitstellen

wget https://pascalroeleven.nl/deb-pascalroeleven.gpg
sudo apt-key add deb-pascalroeleven.gpg

Anschliessend die APT-Quellen aktualisieren, d.h. folgenden Eintrag zur /etc/apt/souces.list hinzufügen ..

deb http://deb.pascalroeleven.nl/python3.8 buster-backports main

… und direkt Python3.8 installieren

sudo apt update
sudo apt install python3.8 python3.8-venv python3.8-dev

Jetzt kann’s mit der Installation von Home Assistant losgehen.

Home Assistant wird als neuer Nutzer mit eigenem Homeverzeichnis installiert:

sudo useradd -rm homeassistant

Während die Konfigurationsdateien später im home landen, wird Home Assistant selber in einem virtuellen Python-Environment im Verzeichnis /srv/homeassistant/ installiert.

Dazu ersteinmal das Verzeichnis erstellen und die Rechte dem neuen Nutzer homeassistant zuweisen.

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

Die Installation wird dann in dem virtuellen Python Environment als Nutzer homeassistant durchgeführt. Wir wechseln also den Nutzer, gehen in das Installationsverzeichnis, installieren die virtuelle Python3.8 Umgebung und wechseln dann in diese hinein.

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

noch schnell ein notwendiges Python-Paket installieren mit

python3 -m pip install wheel

und im Anschluss

pip3 install homeassistant

et voilà! … naja, fast. Prinzipiell kann Home Assistant jetzt direkt über die Kommandozeile mittels Eingabe von hass gestartet werden. Aber wenn wir schonmal dabei sind, dann richtig.
Erstmal wechseln mit exit wieder zurück zu unserem eigenen Account.
Damit Home Assistant mit jedem Neustart des Rechners automatisch aktiviert wird, erstellen wir das System-Startscript /etc/systemd/system/homeassistant.service mit folgendem Inhalt:

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

[Service]
Type=simple
User=homeassistant
WorkingDirectory=/home/homeassistant/.homeassistant
ExecStart=/srv/homeassistant/bin/hass -c "/home/homeassistant/.homeassistant"
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

Dieses script wird nun noch aktiviert und direkt gestartet:

sudo systemctl --system daemon-reload
sudo systemctl enable homeassistant
sudo systemctl start homeassistant

Home Assistant ist jetzt aktiv und lauscht auf port 8123.
http://mei.ne.ip:8123/
Der erste Start dauert allerdings ein wenig, es kann also sein, dass die Verbindung nicht auf Anhieb klappt.

Um Home Assistant später zu aktualisieren

sudo -u homeassistant -H -s
cd /srv/homeassistant
source bin/activate
pip install --upgrade homeassistant

bookmark_borderESPhome händisch installieren

Voraussetzung ist eine Python3 Installation

sudo apt-get install python3 python3-dev python3-venv python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential libopenjp2-7 libtiff5

ESPhome wird als neuer Nutzer mit eigenem Homeverzeichnis installiert:

sudo useradd -rm esphome

Während die Konfigurationsdateien später im home landen, wird die ESPhome Installation selber in einem virtuellen Python-Environment im Verzeichnis /srv/esphome/ installiert.

Dazu ersteinmal das Verzeichnis erstellen und die Rechte dem neuen Nutzer esphome zuweisen.

cd /srv
sudo mkdir esphome
sudo chown esphome:esphome esphome

Die Installation wird dann in dem virtuellen Python Environment als Nutzer esphome durchgeführt. Wir wechseln also den Nutzer, gehen in das Installationsverzeichnis, installieren die virtuelle Umgebung und wechseln dann in diese hinein.

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

noch schnell ein notwendiges Python-Paket installieren mit

python3 -m pip install wheel

und im Anschluss

pip3 install esphome

et voilà! … naja, fast. Prinzipiell kann ESPHome jetzt direkt über die commandline verwendet und gestartet werden. Aber wenn wir schonmal dabei sind, dann richtig.
Erstmal wechseln mit exit wieder zurück zu unserem eigenen Account.
Damit ESPHome mit jedem Neustart des Rechners automatisch aktiviert wird, erstellen wir das System-Startscript /etc/systemd/system/esphome.service mit folgendem Inhalt:

[Unit]
Description=ESPHome Dashboard
After=homeassistant.service
Requires=homeassistant.service

[Service]
Type=simple
User=esphome
Environment="PATH=/srv/esphome/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
WorkingDirectory=/srv/esphome/
ExecStart=/srv/esphome/bin/esphome /home/esphome/config/ dashboard --password GEHEIMESPASSWORT
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

Dieses script wird nun noch aktiviert und direkt gestartet:

sudo systemctl --system daemon-reload
sudo systemctl enable esphome
sudo systemctl start esphome

ESPHome ist jetzt aktiv und lauscht mit dem Dashboard auf port 6052. http://mei.ne.ip:6052/

Um später ESPHome zu aktualisieren

sudo -u esphome -H -s
cd /srv/esphome
source bin/activate
pip install -U esphome

Möchte man die neuesten Funktionen nutzen, kann es Sinn machen, auch mal die Beta-Version auszuprobieren:

sudo -u esphome -H -s
cd /srv/esphome
source bin/activate
pip install --pre -U esphome