Abfrage & Steuerung von Viessmann Heizungen

Hallo Coyote, hallo Kronos und alle anderen die mitwirken.

Tolle Skripte, wie überall im Forum - ihr habt gute Sachen gemacht.
Angeregt durch die Threads und die erfolgreiche Anbindung an IPS habe ich diese Woche auch den USB-Optolink-Adapter für meine Viessmann Heizung bestellt. Angebunden, die Skripte von Coyote und es funktioniert auf Anhieb.

Danke an Euch und die Openv-Gemeinde, vor allem Dirk Eichel für die Platine.

Ich werde nun die Möglicheiten durchtesten und dranbleiben.

Als Gerätekennung kommt bei mir 2904.

Viele Grüße aus dem Unterallgäu
Harry

optolink.jpg

Falls noch relevant:
Ich schalte jeden Betriebsmodi jedes Heizkreises ohne Probleme:

<?
$zugriff = GetValue (30593 /*[Heizung\Heizung Output\Zugriff]*/ );
if($IPS_SENDER == "WebFront")

{
	include( "ViessmannDeviceTools.inc.php" );

    switch($IPS_VALUE)
    {

		  case 0:
				if ($zugriff == 0)
				{
  					ViessmannOpen();
 					ViessmannSetData( "BetriebsartM2", chr(0x00) );
 					IPS_Sleep(200);
 					ViessmannClose();
					SetValueInteger(43443 /*[Heizung\Heizung Output\Betriebsart M2]*/ , 5);
            	//SetValue($IPS_VARIABLE, $IPS_VALUE);
				}

        break;

        case 1:
				if ($zugriff == 0)
				{
  					ViessmannOpen();
 					ViessmannSetData( "BetriebsartM2", chr(0x02) );
 					IPS_Sleep(200);
 					ViessmannClose();
 					SetValueInteger(43443 /*[Heizung\Heizung Output\Betriebsart M2]*/ , 0);
 					//SetValue($IPS_VARIABLE, $IPS_VALUE);
 				}
 			break;

 			case 2:
            if ($zugriff == 0)
				{
  					ViessmannOpen();
 					ViessmannSetData( "BetriebsartM2", chr(0x04) );
 					ViessmannClose();
 					SetValueInteger(43443 /*[Heizung\Heizung Output\Betriebsart M2]*/ , 3);
 					//SetValue($IPS_VARIABLE, $IPS_VALUE);
 				}
 			break;

}}
?>

Hallo ,

verusche gerade das Script zum laufen zu bekommen. Leider scheitert es bei mir irgendwo. Bekomme über den Debugger den Hex 5 Wert übermittelt. Doch leider scheint das Script keine Werte abzufragen. Ich sehe, dass das Script ViessmannDeviceOutputHandlingKW.php aufgerufen wird.

Hier mal ne Frage zu Zeile 20

 if ( $ViessmannDeviceID == "" AND strlen( $Command ) == 0 )
  { 
	 $Command = "R:KW:00F8:2: "; // retrieve Device ID
	 SetValueString( VIESSMANN_DEVICE_COMMAND, $Command );
  }

Die Definition VIESSMANN_DEVICE_COMMAND kennt IPS nicht. Ist da vielleicht ein Fehler unterlaufen? Weil so wird über SetValueString der $Command Inhalt nicht geschrieben. Ist hier vielleicht VIESSMANN_VARIABLE_COMMAND gemeint?

Gruß Bastian

05 gibt die Heizung immer zurück wenn die Verbindung geöffnet ist.

Hast du die DeviceTool eingebunden?

 include( "ViessmannDeviceTools.inc.php" ); 

MFG

Hallo soweit war ich noch gar nicht. Bei Punkt 5 in der Anleitung scheitere ich bereits. Das heißt das Script liest gar nicht die ID der Anlage aus.

Da die Variable „Steuerungstyp“ nicht gefüllt ist, wird automatisch versucht, den Typ der Steuerung auszulesen und in dieser Variable abzulegen.

Gruß

Sind die Variablen in der ViessmannVariables.inc.php denn richtig gesetzt und bist auch sicher, dass IPS alle Skripte erreichen kann?

Hallo,

in der ViessmannVariables.inc.php sind alle Variablen gesetzt.

die ViessmannDeviceOutputHandlingKW.php ist mit der Register Variable verknüpft und wird auch beim Testöffnen des ComPorts aktualisiert (also wird bearbeitet). Die includierte ViessmannVariables.inc.php wird auch aufgerufen (habe einfach in der ViessmannVariables.inc.php einen weiteren Befehl eingebunden der auch ausgeführt wurde).
Die ViessmannDeviceTools.inc.php brauche ich ja erst, wenn ich direkt Werte aus der Anlage abfragen will. Aber wie gesagt, es scheitert bereits im Schritt 5 bei der Einrichtung.

4 Variablen sind unter Register Variable angelegt (3x String 1x Boolean)

Com Port auf 4800 8 E 2 gesetzt. Über die OpenV Tools ist die Anlage zu erreichen. Auch im Debugger von IPS sendet die Anlage den Hex 5 zurück als Status. Somit gehe ich davon aus, dass die Kommunikation stimmt.

Wenn ich ViessmannDeviceOutputHandlingKW.php in IPS von Hand starte kommt halt die Fehlermeldung, dass VIESSMANN_DEVICE_COMMAND nicht definiert ist. Hier vermute ich einen Fehler.

Ohne da jetzt tiefer einzusteigen, (bin da übrigens auch kein Fachmann :slight_smile: ) sieht das für mich so aus als ob der

VIESSMANN_DEVICE_COMMAND

VIESSMANN_VARIABLE_DEVICE
heißen müsste. Denn soweit ich das jetzt überblickt habe sollte dieses SetValue den Heizungstyp in die „VIESSMANN_VARIABLE_DEVICE“ Variable welche unter der ViessmannVariables.inc.php hinterlegt wurde hineingeschrieben werden.

Jo so sehe ich das auch.

Na ja werde noch mal eine Nacht darüber schlafen. Denn meistens lösen sich die Probleme am nächsten Tag wie von alleine.

Bei mir habe ich noch zusätzlich das Problem, das der Optolink via USB to Lan Server angebunden wurde und am virtuellen Rechner nur eine virtuelle Schnittstelle anliegt. Schauder
Mit dem M-Bus von Relay funktioniert das aber super.

Trotzdem danke für die Unterstützung

Gruß

Also nach langem probieren mit diversen Tools musste ich feststellen, dass unsere Anlage zu neu ist und scheinbar entgegen der Beschreibung aus openv nicht abwärtskompatibel ist. Sprich die Anlage versteht nur das 300er Protokoll. Also werde ich mit dem Script als Vorlage eine neue Version schreiben.

So…

Unsere Anlage versteht doch das KW Protokoll, allerdings sind ein paar Änderung im Script notwendig gewesen.

In der ViessmannDeviceOutputHandlingKW.php Datei folgende Zeile ändern:
Zeile 20

SetValueString( VIESSMANN_VARIABLE_COMMAND, $Command );

Zeile 37

$ComData .= $_IPS['VALUE'];

In der Datei ViessmannDeviceTools.inc.php folgende Änderungen:
Zeile 165 - 166

if ( $Result != chr(0x05).chr(0x05)) $Run = -1;
      // $Run--;

Die letze Änderung bewirkt, wenn sich das Script verschluckt, dann wird die Leerantwort der Heizungsanlage eingetragen (2x 0x05) das ergibt falsche Werte (12,8°C z.B.) Daher die Scriptanpassung.

Nur mal so als Ankündigung: Ich arbeite gerade an der Protokoll 300 Version. Abfrage läuft schon. Sollte demnächst kommen :wink:

Leider nicht als Modul, sondern wieder als Script-Variante. Das dürfte den einen oder anderen aber ggf. auch lieber sein…

Hi,

hört sich klasse an… Kannst Du vielleicht für mich als Anfänger kurz die Vorteile zusammenfassen? Sind dann alle Merkmale ausles- und schreibbar? Wie Du ja weißt, kämpfe ich seit längerem schon mit der Suche passender Adressen für meine Heizung… Hat das dann ein Ende?

Wenn Du noch einen Beta Tester brauchst…

P.S. VDensH01 / 20C2

Hi,

der Vorteil eines echten Moduls (was ich eigentlich wollte) wäre gewesen:

[ul]
[li]komplett in IPS integriert (Datei kopieren, danach über Instanzverwaltung einfach unter den ComPort und fertig)[/li][li]kein wirklichen manuellen Schritte vom Anwender nötig[/li][/ul]

Leider ist es aber so, das man dazu Delphi 2007 benötigt. Diese Version kostet knapp 1.000,-- €, welches es mir nicht wert ist. Ich hatte eine „halblegale“ Kopie, die aber jetzt, bei einem Rechnerwechsel, verlorengegangen ist. Somit kann ich aktuell nicht Delphi nutzen.

Also, Back to the Roots…

Die Neue Version ähnelt eigentlich der alten Version. Hauptunterschied ist das verwendete Protokoll. Die alte Version hat das KW-Protokoll verwendet, die neue das 300er. Wer die Adressen seiner Heizung hat, kann damit die Daten auslesen und bei einzelnen Adressen (das geht ja nur z.B. bei den Modi) auch schreiben. Von komplexeren Dingen wie dem schreiben von Steuerzeiten würde ich dringend abraten. Die sind nicht trivial hinterlegt.
So kann ich z.B. mit der neuen Version den Partymodus aktivieren, was bei der alten komischerweise nicht ging. Beim Sparmodus will meine Vitotronic aber leider trotzdem nicht… !?

Bzgl. der Adressen scheint es so zu sein, das es eine grössere Menge an Adressen gibt, die über die Steuerungen identisch ist. So wird z.B. die gedämpfte Aussentemperatur bei allen Steuerungen in 5525 mit 2 Bytes abgelegt. Insofern kann man sich darüber gut austauschen. Das wäre dann ggf. ein Folgeschritt. Ich werde aber einige Adressen mitliefern (was fehlt dir denn?).

Wie genau die endgültige Version aussehen wird, muss ich mal schauen. Mein Ziel sollte aber eigentlich eine möglichst einfache Verwendung für „einfache“ Nutzer sein. Also

[ul]
[li]Skript(e) anlegen[/li][li]COMPort und RegisterVariable anlegen sowie der RegisterVariable ein Skript zuordnen[/li][li]Skript in eigene Skripte includieren und einfache, klare Befehle nutzen[/li][/ul]

Fehler sollten dann zentral korrigiert werden, so dass durch neue Versionen etwas davon haben.

Gruss
Coyote

Hallo,

erstmal vielen Dank für die ausführliche Antwort. Klasse…

Was mir fehlt bzw. woraus ich nicht schlau werde, ist alles was mit dem Brenner zusammenhängt. Brennerstarts, -zustand, -leistung und Laufzeit. Abfragen kann ich, bekomme auch Werte zurück, allerdings sind die nicht wirklich zu gebrauchen. Entweder bin ich an den falschen Adressen oder die Umrechnung passt nicht. Und da ich noch ziemlicher PHP Anfänger bin… Habe zwar den Umrechnungsblock in der viessmanndevicetools.inc.php gefunden, aber so richtig erhellt es mich noch nicht…

:confused:

edit: Worauf ich auch nicht gekommen bin: Wenn ich mit „v-control“ die Daten kontrolliere, funktioniert das Skript innerhalb von IPS nicht mehr. Auch wenn ich den Com Port manuell schließe… Gibts da noch einen Trick, ohne den Server neu starten zu müssen?

Die Brennerlaufzeit habe ich jetzt.

Die Adresse war korrekt, nur die Umrechnung falsch. Habe in der viessmanndevicetools.inc.php einen weiteren Case eingebaut:

case 8:
$Count = $Count ;
break;  

Somit wird der Wert in $Count nativ ausgegeben. Und das ist die Brennerlaufzeit in Sekunden. Das durch 3600 und wir haben Stunden. Der Case müsste doch auch so umzubauen sein, dass ich hier direkt rechnen kann, oder? Meine kläglichen PHP Kenntnisse scheitern hier aber…

Hi,

den Typ „StundenInSekunden“ kennt meine neue Implementierung :wink:

Gruss
Coyote

Hallo hätte Interesse an der Heizungssteuerung, habe eine Vitotronic VScotH01
schaffe es aber derzeit nicht das „alte“ Script zum laufen zu bekommen .
Wäre dankbar da ich derzeit mit Vcontrol arbeite aber manche stimmt nicht , da ich eine Hydraulische Weiche habe und daher ich keine normale Vorlauftemperatur habe sondern eine „gemeinsame“ und würde auch gerne den Partymodus bzw den Sparmodus über Ips steuern können wegen Anwesenheit

Hätte auch noch adresen wenn Du eventuell welche benötigst ?
mfg
mikewolf

Hallo

ich habe mal wieder ein Problem
ich habe die Viessmann Abrage von coyote (vielen Dank dafür) eingerichtet, aber leider funktioniert sie bei mir nicht
habe alles wie beschrieben(nun schon 3x) eingerichtet, Variablen angelegt, im script bekannt gemacht …
doch leider scheitert es bei mir schon am Punkt 5. wenn ich den comPort öffne, sehe ich im Debug kein Datenfluss bzw.
sehe ich nicht den periodischen hex Wert der da sein müsste,
ich habe mir ein comPort Monitor zur Hilfe genommen, und siehe da, dort sehe ich den Wert, sobald ich aber in IPS den Port
öffne kommen keine Daten mehr an, woran liegt das ???:confused:
hat irgend jemand eine Idee und kann einen ratlosen Neuling helfen

vielen Dank
Remo

Hallo,

habe einen USB-Optolink Adapter an die Fritz Box angeschlossen, USB Fernanschluss in der Fritz Box aktiviert und siehe da:

Device VScotHO1
ID 20CB
ExtID 002B
Protocol 300

per VitoOpen Identifikation ausgelesen! Auch V-Control funktioniert!

Bin mir jetzt jedoch nicht ganz sicher, wie ich mit IP-SYMCON am Besten an die Daten rankomme? Mit dem Skript hier auf der ersten Seite oder mit dem „V_Control_to_IPSymcon_1_0_0_0“ Modul? Oder gibts da noch was neueres?

Gruß,

Chris