Zum Ende der Metadaten springen
Zum Anfang der Metadaten

Sie zeigen eine alte Version dieser Seite an. Zeigen Sie die aktuelle Version an.

Unterschiede anzeigen Seitenhistorie anzeigen

« Vorherige Version anzeigen Version 19 Nächste Version anzeigen »

Schnittstelle Modbus TCP/IP (mit ISG Web)

Bekannte Unterstütze Geräte: LWZ 304/404/504

Mit dem Zusatzgerät ISG (InternetServiceGateway) Web können kompatible Wärmepumpen/Lüftungsgeräte von Stiebel Eltron mit dem IP-Netzwerk verbunden werden. Mit diesem hat man eine einfache Gerätebedienung der Wärmepumpe über einen Standardbrowser und weiters kann man auch noch zusätzliche Dienste von  Stiebel Eltron dazu buchen.

Mit einem zusätzlichen kostenpflichtigen Software-Update von Stiebel Eltron bekommt das ISG die Schnittstelle Modbus TCP/IP dazu. In der Loxone Config ist da ein Modbus Server zum Einrichten und man kann dann auf die Werte des ISG zugreifen bzw. schreiben.

Auf der Service-Webseite von Stiebel Eltron findet man die Beschreibung, die Modbus-Adressen, das Bestellformuar und weitere Infos: https://www.stiebel-eltron.de/de/home/service/smart-home/modbus.html


Beispiel Einrichtung in der LoxConfig:

  • Einrichtungen Modbus-Server
  • Einstellungen Modbus-Gerät
    Hier mein Template zum Download: MB_LWZ - Stiebel Eltron - Muster.xml 
    Man kann selber noch viele andere Datenpunkte einfügen.
     
  • Einstellungen Modbus-Gerät Aktor
     
  • Einstellungen Modubs-Gerät Sensor
     
  • Dekodierung Betriebsstatus in der Config
     
  • Beispiel Ansicht APP

Schnittstelle KNX IP (mit ISG Web)

Bekannte Unterstütze Geräte: LWZ 304/404/504

Es besteht auch die Möglichkeit eines kostenpflichtigen Software-Update (für ISG) für eine KNX IP-Schnittstelle: https://www.stiebel-eltron.at/de/home/service/smart-home/knx.html. Man sollte allerdings beachten, dass die KNX IP Schnittstelle nicht direkt vom MS unterstützt wird. Bei KNX IP werden die KNX Sensoren über eine IP Verbindung abgefragt bzw. bei Aktoren über diese verändert. Die KNX Bausteine bei Loxone können nur über den im MS integrierten KNX Bus gelesen bzw. geschrieben werden.

Schnittstelle RJ12 (externe Ansteuerung)

Bekannte Unterstütze Geräte: LWZ 170 und LWZ 370

siehe Beschreibung unten von Christian Wörstenfeld 

Schnittstelle lox2thz (mit ISG Web)

Mit Hilfe von lox2thz kann sehr einfach eine Stiebel Elron LWZ bzw. Tecalor THZ eingebunden werden. Am besten man nimmt so etwas wie einen Raspberry Pi und installiert dort lox2thz. Nach der Konfiguration on lox2thz kann man über die Loxone Programmierung die Anbindung abschließen.  Weitere Informationen wie Konfiguration und Loxone Beispiel-Programmierung findet man auf folgender Seite: https://github.com/sbernhard/lox2thz

 

ISG web (mit Modifikation des Webservers)

Über das ISG web können per Webbrowser die Daten der Anlage angezeigt werden. Über HTTP Eingangs- und Ausgangsverbinder kann der MS die Daten von der Webseite auslesen und verändern. Prinzipiell funktioniert die Abfrage von Werten wie z.B. Temperatur über virtuelle HTTP Eingänge, aber leider nicht die Abfrage des Zustandes der Pumpen. Diese werden auf der Webseite nämlich nur angezeigt, wenn sie an sind, siehe https://www.loxforum.com/forum/german/software-konfiguration-programm-und-visualisierung/136267-problem-mit-virtuellem-http-eingang

Ein genauerer Blick auf das innere des ISG web zeigt eine Micro SD-Karte auf der linken Seite:

Es handelt sich bei mir um eine 2GB Micro SD-Karte von Transcend. Diese ist im EXT3 Format formattiert und lässt sich auf einem Linux System, wie z.B. einem Raspberry PI per USB-Stick einbinden und auslesen. Die ausführbaren Dateien sind sogar binärkompatibel mit dem Raspberry. Getestet habe ich es mit dem Tool htpdate, welches auf der SD-Karte vorhanden ist und die Uhrzeit per HTTP aus dem Internet holt. Die Tools, um die Daten aus der Anlage per CAN-Bus auszulesen können natürlich nicht ausgeführt werden, weil der Raspberry PI diese Schnittstelle nicht bietet. Theoretisch könnte man auch einen SSH Server hinzufügen und dann die nachfolgend beschriebenen Schritte bequem per Remote Verbindung durchführen, ohne die SD-Karte häufig aus- und einzubauen zu müssen.

Auf meinem ISG web aus dem Jahr 2015 befinden sich zwei unterschiedliche Version der Software: die Version 8.5.6 aus 2016 liegt im Verzeichnis /rel_a und eine ältere Version 8.5.0 im Verzeichnis /rel_b. Der Webserver des ISG web verwendet PHP, SQLlite und die Webseiten liegen im Verzeichnis /rel_a/web. Der Aufruf erfolgt immer über die PHP Seite /index.php, die als / aufgerufen werden kann. Die Hauptseite des ISG web wird beim Aufruf ohne weitere Parameter angezeigt und die einzelnen Menüs durch ein Ergänzung aufgerufen. Das Menü Info, Anlage wird z.B. über /?s1,0 aufgerufen. Der interne Ablauf beim Aufruf der PHP Seite /index.php ist immer gleich. Zunächst werden über ein JSON Template die Parameter für den eigenen spezifischen Anlagentyp aus einer internen DB ausgelesen und dann die spezifischen Parameter für das anzuzeigende Untermenü bzw. die Hauptseite herausgezogen. Diese werden dann per CAN-Bus aus der Anlage ausgelesen bzw. regelmäßig abgefragt. Bei diesem Punkt habe ich die Funktionsweise noch nicht genau verstanden. Dann werden die Header der anzuzeigenden Webeite, Menüs aufgebaut und die anzuzeigenden Parameter visualisiert. Dies geschieht über verschiedene Templates (PHP Seiten ptxx.php) von denen eines in die aufzubauende Webseite eingefügt wird. Am Ende wird noch ein Footer angezeigt.

Um die Daten gezielt vom MS auszulesen zu lassen und kein Problem mit der fehlenden Information über ausgeschaltete Pumpen zu haben, habe ich die Datei /index.php nach /params2.php kopiert. Da ich die ursprünglich vorhandenen Dateien nicht modifiziert habe, stehen die Webseiten noch genauso zur Verfügung, wie vorher. In der neuen PHP Seite /params2.php habe ich die Teile für die Visualisierung gelöscht und statt dessen die PHP Variablen für die Parameter und Werte, die für diese Webseite aus der internen Datenbank und der Anlage kommen, ausgegeben. Um etwas Ladezeit zu sparen, habe ich die Include-Datei _inc/header.inc, welche den Header der Webseite aufbaut und dann CSS Style-Sheets und etliche JQuery Objekte nachläd, ebenfalls noch angepasst. Dafür habe ich eine verkürzte Version der ursprünglichen Datei unter dem Namen head2.inc gespeichert.

Letztendlich werden nur 2 Dateien zum Webserver hinzugefügt:

params2.php im Verzeichnis /rel_a/www/:

params2.php
<?php
// Session starten
session_start();
// Kodierung
header("Content-Type: text/html; charset=utf-8");
// Standartvariablen
include_once('stablevalues.php');
// Logout + Login + Session abgleich
include_once('auth.php');
// Kopf der Seite einbinden
include_once('_inc/head2.inc');
// ISG Objekt laden
include_once('isg_object.php');
// ISG Objekt anlegen
$isg = new isg;
// ISG Object vorbereiten
$isg->start();
// Werte aufbereiten
$isg->get_values();
//Anzeige der Anlagenparameter und Werte
print "<PRE>";
print "\n ISG ga = ";
print_r($isg->ga); //getarray
print "\n ISG pt = ";
print_r($isg->pt); //seitentyp
print "\n ISG at = ";
print_r($isg->at); //Anlagentyp
print "\n ISG pm = ";
print_r($isg->pm); // portmapper array
print "</PRE>";
// ENDE
?>
</body>
</html>

head2.inc im Verzeichnis  /rel_a/www/_inc/. Diese Datei ist die verkürzte Form der vorhandenen header.inc Datei. Die Meta Daten sind nicht wirklich erforderlich und eigentlich handelt es sich auch nicht um eine XML-Datei. Hier besteht vielleicht noch eine Optimierungsmöglichkeit.

head2.inc
<?php
echo "<"."?xml version=\"1.0\"?".">\n";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de">
<head>
	<title><?=($marke?'TECALOR':'STIEBEL ELTRON')?> Reglersteuerung</title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta http-equiv="imagetoolbar" content="no" />
	<meta name="content-language" content="de" />
	<meta name="robots" content="noindex,nofollow" />
	<meta name="keywords" content="" />
	<meta name="description" content="" />
  <link rel="shortcut icon" href="./pics/<?=($marke?'tec_':'')?>brlogo.ico">  
</head>
<body>

 

Hier noch ein paar Code-Schnipsel, wie man die SD-Karte auf einem Raspberry PI einbindet und modifiziert:

Raspberry CMDs
sudo mkdir /media/ISGweb
sudo mount -v -t ext3 /dev/sda1 /media/ISGweb/

sudo cp params2.php /media/ISGweb/rel_a/www/
sudo cp _inc/head2.inc /media/ISGweb/rel_a/www/_inc/

sudo umount /media/ISGweb

Die o.a. Befehle gehen davon aus, dass die modifizierten Dateien im aktuellen Verzeichnis liegen (ACHTUNG: UNIX-Format mit LF am Ende!). Wenn die SD-Karte nicht als Device /dev/sda1 eingelesen wurde, dann kann man mit dmesg feststellen, welches Device man verwenden muss.

ACHTUNG: Die original SD-Karte von Stiebel-Eltron sollte auf keinen Fall direkt modifiziert werden!!! Aus Sicherheitsgründen sollte immer mit einer Kopie gearbeitet werden. Eine SD-Karte kann z.B. unter OS-X mit dem Tool "Apple PI Baker" geklont werden. Da die Daten auf der SD-Karte persönliche Daten, wie z.B. den individuellen Portalschlüssel enthalten und das Copyright bei Stiebel-Eltron liegt, kann ich im Problemfall nicht helfen.

 

Nach der Installation der modifizierten SD-Karte können die Daten im JSON Format angezeigt und damit vom MS sehr einfach ausgelesen werden. Testen kann man dies mit einem Webbrowser und dem Aufruf von /params2.php bzw. /params2.php/?s1,0 Hier ein Beispiel, wie die Seite für den Menüpunkt "Info", "Anlage" bei einer WPC 05 cool aussieht:

 

 

Zum Abruf der Parameter legt man für jede URL einen virtuellen HTTP Eingang an, z.B.: http://<ip-adresse-der-wp>/params2.php?s=1,0 Als Abfrageintervall empfehle ich keine kleineren Werte als 5 Sekunden, da der Abruf der Seite knapp 1s dauert. Die gleiche Seite mit aufbereiteten Werten und Menüs dauert bei mir bis zu 1,4s. Als Timeout empfehle ich mind. 4000ms. Ich habe derzeit ein Abfrageintervall von 15s und ein Timeout von 4000ms eingestellt.

Die einzelnen Werte lassen sich dann über HTTP Eingangsverbinder gezielt abrufen, z.B. wird die Isttemperatur des FEK mit: [webID] => 442\n\i[value] => \i\v aus der Webseite ausgelesen.

Der vorher problematische Abruf des Status der Pumpen lässt sich jetzt sehr einfach über die webID 485 realisieren. Diese liefert ein Bit-Array mit dem Zustand der einzelnen Pumpen, Ventile und des Schützes zurück. 

Diagnose, Anlage
 ISG ga = Array
(
    [0] => 2
    [1] => 0
)

 ISG pt = 4
 ISG at = WPM_3_I
 ISG pm = Array
(
    [0] => stdClass Object
        (
            [webID] => 471
            [infoNr] => 49742
            [webType] => 6
            [readOnly] => 1
            [presentation] => 2
            [step] => 0
            [unit] => 
            [value] => -
            [minValue] => 0
            [maxValue] => 0
            [options] => Array
                (
                    [0] => stdClass Object
                        (
                            [id] => B0
                            [name] => HK 1 PUMPE
                        )

                    [1] => stdClass Object
                        (
                            [id] => B1
                            [name] => HK 2 PUMPE
                        )

                    [2] => stdClass Object
                        (
                            [id] => B2
                            [name] => AUFHEIZPROGRAMM
                        )

                    [3] => stdClass Object
                        (
                            [id] => B3
                            [name] => NHZ STUFEN
                        )

                    [4] => stdClass Object
                        (
                            [id] => B4
                            [name] => HEIZBETRIEB
                        )

                    [5] => stdClass Object
                        (
                            [id] => B5
                            [name] => WARMWASSERBETRIEB
                        )

                    [6] => stdClass Object
                        (
                            [id] => B6
                            [name] => VERDICHTER
                        )

                    [7] => stdClass Object
                        (
                            [id] => B7
                            [name] => SOMMERBETRIEB
                        )

                    [8] => stdClass Object
                        (
                            [id] => B8
                            [name] => KUEHLBETRIEB
                        )

                    [9] => stdClass Object
                        (
                            [id] => B9
                            [name] => ABTAUBETRIEB
                        )

                    [10] => stdClass Object
                        (
                            [id] => B10
                            [name] => SILENTMODE 1
                        )

                    [11] => stdClass Object
                        (
                            [id] => B11
                            [name] => SILENTMODE 2
                        )

                )

            [name] => BETRIEBSSTATUS
            [info] => 
        )

    [1] => stdClass Object
        (
            [webID] => 488
            [infoNr] => 116
            [webType] => 6
            [readOnly] => 1
            [presentation] => 2
            [step] => 0
            [unit] => 
            [value] => 0
            [minValue] => 0
            [maxValue] => 0
            [options] => Array
                (
                    [0] => stdClass Object
                        (
                            [id] => B0
                            [name] => EVU SPERRE
                        )

                )

            [name] => EVU SPERRE
            [info] => 
        )

    [2] => stdClass Object
        (
            [webID] => 485
            [infoNr] => 20062
            [webType] => 6
            [readOnly] => 1
            [presentation] => 2
            [step] => 1
            [unit] => 
            [value] => 65
            [minValue] => 0
            [maxValue] => 0
            [options] => Array
                (
                    [0] => stdClass Object
                        (
                            [id] => B0
                            [name] => HEIZKREISPUMPE
                        )

                    [1] => stdClass Object
                        (
                            [id] => B1
                            [name] => MISCHERPUMPE
                        )

                    [2] => stdClass Object
                        (
                            [id] => B2
                            [name] => MISCHER AUF
                        )

                    [3] => stdClass Object
                        (
                            [id] => B3
                            [name] => MISCHER ZU
                        )

                    [4] => stdClass Object
                        (
                            [id] => B4
                            [name] => NHZ 1
                        )

                    [5] => stdClass Object
                        (
                            [id] => B5
                            [name] => NHZ 2
                        )

                    [6] => stdClass Object
                        (
                            [id] => B6
                            [name] => QUELLENPUMPE
                        )

                    [7] => stdClass Object
                        (
                            [id] => B7
                            [name] => PUFFELADEPUMPE
                        )

                    [8] => stdClass Object
                        (
                            [id] => B9
                            [name] => WARMWASSERVENTIL
                        )

                    [9] => stdClass Object
                        (
                            [id] => B13
                            [name] => KUEHLBETRIEB
                        )

                    [10] => stdClass Object
                        (
                            [id] => B14
                            [name] => VERDICHTERSCHUETZ
                        )

                )

            [name] => STATUS
            [info] => 
        )

    [3] => stdClass Object
        (
            [webID] => 481
            [infoNr] => 1640
            [webType] => 6
            [readOnly] => 1
            [presentation] => 2
            [step] => 1
            [unit] => min
            [value] => 0
            [minValue] => 0
            [maxValue] => 0
            [name] => RESTSTILLSTAND
            [info] => 
        )

)

 

Der zurückgelieferte Wert von z.B. 65 muss binär dekodiert werden (es gibt im Loxwiki eine Anleitung für einen 16-Bit Binärdekoder von Christian Fenzl, siehe Eine 16 bit Zahl in einzelne Bits zerlegen). Danke nochmal dafür!

Die Bedeutung der einzelnen Bits sind in den Child-Objekten genau beschrieben. Der Wert 65 is binär 00000000 01000001, was bedeutet, dass B0=Heizkreispumpe und B6=Quellenpumpe an sind und die übrigen aus oder nicht vorhanden sind.

Das Objekt mit der WebID 471 scheint von der WPM 3i nicht unterstützt zu werden. Im Handbuch für Modbus/TCP finden sich entsprechende Hinweise.

Leider stimmen die WebIDs nicht mit den Nummern der Modbus/TCP Objekte überein, aber durch die enthaltenen Namen der Objekte sollte eine Zuordnung einfach sein.

 

Geschrieben werden die Werte über die Webseite /save.php. Hierfür legt man zunächst einen virtuellen Ausgangsverbinder mit der URL http://<ip-adresse-wp> an. Darunter virtuelle Ausgang Befehle. Die Einstellung der Komforttemperatur wird z.B. über die Variable "val16" gesteuert. Dies entspricht der WebID für diesen Parameter und er kann über die Hauptseite /params.php mit Hinweisen angezeigt werden. Die folgenden Werte sind für den Baustein anzugeben:

EigenschaftWert
Befehl bei EIN/save.php
HTTP Erweiterung bei EINContent-Type: application/x-www-form-urlencoded
HTTP POST Befehl bei EINdata=%5B%7B%22name%22%3A%22val16%22%2C%22value%22%3A%22<v.1>%22%7D%5D
HTTP Methode bei EINPOST

Der Haken "als Digitalausgang verwenden" darf nicht gesetzt sein. Der HTTP POST Befehl enthält die Zeichenfolge data=[{"name":"val16","value":"21.7"}] im URL Encoded Format. Ich habe den Parameter und den Wert fett hervorgehoben. Für Werte, die nicht mit einer Nachkommastelle, sondern z.B. ganzzahlig oder mit zwei Nachkommastellen angegeben werden sollen, ist dies entsprechend anzupassen.

Sobald ich eine halbwegs brauchbare Zusammenstellung von Parametern habe, werde ich diese hier noch posten.

Fazit: Eine Integration der Stiebel-Eltron Anlage ist über diesen Weg relativ einfach möglich und man kann nach meiner Ansicht alle Werte, die das Webinterface des ISG web anzeigt auslesen und schreiben, sofern die Parameter nicht Read-Only sind. Da die zusätzliche PHP Webseite nicht spezifisch für eine bestimmte Anlage snd, sollte es möglich sein, alle Anlagen, die das ISG web unterstützt, in die Loxone Hausautomation einzubinden. Es wird ein ISG web benötigt, aber es ist keine Erweiterung wie Modbus/TCP oder KNX IP notwendig. Ein Wartungsvertrag ist ebenfalls nicht erforderlich, da man i.d.R. einen Remote-Zugang zum Smart-Home über VPN bereits realisiert hat. Die statistischen Auswertungen der Werte können über den MS, ggf. einen Loxberry wesentlich besser und individueller erfolgen, als das was Stiebel Eltron über das Portal mit dem Wartungsvertrag anbietet. Ich war vom Portal ziemlich enttäuscht worden. Eine Alarmierung im Störungsfall ist über Loxone ebenfalls problemlos möglich.

P.S.: es gibt beim ISG web die folgenden undokumentierten Webseiten:

/reboot.php - startet das ISG neu

/henry_tre.php - eine Möglichkeit zum Hochladen von Dateien zum ISG web, welche möglicherweise von Stiebel-Eltron für Updates verwendet wird. Es ist wohl ein Paketformat erforderlich, wo angegeben wird, wohin die Dateien kopiert werden. Temporär werden diese in den Ordner /update kopiert. 

 

 

  • Keine Stichwörter