Wie kann man eigene Python Scripte in Home Assistant ausführen? Da Home Assistant selbst in Python geschrieben ist und Home Assistant 24/7 läuft, liegt es nahe, den Raspberry Pi auf dem Home Assistant läuft auch für andere, über das Smarthome hinaus gehende Python Scripte zu nutzen. Cronjobs kann man bequem mit Automations nachbauen und schon hat man einen Mini-PC der für einen vollkommen automatisch die eigenen Tools und Scripte in Python ausführt!
Um eigene Python Scripte tatsächlich „auf“ Home Assistant ausführen zu können, muss man jedoch zu einem kleinen Hilfsmittel greifen, damit es möglichst einfach ist die eigenen Python Scripte auszuführen. Ich nutze hierfür die über HACS verfügbare Custom Component Python Scripts Pro for Home Assistant. Wie die Installation und Einrichtung erfolgt, ist im Repository der Custom Component sehr gut beschrieben!

Nach der Installation dieser Custom Component muss man in der configuration.yaml die gewünschten/benötigten Packages angeben. Diese werden dann von Home Assistant beim nächsten Neustart automatisch nachgeladen/installiert (sollte man hier sehr viele und umfangreiche Packages angeben, kann der Boot etwas länger dauern – bitte nicht in Panik geraten!).
Bei mir sehen die Requirements beispielsweise wie folgt aus:
python_script:
requirements:
- instagrapi
- datetime
- mysql.connector
Die Packages Datetime, MYSQL und Instagrapi sind also bei mir installiert und können somit in meinen Python-Scripten genutzt werden.
Ein Python-Script kann dann an einem beliebigen Ort abgelegt werden, da beim Aufruf der gesamte Pfad zum Python-Script angegeben wird. Ich habe der Ordnung halber im root einen Unterordner „python_scripts“ angelegt, in dem dann meine Python-Scripte liegen.
Ein Beispielscript könnte sein:
import requests
import mysql.connector
from datetime import datetime
from datetime import date
now = datetime.now()
r = requests.get('https://some.domain/json/data.json')
resp = r.json()
mydb = mysql.connector.connect(
host="some.host",
user="my_secret_user",
password="the_secret_password",
database="some_database"
)
mycursor = mydb.cursor()
sql = "INSERT INTO netzfrequenzen (value, timestamp) VALUES (%s, %s)"
val = (resp, now.strftime('%Y-%m-%d %H:%M:%S'))
mycursor.execute(sql, val)
mydb.commit()
Dieses Python Script ruft eine JSON-Datei auf einem externen Server auf und speichert den Inhalt dann in einer MYSQL-Datenbank. Keine Raketenwissenschaft, aber in meinen Augen über ein Python-Script auf Home Assistant relativ schlank gelöst.
In einer Automation habe ich dann folgenden Code:
- alias: 'Get Netzfrequenz'
trigger:
- platform: time_pattern
minutes: "/5"
action:
- service: python_script.exec
data:
file: python_scripts/my_python_script.py
cache: false
Alle 5 Minuten führe ich mein Python Script aus, so dass alle 5 Minuten in meiner externen Datenbank die aus dem JSON ermittelten Daten gespeichert werden.
Was konkret dieses Beispielscript macht, spielt für diesen Beitrag keine Rolle. Aber sinngemäß habe ich mit meiner Installation von Home Assistant einen Cronjob aufgesetzt, der alle 5 Minuten per Python-Script Daten von einer anderen Webseite ausliest und diese in meiner externen Datenbank speichert. Rund um die Uhr!
Je nach Python Script kann das Ausführen des Scriptes natürlich dein Home Assistant ausbremsen (wer beispielsweise eine komplette Webseite mit sehr vielen Inhalten scrapen möchte, sollte dies nicht über sein Home Assistant machen!), aber kleinere Tools oder Skripte verkraftet Home Assitant (oder konkret ein Raspberry Pi 4) ohne Probleme! 😉