Zurück   IP-Symcon Community Forum > IP-Symcon 2.x > Anleitungen / Nützliche PHP Scripte

Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
  #1 (permalink)  
Alt 18.11.09, 21:20
Benutzerbild von Coyote
Senior Member
 
Registriert seit: Aug 2007
Ort: Baden-Württemberg
Beiträge: 258
Smile

Hallo,

nach einer ersten Testphase möchte ich hier meine derzeitige Integration einer Viessman Heizung (in meinem Fall einer Vitodens 200 mit Vitotronic 200 Steuerung) vorstellen.
Die Anbindung erfolgt einfach über die Serielle Schnittstelle (bei mir über einen USB Konverter) mittels des Optolink-Kabels von Viessmann. Sie verwendet die auf OpenV beschriebenen Details und basiert auf dem dort ebenfalls beschriebenen KW-Protokoll, welches die meisten Viessmann Steuerungen unterstützen und für mich am einfachsten in der Umsetzung war.
Leider stimmen nicht alle Adressen, die auf OpenV kommuniziert werden, so das ggf. nicht alle Werte abgefragt werden können. Bei mir funktioniert leider ausgerechnet die Sammelstörung nicht . Dafür aber alle Temperaturwerte und Betriebsmodi. Hier ist also noch etwas tüftelei angesagt. Da dies so ist habe ich die gesamte Lösung so angelegt, das man nur in einem XML File Änderungen vornehmen muss, um eine neue Adresse hinzuzufügen oder ausprobieren zu können.

Aber kommen wir zur Lösung selbst:
  1. Benötigte Hardware
    Für die Anbindung ist das Optolink-Kabel von Viessmann erforderlich. Lieferanten werden auf OpenV benannt oder können leicht durch Google gefunden werden. Der Preis liegt bei ca. 100,-- €. Alternativ findet sich auf OpenV eine Bauanleitung. Ich habe das Originalkabel.
    Zusätzlich benötigt man noch ggf. einen RS232/USB Konverter für den Anschluss an den PC, so dass man die Kopplung über einen COM-Port vornehmen kann.

  2. Instanzen und Variablen
    Für die Anbindung benötigt man nun zwei Instanzen (Serial Port, Register Variable) sowie vier Variablen.
    Zunächst legt man in IPS lden passenden Serial-Port mit den Werten [b]4800 8 E 2, ohne Handshake Protokoll[b], an. Den Port kurz zum testen öffnen, dann aber wieder schliessen!
    An diese Instanz hängt man nun eine Register Variable an. Ein Cutter wird nicht benötigt, da das Viessman-KW-Protokoll keine konstanten Längen oder Trennzeichen kennt!
    Jetzt noch 3 Variablen: "Kommando", "Rückgabewert" und "Steuerungstyp". Alle vom Typ STRING. Dazu noch eine Variable "Verbindung ok" vom Typ BOOLEAN.
    In meiner Installation sieht das ganze so aus (die Variable "Verbindung ok" ist nicht auf dem Bild):


  3. Anlegen der benötigte Skripte
    Man legt jetzt die im Anhang befindlichen Skripte wie folgt an. Dabei müssen als Skriptnamen keine IPS generierten Namen sondern die hier genannten Namen verwendet werden:

    • ViessmannDeviceTools.inc.php
      Muss nur im Skript-Verzeichnis vorhanden sein, da es für die Verwendung der Anbindung inkludiert werden muss.
    • ViessmannVariables.inc.php
      Das Skript muss prinzipiell auch nur im Skript-Verzeichnis vorhanden sein. Da es aber editiert werden muss, bietet es sich an, dieses Skript auch in IPS anzulegen.
    • ViessmannDeviceOutputHandlingKW.php
      Dieses Skript muss in IPS angelegt werden. Es handhabt die gesammte Kommunikation mit der Heizung über den COMPort und sollte nicht verändert werden (bei Fehlern mich bitte informieren )

    Das war's schon fast.

  4. Verknüpfungen anlegen
    Es müssen nun im Skript ViessmannVariables.inc.php die zuvor in Schritt 2 angelegten Instanzen und Variablen bekannt gemacht werden. Dies dürfte selbsterklärend sein
    Anschliessend weisst man der in Schritt 2 angelegten RegisterVariable das Skript ViessmannDeviceOutputHandlingKW.php zu.

  5. Erster Test
    Nachdem man all dies gemacht hat, kommt nun ein erster wichtiger Test. Das Problem bei der Viessmann-Anbindung ist, das es viele verschiedene Steuerungstypen gibt, die zudem unterschiedliche Adressen für die Ablage der Informationen verwenden. Aus diesem Grund muss man zunächst wissen, welche Steuerung man eigentlich hat. Glücklicherweise ist diese Funktion in Skript ViessmannDeviceOutputHandlingKW.php enthalten.
    Man öffnet jetzt einfach den COMPort zur Viessmann Heizung. Da die Variable "Steuerungstyp" nicht gefüllt ist, wird automatisch versucht, den Typ der Steuerung auszulesen und in dieser Variable abzulegen. Sobald man diese in IPS sieht (sollte nicht länger als 5-10 sek. dauern), schliesst man den COMPort wieder.
    Sollte kein Steuerungstyp ermittelt worden sein, so stimmt etwas mit der Verbindung nicht. Als erster Schritt kann man sich im Debugger den Datenfluss auf der COM-Verbindung anschauen. Bei geöffneter Verbindung sollte dort ein hex 0x05 zu sehen sein....

  6. Steuerungsdaten
    Ich habe leider nur die Steuerung 20CB - VScotHO1 zur Verfügung (Vitodens 200). Aus diesem Grund habe ich ein XML File für diese Steuerung erstellt und beigefügt: ViessmannDevice20DB.xml
    Diese Datei muss ebenfalls in das Skriptverzeichnis kopiert werden.
    Sollte man eine andere als die Steuerung 20CB haben, so muss man nun für seine eigene Steuerung eine passende XML Datei (Namenskonvention "ViessmanDevice<4stelliger Steuerungscode>.xml" erstellen. Das Format der XML ist - denke ich - selbsterklärend. Im wesentlichen geht es um die 4-stelligen Adressen sowie die Antwortlänge und das Format. Näheres findet man ggf. auf OpenV. Das XML muss übrigens mit UTF-8 abgespeichert werden, da sonst der PHP Parser probleme machen könnte... (ich nute PSPAD als Editor).

    Man sollte jetzt also alle Skripte angelegt, den Steuerungstyp ermittelt sowie das passende XML in Skript-Verzeichnis abgelegt haben.

  7. Abfragen von Werten
    Im XML werden diverse COMMANDs definiert. Mittels dieser kann man nun Werte der Heizung abfragen. Dazu legt man eine Zielvariable mit passendem Typ zum Kommando an (z.B. Float für Temperaturen, Integer für Count, Boolean für Boolean oder einfach String für sonstige). Ab jetzt ist's dann ganz einfach:
    PHP-Code:
      // Variablen Includieren
      
    include( "ViessmannDeviceTools.inc.php" );
      
      
    // Verbindung zur Heizung öffnen
      
    ViessmannOpen();

      
    // Wert Abfragen
      
    ViessmannSetVariableByCommand"AussentemperaturGedaempft", <IPS-ZielVariablenID> );

      
    // Verbindung schliessen
      
    ViessmannClose(); 
    Das war's. Die Funktion ViessmannSetVariableByCommand nutzt das im XML definierte Kommando "AussentemperaturGedaempft" um anhand der hinterlegten Adresse den Wert auszulesen. Er wird anschliessend konvertiert und an die Variable "<IPS-ZielVariableID>" übergeben.
  8. Setzen von Werten
    Das Setzen von Werte erfolgt analog zum Abfragen.
    PHP-Code:
      // Variablen Includieren
      
    include( "ViessmannDeviceTools.inc.php" );
      
      
    // Verbindung zur Heizung öffnen
      
    ViessmannOpen();

      
    // Partymodus für Kreis A1M1 aktivieren
      
    ViessmannSetData"PartybetriebA1M1"chr(0x01) );

      
    // Verbindung schliessen
      
    ViessmannClose(); 
    Das Kommando ViessmannSetData übergibt einen Wert (hier hex 0x01 (=true)) an die Adresse des Kommandos "PartybetriebA1M1". Fertig.

  9. Sonstiges
    • Ein Blick in die ViessmannDeviceTools.inc.php lohnt sich ggf., da dort noch die eine oder andere praktische Function vorhanden ist.
      Zudem ist dort auch die Konvertierungsfunktion ViessmannConvertData zu finden, welche die Daten konvertiert. Da dies noch nicht für alle Formate der Fall ist (oder man ggf. anders konverieren möchte) wäre hier der Ansatzpunkt.
    • Das Öffnen und Schliessen des COMPorts ist notwendig, da sich ansonsten (zumindest bei mir) die Verbindung nach ca. 24h verabschiedet hat.
    • Das Ändern eines Modus (z.B. auf Partybetrieb) wird an der Heizung verzögert visualisiert (ca. 1 min später).
    • Wenn man an der Heizung direkt z.B. den Partybetrieb aktiviert, und dann den Sparbetrieb, so wird automatisch der Partybetrieb deaktiviert. Dies geschieht leider NICHT über die Anbindung. Man sollte also beim setzen eines Modi, einen ggf. anderen aktivieren Modus deaktivieren!


Mit dieser Anleitung sollte es möglich sein, seine Viessmann Heizung anzusprechen. Was jetzt noch fehlt sind die XML-Files für die unterschiedlichen Steuerungen. Diese kann man mir gerne zukommen lassen oder hier anhängen.

Fragen? Immer her damit.

Viel Spass
Coyote

Hi,

leider scheint im ZIP File eine Datei leer zu sein. Ich komme erst heute abend zu einem erneuten Upload....

Die Schritte 1 - 6 (also bis zum ermitteln der Steuerungs-Kennung sowie das dann notwendige erstellen der benötigten XML Datei) sollten allerdings ohne die fehlende ViessmannDeviceTools.inc.php funktionieren. Nur die Schritte 7,8 und 9 gehen leider erst nach meinem Upload heute abend. Man kann also schon "vorarbeiten".

Gruss
Coyote

Hier die (hoffentlich) kompletten Dateien.
Miniaturansicht angehängter Grafiken
instanzen-variablen.jpg  
Angehängte Dateien
Dateityp: zip ViessmannDevice.zip (3.1 KB, 290x aufgerufen)
Dateityp: zip ViessmannDevice.zip (4.8 KB, 339x aufgerufen)
__________________
LCN, HomeMatic, IPS V2.5, IPad App, 17" Touch mit 24/7 Rechner (18 Watt; i3-2100T), IPad-App

Geändert von Ferengi-Master (24.01.10 um 23:34 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 20.11.09, 13:03
Benutzerbild von Schablone
Senior Member
 
Registriert seit: Sep 2009
Ort: Bocholt
Beiträge: 570
Standard Hört sich gut an!

Hallo Coyote,

hört sich gut an. Hattest du bereits ein Kabel von deiner Heizung zum PC liegen oder hast Du den PC direkt an der Heizung über ein Heimnetzwerk angebunden?

Ich habe auch eine Viessmann. Ich weis nur noch nicht wie ich die mit kleinem Aufwand anbinden soll.

Bis dann

Martin
Mit Zitat antworten
  #3 (permalink)  
Alt 20.11.09, 13:20
Benutzerbild von Coyote
Senior Member
 
Registriert seit: Aug 2007
Ort: Baden-Württemberg
Beiträge: 258
Standard

Hi,

ich habe einen PC in der Küche in der Wand eingebaut inkl. Netzwerk-Anbindung. Über einen Silex SX-2000WG+ (das Plus ist wichtig!) kann man USB 2.0 über das Netzwerk verlängern (ich habe z.B. eine Audio-Karte sowie einen RS232/USB direkt an einem Verstärker im Keller, die so an diesen PC angebunden ist).
Die Heizung habe ich über ein weiteres direktes Kabel mittels eines Lindy-Passiv-RS232/USB(1.0) Extenders über RJ45 angebunden. Es gibt also diverse Möglichkeiten, solange du in die Nähe der Heizung mit einem Netzwerkkabel kommst

Gruss
Coyote
__________________
LCN, HomeMatic, IPS V2.5, IPad App, 17" Touch mit 24/7 Rechner (18 Watt; i3-2100T), IPad-App
Mit Zitat antworten
  #4 (permalink)  
Alt 21.11.09, 17:51
Benutzerbild von mkass
Junior Member
 
Registriert seit: Feb 2009
Beiträge: 27
Standard

Hallo Coyote, Danke für deine Arbeit.

Ich habe auch eine VITODENS 200-W Typ WB2B ( steht auf der Serviceanleitung)

Da ich noch ein Anfänger mit IPS bin möchte ich ganz klein anfangen.
Ich habe schon alles nach deiner Beschreibung angelegt. Das Kabel ist bestellt.
Ich möchte aber vorerst nur Werte auslesen.
In der ViessmannDevice20CB.xml sind action='ReadOnly Angaben, damit kann ich doch anfangen ohne etwas zu zerstören, oder.
Oder kann ich als Anfänger noch einen großen Fehler machen.

Gruß

mkass
__________________
____________
M.f.G. Manfred
Mit Zitat antworten
  #5 (permalink)  
Alt 23.11.09, 10:58
Benutzerbild von Coyote
Senior Member
 
Registriert seit: Aug 2007
Ort: Baden-Württemberg
Beiträge: 258
Standard

Hi,

lass zunächst einmal das Script deinen Steuerungstyp ermitteln. Dann kannst du ggf. schon mal Adressen mit OpenV abgleichen.

Generell: Der Befehl "ViessmannGetData" oder "ViessmannSetVariableByCommand" nutzt nur die auf OpenV angegebenen LESE Kommandos. Nur ViessmannSetData verwendet das Schreib-Kommando.

Die Angabe im XML (ReadOnly) wird nur sicherheitshalber verwendet. Wenn man nur die Lese-Kommandos verwendet, dann sollte(!) nichts passieren. Nur bekommt man bei falschen Adressen halt ggf. was falsches/ungültiges zurück.

Gruss
Coyote
__________________
LCN, HomeMatic, IPS V2.5, IPad App, 17" Touch mit 24/7 Rechner (18 Watt; i3-2100T), IPad-App
Mit Zitat antworten
  #6 (permalink)  
Alt 19.12.09, 20:54
Member
 
Registriert seit: Dec 2009
Ort: Hamburg
Beiträge: 65
Standard

Hallo Zusammen,

ich versuche gemäß Anleitung das Script zum Laufen zu bekommen, nur leider kommt immer folgende Fehlermeldung.


Notice: Undefined variable: IPS_VALUE in [ViessmannDeviceOutputHandlingKW.php] on line 37
R-0

Was ist falsch? Ein Original Optolink Kabel ist angeschlossen und V_Control liefert auch Daten. Im Debugger sehe ich immer Hex05 zurück kommen.

MfG Frank
Mit Zitat antworten
  #7 (permalink)  
Alt 21.12.09, 17:01
Member
 
Registriert seit: Feb 2009
Beiträge: 48
Standard

Halo Coyote,

ich habe alles nach Deiner Anleitung gemacht - und mit openv funktioniert der Zugriff auch (via Moxa NPOrt 5100 TCP/IP<->RS232).

Leider bekomme ich beim AUsführen von ViessmannDeviceOutputHandlingKW folgende Fehler - IPS will wohl den Steuerungstyp nicht feststellen:


Notice: Use of undefined constant VIESSMANN_DEVICE_COMMAND - assumed 'VIESSMANN_DEVICE_COMMAND' in C:\IP-Symcon\scripts\ViessmannDeviceOutputHandlingKW.php on line 20

Warning: Variable mit Namen "VIESSMANN_DEVICE_COMMAND" existiert nicht in C:\IP-Symcon\scripts\ViessmannDeviceOutputHandlingKW.php on line 20

Notice: Undefined variable: IPS_VALUE in C:\IP-Symcon\scripts\ViessmannDeviceOutputHandlingKW.php on line 37
R-0

Ich wäre für einen Tipp sehr dankbar!
Gruß
Gunnar
Mit Zitat antworten
  #8 (permalink)  
Alt 21.12.09, 18:36
Member
 
Registriert seit: Dec 2009
Ort: Hamburg
Beiträge: 65
Standard

Hallo,

Du hast wahrscheinlich Punkt 4 vergessen!
Verknüpfungen anlegen
Es müssen nun im Skript ViessmannVariables.inc.php die zuvor in Schritt 2 angelegten Instanzen und Variablen bekannt gemacht werden. Dies dürfte selbsterklärend sein
Anschliessend weisst man der in Schritt 2 angelegten RegisterVariable das Skript ViessmannDeviceOutputHandlingKW.php zu.

MfG Frank
Mit Zitat antworten
  #9 (permalink)  
Alt 21.12.09, 19:42
Member
 
Registriert seit: Feb 2009
Beiträge: 48
Standard

Hallo Frank,

habe ich gemacht, alle IDs habe ich eingetragen. Funktioniert es bei Dir jetzt?

Danke + Grüße
Gunnar
Mit Zitat antworten
  #10 (permalink)  
Alt 22.12.09, 11:42
Member
 
Registriert seit: Dec 2009
Ort: Hamburg
Beiträge: 65
Standard

Hallo Gunnar,

leider funktioniert es bei mir auch noch nicht, es bin mir derzeit auch nicht sicher ob die Schnittstelle immer geöffnet sein muss. Derzeit liefert der Debugger imme Hex05 von der Schnittstelle zurück.

MfG Frank
Mit Zitat antworten
Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Rolladen und Heizungsventil Steuerung s.jungen Haustechnik 5 01.10.09 23:07
Synco Living | Viessmann Vitohome 300 - kompatibilität King-Nova KNX/EIB, LCN 0 09.08.09 09:54
Entfernte Steuerung einbinden Jersey Haustechnik 4 05.07.06 18:21


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:16 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.6.0