{"id":741,"date":"2023-06-07T12:51:00","date_gmt":"2023-06-07T10:51:00","guid":{"rendered":"https:\/\/www.iot-embedded.de\/iot-2023\/?p=741"},"modified":"2023-06-05T17:17:27","modified_gmt":"2023-06-05T15:17:27","slug":"architektur-der-heizungssteuerung","status":"publish","type":"post","link":"https:\/\/www.iot-embedded.de\/iot-2023\/2023\/06\/07\/architektur-der-heizungssteuerung\/","title":{"rendered":"Architektur der Heizungssteuerung"},"content":{"rendered":"\n<p>Heute m\u00f6chten wir die Architektur unserer Heizungssteuerung genauer vorstellen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kommunikation<\/h2>\n\n\n\n<p>Die prim\u00e4re Kommunikation zwischen Sensor, Aktoren und &#8222;Compute-Node&#8220; erfolgt grunds\u00e4tzlich mit MQTT. Die Sensoren \u00fcbermitteln die aktuelle Temperatur und Luftfeuchtigkeit, der Aktor \u00f6ffnet oder schlie\u00dft auf Befehl das Thermostat. Die aktuelle Stellung meldet er ebenfalls an die Compute Node zur\u00fcck. Die Sensoren bzw. die Raspberrys sind mit unserem Projekt in der Balena Cloud verkn\u00fcpft. Der Raspberry wird mit einem Docker Container bespielt. Die gemessenen Sensordaten werden an den MQTT geleitet.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.iot-embedded.de\/iot-2023\/wp-content\/uploads\/sites\/6\/2023\/06\/Compute-Note-Schematics.png\" alt=\"\" class=\"wp-image-742\" width=\"687\" height=\"487\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2023\/wp-content\/uploads\/sites\/6\/2023\/06\/Compute-Note-Schematics.png 928w, https:\/\/www.iot-embedded.de\/iot-2023\/wp-content\/uploads\/sites\/6\/2023\/06\/Compute-Note-Schematics-300x213.png 300w, https:\/\/www.iot-embedded.de\/iot-2023\/wp-content\/uploads\/sites\/6\/2023\/06\/Compute-Note-Schematics-768x545.png 768w\" sizes=\"(max-width: 687px) 100vw, 687px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Daten und Datenhaltung<\/h2>\n\n\n\n<p>Entgegen der urspr\u00fcnglichen Planung wird f\u00fcr das Speichern der Daten \u00fcber die Rauminformationen (Name, Rapla-Link, Soll-Temperatur) aus dem Frontend keine MongoDB verwendet. Das liegt daran, dass die Beziehung zwischen den Daten prim\u00e4r von relationaler Art ist, sodass sich eine relationale Datenbank f\u00fcr diesen Verwendungszweck besser implementieren l\u00e4sst, als eine nicht rationale Datenbank. Daher wird hier eine MariaDB implementiert werden. Das ist f\u00fcr den kommenden Sprint geplant. Die MariaDB wird in einem Docker Container deployed.<br>Ferner werden die Werte, die ein Sensor auslie\u00dft, in einer InfluxDB gespeichert. Diese InfluxDB ist aufgrund ihrer Funktion als Zeitreihendatenbank daf\u00fcr hervorragend geeignet ist, da sie die Zeitreihen logisch sinnvoll, ressourcensparend und effizient speichert. Zudem kann Influx die gesammelten Daten sogar visuell darstellen, ohne f\u00fcr das Aggregieren der Daten \u00fcberm\u00e4\u00dfig Ressourcen zu ben\u00f6tigen. Die Sensoren senden die gemessenen Daten an den MQTT, von wo aus sie die InfluxDB erh\u00e4lt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Compute-Node<\/h2>\n\n\n\n<p>Die &#8222;Compute-Node&#8220; ist das Herzst\u00fcck der Anwendung, da diese die komplette Programmlogik und das Frontend enth\u00e4lt. Als Framework wird hier das Tool Node-RED genutzt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Kommunikation innerhalb und mit der Compute-Node<\/h3>\n\n\n\n<p>Die Daten bekommt die Node einerseits durch den MQTT und andererseits durch Nutzereingaben. Ein Heizbefehl kann entweder durch eine Abweichung zwischen Soll- und Ist-Temperatur erfolgen, durch ein Kalenderereignis (Raumbuchung in Rapla) oder durch eine manuelle Aufforderung durch das Frontend.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"677\" src=\"https:\/\/www.iot-embedded.de\/iot-2023\/wp-content\/uploads\/sites\/6\/2023\/06\/Compute-Node-1024x677.png\" alt=\"\" class=\"wp-image-743\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2023\/wp-content\/uploads\/sites\/6\/2023\/06\/Compute-Node-1024x677.png 1024w, https:\/\/www.iot-embedded.de\/iot-2023\/wp-content\/uploads\/sites\/6\/2023\/06\/Compute-Node-300x198.png 300w, https:\/\/www.iot-embedded.de\/iot-2023\/wp-content\/uploads\/sites\/6\/2023\/06\/Compute-Node-768x508.png 768w, https:\/\/www.iot-embedded.de\/iot-2023\/wp-content\/uploads\/sites\/6\/2023\/06\/Compute-Node.png 1074w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">User-Access Control<\/h3>\n\n\n\n<p>Da das Implementieren der Node nicht auf Balena geklappt hat, wurde sie unabh\u00e4ngig davon auf einen Raspberry implementiert. Dieser nutzt das Betriebssystem Raspbian. Da nur eine Compute-Node vorliegt und diese bei einem Projektteilnehmer im Netzwerk ist, gibt es ein Vorgehen, um von au\u00dferhalb dieses Netzwerks auf die Compute-Node zuzugreifen. Daf\u00fcr wird eine SSH Verbindung genutzt. Weiterhin kann die Webview \u00fcber Zertifikate erreicht werden.<\/p>\n\n\n\n<p>Als Ma\u00dfnahme f\u00fcr IT-Sicherheit wurde die Compute-Node durch eine Netzwerk- und Clientfirewall abgesichert. Auf user-level wurde f\u00fcr die SSH-Verbindung auf ein Public-Key-Verfahren gesetzt und f\u00fcr den HTTPS-Zugriff ein SSL-Client-Zerfitikat f\u00fcr die Nutzenden ausgestellt. Ohne dieses Zertifikat oder SSH-Key kann nicht auf die Compute-Node zugegriffen werden.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"736\" src=\"https:\/\/www.iot-embedded.de\/iot-2023\/wp-content\/uploads\/sites\/6\/2023\/06\/UAC.png\" alt=\"\" class=\"wp-image-744\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2023\/wp-content\/uploads\/sites\/6\/2023\/06\/UAC.png 1024w, https:\/\/www.iot-embedded.de\/iot-2023\/wp-content\/uploads\/sites\/6\/2023\/06\/UAC-300x216.png 300w, https:\/\/www.iot-embedded.de\/iot-2023\/wp-content\/uploads\/sites\/6\/2023\/06\/UAC-768x552.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Node-RED<\/h2>\n\n\n\n<p>Node-Red ist ein von IBM entwickeltes grafisches Entwicklungstool. Damit ist es m\u00f6glich, Abl\u00e4ufe nach dem Baukastenprinzip zu erstellen. Dieses Tool ist der Dreh und Angelpunkt der Applikation. Aufgabe von Node-RED ist das Abrufen bzw. Senden von MQTT-Nachrichten und Speicherung der Sensorwerte in der Influx-DB. Zus\u00e4tzlich besitzt Node-RED eine Schnittstelle zu der Konfigurationsdatenbank (MariaDB), die die Rauminformationen erh\u00e4lt. Eine ICAL-Implementation erm\u00f6glicht das Abrufen der Kalenderereignisse von Rapla und ein Frontendmodul erm\u00f6glicht das Einstellen der Raumtemperaturen an einem zentralen Punkt. Hauptaufgabe von Node-RED ist jedoch die Implementierung und Realisierung des Heiz-Regelkreises, welcher die Temperaturen der R\u00e4ume entsprechend der definierten Regeln anpasst.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Heute m\u00f6chten wir die Architektur unserer Heizungssteuerung genauer vorstellen. Kommunikation Die prim\u00e4re Kommunikation zwischen Sensor, Aktoren und &#8222;Compute-Node&#8220; erfolgt grunds\u00e4tzlich mit MQTT. Die Sensoren \u00fcbermitteln die aktuelle Temperatur und Luftfeuchtigkeit, der Aktor \u00f6ffnet oder schlie\u00dft auf Befehl das Thermostat. Die<\/p>\n","protected":false},"author":23,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[7],"tags":[11],"_links":{"self":[{"href":"https:\/\/www.iot-embedded.de\/iot-2023\/wp-json\/wp\/v2\/posts\/741"}],"collection":[{"href":"https:\/\/www.iot-embedded.de\/iot-2023\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.iot-embedded.de\/iot-2023\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2023\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2023\/wp-json\/wp\/v2\/comments?post=741"}],"version-history":[{"count":1,"href":"https:\/\/www.iot-embedded.de\/iot-2023\/wp-json\/wp\/v2\/posts\/741\/revisions"}],"predecessor-version":[{"id":745,"href":"https:\/\/www.iot-embedded.de\/iot-2023\/wp-json\/wp\/v2\/posts\/741\/revisions\/745"}],"wp:attachment":[{"href":"https:\/\/www.iot-embedded.de\/iot-2023\/wp-json\/wp\/v2\/media?parent=741"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2023\/wp-json\/wp\/v2\/categories?post=741"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2023\/wp-json\/wp\/v2\/tags?post=741"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}