Erfahrung mit "Vitocom 100 LAN1"

Hi,

jetzt konkret:
Die Variablenstruktur

Der Ablauf ist folgender:
Es wird eine anfrage an den Telnetserver gesendet, da die Antwort zeitverzögert kommt und nicht unbedingt einfach zur Anfrage zugeordnet werden kann, speichere ich mir die Anfrage in eine Hilfsvariable (Stack) (s.Script)

<?
define ("c_ID_STACK",17602 /*[01_Haus\Erdgeschoss\Hauswirtschaftsraum\Heizung\receiveDataViessmann\befehlsstack]*/);
define ("ID_RaspiVito_SOCKET", 40978 /*[Raspi_Vito]*/);

sendVitoCommand("getTempATiefpass",49087 /*[01_Haus\Erdgeschoss\Hauswirtschaftsraum\Heizung	empA]*/,"float");
#sendVitoCommand("getStatusSLP",31558 /*[01_Haus\Erdgeschoss\Hauswirtschaftsraum\Heizung\Speicherladepumpe]*/,"bool");
sendVitoCommand("getBrennerstarts",57653 /*[01_Haus\Erdgeschoss\Hauswirtschaftsraum\Heizung\Brennerstarts]*/,"integer");
sendVitoCommand("getStundenBrenner",18311 /*[01_Haus\Erdgeschoss\Hauswirtschaftsraum\Heizung\Brennerstunden]*/,"float");
sendVitoCommand("getTempWW1Tiefpass",37274 /*[01_Haus\Erdgeschoss\Hauswirtschaftsraum\Heizung\TempSpeicherLadeSensor]*/,"float");
sendVitoCommand("getTempWW2Tiefpass",13778 /*[01_Haus\Erdgeschoss\Hauswirtschaftsraum\Heizung\TempAuslauf]*/,"float");
sendVitoCommand("getTempKist",59236 /*[01_Haus\Erdgeschoss\Hauswirtschaftsraum\Heizung\TempKollektor]*/,"float");
sendVitoCommand("getSammelStoerung",41449 /*[01_Haus\Erdgeschoss\Hauswirtschaftsraum\Heizung\Sammelstoerung]*/,"E_ST");
sendVitoCommand("getStatusHKP_M2",11984 /*[01_Haus\Erdgeschoss\Hauswirtschaftsraum\Heizung\HeizkreisPumpeM2]*/,"E_ST");

#sendVitoCommand("",,"float");
#sendVitoCommand("",,"float");
#sendVitoCommand("",,"float");

function sendVitoCommand($command,$destvarID,$valuetype)
{
	/* 
   	speichert in den Stack die Zielvariable und deren Typ ['bool'|'float']
	   und sendet das Vitocommand
	   Damit kann die Antwort des vcontrold wieder zugeordnet werden
  */

	SetValueString(c_ID_STACK,$destvarID.",".$valuetype);
   CSCK_SendText(ID_RaspiVito_SOCKET, $command.CHR(13).CHR(10));
	IPS_Sleep(3000);
}

?>

Anschließend muss die Antwort des Gerätes nur noch ausgewertet werden. Dazu habe ich am Clientsocket eine Registervariable „receiveDataViessmann“ angedockt, die den Script „receiveDataScript“ startet:

<?

define ("c_ID_STACK",17602 /*[01_Haus\Erdgeschoss\Hauswirtschaftsraum\Heizung\receiveDataViessmann\befehlsstack]*/);

/*
	ermittelt aus Stack, welche Variable gesetzt werden soll und
	schreibt ergebnis in diese ID
*/
echo $_IPS['VALUE'];
	$tmp=explode(',',GetValueString(c_ID_STACK));
	$varID=$tmp[0];
	$varType=$tmp[1];
	$val=explode(" ",$_IPS['VALUE'])[0];
echo ":".$val;
	switch($val)
	{
	   case "vctrld>":
	   break;
	   default:
			switch($varType)
			{
			   case "float":
		        	SetValueFloat($varID,$val);
		        	break;
			   case "bool":
		        	SetValueBoolean($varID,$val);
		        	break;
			   case "integer":
		        	SetValueInteger($varID,$val);
		        	break;
				case "E_ST": //enum VitocontrolD (AUS|EIN)
				   SetValueBoolean($varID,($val == "EIN" ? true : false));
			}
	}
?>

Zugegeben es ist noch nicht in dem Stadium wo ich es haben will, aber mittlerweile läuft es seit 2 Wochen störungsfrei.

(Die gerade Linie gestern ist nur ein Ergebnis einer (gewollten) mehrstündigen Abschaltung von IPSymcon (SDKartenbackup mit Fahrradausflug:-)
edit:
Übrigens sieht man auf dem Screenshot einen Bug im Graph: Bei „CON“ wird das aktuelle Datum plus Intervall als Text oben links dargestellt („26.9.-2.10.“), der Graph jedoch zeigt korrekt Daten vom 19.9.-26.9.

Viele Grüße
tommes

Vielen Dank Tommes, ich möchte nämlich meine Vitocom auch „in die Tonne kloppen“…
Ich bekomm als schon nen Hals, wenn die Vitotrol App 5 min lang den neuen Anlagenstatus einliest. Mit dem heute installierten Vitocom Firmwareupdate hat sich nix geändert.

Welchen USB Adapter setzt du ein? Hast dir das originale Optolink Teil gegönnt oder selbst was zusammen gelötet?

VG

Hallo zusammen,
ich lese meine Vissmann nun schon längere Zeit über Optokoppler und vcontrold aus. Vielleicht noch als Anregung die Beschreibung und Screendumps dazu. Das dritte Bild zeigt die Zeitabweichung der internen Systemuhr. Die Zeit driftet ganz kräftig - wenn die Abweichung die 30 sec erreicht hat, setze ich über IPS die Systemzeit wieder auf den richtigen Wert. Ansonsten habe ich mich noch nicht schreibend an die Heizung herangewagt ;).
Bislang habe ich leider noch keinen Befehl für das Auslesen der aktuellen Vorlauftemperaturen gefunden.

Gruß
Peter

Hi,
Ich habe einfach den zum vitocom mitgelieferten adapter (hat einen USB-Anschluss) verwendet. Da ist ein USB/RS232 Konverter drin und funktioniert am raspi und PC ohne Probleme.
Vg
Tom

Gesendet von iPhone mit Tapatalk

Hallo,

habe mir zur neuen Vitodens den VITOCONNECT 100 LAN mitbestellt. Der ist in Summe mit der WLAN-Schnittstelle billiger als die Original-Kabel und das dazugehörige Kabel hat den Vorteil, dass man die Klappe schließen kann, da es einen flachen Steckerrücken hat.

Gruß
Walter

Bei mir wurde ein solcher Adapter leider nicht mitgeliefert, hatte hier bestellt: Vitocom 100 LAN1 - Löbbe GmbH

Hallo Walter, das hört sich für mich gut an. Hast die Anbindung ansonsten wie tommes gemacht? (abgesehen von dem Vitoconnect)

Hallo,

Sorry ich hatte mich vertan. Korrekt muss es heißen vitoconnect WLAN (ca. 50 Euro inkl. Flachem adapterkabel)

Ich kann Walter nur bestätigen, das ist viel billiger als der originaladapter und zudem auch flach und klein. Heut Abend mach ich ein Foto
Ciao
Tom

Gesendet von iPhone mit Tapatalk

Die Anbindung habe ich exakt nach Tommes’ Anleitung gemacht. Klappt alles wunderbar. Wie gesagt, das eigentliche Vitoconnect-Modul brauche ich gar nicht. Nur das Kabel. Den Rest übernimmt der Raspi :smiley:

Es gibt aber leider beim 300er Protokoll noch Probleme beim Absetzen von Befehlen. Hier kommt es immer zu Timeouts. Das Problem wurde auch schon oft im Netz beschrieben - leider fehlt der Lösungsansatz.

Hat hier evtl. jemand einen guten Tipp? Ansonsten stelle ich gerne eine (zum Auslesen der Werte) gut funktionierende vito.xml und vcontrold.xml inkl. der beiden Symcon-Skripte für eine 20CB VSCotH01 Anlage zur Verfügung.

Gruß
Walter

Hier ein Bild von dem flachen Stecker:

Sorry Michael, mir ist ein Fehler unterlaufen. Ich habe es nach der Anleitung von PumpkinEater konfiguriert. Siehe hierzu diesen Thread (Seite 17)…

Gruß
Walter

Hallo Walter,

die vito.xml und die vcontrold wären super.
Ich betreibe zwar eine Vitocal 333-G NC mit einer Vitotronic 200 (WO1C) Regelung, aber so könnte ich mich zumindest einmal durch die Struktur wühlen und für meine Regelung anpassen.

Gruß

Michael

Hallo,

nachdem mich die Vorgehensweise von PumpkinEater überzeugt hat, habe ich meine Scripte nochmals angepasst und erweitert und in den anderen Thread gestellt (s. hier).

Ansonsten wäre ich auch an einer gut funktionierenden vito.xml usw. interessiert, da ich bei meiner noch so manche Fehlstellen habe (habe ich von der vitoOpen Seite (Link))

Beste Grüße
tommes

Hallo tommes,

habe mich gerade das lange Wochenende damit rumgeschlagen. Es sind sehr viele VCONTROLD.XML und VITO.XML in Umlauf (gerade auf der o.a. Seite), allerdings teilweise mit eklatanten Fehlern, die beim Testen eigentlich hätten auffallen müssen. So z.B. ist mit der vcontrold.xml, die von dieser Seite zu einigen Anlagen in Umlauf ist, über das P300-Protokoll gar keine SET-Funktion (Schreiben) möglich, da die Protokoll-Section falsch definiert ist. Hier wurde die INIT-Sequenz für das KW-Protokoll eingetragen, was natürlich nicht geht. Ich habe eine -mittlerweile- gut funktionierende vito.xml und vcontrold.xml für eine 20CB Anlage (Vitodens 222-w), die ich hier gerne bei Interesse zur Verfügung stelle.

Gruss
Walter

Hier meine vito.xml. Kann man sicherlich besser (themenbezogener) sortieren, aber damit läuft’s.

<vito>
        <devices>
                <device ID="20CB" name="V200-S" protocol="P300"/>
        </devices>

<commands>
	
<command name='getTempKessel' protocmd='getaddr'>
	     <addr>0802</addr>
	     <len>02</len>
	     <unit>UT</unit>
	     <description></description>
</command>
<command name='getTempWW' protocmd='getaddr'>
	     <addr>0804</addr>
	     <len>02</len>
	     <unit>UT</unit>
	     <description></description>
</command>
<command name='getTempAbgas' protocmd='getaddr'>
	     <addr>0808</addr>
	     <len>02</len>
	     <unit>UT</unit>
	     <description></description>
</command>
<command name='getRuecklauftemperatur' protocmd='getaddr'>
	     <addr>080A</addr>
	     <len>02</len>
	     <unit>UT</unit>
	     <description></description>
</command>
<command name='getVorlauftemperatur' protocmd='getaddr'>
	     <addr>080C</addr>
	     <len>02</len>
	     <unit>UT</unit>
	     <description></description>
</command>
<command name='getTempKesselSoll' protocmd='getaddr'>
	     <addr>555A</addr>
	     <len>2</len>
	     <unit>UT</unit>
	     <description></description>
</command>
<command name='getHeizkurveM2' protocmd='getaddr'>
	     <addr>37D3</addr>
	     <len>1</len>
	     <unit>UN</unit>
	     <description></description>
</command>
<command name='getHeizkurveM1' protocmd='getaddr'>
	     <addr>27D3</addr>
	     <len>1</len>
	     <unit>UN</unit>
	     <description></description>
</command>
<command name='getTempAuslauf' protocmd='getaddr'>
	     <addr>0814</addr>
	     <len>2</len>
	     <unit>UT</unit>
	     <description></description>
</command>
<command name='getTempLadePumpe' protocmd='getaddr'>
	     <addr>0812</addr>
	     <len>2</len>
	     <unit>UT</unit>
	     <description></description>
</command>
<command name='getSystemTime' protocmd='getaddr'>
	     <addr>088E</addr>
	     <len>8</len>
	     <unit>TI</unit>
	     <description></description>
</command>
<command name='setSystemTime' protocmd='setaddr'>
	     <addr>088E</addr>
	     <len>8</len>
	     <unit>TI</unit>
	     <description></description>
</command>
<command name='getBrennerStunden2' protocmd='getaddr'>
	     <addr>08AB</addr>
	     <len>4</len>
	     <unit>CS</unit>
	     <description></description>
</command>
<command name='getTempWWSoll' protocmd='getaddr'>
	     <addr>6300</addr>
	     <len>1</len>
	     <unit>UTI</unit>
	     <description></description>
</command>
<command name='setTempWWSoll' protocmd='setaddr'>
	     <addr>6300</addr>
	     <len>1</len>
	     <unit>UTI</unit>
	     <description></description>
</command>
<command name='setPartyM2' protocmd='setaddr'>
	     <addr>3330</addr>
	     <len>1</len>
	     <unit>RT</unit>
	     <description></description>
</command>
<command name='getBrennerstunden2' protocmd='getaddr'>
	     <addr>08AB</addr>
	     <len>4</len>
	     <unit>CS</unit>
	     <description></description>
</command>
<command name='getPartyM2' protocmd='getaddr'>
	     <addr>3303</addr>
	     <len>1</len>
	     <unit>RT</unit>
	     <description></description>
</command>
<command name='getPartyM1' protocmd='getaddr'>
	     <addr>2303</addr>
	     <len>1</len>
	     <unit>RT</unit>
	     <description></description>
</command>
<command name='setPartyM1' protocmd='setaddr'>
	     <addr>2330</addr>
	     <len>1</len>
	     <unit>RT</unit>
	     <description></description>
</command>
<command name="getTempA" protocmd="getaddr">
			<addr>0800</addr>
			<len>2</len>
			<unit>UT</unit>
			<description></description>
</command>
<command name="getTempKessel" protocmd="getaddr">
			<addr>0802</addr>
			<len>2</len>
			<unit>UT</unit>
			<description></description>
</command>
<command name="getTempVLTSM1" protocmd="getaddr">
			<addr>080C</addr>
			<len>2</len>
			<unit>UT</unit>
			<description></description>
</command>
<command name="getTempRLTSM1" protocmd="getaddr">
			<addr>080A</addr>
			<len>2</len>
			<unit>UT</unit>
			<description></description>
</command>
<command name="getTempVLTSM2" protocmd="getaddr">
			<addr>3900</addr>
			<len>2</len>
			<unit>UT</unit>
			<description></description>
</command>
<command name="getTempRLTSM2" protocmd="getaddr">
			<addr>3902</addr>
			<len>2</len>
			<unit>UT</unit>
			<description></description>
</command>
<command name="getBetriebsartM2" protocmd="getaddr">
			<addr>3323</addr>
			<len>1</len>
			<unit>BTA</unit>
			<description></description>
</command>
<command name="setBetriebsartM2" protocmd="setaddr">
			<addr>3323</addr>
			<len>1</len>
			<unit>BTA</unit>
			<description></description>
</command>
<command name="getBrennerStoerung" protocmd="getaddr">
			<addr>0883</addr>
			<len>1</len>
			<unit>RT</unit>
			<description></description>
</command>
<command name="getBrennerStunden" protocmd="getaddr">
			<addr>08A7</addr>
			<len>4</len>
			<unit>CS</unit>
			<description></description>
</command>
<command name="getBetriebsartM1" protocmd="getaddr">
			<addr>2323</addr>
			<len>1</len>
			<unit>BTA</unit>
			<description></description>
</command>
<command name="setBetriebsartM1" protocmd="setaddr">
			<addr>2323</addr>
			<len>1</len>
			<unit>BTA</unit>
			<description></description>
</command>
<command name="getBrennerstarts" protocmd="getaddr">
			<addr>088A</addr>
			<len>2</len>
			<unit>CO</unit>
			<description></description>
</command>
<command name='getLeistungIst' protocmd='getaddr'>
         <addr>A38F</addr>
         <len>2</len>
         <unit>PR3</unit>
         <description>Lese Anlagen-Ist-Leistung</description>
</command>
<command name='getNiveauM1' protocmd='getaddr'>
         <addr>27D4</addr>
         <len>1</len>
         <unit>ST</unit>
         <description></description>
</command>
<command name='setNiveauM1' protocmd='setaddr'>
         <addr>27D4</addr>
         <len>1</len>
         <unit>ST</unit>
         <description></description>
</command>
<command name='setNiveauM2' protocmd='setaddr'>
         <addr>37D4</addr>
         <len>1</len>
         <unit>ST</unit>
         <description></description>
</command>
<command name='getNiveauM2' protocmd='getaddr'>
         <addr>37D4</addr>
         <len>1</len>
         <unit>ST</unit>
         <description></description>
</command>
<command name='getTempVLM1' protocmd='getaddr'>
         <addr>2900</addr>
         <len>2</len>
         <unit>UT</unit>
         <description></description>
</command>
<command name='getTempVLM2' protocmd='getaddr'>
         <addr>3900</addr>
         <len>2</len>
         <unit>UT</unit>
         <description></description>
</command>
<command name='getTempVLsollM1' protocmd='getaddr'>
         <addr>2544</addr>
         <len>2</len>
         <unit>UT</unit>
         <description></description>
</command>
<command name='getTempVLsollM2' protocmd='getaddr'>
         <addr>3544</addr>
         <len>2</len>
         <unit>UT</unit>
         <description></description>
</command>
<command name='getTempRaumNorSollM1' protocmd='getaddr'>
         <addr>2306</addr>
         <len>1</len>
         <unit>UTI</unit>
         <description></description>
</command>
<command name='setTempRaumNorSollM1' protocmd='setaddr'>
         <addr>2306</addr>
         <len>1</len>
         <unit>UTI</unit>
         <description></description>
</command>
<command name='getTempRaumNorSollM2' protocmd='getaddr'>
         <addr>3306</addr>
         <len>1</len>
         <unit>UTI</unit>
         <description></description>
</command>
<command name='setTempRaumNorSollM2' protocmd='setaddr'>
         <addr>3306</addr>
         <len>1</len>
         <unit>UTI</unit>
         <description></description>
</command>
<command name='getTempRaumRedSollM1' protocmd='getaddr'>
         <addr>2307</addr>
         <len>1</len>
         <unit>UTI</unit>
         <description></description>
</command>
<command name='setTempRaumRedSollM1' protocmd='setaddr'>
         <addr>2307</addr>
         <len>1</len>
         <unit>UTI</unit>
         <description></description>
</command>
<command name='getTempRaumRedSollM2' protocmd='getaddr'>
         <addr>3307</addr>
         <len>1</len>
         <unit>UTI</unit>
         <description></description>
</command>
<command name='setTempRaumRedSollM2' protocmd='setaddr'>
         <addr>3307</addr>
         <len>1</len>
         <unit>UTI</unit>
         <description></description>
</command>
<command name='getPumpeStatusIntern' protocmd='getaddr'>
         <addr>7660</addr>
         <len>1</len>
         <unit>RT</unit>
         <description>Lese Status interne Pumpe</description>
</command>
<command name='getPumpeDrehzahlIntern' protocmd='getaddr'>
         <addr>7660</addr>
         <len>2</len>
         <unit>PR2</unit>
         <description></description>
</command>
<command name='getPumpeStatusM1' protocmd='getaddr'>
         <addr>7663</addr>
         <len>1</len>
         <unit>RT</unit>
         <description>Lese Status Pumpe M1</description>
</command>
<command name='getPumpeDrehzahlM1' protocmd='getaddr'>
         <addr>7663</addr>
         <len>2</len>
         <unit>PR2</unit>
         <description>Lese Drehzahl Pumpe M1</description>
</command>
<command name='getPumpeStatusM2' protocmd='getaddr'>
         <addr>7665</addr>
         <len>1</len>
         <unit>RT</unit>
         <description>Lese Status Pumpe M2</description>
</command>
<command name='getPumpeDrehzahlM2' protocmd='getaddr'>
         <addr>7665</addr>
         <len>2</len>
         <unit>PR2</unit>
         <description>Lese Drehzahl Pumpe M2</description>
</command>
<command name='getPumpeStatusSp' protocmd='getaddr'>
         <addr>6513</addr>
         <len>1</len>
         <unit>RT</unit>
         <description></description>
</command>
<command name='getPumpeStatusZirku' protocmd='getaddr'>
         <addr>6515</addr>
         <len>1</len>
         <unit>RT</unit>
         <description></description>
</command>
<command name='setNiveauM1' protocmd='setaddr'>
         <addr>27D4</addr>
         <len>1</len>
         <unit>ST</unit>
         <description></description>
</command>
<command name='setHeizkurveM1' protocmd='setaddr'>
         <addr>27D3</addr>
         <len>1</len>
         <unit>UN</unit>
         <description></description>
</command>
<command name='setHeizkurveM2' protocmd='setaddr'>
         <addr>37D3</addr>
         <len>1</len>
         <unit>UN</unit>
         <description></description>
</command>
<command name='getBetriebSparM1' protocmd='getaddr'>
         <addr>2302</addr>
         <len>1</len>
         <unit>RT</unit>
         <description>Lese Sparbetrieb M1</description>
</command>
<command name='getBetriebSparM2' protocmd='getaddr'>
         <addr>3302</addr>
         <len>1</len>
         <unit>RT</unit>
         <description>Lese Sparbetrieb M2</description>
</command>
<command name='setBetriebSparM1' protocmd='setaddr'>
         <addr>2302</addr>
         <len>1</len>
         <unit>RT</unit>
         <description></description>
</command>
<command name='setBetriebSparM2' protocmd='setaddr'>
         <addr>3302</addr>
         <len>1</len>
         <unit>RT</unit>
         <description></description>
</command>

<command name='getSystime' protocmd='getaddr'>
         <addr>088E</addr>
         <len>8</len>
         <unit>TI</unit>
         <description>Lese Systemzeit</description>
</command>
<command name='setSystime' protocmd='setaddr'>
         <addr>088E</addr>
         <len>8</len>
         <unit>TI</unit>
         <description>Setze Systemzeit</description>
</command>
<command name="getTempWWsoll" protocmd="getaddr">
	<addr>6300</addr>
	<len>1</len>
	<unit>UTI</unit>
	<description></description>
</command>
<command name="getTempPartyM1" protocmd="getaddr">
	<addr>2308</addr>
	<len>1</len>
	<unit>UTI</unit>
	<description></description>
</command>
<command name="getTempPartyM2" protocmd="getaddr">
	<addr>3308</addr>
	<len>1</len>
	<unit>UTI</unit>
	<description></description>
</command>
<command name="setTempPartyM1" protocmd="setaddr">
	<addr>2308</addr>
	<len>1</len>
	<unit>ST</unit>
	<description></description>
</command>
<command name="setTempPartyM2" protocmd="setaddr">
	<addr>3308</addr>
	<len>1</len>
	<unit>ST</unit>
	<description></description>
</command>
<command name='getTimerM1Mo' protocmd='getaddr'>
         <addr>2000</addr>
         <len>8</len>
         <unit>CT</unit>
	   <description>Lese Schaltzeit M1 Montag</description> </command>
<command name='getTimerM1Di' protocmd='getaddr'>
         <addr>2008</addr>
         <len>8</len>
         <unit>CT</unit>
         <description>Dienstag</description>
</command>
<command name='getTimerM1Mi' protocmd='getaddr'>
         <addr>2010</addr>
         <len>8</len>
         <unit>CT</unit>
         <description></description>
</command>
<command name='getTimerM1Do' protocmd='getaddr'>
         <addr>2018</addr>
         <len>8</len>
         <unit>CT</unit>
         <description>Donnerstag</description>
</command>
<command name='getTimerM1Fr' protocmd='getaddr'>
         <addr>2020</addr>
         <len>8</len>
         <unit>CT</unit>
         <description>Freitag</description>
</command>
<command name='getTimerM1Sa' protocmd='getaddr'>
         <addr>2028</addr>
         <len>8</len>
         <unit>CT</unit>
         <description>Lese Schaltzeit M1 Samstag</description>
</command>
<command name='getTimerM1So' protocmd='getaddr'>
         <addr>2030</addr>
         <len>8</len>
         <unit>CT</unit>
         <description>Lese Schaltzeit M1 Sonntag</description>
</command>
<command name='getTimerM2Mo' protocmd='getaddr'>
         <addr>3000</addr>
         <len>8</len>
         <unit>CT</unit>
         <description>Lese Schaltzeit M2 Montag</description>
</command>
<command name='getTimerM2Di' protocmd='getaddr'>
         <addr>3008</addr>
         <len>8</len>
         <unit>CT</unit>
         <description>Dienstag</description>
</command>
<command name='getTimerM2Mi' protocmd='getaddr'>
         <addr>3010</addr>
         <len>8</len>
         <unit>CT</unit>
         <description>Mittwoch</description>
</command>
<command name='getTimerM2Do' protocmd='getaddr'>
         <addr>3018</addr>
         <len>8</len>
         <unit>CT</unit>
         <description>Donnerstag</description>
</command>
<command name='getTimerM2Fr' protocmd='getaddr'>
         <addr>3020</addr>
         <len>8</len>
         <unit>CT</unit>
         <description>Lese Schaltzeit M2 Freitag</description>
</command>
<command name='getTimerM2Sa' protocmd='getaddr'>
         <addr>3028</addr>
         <len>8</len>
         <unit>CT</unit>
         <description>Lese Schaltzeit M2 Samstag</description>
</command>
<command name='getTimerM2So' protocmd='getaddr'>
         <addr>3030</addr>
         <len>8</len>
         <unit>CT</unit>
</command>
</commands>
</vito>

und die vcontrold.xml mit korrigierter Protokollsection:

<?xml version="1.0"?>
<V-Control xmlns:vcontrol="http://www.openv.de/vcontrol">
   <unix>
      <config>
         <serial>
            <tty>/dev/ttyUSB0</tty>
         </serial>
         <net>
            <port>3002</port>
            <allow ip='127.0.0.1'/>
            <allow ip='192.168.178.0/24'/>
         </net>
         <logging>
            <file>/tmp/vcontrold.log</file>
            <syslog>n</syslog>
            <debug>n</debug>
         </logging>
         <device ID="20CB"/>
      </config>
   </unix>
   <units>
      <unit name='Temperatur'>
         <abbrev>UT</abbrev>
         <calc get='V/10' set='V*10'/>
         <type>short</type>
         <entity></entity>
      </unit>
	<unit name='PartyTemp'>
         <abbrev>PTY</abbrev>
         <calc get='V/1000000' set='V*1000000'/>
         <type>short</type>
         <entity></entity>
      </unit>

      <unit name='Temperatur100'>
         <abbrev>UTH</abbrev>
         <calc get='V/100' set='V*100'/>
         <type>short</type>
         <entity></entity>
      </unit>
      <unit name='Neigung'>
         <abbrev>UN</abbrev>
         <calc get='V/10' set='V*10'/>
         <type>short</type>
         <entity></entity>
      </unit>   
      <unit name='Temperatur 1Byte'>
         <abbrev>UT1</abbrev>
         <calc get='V/2' set='V*2'/>
         <type>char</type>
         <entity></entity>
      </unit>
      <unit name='Temperatur 1Byte unsigned'>
         <abbrev>UT1U</abbrev>
         <calc get='V/2' set='V*2'/>
         <type>uchar</type>
         <entity></entity>
        </unit>
      <unit name='Temperatur 1Byte ganzzahlig'>
         <abbrev>UTI</abbrev>
         <calc get='V' set='V'/>
         <type>uchar</type>
         <entity></entity>
        </unit>
      <unit name='Status'>
         <abbrev>ST</abbrev>
         <calc get='V' set='V'/>
         <type>char</type>
         <entity></entity>
      </unit>
      <unit name='Counter'>
         <abbrev>CO</abbrev>
         <calc get='V' set='V'/>
         <type>int</type>
         <entity></entity>
      </unit>
      <unit name='Volumenstrom'>
         <abbrev>VS</abbrev>
         <calc get='V' set='V'/>
         <type>ushort</type>
         <entity>L/h</entity>
      </unit>
      <unit name='Counter Liter'>
         <abbrev>COL</abbrev>
         <calc get='V/1000' set='V*1000'/>
         <type>int</type>
         <entity>L</entity>
      </unit>
      <unit name='Prozent'>
         <abbrev>PR</abbrev>
         <calc get='V/2' set='V*2'/>
         <type>short</type>
         <entity></entity>
      </unit>
      <unit name='Prozent 1 Byte ganzzahlig'>
         <abbrev>PR1</abbrev>
         <calc get='V' set='V'/>
         <type>uchar</type>
         <entity></entity>
      </unit>
      <unit name='Prozent zweites Byte ganzzahlig (Pumpe)'>
         <abbrev>PR2</abbrev>
         <calc get='B1' set='B1'/>
         <type>uchar</type>
         <entity></entity>
      </unit>
         <unit name='Prozent erstes Byte'>
         <abbrev>PR3</abbrev>
         <calc get='V/2' set='V*2'/>
         <type>uchar</type>
         <entity></entity>
      </unit>
      <unit name='CounterS'>
         <abbrev>CS</abbrev>
         <calc get='V/3600' set='V*3600'/>
         <type>uint</type>
         <entity></entity>
      </unit>
      <unit name='CycleTime'>
         <abbrev>CT</abbrev>
         <type>cycletime</type>
      </unit>
      <unit name='ReturnStatus'>
         <abbrev>RT</abbrev>
         <type>enum</type>
         <enum bytes='00' text='0'/>
         <enum bytes='01' text='1'/>
         <enum text='NOT OK'/>
      </unit>
      <unit name='BTA'>
	<abbrev>BTA</abbrev>
	<type>enum</type>
	<enum bytes='00' text='0'/>
	<enum bytes='01' text='1'/>
	<enum bytes='02' text='2'/>
	<enum bytes='03' text='3'/>
      </unit>
      <unit name='BetriebsArt'>
         <abbrev>BA</abbrev>
         <type>enum</type>
         <enum bytes='00' text='WW'/>
         <enum bytes='01' text='RED'/>
         <enum bytes='02' text='NORM'/>
         <enum bytes='04' text='H+WW FS'/>
         <enum bytes='03' text='H+WW'/>
         <enum bytes='05' text='ABSCHALT'/>
         <enum text='UNKNOWN'/>
      </unit>      
      <unit name='SetReturnStatus'>
         <abbrev>SR</abbrev>
         <type>enum</type>
         <enum bytes='00' text='OK'/>
         <enum bytes='05' text='SYNC (NOT OK)'/>
         <enum text='NOT OK'/>
      </unit>
      <unit name='SystemTime'>
         <abbrev>TI</abbrev>
         <type>systime</type>
      </unit>
      <unit name='ErrorState'>
         <abbrev>ES</abbrev>
         <type>errstate</type>
         <enum bytes='00' text='Regelbetrieb (kein Fehler)'/>
         <enum bytes='0F' text='Wartung (für Reset Codieradresse 24 auf 0 stellen)'/>
         <enum bytes='10' text='Kurzschluss Außentemperatursensor'/>
         <enum bytes='18' text='Unterbrechung Außentemperatursensor'/>
         <enum bytes='20' text='Kurzschluss Vorlauftemperatursensor'/>
         <enum bytes='21' text='Kurzschluss Rücklauftemperatursensor'/>
         <enum bytes='28' text='Unterbrechung Außentemperatursensor'/>
         <enum bytes='29' text='Unterbrechung Rücklauftemperatursensor'/>
         <enum bytes='30' text='Kurzschluss Kesseltemperatursensor'/>
         <enum bytes='38' text='Unterbrechung Kesseltemperatursensor'/>
         <enum bytes='40' text='Kurzschluss Vorlauftemperatursensor M2'/>
         <enum bytes='42' text='Unterbrechung Vorlauftemperatursensor M2'/>
         <enum bytes='50' text='Kurzschluss Speichertemperatursensor'/>
         <enum bytes='58' text='Unterbrechung Speichertemperatursensor'/>
         <enum bytes='92' text='Solar: Kurzschluss Kollektortemperatursensor'/>
         <enum bytes='93' text='Solar: Kurzschluss Sensor S3'/>
         <enum bytes='94' text='Solar: Kurzschluss Speichertemperatursensor'/>
         <enum bytes='9A' text='Solar: Unterbrechung Kollektortemperatursensor'/>
         <enum bytes='9B' text='Solar: Unterbrechung Sensor S3'/>
         <enum bytes='9C' text='Solar: Unterbrechung Speichertemperatursensor'/>
         <enum bytes='9F' text='Solar: Fehlermeldung Solarteil (siehe Solarregler)'/>
         <enum bytes='A7' text='Bedienteil defekt'/>
         <enum bytes='B0' text='Kurzschluss Abgastemperatursensor'/>
         <enum bytes='B1' text='Kommunikationsfehler Bedieneinheit'/>
         <enum bytes='B4' text='Interner Fehler (Elektronik)'/>
         <enum bytes='B5' text='Interner Fehler (Elektronik)'/>
         <enum bytes='B6' text='Ungültige Hardwarekennung (Elektronik)'/>
         <enum bytes='B7' text='Interner Fehler (Kesselkodierstecker)'/>
         <enum bytes='B8' text='Unterbrechung Abgastemperatursensor'/>
         <enum bytes='B9' text='Interner Fehler (Dateneingabe wiederholen)'/>
         <enum bytes='BA' text='Kommunikationsfehler Erweiterungssatz für Mischerkreis M2'/>
         <enum bytes='BC' text='Kommunikationsfehler Fernbedienung Vitorol, Heizkreis M1'/>
         <enum bytes='BD' text='Kommunikationsfehler Fernbedienung Vitorol, Heizkreis M2'/>
         <enum bytes='BE' text='Falsche Codierung Fernbedienung Vitorol'/>
         <enum bytes='C1' text='Externe Sicherheitseinrichtung (Kessel kühlt aus)'/>
         <enum bytes='C2' text='Kommunikationsfehler Solarregelung'/>
         <enum bytes='C5' text='Kommunikationsfehler drehzahlgeregelte Heizkreispumpe, Heizkreis M1'/>
         <enum bytes='C6' text='Kommunikationsfehler drehzahlgeregelte Heizkreispumpe, Heizkreis M2'/>
         <enum bytes='C7' text='Falsche Codierung der Heizkreispumpe'/>
         <enum bytes='C9' text='Störmeldeeingang am Schaltmodul-V aktiv'/>
         <enum bytes='CD' text='Kommunikationsfehler Vitocom 100 (KM-BUS)'/>
         <enum bytes='CE' text='Kommunikationsfehler Schaltmodul-V'/>
         <enum bytes='CF' text='Kommunikationsfehler LON Modul'/>
         <enum bytes='D1' text='Brennerstörung'/>
         <enum bytes='D4' text='Sicherheitstemperaturbegrenzer hat ausgelöst oder Störmeldemodul nicht richtig gesteckt'/>
         <enum bytes='DA' text='Kurzschluss Raumtemperatursensor, Heizkreis M1'/>
         <enum bytes='DB' text='Kurzschluss Raumtemperatursensor, Heizkreis M2'/>
         <enum bytes='DD' text='Unterbrechung Raumtemperatursensor, Heizkreis M1'/>
         <enum bytes='DE' text='Unterbrechung Raumtemperatursensor, Heizkreis M2'/>
         <enum bytes='E4' text='Fehler Versorgungsspannung'/>
         <enum bytes='E5' text='Interner Fehler (Ionisationselektrode)'/>
         <enum bytes='E6' text='Abgas- / Zuluftsystem verstopft'/>
         <enum bytes='F0' text='Interner Fehler (Regelung tauschen)'/>
         <enum bytes='F1' text='Abgastemperaturbegrenzer ausgelöst'/>
         <enum bytes='F2' text='Temperaturbegrenzer ausgelöst'/>
         <enum bytes='F3' text='Flammensigal beim Brennerstart bereits vorhanden'/>
         <enum bytes='F4' text='Flammensigal nicht vorhanden'/>
         <enum bytes='F7' text='Differenzdrucksensor defekt'/>
         <enum bytes='F8' text='Brennstoffventil schliesst zu spät'/>
         <enum bytes='F9' text='Gebläsedrehzahl beim Brennerstart zu niedrig'/>
         <enum bytes='FA' text='Gebläsestillstand nicht erreicht'/>
         <enum bytes='FD' text='Fehler Gasfeuerungsautomat'/>
         <enum bytes='FE' text='Starkes Störfeld (EMV) in der Nähe oder Elektronik defekt'/>
         <enum bytes='FF' text='Starkes Störfeld (EMV) in der Nähe oder interner Fehler'/>
         <enum text='UNKNOWN'/>
      </unit>
      <unit name='DeviceType'>
         <abbrev>DT</abbrev>
         <type>enum</type>
         <enum bytes='20 CB 03 4A 00 00 01 0A' text='VScotHO1 ID=20CB Protokoll:KW,300'/>
         <enum text='UNKNOWN'/>
      </unit>
      <unit name='Sachnummer'>
         <abbrev>SN</abbrev>
         <type>uint</type>
         <icalc get='((((((((((((B0-48)*10)+(B1-48))*10)+(B2-48))*10)+(B3-48))*10)+(B4-48))*10)+(B5-48))*10)+B6-48'/>
      </unit>
      <unit name='Brenner Stunden'>
         <abbrev>BH</abbrev>
         <type>uchar</type>
         <calc get='(B1 * 100)+B0'/>
         <entity>h</entity>
      </unit>
      <unit name='ErrorStateGWG'>
         <abbrev>ESG</abbrev>
         <type>enum</type>
         <enum bytes='00' text='Keine Störung'/>
         <enum bytes='02' text='Fehler Sicherheitskette'/>
         <enum bytes='04' text='Brennerstörung 04'/>
         <enum bytes='05' text='Brennerstörung 05'/>
         <enum bytes='07' text='Brennerstörung 07'/>
         <enum bytes='08' text='Brennerstörung 09'/>
         <enum bytes='08' text='Brennerstörung 09'/>
         <enum bytes='0A' text='Brennerstörung 10'/>
         <enum  text='UNKNOWN'/>
      </unit>
      <unit name='Bitstatus'>
         <abbrev>BST</abbrev>
         <type>uchar</type>
         <icalc get="(B0 & (0x01<<BP))>> BP"/>
         <enum bytes='00' text='0'/>
         <enum bytes='01' text='1'/>
         <enum text='UNKNOWN'/>
        </unit>
      <unit name='HKP Pumpentyp'>
         <abbrev>HKT</abbrev>
         <type>uchar</type>
         <icalc get="(B0 & (0x01<<BP))>> BP"/>
         <enum bytes='00' text='stufig'/>
         <enum bytes='01' text='drehzahlgeregelt'/>
         <enum text='UNKNOWN'/>
        </unit>
      <unit name='Umschaltventil Stellung'>
         <abbrev>USV</abbrev>
         <type>enum</type>
         <enum bytes='00' text='UNDEV'/>
         <enum bytes='01' text='Heizen'/>
         <enum bytes='02' text='Mittelstellung'/>
         <enum bytes='03' text='Warmwasser'/>
         <enum text='UNKNOWN'/>
      </unit>
   </units>
   <protocols>
      <protocol name='P300'>
         <pid>41</pid>
         <macros>
            <macro name='GETADDR'>
               <command>SEND 00 01</command>
            </macro>
            <macro name='SETADDR'>
               <command>SEND 00 02</command>
            </macro>
         </macros>
         <commands>
            <command name="getaddr">
               <send>GETADDR $addr $hexlen;RECV $len $unit</send>
            </command>
            <command name="setaddr">
               <send>SETADDR $addr $hexlen;SEND BYTES $unit;RECV 1 SR</send>
            </command>
            <command name="gettestaddr">
               <send></send>
            </command>
         </commands>
      </protocol>
   </protocols>
   <extern xmlns:xi="http://www.w3.org/2003/XInclude">
      <xi:include href="vito.xml" parse="xml"/>
   </extern>
</V-Control>


Hallo Walter,
Danke für die Dateien. Ich hatte mich etwas mit den Details der Dateien beschäftigt, jedoch bin ich den Fehlern nicht auf den Grund gekommen. Ich wollte es erst überhaupt zum Laufen kriegen.
Ich bin jetzt auf dem Weg in den Urlaub, sobald ich zurück bin werde ich die XMLs austesten dann melde ich mich wieder

Beste Grüße
tommes

Gesendet von iPhone mit Tapatalk

jetzt fehlt nur noch ein Modul :smiley:

Gibt es Modultechnisch schon etwas neues zu berichten :slight_smile:

Leider nein. Arbeitet jemand daran? Ich, mangels Zeit, leider nicht :slight_smile:

Trotzdem vielleicht ein paar Erfahrungen mit der Steuerung, die jetzt etwas mehr als einen Monat läuft. Zunächst zum „vcontrold“: Der bleibt irgendwie mehrfach am Tag hängen. Das äußerst sich so, dass er statt OK irgendwelche Fehlermeldungen zurückgibt. Ich meine es wäre ERROR 5 oder so. Das habe ich jetzt so gelöst, dass in diesem Fall die vcontrold Prozesse auf dem Raspi mit kill -9 abgeschossen und neu gestartet werden, wenn dieser Fehler auftritt. Also dauerhafte, automatische Fehlerkorrektur :slight_smile: Hat einer eine Idee, woran das liegt?

Ansonsten klappt das alles hervorragend. Zusammen mit den Homematic Stellmotoren, ergeben sich ganz neue Möglichkeiten der Energieeinsparung. So wird die Zentralheizung bei Abwesenheit in den ECO-Mode gefahren, oder an Feiertagen in den Party-Modus, damit sie nicht - wie sonst in der Woche - von 8.00 Uhr bis 15.00 Uhr absenkt.

Bei Extremkälte beginnt der Heizmodus morgens eine Stunde früher. Darüber hinaus wird abends im Obergeschoss permanent per Script die Temperatur gecheckt und im Falle einer zu hohen Temperatur (Sollwert um 1,5 Grad überschritten) ebenfalls der ECO-Mode auf diesen Heizkreis gesetzt.

Da die Heizung keine automatische Legionellen Funktion hat, erledigt das IPS jetzt immer Sonntagmorgens.

Die Stellmotoren für die Fussbodenheizung im EG werden übrigens ebenfalls über einen Homematik-Schalter (in diesem Fall die Hutschienen-Variante) gesteuert. Das klappt deutlich besser, als früher mit diesen komischen mechanischen Dingern, die mangels schlechter Hysterese teilweise permanent an und aus gegangen sind.

Und endlich kann man, einen Tag bevor man aus dem Urlaub kommt, aus der Ferne die Heízung aus dem Schlaf erwecken und man hat’s kuschelig warm, wenn man nach Hause kommt…