Alle Daten (Variablen) von IP-Symcon als JSON Exportieren

Ich wurde gefragt, ob die SymBox als eine IoT Box fungieren kann. Dies hat für denjenigen bedeutet, dass wir an einem Endpunkt einfach alle Daten zur Verfügung stellen können. Ich habe dafür dieses Skript schnell geschrieben, welches alle Variable per JSON zur Verfügung stellt.

Am einfachsten könnt ihr das Skript per WebHook (WebHook Control — IP-Symcon :: Automatisierungssoftware) zur Verfügung stellen. Dann sind die Daten an der persönlichen Connect Adresse (z.B. Nicht erreichbar) verfügbar.

Anbei das Bild wie das WebHook Control eingerichtet werden muss.


<?php

header("Content-Type: application/json");

$datapoints = [];

//Möglichkeit 1: Alle IDs ausgeben:
$ids = IPS_GetVariableList();

//Möglichkeit 2: IDs selber definieren
//$ids = [12345, 23456, 34567];

//Möglichkeit 3: Möglichkeit 1 aktiv lassen und dann bestimmte IDs entfernen:
//$ids = array_diff($ids, [12345, 23456, 34567]);

//Jetzt alles ausgeben
foreach($ids as $vid) {
    $datapoints[] = [
        "id" => $vid,
        "location_formatted" => IPS_GetLocation($vid),        
        "location_raw" => buildLocation($vid),
        "value_raw" => GetValue($vid),
        "value_formatted" => (IPS_GetVariable($vid)["VariableProfile"] == "" && IPS_GetVariable($vid)["VariableCustomProfile"] == "") ? null : GetValueFormatted($vid)
    ];
}

function buildLocation($id, $base = []) {
    if($id == 0) {
        return array_reverse($base);
    } else {
        $base[] = IPS_GetName($id);
        return buildLocation(IPS_GetParent($id), $base);
    }
}

echo json_encode($datapoints, JSON_PRETTY_PRINT);