Anfängerfrage - IP-Symcon

Guten Tag allseits

Ich bin auf der Suche nach einer für mich optimierten Visu meines Smart Homes und möchte versuchen, ob und mit welchem Aufwand mir dies mit IP-Symcon gelingen kann. Derzeit läuft mein Home mit KNX Sensoren und Aktoren im Basisbetrieb (Schalten Licht, Jalousie, Dimmen, Bewegungsmelder, Timer) Da Loxone die KNX EIB Welt nur halbherzig unterstützt, läuft mein „Smart Home“ eher weniger Smart im einer Art manuellen Betrieb mit der Out-of-the-Box Visualisierung von Loxone.

Meine erste Übung wäre eine Abfrage von Statuswerten die ich mittels http Befehlen abfragen kann. ZB brennt irgendwo im Haus ein Licht. Darstellen möchte ich dies auf einer Home Seite die mein Haus und Grundstück als schematische Liniengrafik in 4 Bereichen anzeigt (EG, OG, KG, Aussen)
Auf der Startseite mit schwarzem Hintergrund und hellgrauem schemenhaften Linien der Aussenmauernwürde ich in der Visu jeweils einen Leuchtpunkt setzen, falls in einem der Geschosse ein Verbraucher eingeschaltet ist.

Der Status würde für das EG mit http://LoxoneIP/dev/sps/io/Licht_EG_stat/state abgefragt werden können und die Antwort lautet:
<LL control=„dev/sps/io/Licht_EG_stat/state“ value=„0“ Code=„200“/> falls alle Verbraucher ausgeschaltet sind und
<LL control=„dev/sps/io/Licht_EG_stat/state“ value=„1“ Code=„200“/> falls irgendwo im Geschoss ein Aktor eingeschaltet ist.

Wenn das funktioniert, dann würde ich mal drauflos programmieren, und mir in einer Demo ansehen, ob ich mit IP-Symcon meine Wunsch Visu hinbekommen kann.

LG Boomerang

Test Phase 1 wäre eine Visualisierung verschiedener Zustände nach der Abfrage der Parameter des Hauses von Loxone.
Test Phase 2 dann natürlich auch das Auslösen von Schaltbefehlen ebenfalls via http Befehlen via Loxone.
Test Phase 3 wäre dann ein wenig herumzuspielen mit den Darstellungsmöglichkeiten zB von Temperatur, Helligkeits Verläufen, Status der Reed Kontakte und zB wann haben Bewegungsmelder wie oft ausgelöst und die ganze Statistik bzw WebCams und die ganze Heizungs/Beschattungssteuerung

Hab grad folgende Artikeln gefunden - der Themenstarter hatte 2016 ein ähnliches Ziel:
32452-WebFront-gestalten

Aus dem Jahr 2012 gabs eine Anfrage bzgl http Abfrage - ist ja schon lang her. Geht das jetzt schon more easy ?
17453-mit-http-request-Variable-abfragen

Das muss ich mal Testen (aus 2015)
29354-Wert-einer-http-Anfrage-in-Variable

Noch ein Ansatz aus 2017 für einen http request - aber ohne dass ich das verstehe:
34861-HTTP-Response-auslesen

Wie der erste Themenstarter geschrieben hat, geht es mir auch. Irgendwie hab ich noch keinen roten Faden gefunden bei IP-Symcon - damit ich erstmals Licht am Ende des Tunnels sehe.

LG Boomerang

Viel Erfolg

Nun ich kenne mich mit Loxone nicht aus aber werden die KNX Komponeneten direkt über den Loxone Server angesprochen oder über ein weiteres KNX IP Gateway? Aus meiner Sicht wäre es ja im Bezug auf KNX und IP-Symcon wenn das einfachste direkt aus IP-Symcon KNX anzusprechen, entweder über eine KNX IP Gateway oder aber mit einer Symbox mit KNX Erweiterung direkt auf den KNX BUS.

Die Frage ist halt ob der Weg der sinnvollste ist, Du kannst sicher per HTTP den Status abfragen, aber Du bekommst so nie den Status aktiv mit, sondern must jedes mal zyklisch erneut eine Anfrage zum Status stellen. Das erhöht die Netzwerklast doch enorm im Vergleich dazu, wenn das Gerät selber den Status aktiv an IP-Symcon melden würde.

Wenn man Loxone alles per HTTP schalten bzw. auslesen kann geht das grundsätzlich schon nur belastest das dann ja auch Loxone wenn man ständig HTTP Abfrage schickt. Gibt es da eventuell noch andere Schnittstellen wie Serversocket bei Loxone? Ansonsten kann man das natürlich auch per HTTP machen wenn Du das willst. Gibt es eine Dokumentation zu HTTP Zugriffen auf Loxone?

Eventeuell wären dazu auch Ergänzungen wie NEO oder IPSStudio hilfreich da geht das zumindest einfacher die Oberfläche vollkommen individuell anzupassen. Zunächst solltest Du aber schauen ob das mit steuern und auslesen über HTTP klappt. Wenn Du dazu nähere Infos zu Steuerung von Loxone per HTTP verlinkst kann man Dir da vielleicht auch helfen.

Danke für die Info - ich bin erst beim Lernen.
Es geht mit TCP/UDP/HTTP - ich hab gerade erst die ersten HTTP Zugriffsversuche unternommen. Das von dir gesagte stimmt alles. Ich müsste pollen.

Vorerst geht es mir einmal um die Machbarkeit. Ein IP Gateway wird sicher angeschafft. Aber eins nach dem anderen.

Jetzt einmal die Beschreibung meiner ersten Gehversuche. Als Hilfe für andere.

IP-Syncom Server läuft - Webfront läuft - ein paar Kategorien, Geschosse, Räume Menüleisten sind angelegt.
Nach einiger Herumsucherei hab ich das hellblaue Plus Zeichen rechts unten im Objektbaum gefunden, womit ich dann ein erstes Script anlegen konnte. (Innerhalb der 1 Stunde Demo)
Bei Tests am Sonntagabend hab ich dann nach einigem Herumprobieren und php Hilfesuche ein Script gefunden das funktioniert. Auf einer php doku site ganz unten.

<?php
$default_opts = array(
‚http‘ => array(
‚user_agent‘ => ‚Foobar‘,
‚header‘ => array(‚X-Foo: Bar‘,‚X-Bar: Baz‘))
);
stream_context_get_default($default_opts);
[b]readfile/b;
?>

Die Zugriffe auf Loxone liefern mit readfile jedoch nicht immer einsichtbares Ergebnis, obwohl sie durchlaufen.
Nur LoxAPP3.json bringt eine Ausgabe
readfile(‚http://user:pass@LoxIP/data/LoxAPP3.json‘); // liefert eine ganze Menge (- alle Eingänge und Ausgänge und alle controls

Ich hab dann das Ergebnis mit file_get_contents in einen String geladen, dann in einem array aufgesplittet und scheibchenweise ausgegeben

// $LoxAnswer = file_get_contents(‚http://user:pass@LoxIP/dev/sps/io/enumout‘ // für die Ausgänge
// $LoxAnswer = file_get_contents(‚http://user:pass@LoxIP/dev/sps/io/enumin‘ // für die Eingänge
// $LoxAnswer = file_get_contents('http://user:pass@LoxIP/dev/sps/io/4_2_xxx_SA6p1 // frägt den Status eines SA ports ab
mit dem nachfolgenden
Array (
[0] => <?xml version=„1.0“
[1] => encoding=„utf-8“?>
[2] => <LL control=„dev/sps
[3] => /io/4_2_xxx_SA6p1_St
[4] => at_KG_Bü-Li1-Buchh/
[5] => state“ value=„1“ Cod
[6] => e=„200“/>
)
>

Jetzt muss ich noch den Value rausschnipseln und könnte dann irgendwas zur Anzeige bringen. Vieleicht ein Test Bitmap einer gelben Glühbirne ? Oder einen Weihnachtsbaum ?
Also ein wenig Licht ins Dunkel bringen.

LG Boomerang

Wieso wird user : pass mit smiley angezeigt statt p ?

Wenn eine Kommunikation über UDP möglich ist, dann würde ich das auch bevorzugt für eine dauerhafte Lösung einsetzen mit einem UDP Socket in IP-Symcon. Für den Anfang kann man ja aber auch einfach das XML auswerten.

Wenn das Ergebniss XML ist, dann musst Du da nichts aufsplitten, mit was auch immer. Das wird einfach über SimpleXML ausgewertet.

value ist ja ein Atrribute, auf das greifst Du mit SimpleXML zu, dann kannst Du den Wert in einer Variable in IP-Symcon ablegen. Dazu must Du zunächst mal eine Variable vom Typ Integer anlegen.

Dann holst Du den Wert aus value und legst den in einer IP-Symcon Variable ab.
Beispiel:


$string = <<<XML
<?xml version='1.0'?>
<document>
 <LL control="dev/sps/io/Licht_EG_stat/state" value="0" Code="200"/>
</document>
XML;

$xml = simplexml_load_string($string);

print_r($xml);

$control = $xml->LL->attributes()->control;
$code = $xml->LL->attributes()->Code;
$value = $xml->LL->attributes()->value;
SetValue(12345, $value); // 12345 Objekt ID der Integer Variable.

Standardmäßig wird das dann mit dem zugewiesenen Variablenprofil im Webfront dargestellt.

Wenn Du jetzt statt dessen ein Weihnachtsbaum oder eine Glühbrine nutzten willst dann brauchst Du eine eigene Grafik.

Lade Dir dazu zwei Grafiken Deiner Wahl in ein Medienelement in IP-Symcon
bulb-off.png
bulb-on.png
dann erstellst Du eine Variable vom Typ String mit dem Variablenprofil ~HTMLBox.
Unterhalb der Variable kannst Du nun ein Skript anlegen das Dir die Grafik in die Varibale schreibt. Das Skript wird ausgeführt sobald sich Dein Wert, den Du aus Loxone ausgelesen hast ändert.

Das Skript sieht dann so aus:


<?
$value = GetValue(31054 /*[Grafiken im Webfront\XML Value]*/);

if($value == 0)
{
$img_base64 = IPS_GetMediaContent(41803 /*[Birne aus]*/); // ObjektId Media Image
 $html = '<img alt="bulb_off" src="data:image/png;base64,'.$img_base64.'">';
}
else
{
$img_base64 = IPS_GetMediaContent(58238 /*[Birne an]*/); // ObjektId Media Image
 $html = '<img alt="bulb_on" src="data:image/png;base64,'.$img_base64.'">';
 }

SetValue(38318 /*[Grafiken im Webfront\Birne]*/, $html); 
?>

Im Skript musst Du die Objekt ID der Medienelemente und die Objekt ID der ausgelesenen Variable sowie der zu schreibenden Variable anpassen.

Jedes mal wenn sich jetzt der Wert zwischen 0 und 1 ändert bekommst Du dann eine andere Grafik angezeigt, das kann eine Birne oder auch ein Weihnachtsbaum sein, das ist Dir selber überlassen.