Home Assistant Anleitung how to… Daten per RESTful Command an ein PHP-Skript übergeben

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.

Home Assistant: How to... Kurzanleitungen und Nützliches für Home Assistant!

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:

  1. ein PHP-Skript, welches die Daten „entgegennimmt“
  2. eine Datenbank, in welche du die erhaltenen Daten schreibst
  3. eine Passwort-Absicherung (beispielsweise per htaccess), damit nur du Daten in die Datenbank schreiben kannst
  4. einen RESTful Command in PHP, welcher alle zu übergebenden Daten, sowie Informationen über die Passwort-Absicherung (aus 3) kennt
  5. 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
( 367 Followers )
X

Follow Home Assistant

E-mail : *
* Ich stimme der Datenschutzerklärung zu!

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.

Dieser Beitrag ist Teil einer kleinen Beitrags-Serie rund um den hass.io Home Assistant.

Foto des Autors
Autor
Olli
Ca. Ende 30, seit Windows 3.1 Fan von Computern, Gadgets, Handys und allem, was sich irgendwie programmieren lässt. Ich mag es gerne individuell und möglichst einfach, probiere aber auch gerne neue Dinge sofort aus. :) Konnte ich dir helfen? Dann würde ich mich über ein Bier freuen ;) Bier-Spende

Schreibe einen Kommentar