{"id":157,"date":"2015-08-16T15:06:56","date_gmt":"2015-08-16T13:06:56","guid":{"rendered":"https:\/\/benedikt-merz.de\/Blog\/?p=157"},"modified":"2015-12-20T11:58:32","modified_gmt":"2015-12-20T10:58:32","slug":"heizungssteuerung-auslesen","status":"publish","type":"post","link":"https:\/\/benedikt-merz.de\/Blog\/?p=157","title":{"rendered":"Heizungssteuerung auslesen"},"content":{"rendered":"<p>Vor zwei Jahren wurde die Zentralheizung im Haus meiner Eltern komplett erneuert. Sie besteht jetzt aus einem \u00d6lkessel, einem St\u00fcckholzkessel der Firma <a href=\"http:\/\/www.kwbheizung.de\/de\/produkte.html\" target=\"_blank\">KWB<\/a> und Solarkollektoren.<\/p>\n<p>Die Steuerung der Anlage erfolgt \u00fcber eine FP10 der Firma <a href=\"http:\/\/www.hanazeder.com\/\" target=\"_blank\">Hanazeder<\/a>, die \u00fcber eine RS232-Schnittstelle programmiert und ausgelesen werden kann. Leider liefert der Hersteller hierf\u00fcr nur ein Windows-Programm mit. Um die Daten auf einem Raspberry Pi zu loggen, ist das nat\u00fcrlich nicht geeignet. \ud83d\ude41<!--more--><\/p>\n<p>Leider findet sich weder in der Doku noch in Foren ein Hinweis auf das Protokoll, das zum Auslesen notwendig ist. Ein ausgeliehener Windows-Rechner, ein RS232-Datenlogger und etwas Zeit am Wochenende haben weiter geholfen.<\/p>\n<p>Hier ein Auszug aus dem Mitschnitt:<\/p>\n<table>\n<tbody>\n<tr>\n<th>Windows sendet<\/th>\n<th>Steuerung antwortet<\/th>\n<th>Inhalt<\/th>\n<\/tr>\n<tr>\n<td>EE000100C4<\/td>\n<td>EE00F0050000020106F9<\/td>\n<td>Allg. Daten<\/td>\n<\/tr>\n<tr>\n<td>EE01040100D5<\/td>\n<td>EE01F0023800A8<\/td>\n<td>Sensor 1<\/td>\n<\/tr>\n<tr>\n<td>EE0204010103<\/td>\n<td>EE02F002FF7F85<\/td>\n<td>Sensor 2<\/td>\n<\/tr>\n<tr>\n<td>EE030401026E<\/td>\n<td>EE03F0025501A6<\/td>\n<td>Sensor 3<\/td>\n<\/tr>\n<tr>\n<td>EE04040103B6<\/td>\n<td>EE04F0026C0168<\/td>\n<td>Sensor 4<\/td>\n<\/tr>\n<tr>\n<td>EE05040104BA<\/td>\n<td>EE05F002790254<\/td>\n<td>Sensor 5<\/td>\n<\/tr>\n<tr>\n<td>EE060401056C<\/td>\n<td>EE06F0026A02A3<\/td>\n<td>Sensor 6<\/td>\n<\/tr>\n<tr>\n<td>EE0704010601<\/td>\n<td>EE07F0026E01B7<\/td>\n<td>Sensor 7<\/td>\n<\/tr>\n<tr>\n<td>EE08040107C5<\/td>\n<td>EE08F0026C0149<\/td>\n<td>Sensor 8<\/td>\n<\/tr>\n<tr>\n<td>EE090401080B<\/td>\n<td>EE09F002FF7FF5<\/td>\n<td>Sensor 9<\/td>\n<\/tr>\n<tr>\n<td>EE0A040109DD<\/td>\n<td>EE0AF002FF7FBB<\/td>\n<td>Sensor 10<\/td>\n<\/tr>\n<tr>\n<td>EE0B04010AB0<\/td>\n<td>EE0BF002FF7F76<\/td>\n<td>Sensor 11<\/td>\n<\/tr>\n<tr>\n<td>EE0C04010B68<\/td>\n<td>EE0CF0026F0103<\/td>\n<td>Sensor 12<\/td>\n<\/tr>\n<tr>\n<td>EE0D04010C64<\/td>\n<td>EE0DF0025000A5<\/td>\n<td>Sensor 13<\/td>\n<\/tr>\n<tr>\n<td>EE0E04010DB2<\/td>\n<td>EE0EF002FF7FA4<\/td>\n<td>Sensor 14<\/td>\n<\/tr>\n<tr>\n<td>EE0F04010EDF<\/td>\n<td>EE0FF002FF7F69<\/td>\n<td>Sensor 15<\/td>\n<\/tr>\n<tr>\n<td>EE1020033F01038C<\/td>\n<td>EE10F00300000075<\/td>\n<td>Leistung\/W\u00e4rmemenge<\/td>\n<\/tr>\n<tr>\n<td>EE112003D3000A9F<\/td>\n<td>EE11F00A000000000001000000005B<\/td>\n<td>Ausg\u00e4nge<\/td>\n<\/tr>\n<tr>\n<td>EE122003390104B0<\/td>\n<td>EE12F00400000000EC<\/td>\n<td>Leistung\/W\u00e4rmemenge<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Mit scharfem Hinschauen\u2122 l\u00e4sst sich das Protokoll erahnen:<\/p>\n<ul>\n<li>Jede Nachricht beginnt mit einem <code>EE<\/code>. (Byte 0)<\/li>\n<li>Byte 1 ist ein Nachrichtenz\u00e4hler.<\/li>\n<li>Das letzte Byte enth\u00e4lt die Checksumme.<\/li>\n<\/ul>\n<p>Der Wert f\u00fcr Sensor 3 berechnet sich wie folgt (f\u00fcr positive Werte):<\/p>\n<ul>\n<li>Byte 4 und Byte 5 enth\u00e4lt die Nutzdaten, hier <code>0x55<\/code> und <code>0x01<\/code>.<\/li>\n<li>Byte 5 ist das Highbyte.<\/li>\n<li>Ist der Wert gr\u00f6\u00dfer als 127, dann ist die Temperatur negativ. In diesem Fall vom Highbyte und vom Lowbyte 255 abziehen.<\/li>\n<li><code>Wert[\u00b0C]=(Dez(Byte 5)*256+Dez(Byte 4))\/10=(255+85)\/10=Dez(0x0155)=34.1<\/code><\/li>\n<li>Ist ein Sensor deaktiviert, wird <code>0x7FFF<\/code> gesendet.<\/li>\n<\/ul>\n<p>Die Ansteuerung der Ausg\u00e4nge erh\u00e4lt man aus der vorletzten Nachricht:<\/p>\n<ul>\n<li>Byte 4 bis Byte 13 ist der Status der Ausg\u00e4nge.<\/li>\n<li>Im Beispiel ist also der Ausgang 6 der Anlage angesteuert.<\/li>\n<\/ul>\n<p>Eine Besonderheit gibt es noch:<br \/>\nKommt in einer Nachricht der Wert <code>EE<\/code> vor, so wird dieses Byte wiederholt. Das muss man bei der Auswertung der Sensoren beachten.<\/p>\n<p>Damit lassen sich die aktuellen Werte der Anlage auslesen. Ich sende vom Raspi alle 5 Minuten obige Botschaften und speichere die Werte der Sensoren und Ausg\u00e4nge in einer MySQL-Datenbank.<\/p>\n<p>Die Visualisierung habe ich \u00fcber einen CSV-Export und das WordPress-Plugin &#8222;Visualizer: Charts and Graphs&#8220; realisiert.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vor zwei Jahren wurde die Zentralheizung im Haus meiner Eltern komplett erneuert. Sie besteht jetzt aus einem \u00d6lkessel, einem St\u00fcckholzkessel der Firma KWB und Solarkollektoren. Die Steuerung der Anlage erfolgt \u00fcber eine FP10 der Firma Hanazeder, die \u00fcber eine RS232-Schnittstelle programmiert und ausgelesen werden kann. Leider liefert der Hersteller hierf\u00fcr nur ein Windows-Programm mit. Um &hellip; <a href=\"https:\/\/benedikt-merz.de\/Blog\/?p=157\" class=\"more-link\"><span class=\"screen-reader-text\">Heizungssteuerung auslesen<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[22,19,18,20,23,21],"class_list":["post-157","post","type-post","status-publish","format-standard","hentry","category-technik","tag-fhem","tag-fp10","tag-hanazeder","tag-heizungssteuerung","tag-raspberry-pi","tag-rs232"],"_links":{"self":[{"href":"https:\/\/benedikt-merz.de\/Blog\/index.php?rest_route=\/wp\/v2\/posts\/157","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/benedikt-merz.de\/Blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/benedikt-merz.de\/Blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/benedikt-merz.de\/Blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/benedikt-merz.de\/Blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=157"}],"version-history":[{"count":17,"href":"https:\/\/benedikt-merz.de\/Blog\/index.php?rest_route=\/wp\/v2\/posts\/157\/revisions"}],"predecessor-version":[{"id":266,"href":"https:\/\/benedikt-merz.de\/Blog\/index.php?rest_route=\/wp\/v2\/posts\/157\/revisions\/266"}],"wp:attachment":[{"href":"https:\/\/benedikt-merz.de\/Blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/benedikt-merz.de\/Blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=157"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/benedikt-merz.de\/Blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}