Skip to content

Commit

Permalink
Tools: Added scripts esphome_install and esphome_start; updated ESPHo…
Browse files Browse the repository at this point in the history
…me documentation
  • Loading branch information
msinn committed Oct 3, 2024
1 parent 38c764e commit 5e35e2e
Show file tree
Hide file tree
Showing 5 changed files with 209 additions and 62 deletions.
147 changes: 85 additions & 62 deletions doc/user/source/installation/komplettanleitung/09_esphome.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,112 +11,135 @@ ESPHome Dashboard :redsup:`new`
Wenn ESPHome Devices mit SmartHomeNG verwendet werden sollen, kann es hilfreich sein das ESPHome Dashboard auf dem
Rechner zu installieren, auf dem SmartHomeNG läuft.

Im folgenden wird beschrieben, wie das ESPHome Dashboard auf dem SmartHomeNG System installiert werden sollte.
Das ESPHome Dashboard verwendet eine recht große Anzahl von Python Packages. Um Konflikte mit Packages/Package-Versionen
die in SmartHomeNG verwendet werden zu vermeiden, wird das ESPHome Dashboard in einem eigenen virtuellen Environment
installiert. Die minimal benötigte Python Version für ESPHome ist zurzeit Python 3.9.

|
Zur Installation und Verwaltung von ESPHome sind Skripte im ``tools`` Verzeichnis der SmartHomeNG Installation
vorhanden.

Virtuelles Environment erstellen
================================
Die Installation erfolgt mithilfe des Skripts `esphome_install`.

Das ESPHome Dashboard verwendet eine recht große Anzahl von Python Packages. Um Konflikte mit Packages/Package-Versionen
die in SmartHomeNG verwendet werden zu vermeiden, sollte das ESPHome Dashboard in einem eigenen virtuellen Environment
laufen. Die minimal benötigte Python Version für das ESPHome Dashboard ist zurzeit Python 3.10.
.. code-block:: bash
Das virtuelle Environemnt hierfür wird mit dem folgenden Befehl angelegt:
$ esphome_install
.. code-block:: bash
Das Skript

- prüft ob eine für ESPHome benötigte Python Version auf dem System gefunden wird
- erstellt ein virtuelles Environment mit der entsprechenden Python Version
- aktiviert das erstellte virtuelle Environment
- installiert ESPHome in das virtuelle Environment
- zeigt anschließend die Version von ESPHome an, die installiert wurde
- und erzeugt das Verseichnis in dem die Konfigurationen für ESPHome gespeichert werden

$ make_venv 3.10 esphome
Die Dateien aus dem Verzeichnis ``/usr/local/smarthome/var/esphome/config`` werden beim Backup und Restore der
SmartHomeNG Konfiguration mit gesichert bzw. zurück restauriert.

|
ESPHome Dashboard installieren
==============================
ESPHome Dashboard starten und testen
====================================

Das ESPHome Dashboard muss im laufenden virtuellen Environment installiert werden. Das virtuelle Environment muss dazu
vorher mit dem folgenden Befehl aktiviert werden:
Das ESPHome Dashboard kann im aktuellen Terminal Fenster mit dem Befehl

.. code-block:: bash
$ source act epshome
$ esphome_start
Nun kann das ESPHome Dashboard mit den folgenden Befehlen angelegt werden:
gestartet werden und mit Ctrl-C wieder beendet werden.

.. code-block:: bash
Nun sollte das Dashboard mit einem Browser (Chrome oder Safari) aufgerufen werden können. Die URL dazu ist

(py_esphome) $ pip3 install wheel
(py_esphome) $ pip3 install esphome
<Name/IP des SmartHomeNG Systems>:6052

Nun sollte das ESPHome Dashboard installiert sein. Mit dem folgenden Befehl kann die Installation überprüft und
die installierte Version angezeigt werden:
Nun sollte das ESPHome Dashboard angezeigt werden.

.. code-block:: bash
Der folgende Screenshot zeigt das Dashboard, welches im lokalen Netzwerk bereits ein ESPHome Device entdeckt
(discovered) hat.

.. image:: ../assets/esphome-dashboard.jpg
:class: screenshot

|
(py_esphome) $ esphome version
Version: 2024.9.2
ESPHome Dashboard als Dienst einrichten
=======================================

Damit das ESPHome Dashboard bei jedem Start des Systems automatisch gestartet wird, muss es als Dienst eingerichtet
werden.

Nun muss noch das Verzeichnis angelegt werden, in dem die Konfigurationen für ESPHome gespeichert werden.
Da ESPHome in ein virtuelles Environment installiert wurde, muss dieses virtuelle Environment zum starten dest
Dienstes genutzt werden. Es muss der Python Interpreter aus diesem virtuellen Environment genutzt werden um
esphome zu betreiben. Dazu muss der folgende Text in die Datei ``/etc/systemd/system/esphome.service`` eingefügt werden:

.. code-block:: bash
(py_esphome) $ mkdir /usr/local/smarthome/var/esphome
(py_esphome) $ mkdir /usr/local/smarthome/var/esphome/config
[Unit]
Description=ESPHome-dashboard daemon
After=network-online.target
Die Dateien aus dem Verzeichnis ``/usr/local/smarthome/var/esphome/config`` werden beim Backup und Restore der
Konfiguration von SmartHomeNG mit gesichert bzw. zurück gespielt.
[Service]
Type=simple
ExecStart=/usr/local/smarthome/tools/esphome_start
User=smarthome
Restart=on-failure
RestartSec=30
TimeoutStartSec=900
RestartForceExitStatus=5
Environment="PATH=/usr/local/smarthome/venvs/py_esphome/bin:/usr/local/sbin:/usr$
[Install]
WantedBy=default.target
|
ESPHome Dashboard starten und testen
====================================
Starten des Dienstes
====================
Innerhalb des virtuellen Environments wird das Dashboard mit dem folgenden Befehl gestartet:
Der so vorbereitete Dienst kann über den **systemctl** Befehl gestartet
werden.
.. code-block:: bash
(py_esphome) $ cd /Users/Martin/ESPHome
(py_esphome) $ esphome dashboard /usr/local/smarthome/var/esphome/config
sudo systemctl start esphome.service
Nun sollte das Dashboard mit einem Browser (Chrome oder Safari) aufgerufen werden können. Die URL dazu ist
Wenn alles ok ist, kann der Autostart aktiviert werden:
<Name/ip des SmartHomeNG Systems>:6052
.. code-block:: bash
Nun sollte das ESPHome Dashboard angezeigt werden.
sudo systemctl enable esphome.service
Der folgende Screenshot zeigt das Dashboard, welches im lokalen Netzwerk bereits ein ESPHome Device entdeckt
(discovered) hat.
Bei Systemstart wird nun das ESPHome Dashboard automatisch gestartet.
.. image:: /_static/img/esphome-dashboard.jpg
:class: screenshot
Um den Dienst wieder auszuschalten und den Neustart bei Systemstart zu
verhindern nutzt man:
|
.. code-block:: bash
ESPHome Dashboard als Dienst einrichten
=======================================
sudo systemctl disable esphome.service
Damit das ESPHome Dashboard bei jedem Start des Systems automatisch gestartet wird, muss es als Dienst eingerichtet
werden.
Um zu sehen, ob das ESPHome Dashboard läuft, genügt ein
.. code-block:: bash
...
systemctl status esphome.service
Läuft es noch nicht und man möchte sozusagen manuell starten reicht ein:
.. code-block:: bash
sudo systemctl start esphome.service
Ein Neustart des Dashboards würde mit
.. code-block:: bash
[Unit]
Description=ESPHome dashboard daemon
After=network.target
sudo systemctl restart esphome.service
[Service]
Type=forking
ExecStart=/usr/local/smarthome/venvs/py_esphome/bin/esphome dashboard /usr/local/smarthome/var/esphome/config
WorkingDirectory=/usr/local/smarthome
User=smarthome
PIDFile=/usr/local/smarthome/var/run/esphome.pid
Restart=on-failure
TimeoutStartSec=900
RestartForceExitStatus=5
funktionieren, ein Stop von SmartHomeNG entsprechend
[Install]
WantedBy=default.target
.. code-block:: bash
sudo systemctl stop esphome.service
...
115 changes: 115 additions & 0 deletions tools/esphome_install
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
#!/bin/bash

#########################################################################
# Copyright 2024- Martin Sinn [email protected]
#########################################################################
# This file is part of SmartHomeNG
#
# SmartHomeNG is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
#########################################################################

# get directory where this script is stored
SOURCE=${BASH_SOURCE[0]}
DIR=$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )

# test if script is called with 'source'
#(return 0 2>/dev/null) && sourced=1 || sourced=0
#
#if [ "$sourced" -eq "0" ]; then
# echo
# echo ERROR: The script MUST be called with \'source\', like: \'source make_venv $1 $2\'
# echo
# exit
#fi


cd $DIR
cd ..
SHNG_BASEDIR=`pwd`

# ---------------------------------------------------------------

function get_pythonversion_for_esphome() {
if [ "`which python3.10`" != "" ]; then
echo 3.10
else
if [ "`which python3.9`" != "" ]; then
echo 3.9
else
if [ "`which python3.11`" != "" ]; then
echo 3.11
else
if [ "`which python3.12`" != "" ]; then
echo 3.12
else
if [ "`which python3.13`" != "" ]; then
echo 3.13
fi
fi
fi
fi
fi
}

# ---------------------------------------------------------------


# Test if virtual environment for ESPHome already exists
if [ -d venvs/py_esphome ];
then
echo
echo "Virtual environment for ESPHome alredy exists"
else
VERS=$(get_pythonversion_for_esphome)
echo
if [ "$VERS" = "" ]; then
echo "ERROR: No Python version found which can be used to run ESPHome"
echo " Please install a Python version (>= 3.9) supported by ESPHome"
echo
exit 1
fi

echo Selecting Python version $VERS to create virtual environment

echo
echo "Creating virtual environment for ESPHome"
source tools/make_venv $VERS esphome
fi

source act esphome

echo "Installing ESPHome into virtual environment"
pip install wheel >/dev/null
pip install esphome >/dev/null

echo
echo "`esphome version` of ESPHome is installed"

echo
if [ -d $SHNG_BASEDIR/var/esphome/config ];
then
echo "Configuration directory for ESPHome already exist"
echo " -> $SHNG_BASEDIR/var/esphome/config"
else
echo "Configuration directory for ESPHome will be created"
echo " -> $SHNG_BASEDIR/var/esphome/config"
if [ ! -d $SHNG_BASEDIR/var/esphome ];
then
mkdir $SHNG_BASEDIR/var/esphome
fi
if [ ! -d $SHNG_BASEDIR/var/esphome/config ];
then
mkdir $SHNG_BASEDIR/var/esphome/config
fi
fi


echo
echo "Deactivating virtual environment for ESPHome"
deactivate


5 changes: 5 additions & 0 deletions tools/esphome_start
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash

cd /usr/local/shng_dev/tools
source act esphome
esphome dashboard /usr/local/shng_dev/var/esphome/config
4 changes: 4 additions & 0 deletions tools/setpermissions
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ chmod +x tools/plugin_metadata_checker.py
chmod +x tools/test_running
chmod +x tools/install_plugin_from_develop

chmod +x tools/esphome_install
chmod +x tools/esphome_update
chmod +x tools/esphome_start

#echo `pwd`
#find . -type d -exec chmod g+rwsx {} +
#find . -type f -exec chmod g+r {} +
Expand Down

0 comments on commit 5e35e2e

Please sign in to comment.