NEWS
Sieger/Buderus Heiztherme auslesen Billiglösung
-
Ich habe ein kleines Projekt zusammengezimmert das mich viel Recherchezeit gekostet hat.
Jetzt möchte ich das hier dokumentieren um vielleicht dem Nächsten eine lange Suche zu ersparen.
Ich habe folgende Heizungsanlage:
Sieger Gas Brennwerttherme BK15
Sieger Thermostat eSR73 (Platine innen sagt Buderus RC30)
Keiner konnte mir wirklich sagen welches Protokoll verwendet wird oder was ich dazu verwenden könnte.
Also habe ich zunächst bbqkees gefunden der hier:
http://www.domoticz.com/forum/viewtopic … 38&t=14132
seine Adapterplatine vorstellt.
Ursprünglich hatte er das in einem Arduino Projekt und nur für Buderus getestet:
https://github.com/bbqkees/Nefit-Buderu ... o-Domoticz
Leider konnte er mir zunächst auch nicht sagen ob es für das Sieger System funktionieren würde.
Also habe ich mal "auf gut Glück" seine Platine bestellt.
Ich habe dann sehr lange überlegt wie ich den Arduino in meinen ioBroker einbinden könnte.
Durch diese Verzögerung ist dann dieses Projekt erschienen:
https://github.com/proddy/EMS-ESP-Boiler
und ich habe mich entschlossen die ganze Geschichte auf einen Wemos D1 Mini zu packen und den dann per MQTT Adapter in den ioBroker einzubinden.
Leider scheint bei proddy die Integration in Espurna nicht richtig zu funktionieren, aber mit der Headless Variante hat das Ganze einwandfrei funktioniert.
Ich bekomme die Boilerdaten als JSON Objekt in den ioBroker übertragen.
Das Format sieht so aus:
{"wWSelTemp":"30","wWActivated":"on","wWCurTmp":"45.5","wWHeat":"off","curFlowTemp":"43.4","retTemp":"43.2","burnGas":"on","heatPmp":"on","fanWork":"on","ignWork":"on","wWCirc":"off","selBurnPow":"100","curBurnPow":"0","sysPress":"0.9","boilTemp":"44.0","pumpMod":"55"}
Mir fehlen aktuell noch ein paar Daten, aber das liegt daran das ich in der Firmware den Datenbus für das Thermostat falsch ausgewählt habe.
Um die Daten in VIS umzusetzen habe ich mir das JSON zerlegt. Einfach weil es für mich eben leichter ist die Daten direkt einzeln als Datenpunkt abzubilden.
Dazu war ein kleines Script nötig das ich mit kompetenter Hilfe von @paul53 erstellen konnte:
//Script zur Zerlegung der JSON Daten in einzelne Datenpunkte //Idee: Chaot // Umsetzung: paul53 var json = "mqtt.0.home.boiler.boiler_data"/*BoilerDaten*/; var Vorl = "javascript.0.Heizung.Vorlauf"/*Vorlauf*/; var Rueckl = "javascript.0.Heizung.Ruecklauf"/*Ruecklauf*/; var WWist = "javascript.0.Heizung.WarmwasserIst"/*Warmwasser Ist*/; var WWsoll = "javascript.0.Heizung.WarmwasserSoll"/*Warmwasser Soll*/; var Druck = "javascript.0.Heizung.Systemdruck"/*Systemdruck*/; var WWAn = "javascript.0.Heizung.WarmwasserAn"/*Warmwasser aktiv*/; var Run = "javascript.0.Heizung.Laufzeit"/*Laufzeit*/; var Heizzeit = "javascript.0.Heizung.Heizzeit"/*Heizzeit*/; on(json, function(dp) { var obj = JSON.parse(dp.state.val); setState(Vorl, parseFloat(obj.curFlowTemp)); setState(Rueckl, parseFloat(obj.retTemp)); setState(WWist, parseFloat(obj.wWCurTmp)); setState(WWsoll, parseFloat(obj.wWSelTemp)); setState(Druck, parseFloat(obj.sysPress)); setState(WWAn, obj.wWActivated); setState(Run, parseFloat(obj.burnWorkMin)); setState(Heizzeit, parseFloat(obj.heatWorkMin)); });
Somit habe ich jetzt meine Datenpunkt einzeln und kann sie beliebig in VIS darstellen.
Das ganze Projekt sollte in der Form auch an einer Buderus, Junkers oder Bosch Heizungsanlage funktionieren. Für die war das ja auch ursprünglich vorgesehen.
Ich habe eben nur mal versucht ob es für eine Sieger nicht doch möglich ist und dabei auch Glück gehabt.
Von Sieger original kommt die Aussage das es NICHT möglich wäre :lol:
ToDo:
Aktuell ist noch der falsche Thermostat in der Firmware
Die Daten für burnWorkMin und heatWorkMin kommen noch nicht. Muss ich noch etwas suchen.
Ich freue mich jederzeit auf eure Kommentare oder Verbesserungsvorschläge.
-
Super. Werde ich so nachbauen. Vielen Dank fürs teilen
Gesendet von iPhone mit Tapatalk
-
hallo Chaot,
ich interessiere mich auch für eine EMS Bus Lösung für die Sieger BK15, da mich die Kombination Buderus KM50 noch nicht ganz so glücklich macht.
Gibt es eine fertige Platine zu kaufen, oder einen funktionierenden Code für einen ESP8266 oer ESp32.
Besten Dank
mfg.
Chris
-
Hi,
die Platine gibt es in der Beschreibung des Projektes von bbqkees. Der Code Ems-esp-Boiler (Variante ohne GUI) läuft super auf einem d1mini.
Gruß
Gesendet von iPhone mit Tapatalk
-
Ist ja cool, ich baue gerade einen Adapter für opentherm der etwas vergleichbares macht aber Dan für opentherm Protokoll!
https://github.com/DutchmanNL/ioBroker.opentherm
Man könnte eventuell den Datensatz der hier reinkommt über denselben Adapter Verarbeiten, das könnte ich einbauen wen Interesse besteht
Sent from my iPhone using Tapatalk
-
Hi Analogiker,
ei super, dann werde ich mir die Leiterplatte schon mal bestellen. Leider gerade ausverkauft, aber laut Homepage legt er immer wieder mal ein batch auf.
Mein Endziel wird aber sein, das ich mit einem Raspberry die Daten aufnehme und an einen server schicke.
-
Ist ja cool, ich baue gerade einen Adapter für opentherm der etwas vergleichbares macht aber Dan für opentherm Protokoll!
https://github.com/DutchmanNL/ioBroker.opentherm
Man könnte eventuell den Datensatz der hier reinkommt über denselben Adapter Verarbeiten, das könnte ich einbauen wen Interesse besteht
Sent from my iPhone using Tapatalk `
Hallo, wenn ich das richtig verstehe wird’s nicht so einfach. In der hier gezeigten Lösung wird ein in MQTT geschachteltes Json Fragment versendet. Ein Skript parat dann das Json in einzelne Datenpunkte in iobroker. Das würdest du in deinen Adapter einbauen?Die Lösung (Json in MQTT) ist nicht so schön wegen der Größenbeschränkung von MQTT. Ich bin in meiner Variante schon hingegangen und habe einige Werte entfernt, damit ich dann die Außentemperatur abgreifen konnte.
Es würde mE (ich bin ehr ein Leihe) nur Sinn machen, wenn die ioFrameworkseite generischer gehalten wäre, sodass zwei angestimmte Projekte direkt kompatibel sind.
Gruß
Gesendet von iPhone mit Tapatalk
-
Im Grunde ist die Sieger Therme eine Buderus. Aber das scheint offiziell keiner zuzugeben.
Von daher hätte ich versuchen können mit dem Buderus Adapter zu arbeiten.
Aber zum Versuch knapp 200 € auszugeben war mir dann doch etwas heftig und ich habe mir eine billige Alternative gesucht.
Dabei bin ich bei einer kleinen Platine und einem Wemos gelandet.
Die Platine ist nicht zwingend nötig, da es auch mit einer lose aufgebauten Schaltung funktionieren würde, aber die paar Euros habe ich dann doch ausgegeben.
Platine ist von hier:
https://hotgoodies.nl/shop/ems/
Software dafür ist entweder von hier:
https://github.com/bbqkees/Nefit-Buderu … o-Domoticz
oder auf einem Wemos mini von hier:
https://github.com/proddy/EMS-ESP#building-the-firmware
Zusammen mit der vorgefertigten Platine komme ich dann auf knappe 30 € für die ganze Geschichte.
Die Daten kommen über den MQTT Adapter in den ioBroker und lassen sich von dort aus Auswerten.
Allerdings war bei mir noch die Besonderheit das scheinbar der Adapter die Hardware nicht richtig erkannt hat und zunächst keine Daten geliefert hat.
Dazu musste ich über Putty (Telnet) auf den Wemos zugreifen und
autodetect
ausführen.
Nach ein paar Momenten waren dann die Daten verfügbar.
Die Daten kommen als JSON String.
Da ich mich damit kaum auskenne um die vernünftig in VIS zu verarbeiten habe ich die dann mit Hilfe von Paul53 die Daten in einzelne Datenpunkte zerlegt
Anlage:
//Script zur Zerlegung der JSON Daten in einzelne Datenpunkte //Idee: Chaot // Umsetzung: paul53 var json = "mqtt.0.home.ems-esp.boiler_data"/*BoilerDaten*/; var Vorl = "javascript.0.Heizung.Vorlauf"/*Vorlauf*/; var Rueckl = "javascript.0.Heizung.Ruecklauf"/*Ruecklauf*/; var WWist = "javascript.0.Heizung.WarmwasserIst"/*Warmwasser Ist*/; var WWsoll = "javascript.0.Heizung.WarmwasserSoll"/*Warmwasser Soll*/; var Druck = "javascript.0.Heizung.Systemdruck"/*Systemdruck*/; var WWAn = "javascript.0.Heizung.WarmwasserAn"/*Warmwasser aktiv*/; var WWFlow = "javascript.0.Heizung.WarmwasserDurchfluss"/*Warmwasser Durchfluss*/; var GasAn = "javascript.0.Heizung.GasAn"/*Gas aktiv*/; var Leistung = "javascript.0.Heizung.Leistung"/*Leistung*/; var OutTemp = "javascript.0.Heizung.OutTemp"/*Aussentemperatur*/; var BoilTemp = "javascript.0.Heizung.BoilTemp"/*Boilertemperatur*/; on(json, function(dp) { var obj = JSON.parse(dp.state.val); setState(Vorl, parseFloat(obj.curFlowTemp)); setState(Rueckl, parseFloat(obj.retTemp)); setState(WWist, parseFloat(obj.wWCurTmp)); setState(WWsoll, parseFloat(obj.wWSelTemp)); setState(Druck, parseFloat(obj.sysPress)); setState(WWAn, obj.wWActivated); setState(WWFlow, obj.wWCurFlow); setState(GasAn, obj.burnGas); setState(Leistung, obj.curBurnPow); setState(OutTemp, obj.outdoorTemp); setState(BoilTemp, obj.boilTemp); });
Raumthermostat:
var json = "mqtt.0.home.ems-esp.thermostat_data"/*ThermostatDaten*/; var SelTemp = "javascript.0.Heizung.SelTemp"/*Solltemperatur*/; var CurrTemp = "javascript.0.Heizung.CurrTemp"/*Isttemperatur*/; var Mode = "javascript.0.Heizung.Mode"/*Modus*/; on(json, function(dp) { var obj = JSON.parse(dp.state.val); setState(CurrTemp, parseFloat(obj.thermostat_currtemp)); setState(SelTemp, parseFloat(obj.thermostat_seltemp)); setState(Mode, parseFloat(obj.thermostat_mode)); });