{"id":1858,"date":"2023-01-16T17:13:54","date_gmt":"2023-01-16T16:13:54","guid":{"rendered":"https:\/\/www.rustimation.eu\/?p=1858"},"modified":"2025-07-25T08:18:20","modified_gmt":"2025-07-25T06:18:20","slug":"vicare-daten-abfragen","status":"publish","type":"post","link":"https:\/\/www.rustimation.eu\/index.php\/vicare-daten-abfragen\/","title":{"rendered":"Viessmann API und Node-Red &#8211; Teil 3 &#8211; Daten abfragen"},"content":{"rendered":"<p>Dies ist das dritte Kapitel meiner Reihe \u00fcber die Nutzung der Viessmann API mit Node-Red. Einen Einstieg bekommst du am ehesten, indem du mit dem Kapitel <a href=\"https:\/\/www.rustimation.eu\/index.php\/a-viessmann-api-und-node-red\/\">1 \u2013 Die Viessmann API und Node-Red \u00dcberblick<\/a> anf\u00e4ngst.<\/p>\n<h3>\u00c4nderungen per\u00a0 Februar 2025<\/h3>\n<p>Die Viessmann API ist immer noch \"work in Progress\". Demzufolge \u00e4ndert sich hin und wieder etwas. Angek\u00fcndigt werden \u00c4nderungen im <a href=\"https:\/\/documentation.viessmann.com\/static\/changelog\" target=\"_blank\" rel=\"noopener\">Change Log<\/a>.<\/p>\n<p>Diverse Features &#8211; vor allem f\u00fcr W\u00e4rmepumpen und Brennstoffzellen &#8211; bekommen per Februar 2025 eine neue Bezeichnung. Welche das sind, steht im Change Log.<\/p>\n<p>F\u00fcr alle wichtig ist die \u00c4nderung des Feature Endpoints von v1 auf v2. Stand Juli 2025 funktioniert zwar alles noch wie gehabt mit v1 aber es schadet sicher nicht, den Endpoint entsprechend umzuschreiben. Aus<\/p>\n<pre class=\"lang:js decode:true \">https:\/\/api.viessmann-climatesolutions.com\/iot\/v1\/features\/installations\/{{installationID}}\/gateways\/{{gatewaySerial}}\/devices\/{{deviceId}}\/features\/<\/pre>\n<p>wird jetzt<\/p>\n<pre class=\"lang:default decode:true\">https:\/\/api.viessmann-climatesolutions.com\/iot\/v2\/features\/installations\/{{installationID}}\/gateways\/{{gatewaySerial}}\/devices\/{{deviceId}}\/features\/<\/pre>\n<p>Die nachfolgenden Node-Red flows sind entsprechend aktualisiert.<\/p>\n<h3><strong>Autorisierung des Requests<br \/>\n<\/strong><\/h3>\n<p>Alle f\u00fcr die Autorisierung eines beliebigen Requests n\u00f6tigen Informationen befinden sich in meinem \"Universal Header Node\", einem Funktionsnode, der den http Request Node entsprechend f\u00fcr die Abfrage der API best\u00fcckt. Der Funktionsnode sieht wie folgt aus und muss nicht individuell angepasst werden.<\/p>\n<p><!--more--><\/p>\n<pre class=\"lang:js decode:true \">var atoken = flow.get('accessToken')\r\nmsg.headers = {\r\n    Authorization: \"Bearer \"+ atoken\r\n}\r\nmsg.installationID = flow.get('installationID');\r\nmsg.gatewaySerial = flow.get('gatewaySerial');\r\nmsg.deviceId = flow.get('deviceID');\r\nreturn msg;<\/pre>\n<p>Das alles setzt voraus, dass die entsprechenden Flow Variablen wie im <a href=\"https:\/\/www.rustimation.eu\/index.php\/1_zugang_api\/\">vorigen Kapitel<\/a> gesetzt wurden.<\/p>\n<p style=\"padding-left: 40px;\"><span style=\"color: #808080;\">In diesem Beispiel sind alle Viessmann Komponenten auf einem Node-Red Tab versammelt; daher werden weitgehend Flow Variable verwendet. F\u00fcr den Fall, dass die Logik auf mehrere Flows verteilt ist, sind ensprechend Global Variablen zu verwenden.<\/span><\/p>\n<h3>Feature \u00dcberblick<\/h3>\n<p>Die Feature Abfrage liefert dir auf einen Schlag alle Parameter, welche deine Anlage bei dem von dir gebuchten Paket zur Verf\u00fcgung stellt. Die \u00fcbermittelte Liste (ein gro\u00dfes JSON Objekt) ist f\u00fcr jede Installation unterschiedlich. Sie ist hilfreich, um sich die Parameter herauszusuchen, die einen interessieren. Die <a href=\"https:\/\/documentation.viessmann.com\/static\/iot\/data-points\" target=\"_blank\" rel=\"noopener\">Datenpunkte sind im Developer Bereich von Viessmann<\/a> erkl\u00e4rt.<\/p>\n<p>Die Abfrage erfolgt wie folgt:<\/p>\n<p><a href=\"https:\/\/www.rustimation.eu\/index.php\/vicare-daten-abfragen\/cacicala_2-1636386292923\/\" rel=\"attachment wp-att-1934\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1934\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/CaCicala_2-1636386292923.png\" alt=\"\" width=\"1083\" height=\"70\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/CaCicala_2-1636386292923.png 1083w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/CaCicala_2-1636386292923-300x19.png 300w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/CaCicala_2-1636386292923-1024x66.png 1024w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/CaCicala_2-1636386292923-768x50.png 768w\" sizes=\"auto, (max-width: 1083px) 100vw, 1083px\" \/><\/a><\/p>\n<p>Der http Request sieht so aus:<\/p>\n<p><a href=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/vcs21.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-3603 size-large\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/vcs21-1024x587.png\" alt=\"\" width=\"604\" height=\"346\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/vcs21-1024x587.png 1024w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/vcs21-300x172.png 300w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/vcs21-768x440.png 768w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/vcs21.png 1082w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><\/a><\/p>\n<p>Zur besseren Lesbarkeit noch die URL Zeile als JS Code:<\/p>\n<pre class=\"height-set:true height:40 lang:js decode:true\">https:\/\/api.viessmann-climatesolutions.com\/iot\/v2\/features\/installations\/{{installationID}}\/gateways\/{{gatewaySerial}}\/devices\/{{deviceId}}\/features\/<\/pre>\n<p>Auch diese Zeile muss nicht angepasst werden. Die im Universal Heade Node davor gesetzten Werte stecken in den doppelten geschweiften Klammern (double moustaches).<\/p>\n<p style=\"padding-left: 40px;\"><span style=\"color: #999999;\">Seit Februar 2023 gibt es eine etwas andere API Syntax bei der Feature Abfrage, bzw. einen neuen Endpunkt \"features\", der den bisherigen Endunkt \"equipment\" ersetzt.<br \/>\n<\/span><span style=\"color: #999999;\"><span class=\"lang:js decode:true crayon-inline\">https:\/\/api.viessmann-climatesolutions.com\/iot\/v2\/features\/installations&#8230;<\/span>\u00a0<\/span><span style=\"color: #999999;\">Die Anleitung hier ist auf die neuen Verh\u00e4ltnisse angepasst.<\/span><\/p>\n<p>Nach dem Triggern erscheint &#8211; wenn alles funktioniert wie gew\u00fcnscht &#8211; im Debug Node ein Objekt, das wir durch Anklicken der kleinen Dreiecke analysieren k\u00f6nnen. Unsere Features stecken in der Payload, bei mir sind das immerhin 110 verschiedene Parameter.<\/p>\n<p>Das Debug Fenster erreicht man \u00fcber das Anklicken des K\u00e4fersymbols oben rechts.<\/p>\n<figure id=\"attachment_2098\" aria-describedby=\"caption-attachment-2098\" style=\"width: 374px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2098 size-full\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/debug1.jpg\" alt=\"\" width=\"374\" height=\"771\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/debug1.jpg 374w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/debug1-146x300.jpg 146w\" sizes=\"auto, (max-width: 374px) 100vw, 374px\" \/><figcaption id=\"caption-attachment-2098\" class=\"wp-caption-text\">Achtung: die neue URL lautet viessmann-climatesolutions.com<\/figcaption><\/figure>\n<p>Zum Ansehen eines JSON Objekts gibt es mehrere M\u00f6glichkeiten. Entweder einen Online JSON Viewer, oder mit Firefox indem man das abgespeicherte JSON File l\u00e4dt oder mit Notepad++ und einem JSON Viewer Plugin und sicher noch eine Menge anderer M\u00f6glichkeiten. Einfach den \"Werte kopieren\" Button oben rechts im Debugfenster anklicken und dann in das gew\u00fcnschte Dokument pasten.<\/p>\n<p>Der Vollst\u00e4ndigkeit halber noch der JSON Flow:<\/p>\n<pre class=\"height-set:true height:30 lang:js decode:true\">[{\"id\":\"c7bf0b120ed79afe\",\"type\":\"tab\",\"label\":\"Flow 1\",\"disabled\":false,\"info\":\"\",\"env\":[]},{\"id\":\"52cc82fc16871334\",\"type\":\"inject\",\"z\":\"c7bf0b120ed79afe\",\"name\":\"Trigger\",\"props\":[{\"p\":\"payload\"},{\"p\":\"topic\",\"vt\":\"str\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"onceDelay\":\"2\",\"topic\":\"\",\"payload\":\"\",\"payloadType\":\"date\",\"x\":210,\"y\":80,\"wires\":[[\"67486be1a7671f13\"]]},{\"id\":\"57b1621ab4d7d311\",\"type\":\"http request\",\"z\":\"c7bf0b120ed79afe\",\"name\":\"Read Events\",\"method\":\"GET\",\"ret\":\"obj\",\"paytoqs\":\"ignore\",\"url\":\"https:\/\/api.viessmann-climatesolutions.com\/iot\/v2\/events-history\/installations\/{{installationID}}\/events?gatewaySerial={{gatewaySerial}}\",\"tls\":\"\",\"persist\":false,\"proxy\":\"\",\"insecureHTTPParser\":false,\"authType\":\"\",\"senderr\":false,\"headers\":[],\"x\":570,\"y\":80,\"wires\":[[\"cd6d356cea0a5307\"]]},{\"id\":\"cd6d356cea0a5307\",\"type\":\"debug\",\"z\":\"c7bf0b120ed79afe\",\"name\":\"Feature Array\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"targetType\":\"msg\",\"statusVal\":\"\",\"statusType\":\"auto\",\"x\":780,\"y\":80,\"wires\":[]},{\"id\":\"67486be1a7671f13\",\"type\":\"function\",\"z\":\"c7bf0b120ed79afe\",\"name\":\"Header\",\"func\":\"var atoken = flow.get('accessToken')\\nmsg.headers = {}\\nmsg.headers = {\\n    Authorization: \\\"Bearer \\\" + atoken\\n}\\nmsg.installationID = flow.get('installationID');\\nmsg.gatewaySerial = flow.get('gatewaySerial');\\n\/\/msg.deviceId = flow.get('deviceID');\\n\/\/msg.headers['Content-Type'] = 'application\/json';\\nreturn msg;\\n\\n\",\"outputs\":1,\"noerr\":0,\"initialize\":\"\",\"finalize\":\"\",\"libs\":[],\"x\":380,\"y\":80,\"wires\":[[\"57b1621ab4d7d311\"]]}]<\/pre>\n<h3>Nur wenige Datenpunkte auslesen<\/h3>\n<p>Wie du wahrscheinlich wei\u00dft, gibt es eine Begrenzung von 1440 Zugriffen innerhalb 24 Stunden. Wenn dich nur wenige Datenpunkte interessieren und diese auch nicht all zu oft abfragen willst, dann ist der direkte Featurezugriff \u00fcber die URL am einfachsten.<\/p>\n<p>Probieren wir das einfach mit dem Wert \"Au\u00dfentemperatur\" &#8211; im JSON steht das unter <em>heating.boiler.sensors.temperature.commonSupply<\/em>.<\/p>\n<p><a href=\"https:\/\/www.rustimation.eu\/index.php\/vicare-daten-abfragen\/cacicala_4-1636386292931\/\" rel=\"attachment wp-att-1939\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1939\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/CaCicala_4-1636386292931.png\" alt=\"\" width=\"1102\" height=\"74\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/CaCicala_4-1636386292931.png 1102w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/CaCicala_4-1636386292931-300x20.png 300w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/CaCicala_4-1636386292931-1024x69.png 1024w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/CaCicala_4-1636386292931-768x52.png 768w\" sizes=\"auto, (max-width: 1102px) 100vw, 1102px\" \/><\/a><\/p>\n<p>Die URL Zeile im Read Feature http Request Node sieht wie folgt aus:<\/p>\n<p><span class=\"lang:js decode:true crayon-inline\">https:\/\/api.viessmann-climatesolutions.com\/iot\/v2\/features\/installations\/{{installationID}}\/gateways\/{{gatewaySerial}}\/devices\/{{deviceId}}\/features\/heating.sensors.temperature.outside<\/span><\/p>\n<p>Die API liefert uns ein kleines JSON Objekt, aus dem wir den Datenpunkt ganz leicht extrahieren k\u00f6nnen. Der Extract Value Node sieht so aus:<\/p>\n<pre class=\"lang:js decode:true\">msg.payload=msg.payload.data.properties.value.value; \r\nmsg.topic=\"Common Supply\"; \r\nreturn msg;<\/pre>\n<p>msg.topic ist nicht unbedingt erforderlich, hilft aber, wenn man ein Chart mit mehreren Kurven baut.<\/p>\n<p>Hier der JSON Flow dazu:<\/p>\n<pre class=\"lang:js decode:true\">[{\"id\":\"28aac96cd4c85e2f\",\"type\":\"inject\",\"z\":\"640d4a161fb8fa28\",\"name\":\"\",\"props\":[{\"p\":\"payload\"},{\"p\":\"topic\",\"vt\":\"str\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"onceDelay\":\"5\",\"topic\":\"\",\"payload\":\"true\",\"payloadType\":\"bool\",\"x\":110,\"y\":1600,\"wires\":[[\"8e3997f78f283787\"]]},{\"id\":\"8e3997f78f283787\",\"type\":\"function\",\"z\":\"640d4a161fb8fa28\",\"name\":\"Universal Header\",\"func\":\"let atoken = flow.get('accessToken')\\nmsg.headers = {\\n    Authorization: \\\"Bearer \\\"+ atoken\\n}\\nmsg.installationID = flow.get('installationID');\\nmsg.gatewaySerial = flow.get('gatewaySerial');\\nmsg.deviceId = flow.get('deviceID');\\nreturn msg;\\n\\n\",\"outputs\":1,\"timeout\":\"\",\"noerr\":0,\"initialize\":\"\",\"finalize\":\"\",\"libs\":[],\"x\":290,\"y\":1600,\"wires\":[[\"70ab63bf7d6ee874\"]]},{\"id\":\"70ab63bf7d6ee874\",\"type\":\"http request\",\"z\":\"640d4a161fb8fa28\",\"name\":\"Features auslesen\",\"method\":\"GET\",\"ret\":\"obj\",\"paytoqs\":\"ignore\",\"url\":\"https:\/\/api.viessmann-climatesolutions.com\/iot\/v2\/features\/installations\/{{installationID}}\/gateways\/{{gatewaySerial}}\/devices\/{{deviceId}}\/features\/heating.sensors.temperature.outside\",\"tls\":\"\",\"persist\":false,\"proxy\":\"\",\"insecureHTTPParser\":false,\"authType\":\"\",\"senderr\":false,\"headers\":[],\"x\":530,\"y\":1600,\"wires\":[[\"0ca0940e969244cb\",\"aaa746ddc0a33e00\"]]},{\"id\":\"aaa746ddc0a33e00\",\"type\":\"debug\",\"z\":\"640d4a161fb8fa28\",\"name\":\"debug 13\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"false\",\"statusVal\":\"\",\"statusType\":\"auto\",\"x\":640,\"y\":1460,\"wires\":[]}]<\/pre>\n<p>W\u00fcrdest du diesen Flow jede Minute aufrufen, w\u00e4ren alle 1440 Zugriffe\/Tag\u00a0 verbraucht. In so fern ist das Abfragen weniger einzelner Datenpunkte nur bei geringer Abfragefrequenz sinnvoll.<\/p>\n<p style=\"padding-left: 40px;\"><span style=\"color: #808080;\">\u00dcbrigens: Auch wenn alle Zugriffe verbraucht sind, kannst du immer noch mit der App auf deine Heizung zugreifen.<\/span><\/p>\n<h3>Mehr Datenpunkte \u00f6fter auslesen<\/h3>\n<p>Da der gro\u00dfe \"Feature Request\" von weiter oben ja alle Datenpunkte inklusive deren Werte auf einmal ausliest, k\u00f6nnen wir das Ergebnis dieses Requests relativ leicht in einzelne Werte aufdr\u00f6seln.<\/p>\n<p>Man k\u00f6nnte sich hier einfach an der Position des gesuchten Datenpunkts im Array orientieren. Nehmen wir an, die Au\u00dfentemperatur ist der 65. Wert in der Feature Overview Tabelle, dann k\u00f6nnen wir diesen Wert per Javacript ganz einfach extrahieren:<\/p>\n<pre class=\"lang:js decode:true \">msg.payload=msg.payload.data[65].properties.value.value;<\/pre>\n<p>Das klingt zwar ganz einfach, hat aber Nachteile: Viessmann wird die Reihenfolge beliebig \u00e4ndern, wenn neue Features hinzukommen oder wegfallen. Der Datenpunkt ist also nicht immer an 65. Stelle. Auch wird sich die Position des Datenpunkts von Installation zu Installation unterscheiden.<\/p>\n<p>Um die uns interessierenden Datenpunkte zu extrahieren, m\u00fcssen wir das JSON Feature Objekt nach dem richtigen Namen durchforsten d.h. parsen.<\/p>\n<p>Das geschieht \u00fcber die Javascript <em>findindex<\/em> Methode:<\/p>\n<pre class=\"lang:js decode:true \">var  featureArray=msg.payload.data;\r\nvar idx = featureArray.findIndex( (element) =&gt; element.feature === 'heating.sensors.temperature.outside');\r\nmsg.payload=msg.payload.data[idx].properties.value.value;\r\nreturn msg;<\/pre>\n<p><a href=\"https:\/\/www.rustimation.eu\/index.php\/vicare-daten-abfragen\/cacicala_5-1636386292936\/\" rel=\"attachment wp-att-1941\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1941\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/CaCicala_5-1636386292936.png\" alt=\"\" width=\"1251\" height=\"284\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/CaCicala_5-1636386292936.png 1251w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/CaCicala_5-1636386292936-300x68.png 300w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/CaCicala_5-1636386292936-1024x232.png 1024w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/CaCicala_5-1636386292936-768x174.png 768w\" sizes=\"auto, (max-width: 1251px) 100vw, 1251px\" \/><\/a><\/p>\n<p>Auf diese Weise lassen sich quasi beliebig viele Datenpunkte auswerten, ohne das Abrufkontingent zu \u00fcberlasten. Bei meiner Implementation frage ich alle 90 Sekunden nach den Werten. So habe ich immer noch genug Reserve f\u00fcr andere Abfragen oder Einstellungen.<\/p>\n<h3>Visualisieren<\/h3>\n<p>Will man sich lediglich den aktuellen Wert in Textform anzeigen lassen, dann reicht der <em>Dashboard Text Node<\/em> aus.<\/p>\n<p><a href=\"https:\/\/www.rustimation.eu\/index.php\/vicare-daten-abfragen\/2023-01-16-17_02_49-centralina-mozilla-firefox\/\" rel=\"attachment wp-att-1942\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1942\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-16-17_02_49-Centralina-\u2013-Mozilla-Firefox.png\" alt=\"\" width=\"244\" height=\"141\" \/><\/a><\/p>\n<p>Eine h\u00fcbschere Darstellung bekommen wir, wenn wir den <em>Dashboard Gauge Node.<\/em> verwenden. F\u00fcr die Darstellung von Prozentwerten ist das <em>Donut Gauge<\/em> sehr nett anzusehen. F\u00fcllst\u00e4nde mit dem <em>Level Gauge<\/em>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2059\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-23-12_09_21-Centralina-\u2013-Mozilla-Firefox-195x300.png\" alt=\"\" width=\"195\" height=\"300\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-23-12_09_21-Centralina-\u2013-Mozilla-Firefox-195x300.png 195w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-23-12_09_21-Centralina-\u2013-Mozilla-Firefox.png 241w\" sizes=\"auto, (max-width: 195px) 100vw, 195px\" \/> <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2058\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-23-12_03_47-Centralina-\u2013-Mozilla-Firefox-195x300.png\" alt=\"\" width=\"195\" height=\"300\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-23-12_03_47-Centralina-\u2013-Mozilla-Firefox-195x300.png 195w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-23-12_03_47-Centralina-\u2013-Mozilla-Firefox.png 241w\" sizes=\"auto, (max-width: 195px) 100vw, 195px\" \/> <img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2193 size-medium\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/02\/2023-02-06-09_45_08-Centralina-\u2013-Mozilla-Firefox-195x300.png\" alt=\"\" width=\"195\" height=\"300\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/02\/2023-02-06-09_45_08-Centralina-\u2013-Mozilla-Firefox-195x300.png 195w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/02\/2023-02-06-09_45_08-Centralina-\u2013-Mozilla-Firefox.png 266w\" sizes=\"auto, (max-width: 195px) 100vw, 195px\" \/><\/p>\n<p>Schaltzust\u00e4nde z.B. Brenner an\/aus lassen sich ganz einfach durch umfunktionierte <em>Dashboard Switch Nodes<\/em> darstellen.<a href=\"https:\/\/www.rustimation.eu\/index.php\/vicare-daten-abfragen\/2023-01-16-17_10_21-node-red-_-192-168-178-24-mozilla-firefox\/\" rel=\"attachment wp-att-1945\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1945\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-16-17_10_21-Node-RED-_-192.168.178.24-\u2013-Mozilla-Firefox.png\" alt=\"\" width=\"509\" height=\"81\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-16-17_10_21-Node-RED-_-192.168.178.24-\u2013-Mozilla-Firefox.png 509w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-16-17_10_21-Node-RED-_-192.168.178.24-\u2013-Mozilla-Firefox-300x48.png 300w\" sizes=\"auto, (max-width: 509px) 100vw, 509px\" \/><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1946 size-full\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-16-17_10_57-Centralina-\u2013-Mozilla-Firefox.png\" alt=\"\" width=\"123\" height=\"124\" \/><\/a>Hier l\u00e4sst sich auch das Standard Icon gegen eine Reihe anderer, auch animierter Symbole austauschen. Obiges Flammensymbol l\u00e4sst sich einstellen, indem der Switch Mode wie folgt konfiguriert wird:<\/p>\n<p><a href=\"https:\/\/www.rustimation.eu\/index.php\/vicare-daten-abfragen\/2023-01-19-10_36_11-node-red-_-192-168-178-24-mozilla-firefox\/\" rel=\"attachment wp-att-1972\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1972\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-19-10_36_11-Node-RED-_-192.168.178.24-\u2013-Mozilla-Firefox.png\" alt=\"\" width=\"499\" height=\"162\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-19-10_36_11-Node-RED-_-192.168.178.24-\u2013-Mozilla-Firefox.png 499w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-19-10_36_11-Node-RED-_-192.168.178.24-\u2013-Mozilla-Firefox-300x97.png 300w\" sizes=\"auto, (max-width: 499px) 100vw, 499px\" \/><\/a><\/p>\n<p>Mehr \u00fcber die Verwendung von <a href=\"https:\/\/fontawesome.com\/v4\/icons\/\" target=\"_blank\" rel=\"noopener\">Font Awesome<\/a> und Material Design Icons im Kapitel \"<a href=\"https:\/\/www.rustimation.eu\/index.php\/viessmann-api-und-node-red\/\">Node-Red Dashboard Tips &amp; Tricks<\/a>\".<\/p>\n<h3>Liniendiagramme<\/h3>\n<p>Werte im Zeitverlauf kann man sehr sch\u00f6n mit mit dem Dashboard Chart Node darstellen.<\/p>\n<p>Hierzu einfach den Output Node mit dem Chart Node verbinden. Bei <em>Gruppe<\/em> einen entsprechenden \u00dcberbegriff eintragen, ggf. dahinter (Bleistiftsymbol) noch das passende Tab ausw\u00e4hlen. Hier einfach mal ein bisschen spielen&#8230;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2060\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-23-12_23_29-Centralina-\u2013-Mozilla-Firefox-291x300.png\" alt=\"\" width=\"291\" height=\"300\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-23-12_23_29-Centralina-\u2013-Mozilla-Firefox-291x300.png 291w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-23-12_23_29-Centralina-\u2013-Mozilla-Firefox.png 360w\" sizes=\"auto, (max-width: 291px) 100vw, 291px\" \/><\/p>\n<p>Wenn man bei Y-Achse nichts eintr\u00e4gt, passt Node-Red die Achse\u00a0 automatisch an.<\/p>\n<p>Will man mehrere Linien in einem Diagram darstellen, dann sollte jeder Output unbedingt sein eigenes Topic haben. Dieses Topic stellt dann auch die Legende im Chart dar.<\/p>\n<p>Die Farben kann man im Chart Node ausw\u00e4hlen, wobei der zuerst ankommende Wert immer die Farbe oben links bekommt, der zweite die rechts daneben, der vierte den linken Farbwert der zweiten Zeile und so fort. Ich habe bislang keine M\u00f6glichkeit gefunden, die Farbe direkt festzulegen.<\/p>\n<p>Ich behelfe mir hierbei mit dem<em> Delay Node<\/em>, der sicherstellt, dass bei nahezu gleichzeitig eintreffenden Werten, der erste direkt durchgelassen, der zweite etwas, der dritte mehr und der vierte Wert lange verz\u00f6gert wird. <img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2061 size-full\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/Schichten_solar-e1674474261673.jpg\" alt=\"\" width=\"815\" height=\"502\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/Schichten_solar-e1674474261673.jpg 815w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/Schichten_solar-e1674474261673-300x185.jpg 300w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/Schichten_solar-e1674474261673-768x473.jpg 768w\" sizes=\"auto, (max-width: 815px) 100vw, 815px\" \/><\/p>\n<p>Die Dauer der Aufzeichnung kann ebenfalls im Charte Node Eigenschaftsfenster unter X-Achse festgelegt werden. \u00c4ltere Werte fallen dann hinten runter und werden nicht gespeichert. Ebenso vergisst Node-Red alle Werte, wenn es neu gestartet wird.<\/p>\n<p>Will man das verhindern, m\u00fcssen die Werte phyikalisch weggeschrieben werden. Am besten in eine Datenbank, wobei sich hier die InfluxDB anbietet, welche f\u00fcr genau diesen Zweck geschaffen wurde. Hierf\u00fcr gibt es bei Node-Red bereits entsprechende Schreibe- und Lesenodes. Leider ist das Auslesen und Darstellen in Node-Red etwas kompiziert, aber das erkl\u00e4re ich in im Kapitel \u00fcber die\u00a0<a href=\"https:\/\/www.rustimation.eu\/index.php\/viessmann-api-und-node-red-teil-6b\/\">Influx DB<\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Abfragen der Heizungsparameter von Viessmann Heizungen mit Hilfe von Node-Red. Kurzer Ausblick auf die Visualisierungsm\u00f6glichkeiten mit dem Node-Red Dashboard.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[53,151,159],"tags":[169,170],"class_list":["post-1858","post","type-post","status-publish","format-standard","hentry","category-iot","category-node-red","category-viessmann-api","tag-daten-abfragen","tag-visualisieren"],"_links":{"self":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/1858","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/comments?post=1858"}],"version-history":[{"count":1,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/1858\/revisions"}],"predecessor-version":[{"id":3634,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/1858\/revisions\/3634"}],"wp:attachment":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/media?parent=1858"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/categories?post=1858"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/tags?post=1858"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}