Go Down

Topic: Viessmann Heizungssteerung auslesen (Read 16909 times) previous topic - next topic

VerirrtesSchaf

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

kurti

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
Zitat Jurs: falsche Verkabelung ist sowieso immer wenig förderlich für das Funktionieren der Hardware



hier könnte Ihre Werbung stehen

rudirabbit

@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....
Arduino UNO,MEGA,DUE 
Dunkel die andere Seite ist. - Klappe, Yoda, und iss deinen Toast :-)

Scherheinz

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ß
Hier könnte ihre Werbung stehen

michael_x

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
brauchst du nur den SEND_IR und REC-IR Teil rechts (Das REC-IR Signal an einen INPUT_PULLUP Pin )

VerirrtesSchaf

Schon mal danke für die Antworten.

Die Lösung mit den Temperatursensoren hat deshalb nicht funktioniert, weil ich unzufriden damit war :) 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

michael_x

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 ;)
Eine Arduino Library für optolink steht (leider weit hinten) auf meiner ToDo Liste. Man könnte sie auch NiceToHave - Liste nennen. ;)

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

Scherheinz

Dann melde ich auch mal Interesse an jeglichem Fortschritt an!

Gruß
Hier könnte ihre Werbung stehen

VerirrtesSchaf

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

Scherheinz

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ß
Hier könnte ihre Werbung stehen

michael_x

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.

VerirrtesSchaf

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:

Code: [Select]
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 :)

Verirrtes Schaf

Serenifly

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.

VerirrtesSchaf

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.....

VerirrtesSchaf

Hat jemand noch eine Idee oder bereits praktische Erfahrungen damit?

Go Up