Node Red dashboard for inspiration

My current physical installation is not ready yet for photo shoot - In the meantime I share some Node-Red Dashboard for inspiration. This installation is in an off-grid Norwegian cabin.

This first “page” is my simple overview displaying data from multiple sources.

  • Cerbo GX
  • VRM
  • Fibaro HC2 (smart house)
  • Telldus (older smart house)

Text is mainly in Norwegian. Left side displays the electric part, middle the weather, and the right displays temp and water and LPG tanks

The really nice thing about Node-Red is it’s ability to combine data from multiple sources and also control them. I use this to control lights, electric heating as well as diesel heaters.

My temperature gages:

I use Node-Red to compute available excess energy and to harvest automatically by controlling multiple electric heaters.

7 Likes

Hello,

so many gaugesssssss !!!
Witch palette of nodes are you using ?

I can get this kind of results :

But the one you are using are nice !

Xavier

I picked up the code from a forum discussing improvement to the regular Dashboard 2.0 dials.

I use the template node and add this code:*

image

Hmm - how can I share code here?

Code:

{{label}}
{{item.n}} {{measurement}} {{unit}} {{formattedValue}} {{formattedUpdate}}
.hn-sng { position: relative; user-select: none; } .hn-sng .label { position: absolute; font-size: 1rem; color: currentColor; text-align: center; width: 100%; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .hn-sng .value { fill: currentColor; font-weigth: 600; } .hn-sng .unit { fill: currentColor; font-size: 0.4rem; } .hn-sng .measurement { fill: currentColor; font-size: 0.5rem; } .hn-sng .update { fill: currentColor; fill-opacity: 0.6; font-size: 0.35rem; } .hn-sng .num { transform-origin: center 64.15%; transform: translate(50%, 64.15%); fill: currentColor; fill-opacity: 0.6; font-size: .35rem; } .hn-sng .tick-minor { stroke-dashoffset: 0; fill: none; stroke: currentColor; stroke-opacity: 0.6; } .hn-sng .tick-major { stroke-dashoffset: 0.75; fill: none; stroke: currentColor; } .hn-sng .sector { fill: none; stroke: transparent; } .hn-sng .sector:first-of-type { stroke-dashoffset:-0.5; } .hn-sng .o-needle { transform-origin: center 64.15%; transform: translate(50%, 64.15%); transition: unset; } .hn-sng .o-needle path, .hn-sng .o-needle circle { fill: currentColor; }

you can copy/export the node by the clipboard feature.

I’ve tried to cpy paste the one you put but not working…

I do not try to paste inside the Template …

Xavier

here one of mine…

selecting the node and using “export” , “JSON”

image

[{“id”:“e57bd671366b64f4”,“type”:“ui_template”,“z”:“8e0984ef0bb8ae94”,“group”:“48316b9935085faf”,“name”:“Temp. Fridge”,“order”:3,“width”:4,“height”:1,“format”:“

\n \n .perso{font-size:15px; color:#eeeeee; vertical-align: }\n .icon{width:35px; height:35px; fill:#eeeeee; vertical-Align:middle; overflow:visible; color:#eeeeee; }\n .iconthermo{width:35px; height:35px; fill:#eeeeee; vertical-Align:middle; overflow:visible; color:#eeeeee; }\n .temp{color:#eeeeee; position: relative; right: 2px}\n .iconcolor{fill:#eeeeee}\n .defaultTemp{font-size:17px; color:#eeeeee; vertical-align:middle;}\n /* with="23px" height="23px" style="fill:#eeeeee" */\n \n\n <text class="defaultTemp" ng-bind-html="msg.icon">\n <svg viewBox="0 0 19 29" xmlns="http://www.w3.org/2000/svg\” class="iconthermo" style="fill:#eeeeee">\n <path d="M7 0a4 4 0 014 4v11.254a7 7 0 11-8 0V4a4 4 0 014-4zm2.855 16.895L9 16.298V4a2 2 0 10-4 0v12.298l-.856.597a5 5 0 105.712 0z" style="fill:#eeeeee">\n <path d="M16 4a1 1 0 010 2h-2a1 1 0 110-2h2zM17 9a1 1 0 00-1-1h-2a1 1 0 100 2h2a1 1 0 001-1zM16 12a1 1 0 010 2h-2a1 1 0 110-2h2z" style="fill:#eeeeee">\n \n <text class="perso" ng-bind-html="msg.payload">\n <i class="fa fa-battery-charging fa-3x" style="color: black; position: relative; right: 2px">\n
\n\n",“storeOutMessages”:true,“fwdInMessages”:true,“resendOnRefresh”:true,“templateScope”:“local”,“className”:“fas”,“x”:810,“y”:280,“wires”:[]},{“id”:“48316b9935085faf”,“type”:“ui_group”,“name”:“Group 2”,“tab”:“40c26c303599e50d”,“order”:3,“disp”:true,“width”:7,“collapse”:false,“className”:“”},{“id”:“40c26c303599e50d”,“type”:“ui_tab”,“name”:“Roots CCPL”,“icon”:“fa-truck”,“order”:1,“disabled”:false,“hidden”:false}]

I’ll try again

[
{
“id”: “8e967a5a173eac0c”,
“type”: “ui-template”,
“z”: “150d8aa36daea093”,
“group”: “f063204ef1289231”,
“page”: “”,
“ui”: “”,
“name”: “48v SOC”,
“order”: 1,
“width”: 0,
“height”: 0,
“head”: “”,
“format”: “\n\n <div class="hn-sng">\n <div class="label">{{label}}\n <svg ref="hn-gauge" width="100%" height="100%" viewBox="0 0 100 100">\n \n <path v-for="(item, index) in sectors" :key="index" :ref="‘sector-’ + index" class="sector"\n stroke-width="5" d="M 10 90 A 47.5 47.5 25 1 1 90 90">\n \n \n <path class="tick-minor" :style="{‘stroke-dasharray’:minor }" pathLength="492" stroke-width="5" d="M 10 90 A 47.5 47.5 25 1 1 90 90" >\n <path ref="arc" class="tick-major" :style="{‘stroke-dasharray’:major }" pathLength="246" stroke-width="5" d="M 10 90 A 47.5 47.5 25 1 1 90 90">\n \n \n <text v-for="(item, index) in numbers" :key="index" class="num" text-anchor="middle" y="-37"\n :style="rotate: ${item.r}deg;">{{item.n}}\n \n \n <text class="measurement" y="48" x="50%" text-anchor="middle">{{measurement}}\n <text class="unit" y="75" x="50%" text-anchor="middle">{{unit}}\n <text class="value" y="90" x="50%" text-anchor="middle">{{formattedValue}}\n <text v-if="showUpdate" ref="update" class="update" y="100" x="0"\n text-anchor="left">{{formattedUpdate}}\n \n <g ref="o-needle" class="o-needle">\n <path d="M 0,0 -1.5,0 -0.25,-43 0.25,-43 1.5,0 z">\n <circle cx="0" cy="0" r="3">\n \n \n \n\n\n\n\n .hn-sng {\n position: relative;\n user-select: none;\n }\n\n .hn-sng .label {\n position: absolute;\n font-size: 1rem;\n color: currentColor;\n text-align: center;\n width: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .hn-sng .value {\n fill: currentColor;\n font-weigth: 600;\n }\n\n .hn-sng .unit {\n fill: currentColor;\n font-size: 0.4rem;\n }\n\n .hn-sng .measurement {\n fill: currentColor;\n font-size: 0.5rem;\n }\n\n .hn-sng .update {\n fill: currentColor;\n fill-opacity: 0.6;\n font-size: 0.35rem;\n }\n\n .hn-sng .num {\n transform-origin: center 64.15%;\n transform: translate(50%, 64.15%);\n fill: currentColor;\n fill-opacity: 0.6;\n font-size: .35rem;\n }\n\n .hn-sng .tick-minor { \n stroke-dashoffset: 0;\n fill: none;\n stroke: currentColor;\n stroke-opacity: 0.6;\n }\n\n .hn-sng .tick-major {\n stroke-dashoffset: 0.75;\n fill: none;\n stroke: currentColor;\n }\n\n .hn-sng .sector {\n fill: none;\n stroke: transparent;\n }\n .hn-sng .sector:first-of-type {\n stroke-dashoffset:-0.5;\n }\n\n .hn-sng .o-needle {\n transform-origin: center 64.15%;\n transform: translate(50%, 64.15%);\n transition: unset;\n }\n\n .hn-sng .o-needle path,\n .hn-sng .o-needle circle {\n fill: currentColor;\n }\n”,
“storeOutMessages”: true,
“passthru”: true,
“resendOnRefresh”: true,
“templateScope”: “local”,
“className”: “”,
“x”: 720,
“y”: 760,
“wires”: [

]
},
{
“id”: “f063204ef1289231”,
“type”: “ui-group”,
“name”: “DC 48v”,
“page”: “5d236aa2f0e21ec2”,
“width”: “2”,
“height”: “1”,
“order”: 2,
“showTitle”: true,
“className”: “”,
“visible”: “false”,
“disabled”: “false”
},
{
“id”: “5d236aa2f0e21ec2”,
“type”: “ui-page”,
“name”: “Teknisk”,
“ui”: “36b624c04356977e”,
“path”: “/page1”,
“icon”: “home”,
“layout”: “grid”,
“theme”: “b68539bfb39f3512”,
“order”: 2,
“className”: “”,
“visible”: “true”,
“disabled”: “false”
},
{
“id”: “36b624c04356977e”,
“type”: “ui-base”,
“name”: “Wigwam3”,
“path”: “/dashboard”,
“includeClientData”: true,
“acceptsClientConfig”: [
“ui-notification”,
“ui-control”
],
“showPathInSidebar”: false,
“navigationStyle”: “default”
},
{
“id”: “b68539bfb39f3512”,
“type”: “ui-theme”,
“name”: “Wigwam theme”,
“colors”: {
“surface”: “#1b6407”,
“primary”: “#0ba847”,
“bgPage”: “#f4f5f5”,
“groupBg”: “#d8e9da”,
“groupOutline”: “#73aa64
},
“sizes”: {
“pagePadding”: “8px”,
“groupGap”: “3px”,
“groupBorderRadius”: “20px”,
“widgetGap”: “2px”
}
}
]

Hin

OK, I’m close to get something !

Some conversion font trouble pasting it with a computer set in French !

working on it …

1 Like

Still this error…

OK, Fond, you areusing UI Dashboard 2.0 …

I’m still with the standard one… Work in progress

Ah - Yes I am - sorry for not telling