Viessmann Heizungssteerung auslesen

Hallo liebe Gemeinschaft,

da ich über die Suche leider nicht fündig geworden bin und meine Versuche mit DS18B20 nicht von Erfolg gekrönt war wollte ich mal nachfragen, ob jemand bereits Erfahrungen mit dem Auslesen der Temperaturen der Heizungsanlage über die vorhandenen Schnittstellen (KM-Bus oder Optolink) mit dem Arduino mal ausprobiert hat.
Einige Anregungen habe ich bereits bei http://openv.wikispaces.com/ gefunden, allerdings ohne direkte Anbindung an einen Arduino, da vor allem das Protokoll des KM-Bus wohl recht trickreich ist.

Vielen Dank schon mal für die Anregungen

VerirrtesSchaf

VerirrtesSchaf:
und meine Versuche mit DS18B20 nicht von Erfolg gekrönt waren ...

Moin,
was war denn Dein Problem mit den DS18B20 ?
Die laufen bei mir super, auch mehrere, einzeln ansprechbar.

Gruss
Kurti

@VerirrtesSchaf: Erfahrung habe ich mit dieser Heizung nicht, aber das Protokoll ist dokumentiert das ist schon mal gut.

Wenn du eine Hardware für den PC hast um auf die Heizung zu greifen, würde ich mit einem Terminalprogramm erstmal Befehle schicken die laut Protokoll Sinn machen könnten.
Und dann schauen was da so kommt.

Wenn du was Plausibles hast, auf den Arduino umsetzen.

Ein bisschen Erfahrung mit sowas wäre schon nicht schlecht....

Interessantes Thema, aber es ist schwer Informationen darüber zu finden.

Was willst du denn genau machen?

Sieh dir mal dieses Thema an:

http://forum.arduino.cc/index.php?topic=207766.0

Gruß

openv optolink ist schon die richtige Adresse. Soo trickreich ist das serielle Protokoll nun auch nicht, dass es nicht mit einem Arduino ginge.

von dieser Schaltung http://openv.wikispaces.com/LAN-Ethernet+%26+USB+Kombiadapter (alt)
brauchst du nur den SEND_IR und REC-IR Teil rechts (Das REC-IR Signal an einen INPUT_PULLUP Pin )

Nachtrag 2022: Der Link geht nicht mehr. Das Ganze ist jetzt auf Github

Schon mal danke für die Antworten.

Die Lösung mit den Temperatursensoren hat deshalb nicht funktioniert, weil ich unzufriden damit war :slight_smile: Problem war, dass ich keine Sensoren in Tauchhülsen verbauen konnte sondern die Sensoren mit Wärmeleitpaste und Kabelbinder am Rohr befestigen wollte. Das hat zum einen nicht richtig gut gehalten und zum anderen, dass die Temperatur nicht wirklich gut gemessen wurde und mit Software-Offsets wolte ich nicht arbeiten.

Ich glaube aber die wohl praktikablere Veriante ist die Optolink-Variante. Mal sehen was die Bastelkiste so hergibt.

VerirrtesSchaf

IR-Phototransistor mit Transistor und IR-Led mit insgesamt 4 Widerständen habe ich schon zusammengebastelt.

Zwei Stückchen einer Ader aus Standard NYM-J 1.5² Kabel kann man leicht so biegen, dass sie in das Viessmann V zur Befestigung passen.

4800 8E2 kann die Hardware Serial Schnittstelle des Arduino direkt.
Das zyklische 0x05 der optolink-Schnittstelle habe ich gesehen, auf 0x16 0x00 0x00 habe ich auch die erwartete Antwort gekriegt (0x06, danach Ruhe). Der Rest sollte Fleissarbeit sein :wink:
Eine Arduino Library für optolink steht (leider weit hinten) auf meiner ToDo Liste. Man könnte sie auch NiceToHave - Liste nennen. :wink:

Falls du dich direkt dransetzt, solltest du wissen, dass ich an Ergebnissen und Erfahrungen interessiert bin.

Dann melde ich auch mal Interesse an jeglichem Fortschritt an!

Gruß

So....nach langer Zeit hab ich mal endlich zeit gefunden den Versuch zu wagen. Nach einiger Lektüre dieses Wikis: http://openv.wikispaces.com/ habe ich mich dran gemacht die Schaltung http://openv.wikispaces.com/file/view/Optolink_ARM9_v1.pdf/405736108/Optolink_ARM9_v1.pdf aufzubauen. Leider ist die scheinbar für den Arduino weniger geeignet. Er empfängt nicht das 0x05 sondern 0x00. Auch das senden habe ich bisher nicht geschafft. Funktionstüchtig ist die IR-Diode aber (Kameratest).

Wenn ich anstatt der beschrieben Schaltung einen einfachen BPW40 von Reichelt mit einem Kollektorwiderstand nehme, empfange ich die Daten korrekt.

Hat jemand noch eine praktikable Idee für die Sendediode oder wäre es vllt einfach ratsam direkt die Diode vom Arduino aus zu treiben ohne den Umweg über den Transistor. Ein Ausgang des AtMega sollte ja soweit ich weiß maximal 20mA treiben können.

Oder hat jemand eine bessere Idee, bzw andere Erfahrungen? Steuerung ist eine Vitotronic 200 KW1.

Verirrtes Schaf

Irgendwo auf der Seite (http://openv.wikispaces.com) hatte ich gelesen das der Diodenstrom nicht zu groß sein darf da sonst der Empfänger der Viessmann übersteuert und keine Daten mehr liefert.

Gruß

Ich meine mich zu erinnern, dass die Senderichtung ohne extra Transistor ging:

Tx ----|<--- R --- 5V

In Ruhe ist Tx HIGH und die IR Led sollte aus sein. Der Widerstand war 330 oder 470 Ohm. Müsste ich aber nochmal rauskramen. Auch sollte die Sendediode nicht den Empfangs-Phototransistor stören.

So, senden und empfangen funktioniert soweit. Allerdings nur mit der Software http://openv.wikispaces.com/v-control Da funktioneirt alles bestens. Die Software liest alles sauber aus, alles super. Wenn ich aber mit dem Arduino das ganze versuche "nachzuahmen" schaffe ich es nicht auf die Steuerung zugrifen zu können. Es kommt zwar immer das 0x05 zyklisch, aber auf mein 0x16 0x00 0x00 reagiert die Heizung leider nicht.

Hier mal mein Test-Code:

void setup() {
  Serial.begin(4800,SERIAL_8E2);
  Serial2.begin(4800,SERIAL_8E2);
  Serial3.begin(4800,SERIAL_8E2);
}

byte zeichen1, zeichen2;

void loop() {
  while(Serial2.available() > 0) {
    zeichen1 = Serial2.read();
    Serial.write(zeichen1);
    if(zeichen1 == 0x05) {
      Serial2.write(0x16);
      Serial2.write(0x00);
      Serial2.write(0x00);
    }
  }
  while(Serial.available() > 0) {
    zeichen2 = Serial.read();
    Serial2.write(zeichen2);
}

Vielleicht hat ja jemand meinen Fehler entdeckt :slight_smile:

Verirrtes Schaf

Du musst wahrscheinlich auf die Antwort warten. Bei 4800 Baud brauchst du ca. 2ms pro Zeichen. Da kannst du nicht sofort Einlesen und erwarten das was ankommt.

Ich warte ja theoretisch bis zum nächsten zyklischen 0x05. Ich sende ja erst das 0x16 0x00 0x00 wenn ich das 0x05 empfangen habe. Und dann lass ich den Arduino ja einfach im loop laufen bis er wieder was empfängt.....

Hat jemand noch eine Idee oder bereits praktische Erfahrungen damit?

Vll musst du hinter deinem 0x16 und deinen 0x00 jeweils ein /NL oder /CR mitsenden.

Gruß

So.....um hier mal die Neuigkeiten rein zu bekommen.....

man sollte halt mit dem richtigen Protokoll arbeiten. Meine Heizungsregelung spricht nicht das 300er-Protokoll von Viessmann, sondern lediglich das KW-Protokoll. Nach ein paar Versuchen antwortet die Heizung nun auch.

Dann werd ich das mal weiter vertiefen :slight_smile:

VerirrtesSchaf

Welche Daten bekommst du bis jetzt heraus?

Bin nicht sicher ob viess-data 2.0 neben 300 auch noch das KW Protokoll unterstützt.
Ich denke, mehr als da realisiert ist, geht nicht.

michael_x:
Bin nicht sicher ob viess-data 2.0 neben 300 auch noch das KW Protokoll unterstützt.
Ich denke, mehr als da realisiert ist, geht nicht.

Och mir würde das vollkommen reichen :slight_smile: