Erstellen eines ersten PHP-Beispielskripts in Symcon
In meinem Symcon Programm lege ich unter der Loxone Hardware ein neues Skript mit dem Namen Loxone-WebHook an und lege erstmal folgenden Inhalt hinein:
WFC_SendNotification(WEBFRONT-ID, 'Loxone', 'Nachricht: ' . $_GET['Nachricht'], 'Script', 5);
echo "Nachricht: " . $_GET['Nachricht'];
Das Programm speichere ich ab und bekomme meine Symcon-ID des Skripts.
Damit erstelle ich nun einen neuen Webhook in den Symcon-Kerninstanzen:
Der Aufruf in einem Browser lautet dann wie folgt:
http://192.168.178.XXX:3777/hook/Loxone?Nachricht=%22Servus...%22
Und hier auch schon das Ergebnis, Zeile 1 sendet den Wert meiner Nachricht "Servus..." ans Webfront als Notification und Zeile 2 gibt das Ergebnis direkt im Browser aus:
Symcon WebHook Skript für Loxone
In diesem Beispiel werde ich 1:1 die Funktionalität aus oben genannten Beitrag als WebHook nachbauen, um vom Loxone Miniserver, über einen virtuellen Ausgang, die Symcon Variable zu setzen und den Rolladenmotor anzusteuern.
Hier das deutlich kleinere Skript:
<?php // MODIFY HERE ACC. YOUR NEEDS. // Skript username & password. $AUTH_USER = 'admin'; $AUTH_PASS = 'admin'; // STOP HERE TO MODIFY ANYTHING. // Simple authentication. header('Cache-Control: no-cache, must-revalidate, max-age=0'); $has_supplied_credentials = !(empty($_SERVER['PHP_AUTH_USER']) && empty($_SERVER['PHP_AUTH_PW'])); $is_not_authenticated = ( !$has_supplied_credentials || $_SERVER['PHP_AUTH_USER'] != $AUTH_USER || $_SERVER['PHP_AUTH_PW'] != $AUTH_PASS ); if ($is_not_authenticated) { header('HTTP/1.1 401 Authorization Required'); header('WWW-Authenticate: Basic realm="Access denied"'); exit; } SetValue($_GET['symcon_id'], $_GET['symcon_value']); WFC_SendNotification(WEBRONT-ID, 'Loxone', 'Nachricht: ' . $_GET['symcon_id'] . ' - ' . $_GET['symcon_value'], 'Script', 5); echo "Nachricht: " . $_GET['symcon_id'] . ' - ' . $_GET['symcon_value'];
Ich beginne auch hier wieder mit der gleichen Authentifizierung, wie im ursprünglichen Skript und breche alles ab, wenn diese scheitert.
Mit dem SetValue-Befehl lese ich aus der URL auch wieder die Symcon-ID sowie den Wert, auf den geschaltet werden soll.
Die beiden letzten Nachrichtenausgaben sind nur zur Kontrolle da.
Zuletzt noch die notwendigen Anpassungen in der Loxone Config (Anzeige).
Hier der neue virtuelle Ausgang, welcher in diesem Fall auf den Symcon Port 3777 geht:
Die neuen Befehle rufen lediglich anstelle meines loxone.php Skripts den Symcon WebHook auf:
Achtet auch hier wieder auf die doppelten && damit eines übermittelt wird, da ansonsten der 2. Wert nicht geschickt wird!
Zuletzt noch die beiden Auf/Ab-Befehle mit der Automatikjalousie verbinden:
Senden & Empfangen von Daten zw. dem Loxone Miniserver und Symcon
Das Skript möchte ich zuletzt noch etwas anpassen, damit auch Loxone Informationen von Symcon-Variablen auslesen kann.
Hier mein aktuelles PHP-Skript:
<?php // MODIFY HERE ACC. YOUR NEEDS. // Skript username & password. $AUTH_USER = 'admin'; $AUTH_PASS = 'admin'; // STOP HERE TO MODIFY ANYTHING. // Simple authentication. header('Cache-Control: no-cache, must-revalidate, max-age=0'); $has_supplied_credentials = !(empty($_SERVER['PHP_AUTH_USER']) && empty($_SERVER['PHP_AUTH_PW'])); $is_not_authenticated = ( !$has_supplied_credentials || $_SERVER['PHP_AUTH_USER'] != $AUTH_USER || $_SERVER['PHP_AUTH_PW'] != $AUTH_PASS ); if ($is_not_authenticated) { header('HTTP/1.1 401 Authorization Required'); header('WWW-Authenticate: Basic realm="Access denied"'); exit; }
else
{
header('HTTP/1.1 200 OK');
} switch ($_GET['symcon_command']) { case 'SetValue': SetValue($_GET['symcon_id'], $_GET['symcon_value']); $message = 'Die Variable: ' . $_GET['symcon_id'] . ' wird auf den Wert: ' . $_GET['symcon_value'] . ' aktualisiert!'; break; case 'GetValue': $value = GetValue($_GET['symcon_id']); $message = 'Die Variable: ' . $_GET['symcon_id'] . ' hat den Wert: ' . $value; break; default: break; } WFC_SendNotification(WEBFRONT-ID, 'Loxone', $message, 'Script', 5); echo $message;
Hier habe ich lediglich die Switch-Case-Abfrage eingebunden, in welcher ich einen neuen symcon_command Parameter abfrage.
Dieser kann so weit SetValue oder GetValue sein, bei einem anderen oder fehlenden Wert geschieht nichts.
Im jeweiligen Case wird dann der eigentliche Befehl an Symcon geschickt und die $message Variable für meine finale Überprüfung zusammengebaut.
Da der Hook im Symcon vom vorherigen Punkt bereits existiert, gehe ich dann gleich auf den ersten Test im Browser über:
Mit folgendem Befehl kann ich also Variablen in Symcon schreiben:
http://192.168.178.XXX:3777/hook/Loxone?symcon_command=SetValue&symcon_id=12345&symcon_value=true
Und hier kann ich den Wert der Variable auslesen:
http://192.168.178.XXX:3777/hook/Loxone?symcon_command=GetValue&symcon_id=12345
Zuletzt noch im Loxone der Virtuelle HTTP Eingang:
Hier der HTTP-Eingang mit der bekannten URL, welche den Wert der Symcon-ID holt:
Und hier der HTTP-Eingangsbefehl, wo ich gezielt auf den Text "Wert:" springe und anschließend die Zahl einlese:
Zuletzt lege ich den Eingang noch in mein Programm und aktiviere die Live-View, um den Wert entsprechend zu sehen:
Viel Spaß beim Nachbauen...