Loxone Anbindung an IP-Symcon mit Webhooks

03. Apr
2021
geschrieben von Roland Meier

In meinem Beitrag über die Becker-Motore habe ich bereits ein kleines Skript gezeigt, welches die Befehle von einem Loxone-Miniserver an IP-Symcon entsprechend den Anforderungen weitersendet.

In diesem Beitrag möchte ich auf eine etwas schönere Lösung eingehen, nämlich die Möglichkeit der Webhooks von Symcon (Anzeige).

 

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:

loxone webhook

 

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 erster webhok

 

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:

loxone config virtueller ausgang

 

Die neuen Befehle rufen lediglich anstelle meines loxone.php Skripts den Symcon WebHook auf:

loxone config virtueller befehl

 

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:

loxone config programm

 

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:

symcon get set browser

 

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:

loxone config virtueller eingang

 

Und hier der HTTP-Eingangsbefehl, wo ich gezielt auf den Text "Wert:" springe und anschließend die Zahl einlese:

loxone config virtueller eingang befehl

 

Zuletzt lege ich den Eingang noch in mein Programm und aktiviere die Live-View, um den Wert entsprechend zu sehen:

loxone programm mit virtuellem eingangsbefehl

 

Viel Spaß beim Nachbauen...

 

Gelesen 3166 mal Letzte Änderung am Mittwoch, 07 April 2021
Artikel bewerten
(3 Stimmen)
Bitte anmelden, um einen Kommentar zu posten
Anzeige

Anzeige

123RF.com - For all your creative needs!

Kalender

« März 2024 »
Mo Di Mi Do Fr Sa So
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Newsletter

Euch interessieren meine Themen hier? Dann tragt euch einfach in den Newsletter ein und ihr werden bei neuen Beiträgen informiert.

Anzeige