Verbinden Sie Ihre Zentralheizung mit Arduino
Komponenten und Verbrauchsmaterialien
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Über dieses Projekt
Haben Sie sich jemals gefragt, wann und warum Ihr Heizkessel läuft und Ihr Zuhause heizt? Möchten Sie Ihre Heizungsanlage mit Arduino automatisieren? Der OpenTherm-Schild ist für Sie konzipiert. Es ermöglicht Ihnen, Ihren OpenTherm-Kessel mit Arduino zu überwachen und zu steuern.
Hintergrund
Letztes Jahr wollte ich meinen Gasheizkessel mit einem Kaminregler kombinieren. Mein BAXI-Heizkessel und mein Thermostat sind ziemlich schlau, also wollte ich natürlich den Kessel erweitern, um auch den Kamin zu steuern. Ich hatte genug von all den teuren offiziellen BAXI-Erweiterungen, die mir dies ermöglichten.
Also baute ich mir ein OpenTherm-Gateway, das es mir ermöglichte, die Kommunikation zwischen Thermostat und Kessel abzufangen und einen Algorithmus zu platzieren, der entweder einen Kessel befeuert oder die Wärme des Kamins nutzt - [mehr über den Regler].
Da es viele Leute gab, die etwas Ähnliches wollten, habe ich beschlossen, ein Modul zu entwickeln - Arduino Shield - das es jedem ermöglicht, seine Hausheizung sehr einfach zu steuern.
Wofür ist der Schild gut?
- Erstellen Sie Ihren eigenen Arduino-basierten Kessel mit einem vorhandenen OpenTherm-Thermostat. Sehr unwahrscheinlich, dass das jemand tun würde, aber es ist möglich.
- Verwenden Sie das Schild, um Ihren eigenen Arduino-basierten Thermostat zu bauen Ihren Kessel und Ihre Hausheizung komplett zu übernehmen. Perfekt für die Hausautomation. Diese Anwendung benötigt nur eine externe 5V-Stromversorgung.
- Platzieren Sie eine OpenTherm-Abschirmung in den Leitungen zwischen dem vorhandenen Kessel und dem Thermostat und erstellen Sie einen Monitor um zu sehen, wann und wie der Kessel Ihr Haus heizt. Sie können sogar die Kommunikation abfangen, um beispielsweise die Heizung drahtlos zu steuern.
- OpenTherm ermöglicht ein Man-in-the-Middle (Gateway ) Gerät, das sowohl mit dem Kessel als auch mit dem Thermostat kommuniziert. So habe ich das Schild verwendet, um einen OpenTherm-Regler zu erstellen.
Verfügbare Daten und Befehle
- Raumtemperatur
- Raumtemperatur-Sollwert
- Heizwassertemperatur
- Rücklaufwassertemperatur
- Warmwassertemperatur*
- Heißwasserdruck*
- Brauchwasserdurchflussmenge*
- Außentemperatur*
- Kesselstatus (läuft / läuft nicht / Fehler)
- Modulationsgrad
- Abgastemperatur*
- Statistik wie lange der Kessel gelaufen ist
* Beachten Sie, dass diese nur verfügbar sind, wenn Ihr Heizkessel mit dem erforderlichen Zubehör ausgestattet ist
Den Schild bauen
Die elektronische Schaltung basiert auf dem OpenTherm-Gateway-Projekt, das einen PIC-Mikrocontroller verwendet. Ich habe es für das Arduino angepasst und ein schönes Arduino UNO-kompatibles Layout erstellt.
Sie können die obigen Schema- und Gerber-Dateien verwenden, um den Schild selbst zu erstellen. Ich fertige meine Boards von PCBWay - PCB-Prototyp auf einfache Weise. Sie können diese schönen blauen Schönheiten innerhalb einer Woche erstellen und versenden. Der blaue Lötstopplack hat den gleichen Preis wie das Basisgrün! Ich liebe auch ihren Kundenservice, nichts ist ein Problem. Oder Sie bestellen ein vorverpacktes DIY-Kit.
Mit dem Schild einen Thermostat erstellen
Das erste Beispiel zeigt Ihnen, wie Sie mit dem Schild Ihren eigenen benutzerdefinierten Thermostat erstellen. Was Sie brauchen:
- OpenTherm-Kessel
- Arduino UNO, WeMos D1 oder jedes Arduino UNO-kompatible Board. Die einzige Voraussetzung für das Board ist die Unterstützung von Pin-Interrupt auf Pin 2 und 3.
- 5V Netzteil. In diesem Setup ist keine 24-V-Stromversorgung erforderlich, da sie nur benötigt wird, wenn Sie mit einem Thermostat kommunizieren.
Verbinden Sie Ihren Kessel mit dem Arduino OpenTherm Shield wie auf dem Bild oben gezeigt, befestigen Sie das Shield an Ihrem Arduino und Sie können mit der Programmierung beginnen. Die Arduino OpenTherm IO-Bibliothek enthält das folgende Beispiel, um Ihnen zu zeigen, wie Sie mit dem Kessel kommunizieren.
void loop() { if (OPENTHERM::isIdle()) { message.type =OT_MSGTYPE_READ_DATA; message.id =OT_MSGID_SLAVE_CONFIG; Nachricht.WertHB =0; Nachricht.WertLB =0; Serial.print("->"); OPENTHERM::printToSerial(Nachricht); Serial.println(); OPENTHERM::send(BOILER_OUT, Nachricht); // Nachricht an Kessel senden} else if (OPENTHERM::isSent()) { OPENTHERM::listen(BOILER_IN, 800); // warten bis der Kessel antwortet } else if (OPENTHERM::getMessage(message)) { // Kessel hat geantwortet OPENTHERM::stop(); Serial.print("<-"); OPENTHERM::printToSerial(Nachricht); Serial.println(); Serial.println(); Verzögerung (100); // minimale Verzögerung vor der nächsten Kommunikation} else if (OPENTHERM::isError()) { OPENTHERM::stop(); Serial.println("<- Timeout"); Serial.println(); }}
Prüfen Sie zunächst mit OPENTHERM::isIdle, ob kein Befehl ansteht . Wenn nicht, können Sie den nächsten senden. In diesem Beispiel fordern Sie die Slave-Konfigurationsflags an. Wenn der Befehl erfolgreich gesendet wurde, müssen Sie mit OPENTHERM::listen auf eine Antwort vom Kessel warten Anruf. Methode OPENTHERM::getMessage gibt true zurück, sobald eine Antwort vom Slave aussteht und wenn etwas schief gelaufen ist oder eine Zeitüberschreitung aufgetreten ist method OPENTHERM::isError true zurückgeben. Die Bibliothek enthält eine OpenTherm-Nachrichtenstruktur, die decodierte Daten aus dem Protokoll enthält, sodass Sie sich überhaupt nicht um die Formate kümmern müssen. Überprüfen Sie den Quellcode, er ist gut dokumentiert. Alle Arten von Meldungen sind in den Konstanten aufgelistet oder Sie können die OpenTherm-Dokumentation überprüfen.
struct OpenthermData { Bytetyp; Byte-ID; BytewertHB; BytewertLB; Schwimmer f88(); void f88 (Floatwert); uint16_t u16(); void u16(uint16_t-Wert); int16_t s16(); void s16(int16_t Wert);}
Mit dem Schild einen Monitor, Gateway oder Regler erstellen
Das zweite Beispiel zeigt Ihnen, wie Sie ein Man-in-the-Middle-Gerät an den OpenTherm-Bus anschließen, um Kessel und Thermostat zu überwachen oder deren Kommunikation abzufangen. Was Sie brauchen:
- OpenTherm-Thermostat
- 24V 500mA Netzteil
Schließen Sie die Abschirmung an den Bus zwischen Kessel und Thermostat an, wie in der Abbildung oben gezeigt. Sie können sehen, dass es den Bus zwischen diesen beiden Geräten unterbricht. Jetzt ist Ihre Kommunikation unterbrochen, es sei denn, Sie laden eine Gateway-Software in Ihr Arduino hoch, die Befehle und Antworten vom Thermostat an den Kessel weiterleitet und umgekehrt. Auch hier gibt es ein hervorragendes Beispiel in der Arduino OpenTherm IO-Bibliothek.
void loop() { if (mode ==MODE_LISTEN_MASTER) { if (OPENTHERM::isSent() || OPENTHERM::isIdle() || OPENTHERM::isError()) { OPENTHERM::listen( THERMOSTAT_IN); aufrechtzuerhalten. Sonst wenn (OPENTHERM::getMessage(Nachricht)) {Serial.print("->"); OPENTHERM::printToSerial(Nachricht); Serial.println(); OPENTHERM::send(BOILER_OUT, Nachricht); // Nachricht an Kesselmodus weiterleiten =MODE_LISTEN_SLAVE; } } else if (mode ==MODE_LISTEN_SLAVE) { if (OPENTHERM::isSent()) { OPENTHERM::listen(BOILER_IN, 800); // Antwort muss in 800ms zurückgesendet werden} else if (OPENTHERM::getMessage(message)) {Serial.print("<-"); OPENTHERM::printToSerial(Nachricht); Serial.println(); Serial.println(); OPENTHERM::send(THERMOSTAT_OUT, Nachricht); // Nachricht zurück an Thermostatmodus senden =MODE_LISTEN_MASTER; } else if (OPENTHERM::isError()) { mode =MODE_LISTEN_MASTER; Serial.println("<- Timeout"); Serial.println(); } }}
Das Gateway beginnt einfach, auf Thermostatbefehle zu hören. Wenn eine Anfrage erkannt wird, wird sie analysiert und an den Kessel weitergeleitet. Das Gateway beginnt nun stattdessen, auf die Antwort des Kessels zu lauschen. Wenn innerhalb von 800 ms eine Antwort eingeht, leitet das Gateway die Antwort zurück an den Thermostat. Sowohl der Thermostat als auch der Boiler werden nie wissen, dass zwischen ihnen etwas Besonderes ist. Wie Sie sehen, gibt es viel Platz, um Ihren eigenen Code zu schreiben, der die Nachrichten erfassen und nützliche Informationen daraus lesen kann (Status, Temperaturen, Druck, Statistiken, ...). Du kannst sogar Anfragen oder Antworten, die dir nicht gefallen, überschreiben oder wegwerfen.
Wie Sie sehen, können Sie ganz einfach mit Ihrem intelligenten Heizsystem kommunizieren und es noch intelligenter machen. Im nächsten Artikel zeige ich Ihnen die praktischere Verwendung dieser Hardware in meinem OpenTherm-Regler.
Code
Opentherm IO-Bibliothek für Arduino
https://github.com/jpraus/arduino-openthermSchaltpläne
Herstellungsprozess
- Überwachung meines Zentralheizungskessels
- Aufbau eines drahtlosen Sensornetzwerks in Ihrem Zuhause
- Schließen Sie einen Sensor an Ihren Raspberry Pi an, um Sie vor schädlichen Gasen zu warnen!
- Bauen Sie Ihren internetgesteuerten Videostreaming-Roboter mit Arduino und Raspberry Pi
- So verbinden Sie GrabCAD Print mit Ihrem Stratasys 3D-Drucker
- Tipps zur Verbesserung der Heizöleffizienz für Ihr Unternehmen
- Aktivieren Sie die Alexa-Steuerung für Ihren Deckenventilator
- Arduino Spybot
- FlickMote
- Fügen Sie animierte (Festzelt-)Beleuchtung zu Ihren Projekten hinzu