Heizungssteuerung Eigenbau 2018/2019 - eingestellt
Projekt eingestellt
Dieses Projekt wurde zugunsten der Verwendung von https://www.home-assistant.io/ eingestellt. Ich binde die DS1820 Sensoren dort direkt ein und regel Temperaturen dann über Z-Wave Heizungsthermostate.
Heizungssteuerung Eigenbau 2018/2019
Bei diesem Projekt handelt es sich um die Entwicklung einer Fußbodenheizungssteuerung (Gas-Brenner) auf Basis eines Raspberry PI, openhab/home assistant und PHP. Für eine möglichst breites Nutzungsspektrum kann die Steuerung sowohl als Standalone betrieben werden als auch in eine Hausautomatisierung integriert werden.
Kernfeatures
Basiert auf Standardhardware Software für Eigenanpassungen offen Regelt die Vorlauf-/Rücklauftemperatur von Fußbodenheizungen Grafische Webbrowseroberfläche für Remote Zugriff Automatische 1-Wire Bus Sensorerkennung Auto Discovery publikation der erkannten Sensoren in den Message Broker Mosquitto Integration in Homeautomatisation Systeme mittels MessageQueue (home assistant und openhab2) Automatische Mqqt Sensorerkennung MQQT Thing Binding MQTT-SN Anwesenheitserkennung in Kombination mit einer Fritz!Box Regelung der Zieltemperatur anhand einer (anpassbaren) Sollwertkurve Nachtabsenkung Eco-Modus bei Abwesenheitserkennung Techniken
Mechanik
Sensoren
Als ersten Schritt müssen die Sensoren als API zur Verfügung gestellt werden. Im Gegensatz zum ersten Setup (in der die Heizungssteuerung direkt auf diesem Sensoren zugegriffen hat) hat diese Abstraktionsschicht den Vorteil, das die Steuerung somit auch externe Sensoren anbinden kann. Die API git die Werte als Json zurück, so dass auch Frontendframeworks direkt auf die Sensoren zugreifen kann.
Diagramm
Sensorenübersicht
Sensor Autodiscovery auf MQQT Message Bus
In der heutigen vernetzten Welt macht eine "Stand-Alone" Heizungssteuerung zu entwickeln, auch als Hobby kaum einen Sinn, wenn nicht das Ziel ist das diese flexibler als übliche proprietären Steuerungen sind. Dazu gehört meiner Meinung nach die Offenheit der Software und auch ihrer Schnittstellen. Daher ist es mir wichtig das man die Steuerung an OpenSource Home-Automatisation Systeme anbinden kann.
Dafür muss nur die Message Queue in hass eingebunden werden.
cat .homeassistant/configuration.yaml
mqtt: broker: localhost discovery: true discovery_prefix: homeassistant
Einbindung in openhab
Um die Steuerung anzubinden schreibt die Heizung ihre Sensorwerte des DS 1820 in eine mqtt Message-Queue und kann z.B. von openhab ausgelesen werden.
Zum steuern der Relaiskarte kann diese via Post Request gesetzt werden.
curl --request POST \ --url http://heating.fritz.box:88/api/control/gpio26 \ --form status=1
Somit ist es möglich diese Software auch ausschließlich als DS1920 -> openhab Adapter zu verwenden (nur sinnvoll wenn openhab auf einem anderen Raspberry läuft. Ansonsten kann openhab die Sensoren auch direkt einbinden.)
Bisher sieht das bei mir so aus:
Systemstruktur
Basissystem Setup für den RaspberryPi
Anleitung für den Setupprozess
Temperatursensoren testen
modprobe w1-gpiomodprobe w1-thermcat /sys/bus/w1/devices/w1_bus_master1/28-*/w1_slave | grep t=
Relaiskarte testen
echo 26 > /sys/class/gpio/exportecho 20 > /sys/class/gpio/exportecho 21 > /sys/class/gpio/exportecho out > /sys/class/gpio/gpio26/directionecho out > /sys/class/gpio/gpio20/directionecho out > /sys/class/gpio/gpio21/direction
echo 1 > /sys/class/gpio/gpio26/value # ansleep 1echo 0 > /sys/class/gpio/gpio26/value # aus
Anwesenheitserkennung
Raspberry einrichten
Die Einrichtung ist im Quellcode dokumentiert, siehe README.md
Hardwareliste
Voller Rest API Zugriff möglich
<b><span style="color: #644a9b">{</span></b> <span style="color: #0057ae">"status"</span><b><span style="color: #644a9b">:</span></b> <b><span style="color: #644a9b">{</span></b> <span style="color: #0057ae">"burnerStatus"</span><b><span style="color: #644a9b">:</span></b> <b>false</b><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"outsideTemp"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #b08000">14.187</span><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"returnFlowTemp"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #b08000">27.875</span><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"returnFlowTarget"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #b08000">24</span> <b><span style="color: #644a9b">},</span></b> <span style="color: #0057ae">"relais"</span><b><span style="color: #644a9b">:</span></b> <b><span style="color: #644a9b">{</span></b> <span style="color: #0057ae">"gpio26"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #bf0303">"1"</span><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"gpio20"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #bf0303">"1"</span><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"gpio21"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #bf0303">"1"</span> <b><span style="color: #644a9b">},</span></b> <span style="color: #0057ae">"config"</span><b><span style="color: #644a9b">:</span></b> <b><span style="color: #644a9b">{</span></b> <span style="color: #0057ae">"heating"</span><b><span style="color: #644a9b">:</span></b> <b><span style="color: #644a9b">{</span></b> <span style="color: #0057ae">"debug"</span><b><span style="color: #644a9b">:</span></b> <b>true</b><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"diagrammWeekly"</span><b><span style="color: #644a9b">:</span></b> <b><span style="color: #644a9b">{</span></b> <span style="color: #0057ae">"skipSensors"</span><b><span style="color: #644a9b">:</span></b> <b><span style="color: #006e28">[</span></b> <span style="color: #bf0303">"Leitung Warm"</span><b><span style="color: #006e28">,</span></b> <span style="color: #bf0303">"W</span><span style="color: #924c9d">\u00e4</span><span style="color: #bf0303">rmetauscher"</span> <b><span style="color: #006e28">]</span></b> <b><span style="color: #644a9b">},</span></b> <span style="color: #0057ae">"diagrammColors"</span><b><span style="color: #644a9b">:</span></b> <b><span style="color: #006e28">[</span></b> <span style="color: #bf0303">"#000000"</span><b><span style="color: #006e28">,</span></b> <span style="color: #bf0303">"#e6194b"</span><b><span style="color: #006e28">,</span></b> <span style="color: #bf0303">"#3cb44b"</span><b><span style="color: #006e28">,</span></b> <span style="color: #bf0303">"#ffe119"</span><b><span style="color: #006e28">,</span></b> <span style="color: #bf0303">"#0082c8"</span><b><span style="color: #006e28">,</span></b> <span style="color: #bf0303">"#f58231"</span><b><span style="color: #006e28">,</span></b> <span style="color: #bf0303">"#911eb4"</span><b><span style="color: #006e28">,</span></b> <span style="color: #bf0303">"#46f0f0"</span><b><span style="color: #006e28">,</span></b> <span style="color: #bf0303">"#f032e6"</span><b><span style="color: #006e28">,</span></b> <span style="color: #bf0303">"#d2f53c"</span><b><span style="color: #006e28">,</span></b> <span style="color: #bf0303">"#fabebe"</span> <b><span style="color: #006e28">]</span></b><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"nightlySubstract"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #b08000">10</span><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"frostProtectionWaterTemperature"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #b08000">24</span><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"missingMappingValueFallback"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #b08000">24</span><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"nightTimeStart"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #b08000">23</span><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"nightTimeEnd"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #b08000">6</span><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"systemSensorsIds"</span><b><span style="color: #644a9b">:</span></b> <b><span style="color: #644a9b">{</span></b> <span style="color: #0057ae">"outside"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #bf0303">"10-00080282b5f8"</span><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"returnFlow"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #bf0303">"10-00080282b91c"</span> <b><span style="color: #644a9b">}</span></b> <b><span style="color: #644a9b">},</span></b> <span style="color: #0057ae">"mosquitto"</span><b><span style="color: #644a9b">:</span></b> <b><span style="color: #644a9b">{</span></b> <span style="color: #0057ae">"port"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #b08000">1883</span><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"host"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #bf0303">"localhost"</span> <b><span style="color: #644a9b">},</span></b> <span style="color: #0057ae">"database"</span><b><span style="color: #644a9b">:</span></b> <b><span style="color: #644a9b">{</span></b> <span style="color: #0057ae">"driver"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #bf0303">"pdo_mysql"</span><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"user"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #bf0303">"heating"</span><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"password"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #bf0303">"testing"</span><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"dbname"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #bf0303">"heating"</span> <b><span style="color: #644a9b">}</span></b> <b><span style="color: #644a9b">},</span></b> <span style="color: #0057ae">"temperatureMappings"</span><b><span style="color: #644a9b">:</span></b> <b><span style="color: #644a9b">{</span></b> <span style="color: #0057ae">"1"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #bf0303">"For outside temperature -35 the target temperature is 36"</span><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"2"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #bf0303">"For outside temperature -34 the target temperature is 36"</span><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"3"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #bf0303">"For outside temperature -33 the target temperature is 36"</span><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"4"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #bf0303">"For outside temperature -32 the target temperature is 36"</span><b><span style="color: #644a9b">,</span></b> <span style="color: #0057ae">"5"</span><b><span style="color: #644a9b">:</span></b> <span style="color: #bf0303">"..."</span> <b><span style="color: #644a9b">}</span></b><b><span style="color: #644a9b">}</span></b> Quellcode
Beta Codestand
Quellen
Update 08.11.2019
Integration Home Assistant Update auf Debian buster Update 10.11.2019
Einbau eines ECO-Modus, wenn Home Assistent mitteilt das keiner zu Hause ist
Article relase date:
(12.11.2019)
/
Last update:
(02.01.2022)