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