{"id":1864,"date":"2023-01-22T13:57:26","date_gmt":"2023-01-22T12:57:26","guid":{"rendered":"https:\/\/www.rustimation.eu\/?p=1864"},"modified":"2025-07-13T17:08:21","modified_gmt":"2025-07-13T15:08:21","slug":"viessmann-api-und-node-red","status":"publish","type":"post","link":"https:\/\/www.rustimation.eu\/index.php\/viessmann-api-und-node-red\/","title":{"rendered":"Viessmann API und Node-Red &#8211; Teil 5 &#8211; Dashboard Tipps"},"content":{"rendered":"<p>Der nachfolgende Beitrag besch\u00e4ftigt sich mit dem original Dashboard 1.0 von Node- Red. Das Dashboard 2.0 kann sicher noch einiges mehr, ich habe mich aber noch nicht ausf\u00fchrlich damit besch\u00e4ftigt.<\/p>\n<p>Das Node-Red Dashboard 1.0 hat von Haus aus einige nette grafische Elemente zum Visualisieren und Manipulieren von Werten, die auf unterschiedlichste Weise generiert und eingesammelt wurden. Manchmal h\u00e4tte man aber gerne etwas mehr:<\/p>\n<p><!--more--><\/p>\n<h2>Statusanzeige mit Switches<\/h2>\n<p>Nehmen wir an, wir m\u00f6chten auf ansprechende Weise den Betriebszustand einer Pumpe anzeigen.<\/p>\n<p>Hierzu eignet sich das Dashboard Switch Icon<a href=\"https:\/\/www.rustimation.eu\/index.php\/viessmann-api-und-node-red\/switch1\/\" rel=\"attachment wp-att-2025\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-2025 aligncenter\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/switch1-300x64.png\" alt=\"\" width=\"300\" height=\"64\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/switch1-300x64.png 300w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/switch1.png 422w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>Nun sieht dieses Icon f\u00fcr die Darstellung und Schaltung eines Ein\/Aus Schalters ganz h\u00fcbsch aus, f\u00fcr die Darstellung einer Pumpe ist eher weniger passend. Netterweise k\u00f6nnen wir das Property <em>Icon<\/em> auch \u00e4ndern und zus\u00e4tzlich ein paar Einstellungen vornehmen, die aus dem Schalter eine Statusanzeige machen:<\/p>\n<h3>Icon \u00e4ndern<\/h3>\n<p>Zum Beispiel in dieses Icon hier:<\/p>\n<p><a href=\"https:\/\/www.rustimation.eu\/index.php\/viessmann-api-und-node-red\/switch2\/\" rel=\"attachment wp-att-2026\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2026 aligncenter\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/switch2-e1674385547251.png\" alt=\"\" width=\"223\" height=\"114\" \/><\/a>Schauen wir uns mal das Eigenschaftsfenster des Switches an:<\/p>\n<p><a href=\"https:\/\/www.rustimation.eu\/index.php\/viessmann-api-und-node-red\/button_config\/\" rel=\"attachment wp-att-2027\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2027 size-full\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/Button_Config.png\" alt=\"\" width=\"565\" height=\"933\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/Button_Config.png 565w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/Button_Config-182x300.png 182w\" sizes=\"auto, (max-width: 565px) 100vw, 565px\" \/><\/a><\/p>\n<h4>Font Awesome<\/h4>\n<p>Bei <em>Icon<\/em> w\u00e4hlen wir anstatt <em>Default<\/em> jetzt <em>Custom.<\/em> Es erscheinen nun weitere Eingabefelder zur Eingabe des On- und des Off-Icons. Hier verwenden wir eine der von Node-Red akzeptierten Icon Bibliotheken namens <a href=\"https:\/\/fontawesome.com\/search\" target=\"_blank\" rel=\"noopener\">Font Awesome<\/a> oder <a href=\"https:\/\/materialdesignicons.com\/\" target=\"_blank\" rel=\"noopener\">Material Design<\/a>. Ich fokussiere nachfolgend auf Font Awesome [FA]. Hierbei ist es wichtig zu wissen, dass Node-Red zumindest in der von mir verwendeten Version 3.0.2, nur FA Icons der Version 4.7 verwenden kann. Icons, welche mit FA Version 5 und 6 hinzu gekommen sind, werden (noch) nicht angezeigt und resultieren in einem Fragezeichen Icon.<\/p>\n<p>Tragen wir nun bei der Zeile <em>On Icon\u00a0<\/em> den Inhalt <span class=\"lang:js decode:true crayon-inline \">fa-refresh<\/span>\u00a0 ein, bekommen wir den oben angezeigten Kreiselpfeil in kleiner Version. Tr\u00e4gt man <span class=\"lang:js decode:true crayon-inline\">fa-3x fa-refresh<\/span>\u00a0 ein, wird das Icon gr\u00f6\u00dfer &#8211; bis maximal 4x. Bei\u00a0 <span class=\"lang:js decode:true crayon-inline\">fa-3x fa-refresh fa-spin<\/span>\u00a0 dreht sich der Kreiselpfeil. Die Farbe daneben k\u00f6nnen wir z.B. auf <em>red <\/em>einstellen.<\/p>\n<p>F\u00fcr das Off Icon verwende ich gerne <span class=\"lang:js decode:true crayon-inline \">fa-power-off<\/span> .<\/p>\n<p>Wollen wir nur etwas anzeigen und nichts schalten, dann ist dieser Switch wie oben dagestellt eine Endstation. Deshalb bei<em> Pass through <code>msg<\/code> if payload matches valid state<\/em> den Haken wegnehmen und <em>Switch icon shows state of the input <\/em>ausw\u00e4hlen.<\/p>\n<p>Hier noch das JSON File f\u00fcr das obige Beispiel:<\/p>\n<pre class=\"height:15 lang:js decode:true \">[{\"id\":\"677322311996ab19\",\"type\":\"inject\",\"z\":\"090ac94c9cd39a60\",\"name\":\"\",\"props\":[{\"p\":\"payload\"},{\"p\":\"topic\",\"vt\":\"str\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"onceDelay\":0.1,\"topic\":\"\",\"payload\":\"on\",\"payloadType\":\"str\",\"x\":270,\"y\":340,\"wires\":[[\"c5743555eafb6897\",\"e81ea30d1a988b05\"]]},{\"id\":\"6f55d8a98b2f1717\",\"type\":\"inject\",\"z\":\"090ac94c9cd39a60\",\"name\":\"\",\"props\":[{\"p\":\"payload\"},{\"p\":\"topic\",\"vt\":\"str\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"onceDelay\":0.1,\"topic\":\"\",\"payload\":\"off\",\"payloadType\":\"str\",\"x\":270,\"y\":420,\"wires\":[[\"c5743555eafb6897\",\"e81ea30d1a988b05\"]]},{\"id\":\"c5743555eafb6897\",\"type\":\"ui_switch\",\"z\":\"090ac94c9cd39a60\",\"name\":\"\",\"label\":\"switch\",\"tooltip\":\"\",\"group\":\"85aecc42dc86d012\",\"order\":0,\"width\":0,\"height\":0,\"passthru\":false,\"decouple\":\"true\",\"topic\":\"topic\",\"topicType\":\"msg\",\"style\":\"\",\"onvalue\":\"on\",\"onvalueType\":\"str\",\"onicon\":\"\",\"oncolor\":\"\",\"offvalue\":\"off\",\"offvalueType\":\"str\",\"officon\":\"\",\"offcolor\":\"\",\"animate\":false,\"className\":\"\",\"x\":530,\"y\":340,\"wires\":[[]]},{\"id\":\"e81ea30d1a988b05\",\"type\":\"ui_switch\",\"z\":\"090ac94c9cd39a60\",\"name\":\"Pumpe\",\"label\":\"Pumpe\",\"tooltip\":\"\",\"group\":\"85aecc42dc86d012\",\"order\":20,\"width\":2,\"height\":2,\"passthru\":false,\"decouple\":\"true\",\"topic\":\"Pumpe\",\"topicType\":\"str\",\"style\":\"\",\"onvalue\":\"on\",\"onvalueType\":\"str\",\"onicon\":\"fa-3x fa-refresh fa-spin\",\"oncolor\":\"red\",\"offvalue\":\"off\",\"offvalueType\":\"str\",\"officon\":\"fa-3x fa-power-off\",\"offcolor\":\"white\",\"animate\":false,\"className\":\"\",\"x\":540,\"y\":420,\"wires\":[[]]},{\"id\":\"85aecc42dc86d012\",\"type\":\"ui_group\",\"name\":\"Switches und Buttons\",\"tab\":\"713a8ca9566dabdd\",\"order\":1,\"disp\":true,\"width\":\"6\",\"collapse\":false,\"className\":\"\"},{\"id\":\"713a8ca9566dabdd\",\"type\":\"ui_tab\",\"name\":\"Blog Beispiel\",\"icon\":\"dashboard\",\"disabled\":false,\"hidden\":false}]<\/pre>\n<h2>Statusanzeige mit Buttons<\/h2>\n<p>Der Button (Taste oder Momentschalter) ist normalerweise ein Rechteck. Stattdessen k\u00f6nnen wir wie oben gezeigt mit FA ein Icon darstellen. Zum Beispiel so: <span class=\"lang:js decode:true crayon-inline \">fa-2x fa-check-square-o <\/span>\u00a0 bzw. so:<\/p>\n<p><a href=\"https:\/\/www.rustimation.eu\/index.php\/viessmann-api-und-node-red\/2023-01-22-13_22_36-centralina-mozilla-firefox\/\" rel=\"attachment wp-att-2033\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2033 size-full\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-22-13_22_36-Centralina-\u2013-Mozilla-Firefox.png\" alt=\"\" width=\"61\" height=\"65\" \/><\/a><\/p>\n<p>\u00dcber das <em>Farbe<\/em> (colour) Property k\u00f6nne wir die Farbe \u00e4ndern, das geht z.B. im Klartext wie red, blue, black, yellow oder mittels hex Code der Farbe z.B. #983400.<\/p>\n<p>Will man einen Standard Button (Rechteck) einf\u00e4rben, geschieht das \u00fcber das <em>Hintergrund<\/em> Property. Diese Eigenschaft kann man dann auch verwenden, um z.B. Temperaturen anzuzeigen, d.h. die Farbe \u00e4ndert sich von blau (=kalt) zu orange (=warm) zu rot (=hei\u00df), was f\u00fcr die Darstellung von Wassertemperaturen oder \u00e4hnlichem n\u00fctzlich ist. Ich verwende einen Stapel von 10 funktionslosen Anzeigebuttons dazu, die Temperaturschichtung meines Pufferspeichers dazustellen:\u00a0 Farbskala 1 verwendet hex Farbwerte, die ich aus einem Farbkreis rauskopiert habe, die alternative Farbskala 2 verwendet Farbnamen im Klartext.<\/p>\n<p><a href=\"https:\/\/www.rustimation.eu\/index.php\/viessmann-api-und-node-red\/2023-01-22-13_30_33-centralina-mozilla-firefox\/\" rel=\"attachment wp-att-2034\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2034 size-full\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-22-13_30_33-Centralina-\u2013-Mozilla-Firefox.png\" alt=\"\" width=\"743\" height=\"821\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-22-13_30_33-Centralina-\u2013-Mozilla-Firefox.png 743w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-22-13_30_33-Centralina-\u2013-Mozilla-Firefox-271x300.png 271w\" sizes=\"auto, (max-width: 743px) 100vw, 743px\" \/><\/a><\/p>\n<p>Gesetzt werden die Farben \u00fcber einen Function Node.<\/p>\n<p><a href=\"https:\/\/www.rustimation.eu\/index.php\/viessmann-api-und-node-red\/2023-01-22-13_34_03-node-red-_-192-168-178-24-mozilla-firefox\/\" rel=\"attachment wp-att-2035\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2035\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-22-13_34_03-Node-RED-_-192.168.178.24-\u2013-Mozilla-Firefox.png\" alt=\"\" width=\"712\" height=\"829\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-22-13_34_03-Node-RED-_-192.168.178.24-\u2013-Mozilla-Firefox.png 712w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-22-13_34_03-Node-RED-_-192.168.178.24-\u2013-Mozilla-Firefox-258x300.png 258w\" sizes=\"auto, (max-width: 712px) 100vw, 712px\" \/><\/a><\/p>\n<p>und der \"Button\" wird wie folgt eingestellt:<\/p>\n<p><a href=\"https:\/\/www.rustimation.eu\/index.php\/viessmann-api-und-node-red\/2023-01-22-13_35_23-node-red-_-192-168-178-24-mozilla-firefox\/\" rel=\"attachment wp-att-2036\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2036\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-22-13_35_23-Node-RED-_-192.168.178.24-\u2013-Mozilla-Firefox.png\" alt=\"\" width=\"559\" height=\"808\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-22-13_35_23-Node-RED-_-192.168.178.24-\u2013-Mozilla-Firefox.png 559w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/2023-01-22-13_35_23-Node-RED-_-192.168.178.24-\u2013-Mozilla-Firefox-208x300.png 208w\" sizes=\"auto, (max-width: 559px) 100vw, 559px\" \/><\/a><\/p>\n<p>Mein Pufferspeicher hat insgesamt 4 Sensoren (unten mit Temperatur in \u00b0C und \"(S)\" dargestellt), aus denen ich die Zwischenwerte zwischen den einzelnen konkreten Messpunkten ausrechne. Entspricht vielleicht nicht zu 100% den physikalische Gegebenheiten, sieht aber h\u00fcbsch aus und zeigt auf einen Blick, wieviel hei\u00dfes Wasser ich noch zur Verf\u00fcgung habe. Zus\u00e4tzlich sehe ich noch, mit welcher Temperatur der Puffer geladen wird. In der untersten Zeile die R\u00fccklauftemperatur bis zur R\u00fccklaufanhebung und der dann beim Kamin ankommende angehobene R\u00fccklauf.<\/p>\n<p style=\"padding-left: 40px;\"><span style=\"color: #333333;\"><span style=\"color: #808080;\"><strong>Aufgemerkt<\/strong>: die Puffer-Messwerte kommen nicht aus der API sondern von eigenst\u00e4ndigen Messf\u00fchlern (DS18B20) welche mit Pin 7 (bzw. GPIO #4)\u00a0 meines <a href=\"https:\/\/tutorials-raspberrypi.com\/raspberry-pi-temperature-sensor-1wire-ds18b20\/\" target=\"_blank\" rel=\"noopener\">Raspberry Pi verdrahtet<\/a> sind und \u00fcber den entsprechenden Node-Red Node \"Sensor-ds18b20\" ausgelesen werden. Ich empfehle zum Abgreifen von Temperaturen an Rohrleitungen \"Anlegef\u00fchler\" zur besseren W\u00e4rme\u00fcbertragung zu verwenden. Gibts z.B. bei <a href=\"https:\/\/sensorshop24.de\" target=\"_blank\" rel=\"noopener\">sensorshop24.de\u00a0<\/a><br \/>\nLeider liefert meine API au\u00dfer WW Temperatur (oben) und WW Solar (unten) keine Werte f\u00fcr den Pufferspeicher obwohl im Puffer vier Viessmann Sensoren gesteckt sind. Ich habe deshalb in die vier vorhandenen Bohrungen des Puffers nochmal je einen DS18B20 gesteckt. Funktioniert astrein mit nur leichten Unterschieden im Messergebnis.<br \/>\n<\/span><\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2055 size-full aligncenter\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/Pufferschichten.jpg\" alt=\"\" width=\"396\" height=\"852\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/Pufferschichten.jpg 396w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2023\/01\/Pufferschichten-139x300.jpg 139w\" sizes=\"auto, (max-width: 396px) 100vw, 396px\" \/><\/p>\n<p>Viele von den hier gezeigten Methoden k\u00f6nnte man auch \u00fcber CSS Funktionen realisieren. Html und alles was dazu geh\u00f6rt, liegt mir aber nicht besonders, weshalb ich lieber den \"straight forward\" Weg gehe und die Attribute direkt in die daf\u00fcr vorgesehenen Felder eintrage.<\/p>\n<p>Trotzdem hier noch ein Link zum Einstieg mit CSS in Node-Red (englisch): <a href=\"https:\/\/discourse.nodered.org\/t\/customize-dashboard-css\/23139\" target=\"_blank\" rel=\"noopener\">Link<\/a><\/p>\n<h2>Images und Animationen<\/h2>\n<p>Neben der oben gezeigten M\u00f6glichkeit, bestimmte Icons zu animieren, kann man sein Dashboard auch mit Bildern (Images) aufh\u00fcbschen, die ggf. auch noch animiert sind.<\/p>\n<p>Zum einen gibt es daf\u00fcr den <strong>Template Node<\/strong>, was uns wieder mit html und CSS konfrontiert aber sehr leistungsf\u00e4hig ist. Infos hierzu <a href=\"https:\/\/discourse.nodered.org\/t\/how-to-display-an-image-on-node-red-dashboard-using-template-node\/24734\/5\" target=\"_blank\" rel=\"noopener\">gibt es hier<\/a>.<\/p>\n<p>Viel einfacher geht das mit dem <a href=\"https:\/\/flows.nodered.org\/node\/node-red-contrib-ui-media\" target=\"_blank\" rel=\"noopener\"><em>ui-media<\/em><\/a> Node, den man \u00fcber die Palettenverwaltung nachinstallieren kann.<\/p>\n<p>So kann man auch Signale oder Energiefl\u00fcsse animiert darstellen. Zum Beispiel die Energie, die aus den Solarpanels kommt, visuell mit dem Verbrauch und der Einspeisung verkn\u00fcpfen. Oder den Energiefluss von und zur W\u00e4rmepumpe und innerhalb des Hauses etc.<\/p>\n<p>Je komplexer, dsto mehr Gefrickel ist zwar n\u00f6tig, aber das Ergebnis ist nicht schlecht &#8211; wenn auch nicht mit professionellen Dashboards vergleichbar. Ich habe so etwas f\u00fcr <a href=\"https:\/\/www.rustimation.eu\/index.php\/solar-node-red-energiefluss-dashboard\/\" target=\"_blank\" rel=\"noopener\">meine Solaranlage gebaut<\/a>.<\/p>\n<p><a href=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2025\/01\/2025-01-08-11_11_05-Centralina-\u2013-Mozilla-Firefox.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-3262 size-medium\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2025\/01\/2025-01-08-11_11_05-Centralina-\u2013-Mozilla-Firefox-300x282.png\" alt=\"\" width=\"300\" height=\"282\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2025\/01\/2025-01-08-11_11_05-Centralina-\u2013-Mozilla-Firefox-300x282.png 300w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2025\/01\/2025-01-08-11_11_05-Centralina-\u2013-Mozilla-Firefox-768x721.png 768w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2025\/01\/2025-01-08-11_11_05-Centralina-\u2013-Mozilla-Firefox.png 800w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Standard Icons des Node-Red Dashboards sind relativ langweilig. Hier wird gezeigt, wie man mit wenig Aufwand ansprechende Dashboards erzeugen kann.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,53,4,151,159],"tags":[172,173,174],"class_list":["post-1864","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-iot","category-json","category-node-red","category-viessmann-api","tag-node-red-dashboard","tag-tips-und-tricks","tag-viessmann-api"],"_links":{"self":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/1864","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=1864"}],"version-history":[{"count":1,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/1864\/revisions"}],"predecessor-version":[{"id":3608,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/1864\/revisions\/3608"}],"wp:attachment":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/media?parent=1864"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/categories?post=1864"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/tags?post=1864"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}