Dokumentation
WebHook Control
Benötigt: IP-Symcon >= 4.0
Beschreibung
Das WebHook Control Modul bietet die Möglichkeit Skripte über einen Browser aufzurufen. Über den Symcon Connect Dienst sind auch Aufrufe außerhalb des lokalen Netzwerks möglich.
Es bietet weitergehend die Möglichkeit dem Skript Daten mitzuliefern.
Skripte, die durch den WebHook ausgeführt werden, beinhalten diese Systemvariablen

Ermitteln des besten WebHooks
Der aufgerufene Hook muss nicht exakt übereinstimmen. Es wird immer der Beste Treffer verwendet, der die längste Übereinstimmung hat. Dies bedeutet, das der Hook-Pfad kürzer sein kann, als der z.B. im Browser aufgerufene Hook.
Konfiguration im Beispiel:
- Hook: /hook/ocpp, Ziel: 12345
- Hook: /hook/ocpp/extra, Ziel: 55555
Aufrufe im Beispiel:
- Aufruf: /hook/ocpp, Bester Treffer: 12345
- Aufruf: /hook/ocpppui, Bester Treffer: 12345
- Aufruf: /hook/ocpp/wallbox1, Bester Treffer: 12345
- Aufruf: /hook/ocpp/extra, Bester Treffer: 55555
- Aufruf: /hook/tester, Keine Übereinstimmung
WebSocket Support
Ab der Symcon Version 5.2 nutzt das WebHook Control WebSockets und ermöglicht somit Echtzeitübermittlung.
Empfangene Daten können wie folgt erfasst und ausgegeben werden:
// Beim Empfangen landen die Daten im php://input Stream.
IPS_LogMessage("WebSocket", file_get_contents("php://input"));
Einbindung in Symcon
Das WebHook Control gehört zu den Kern Instanzen und ist somit sofort konfigurierbar.
Innerhalb eines Browsers kann das jeweilig verknüpfte Skript mit "IP:PORT/hook/HOOKNAME" aufgerufen werden.
Um einen Hook einzurichten muss in der "WebHook Control" Instanz bei der oberen Liste auf "Hinzufügen" geklickt werden. Folgend muss zuerst der Aufrufname des Hooks eingegeben werden und anschließend das Skript gewählt werden, welches durch den Hook ausgeführt werden soll.
Auch Aufrufe via Connect Control sind möglich.
Beispiel
Skript Aufruf
Das Beispielskript, welches aufgerufen werden soll, ist "WebHook TestSkript" mit der ObjektID "35909".
IPS_LogMessage("WebHook GET", print_r($_GET, true));
IPS_LogMessage("WebHook POST", print_r($_POST, true));
IPS_LogMessage("WebHook IPS", print_r($_IPS, true));
IPS_LogMessage("WebHook RAW", file_get_contents("php://input"));
echo "Meldung: " . $_GET['Meldung'];
Der Aufruf und das Ergebnis wären wiefolgt:

An Symcon werden die Daten in Arrays dem Skript übergeben.

Authentifizierung
Ein Beispiel wie eine automatische Authentifizierung über das Modul Control verwirklicht wurde.
Als Nutzername wurde "Symcon" und als Passwort wurde "passwort" gewählt.
Eine Authentifizierung wird immer empfohlen, damit ein unerlaubter Zugriff von Außen auf Symcon verhindert wird.
Quellcode
if(!isset($_SERVER['PHP_AUTH_USER']))
$_SERVER['PHP_AUTH_USER'] = "";
if(!isset($_SERVER['PHP_AUTH_PW']))
$_SERVER['PHP_AUTH_PW'] = "";
if(($_SERVER['PHP_AUTH_USER'] != "Symcon") || ($_SERVER['PHP_AUTH_PW'] != "passwort")) {
header('WWW-Authenticate: Basic Realm="Geofency WebHook"');
header('HTTP/1.0 401 Unauthorized');
echo "Authorization required";
return;
}
echo "Willkommen im geschützten Bereich";
Wird der Hook aufgerufen, erscheint die Abfrage nach Nutzername und Passwort. Und die Daten werden via $Post-Array an das Skript verschickt.

Einbindung via PHP-Modul
Neben dem Aufruf via Skript, ist es auch möglich über die Funktion ProcessHookData innerhalb eines PHP-Moduls auf Hookaufrufe zu reagieren.
Dazu wird ein Hook per RegisterHook auf die eigene InstanceID registriert. Anschließend wird die Funktion "ProcessHookData()" automatisch durch das Hook Control aufgerufen.
Beispiel
Dem Beispiel HookServe kann der Quellcode zur gesamten Handhabe eines WebHooks via PHP-Modul mit dem modernen IPSModuleStrict entnommen werden. Die Nutzung mit dem alten IPSModule ist hier aufgeführt: HookServe (Legacy)