Manchmal kann es notwendig sein, Daten aus Home Assistant an ein anderes Skript oder Tool weiterzugeben. Auch hierfür bietet Home Assistant natürlich eine einfache Lösung: Der REST-Post Call
Ich hatte ja bereits darüber geschrieben, wie man Daten per REST-Call im JSON-Format in Home Assistant „importieren“ kann. Mit der gleichen REST-Technik kann man Daten im JSON-Format auch an andere Systeme übergeben.
In diesem Beispiel, erkläre ich, wie man den Wert einer Home Assistant Entität per RESTful Command (Home Assistant RESTful Command) an ein PHP-Skript übergeben kann. Konkret nutze ich dies um jeden Tag um 23:55 den Stromverbrauch des jeweiligen Tages von zwei TP-Link WLAN-Steckdosen in eine separate Datenbank zu schreiben. Hierfür habe ich den Weg über ein kleines PHP-Skript gewählt.
Folgende benötigst du, wenn du auch Daten aus Home Assistant an ein externes PHP-Skript übergeben möchtest:
- ein PHP-Skript, welches die Daten „entgegennimmt“
- eine Datenbank, in welche du die erhaltenen Daten schreibst
- eine Passwort-Absicherung (beispielsweise per htaccess), damit nur du Daten in die Datenbank schreiben kannst
- einen RESTful Command in PHP, welcher alle zu übergebenden Daten, sowie Informationen über die Passwort-Absicherung (aus 3) kennt
- eine Automation in Home Assistant, welche den RESTful Command, so wie von die benötigt aufruft
Zuerst der Code der aufzurufenden PHP-Datei, welche die Daten entgegennimmt und in deine externe Datenbank schreiben kann. Ich gehe hierbei nur auf das entgegennehmen der Daten ein, da das Speichern dieser Daten in der Datenbank stark von deinen Rahmenbedingungen abhängt!
Du magst Home Assistant? Dann abonniere kostenlos meine Beiträge mit Tipps, Tricks und Anleitungen rund um Home Assistant:
Follow Home Assistant
Garantiert kein Spam, keine Werbung und immer mit Abmelde-Link, solltest du es dir anders überlegen!
<?php
//in dieser db.inc.php muss alles enthalten sein, um die Verbindung zu deiner Datenbank aufzubauen, sowie die Funktion write_api_value, welche die an die Funktion übergebenen Daten entsprechend speichert
require_once("db.inc.php");
header('Content-Type: application/json');
// Bekomme den JSON Body der Anfrage
$data = json_decode(file_get_contents('php://input'), true);
if(! isset($data['data']['waschmaschine']) OR ! isset($data['data']['ender'])) {
echo json_encode(["400" => false]);
} else {
write_api_value("waschmaschine", $data['data']['waschmaschine']);
write_api_value("ender", $data['data']['ender']);
echo json_encode(["200" => $data['data']['waschmaschine']." & ".$data['data']['ender']." added"]);
}
Nun benötigst du noch den RESTful Command, welcher das zuvor beschriebene PHP-Skript aufruft und dorthin die von dir bestimmten Daten übergibt. Konkret übergebe ich lediglich zu zwei Entitäten (Waschmaschine und Ender) jeweils deren aktuelle Werte.
rest_command:
my_request:
url: 'URL.zu/deinem/eigenen/PHP-Skript/write.php'
username: !secret secret_hassio_webserver_user
password: !secret secret_hassio_webserver_password
method: POST
headers:
accept: "application/json, text/html"
payload: '{"data":{"waschmaschine": {{ states("sensor.steckdose_today_s_consumption") }},"ender": {{ states("sensor.klima_today_s_consumption") }} }}'
content_type: 'application/json; charset=utf-8'
Als letztes benötigst du nun noch eine Automation, welche den zuvor erstellten RESTful Command nach deinen Belieben aufruft:
- alias: "REST POST Power Usage"
trigger:
- platform: time
at: "23:55:00"
action:
- service: rest_command.my_request
Ich nutze das ganze, um den täglichen Verbrauch, welcher an zwei WLAN-Steckdosen gemessen wurde, in eine separate Datenbank zu schreiben. Von dort kann ich die Daten beliebig nutzen und analysieren.
Sichere deine „API“ auf jeden Fall mit Zugangsdaten ab, damit nur du hierüber Daten in deine Datenbank schreiben kannst. Ich habe meine API hinter einen htaccess-Passwortschutz gepackt und habe die hierfür benötigten Zugangsdaten in dem RESTful Command entsprechend angegeben.
Produktempfehlungen