Show all projects!

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
  • Reglung der Zieltemperatur anhand einer (anpassbaren) Sollwertkurve
  • Nachtabsenkung
  • Eco-Modus bei Abwesenheitserkennung

Techniken

Mechanik

Hutschiene für den Raspberry Pi

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.

Einbindung in https://www.home-assistant.io/

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:

Heizungssteuerung mit openhab2

Systemstruktur

Systemstruktur OpenHab HeatingControll RPOI Explorer und Relaiskarte
Systemstruktur Controller und Services

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

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: / Last Update: