Esp8266 and multiple ds18b20's with mqtt

what do you mean on client pc?
my laptop or the raspberry pi?

Do you already have NR and mosquitto mqtt broker installed on your pi ?

mqtt-explorer is a windows app (so laptop) its not needed but can be helpfull to monitor MQTT traffic. So you can see topic names and payloads for fault finding etc,

yes i do.
i get this message in node red whats the best way of splitting this up?

{"sn":{"Time":"2022-04-09T08:10:54","DS18B20-1":{"Id":"3C01D607442F","Temperature":20.9},"DS18B20-2":{"Id":"3C01D607551B","Temperature":21.1},"DS18B20-3":{"Id":"3C01D6075AAA","Temperature":19.3},"DS18B20-4":{"Id":"3C01D607B382","Temperature":80.8},"DS18B20-5":{"Id":"3C01D607ECB7","Temperature":21.2},"DS18B20-6":{"Id":"3C01D607FD9D","Temperature":2.8},"DS18B20-7":{"Id":"3C01F096D7D9","Temperature":-15.1},"TempUnit":"C"},"ver":1}

can you share the flow that gave you that ? is just an mqtt in and debug ?

It depends on what you need to do - eg to show on dashboard you can just reference the correct msg property - eg payload.sn["DS18B20-1"].Temperature

[{"id":"6f1cbaec97840718","type":"inject","z":"32bc1133.9bf706","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"sn\":{\"Time\":\"2022-04-09T08:10:54\",\"DS18B20-1\":{\"Id\":\"3C01D607442F\",\"Temperature\":20.9},\"DS18B20-2\":{\"Id\":\"3C01D607551B\",\"Temperature\":21.1},\"DS18B20-3\":{\"Id\":\"3C01D6075AAA\",\"Temperature\":19.3},\"DS18B20-4\":{\"Id\":\"3C01D607B382\",\"Temperature\":80.8},\"DS18B20-5\":{\"Id\":\"3C01D607ECB7\",\"Temperature\":21.2},\"DS18B20-6\":{\"Id\":\"3C01D607FD9D\",\"Temperature\":2.8},\"DS18B20-7\":{\"Id\":\"3C01F096D7D9\",\"Temperature\":-15.1},\"TempUnit\":\"C\"},\"ver\":1}","payloadType":"json","x":1010,"y":360,"wires":[["a717948f4f972067","0da74e1afe41029c","1876ca87b0be109a","c8bd4f4a1bf7255f"]]},{"id":"a717948f4f972067","type":"ui_gauge","z":"32bc1133.9bf706","name":"","group":"","order":6,"width":0,"height":0,"gtype":"gage","title":"DS18B20-1","label":"units","format":"{{payload.sn[\"DS18B20-1\"].Temperature}}","min":0,"max":"100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","className":"","x":1230,"y":300,"wires":[]},{"id":"0da74e1afe41029c","type":"ui_gauge","z":"32bc1133.9bf706","name":"","group":"","order":6,"width":0,"height":0,"gtype":"gage","title":"DS18B20-2","label":"units","format":"{{payload.sn[\"DS18B20-2\"].Temperature}}","min":0,"max":"100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","className":"","x":1230,"y":340,"wires":[]},{"id":"c8bd4f4a1bf7255f","type":"debug","z":"32bc1133.9bf706","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1210,"y":440,"wires":[]},{"id":"1876ca87b0be109a","type":"ui_gauge","z":"32bc1133.9bf706","name":"","group":"","order":6,"width":0,"height":0,"gtype":"gage","title":"DS18B20-3","label":"units","format":"{{payload.sn[\"DS18B20-3\"].Temperature}}","min":0,"max":"100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","className":"","x":1230,"y":380,"wires":[]}]

Connect this to the MQTT in node and set the tab and group in gauge nodes.....

[{"id":"a83eb32ba827c55d","type":"tab","label":"Flow 2","disabled":false,"info":"","env":[]},{"id":"b656262f.9f4ee8","type":"comment","z":"a83eb32ba827c55d","name":"TmpSen-Checks ----->","info":"","x":1397.0086669921875,"y":317.0017395019531,"wires":[]},{"id":"1a32f115.43a18f","type":"change","z":"a83eb32ba827c55d","name":"Boil Kettle","rules":[{"t":"set","p":"topic","pt":"msg","to":"BoilKettle","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":877.0086669921875,"y":297.0017395019531,"wires":[["c8d06b2e7b02e048"]]},{"id":"1abb841e.5a146c","type":"switch","z":"a83eb32ba827c55d","name":"If = 442F Boil","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"DS18B20-1","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":647.0086669921875,"y":297.0017395019531,"wires":[["1a32f115.43a18f"],["b619ce5b.8681a"]]},{"id":"b619ce5b.8681a","type":"switch","z":"a83eb32ba827c55d","name":"If =551B Wferm","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"3C01D607551B","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":657.0086669921875,"y":337.0017395019531,"wires":[["d0e0c004.6fd2a"],["3e0ebc54.8d7ee4"]]},{"id":"d0e0c004.6fd2a","type":"change","z":"a83eb32ba827c55d","name":"WestFermenter","rules":[{"t":"set","p":"topic","pt":"msg","to":"WestFermenter","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":897.0086669921875,"y":337.0017395019531,"wires":[[]]},{"id":"3e0ebc54.8d7ee4","type":"switch","z":"a83eb32ba827c55d","name":"If = 5AAA CFerm","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"3C01D6075AAA","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":667.0086669921875,"y":377.0017395019531,"wires":[["12701796.dd9258"],["8dc831b7.4b3a5"]]},{"id":"12701796.dd9258","type":"change","z":"a83eb32ba827c55d","name":"Center Fermenter","rules":[{"t":"set","p":"topic","pt":"msg","to":"CenterFermenter","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":907.0086669921875,"y":377.0017395019531,"wires":[[]]},{"id":"8dc831b7.4b3a5","type":"switch","z":"a83eb32ba827c55d","name":"If = B382 HLT","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"3C01D607B382","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":657.0086669921875,"y":417.0017395019531,"wires":[["9c0c8a20.b71128"],["c9cc70a.b54399"]]},{"id":"9c0c8a20.b71128","type":"change","z":"a83eb32ba827c55d","name":"HLT","rules":[{"t":"set","p":"topic","pt":"msg","to":"HLT","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":867.0086669921875,"y":417.0017395019531,"wires":[[]]},{"id":"c9cc70a.b54399","type":"switch","z":"a83eb32ba827c55d","name":"If = ECB7 Mash","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"3C01D607ECB7","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":657.0086669921875,"y":457.0017395019531,"wires":[["9c20d488.d080b8"],["a738605e.324f3"]]},{"id":"9c20d488.d080b8","type":"change","z":"a83eb32ba827c55d","name":"Mash","rules":[{"t":"set","p":"topic","pt":"msg","to":"Mash","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":867.0086669921875,"y":457.0017395019531,"wires":[[]]},{"id":"a738605e.324f3","type":"switch","z":"a83eb32ba827c55d","name":"If = FD9D Eferm","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"3C01D607FD9D","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":657.0086669921875,"y":497.0017395019531,"wires":[["8ccbe599.592bb8"],["1f08a207.0316be"]]},{"id":"8ccbe599.592bb8","type":"change","z":"a83eb32ba827c55d","name":"EastFermenter","rules":[{"t":"set","p":"topic","pt":"msg","to":"EastFermenter","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":897.0086669921875,"y":497.0017395019531,"wires":[[]]},{"id":"1f08a207.0316be","type":"switch","z":"a83eb32ba827c55d","name":"If =D7D9 Glycol","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"3C01F096D7D9","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":657.0086669921875,"y":537.0017395019531,"wires":[["7dd0da09.27a764"],[]]},{"id":"7dd0da09.27a764","type":"change","z":"a83eb32ba827c55d","name":"Glycol","rules":[{"t":"set","p":"topic","pt":"msg","to":"Glycol","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":867.0086669921875,"y":537.0017395019531,"wires":[[]]},{"id":"b63ec7e2eb7e8742","type":"mqtt in","z":"a83eb32ba827c55d","name":"","topic":"tasmota/discovery/483FDA182C52/sensors","qos":"1","datatype":"auto","broker":"8db3fac0.99dd48","nl":false,"rap":false,"inputs":0,"x":343.6666564941406,"y":33.66666793823242,"wires":[["47f9a07e53311609","1abb841e.5a146c"]]},{"id":"47f9a07e53311609","type":"debug","z":"a83eb32ba827c55d","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":755.1335411071777,"y":102.06622505187988,"wires":[]},{"id":"c8d06b2e7b02e048","type":"debug","z":"a83eb32ba827c55d","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1176.1266198566702,"y":177.15858010684744,"wires":[]},{"id":"8db3fac0.99dd48","type":"mqtt-broker","name":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

You should think about giving your esp a topic so if you end up with more than 1 you know whats what.
The discovery topic you are using is meant for home assistant I think.

You should use tele/your_esp_topic/SENSOR
Then go into logging menu and set Telemetry period as you require eg 30 seconds

1 Like

Any luck ?

got to go now may l be around later, keep us posted :wink:

...looks complicated.
Maybe this gives you some more examples on how to handle the different sensors and temperature values:

[{"id":"624963ed82f87a01","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"4f9153320964b9c5","type":"mqtt in","z":"624963ed82f87a01","name":"tasmota-shelly1.2","topic":"tele/shelly1.2/SENSOR","qos":"2","datatype":"json","broker":"1701f33596afcf6b","nl":false,"rap":true,"rh":0,"inputs":0,"x":200,"y":380,"wires":[["3615e5f9d45a16a4"]]},{"id":"f2e416e7958b7ecb","type":"debug","z":"624963ed82f87a01","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1090,"y":380,"wires":[]},{"id":"3615e5f9d45a16a4","type":"split","z":"624963ed82f87a01","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"topic","x":390,"y":380,"wires":[["b880d5419d323126"]]},{"id":"b880d5419d323126","type":"switch","z":"624963ed82f87a01","name":"","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"DS18B20-1","vt":"str"},{"t":"eq","v":"DS18B20-2","vt":"str"},{"t":"eq","v":"DS18B20-3","vt":"str"}],"checkall":"false","repair":false,"outputs":3,"x":550,"y":380,"wires":[["6c0f9619a512733a"],["6c0f9619a512733a"],["6c0f9619a512733a"]]},{"id":"6c0f9619a512733a","type":"change","z":"624963ed82f87a01","name":"set payload to Temperature value","rules":[{"t":"move","p":"payload.Temperature","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":820,"y":380,"wires":[["f2e416e7958b7ecb"]]},{"id":"1701f33596afcf6b","type":"mqtt-broker","name":"mosquitto-1","broker":"192.168.10.22","port":"1883","clientid":"NRofficialv2","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"sessionExpiry":""}]

Ok , i have been reading and watching video's and something isn't clicking in my head
on how to handle the messages.
i have it at least where i have each sensor going out on its on direction.
but i cant get the temp data to work with a guage yet.
i copied the information from the debug node.
please explain what to do with this msg.payload

{"topic":"DS18B20-1","payload":{"Id":"3C01D607442F","Temperature":18.9},"qos":0,"retain":false,"_topic":"Railtemp1/SENSOR","parts":{"id":"0f7b85538a9dc02e","type":"object","key":"DS18B20-1","index":1,"count":9},"_msgid":"9a5c1f02d4c5aa9a"}

In the gauge setting Value format you need to choose the correct msg property.

The message above looks like it comes from a split node ?

The property you are intested in is Temperature contained in the payload object.
The path to that is then payload.Temperature, to put this in the guage you need to type {{payload.Temperature}} into Value format.

...msg.payload is an object structure.
As already pointed out by @Sean-McG you can access its elements by name (msg.payload.Temperature) or have a look in my example, where I used a change node after the switch to move the value directly into the payload.
Use/connect more debug nodes to evaluate the structure of the msg,

so im using a custom guage and i have to convert to F
here is the custom guage

[{"id":"a579f17634aa79e7","type":"ui_template","z":"1f851c1.28701e4","group":"4894865519cc16c4","name":"Hot Liqour Tank","order":5,"width":6,"height":6,"format":"<div id=\"{{'gauge_'+$id}}\" class=\"g-container\" style=\"--gauge-value:0; --container-size:6; --gn-distance:14; --ga-tick-count:22; --ga-subtick-count:220; --g-unit:''°F'\">\n    <div id=\"bgr\" class=\"g-body\">\n        <div class=\"g-ring\">\n            <div class=\"g-rivets\">\n                <div class=g-rivet></div>\n                <div class=g-rivet></div>\n                <div class=g-rivet></div>\n                <div class=g-rivet></div>\n            </div>\n            <div class=\"g-plate\">\n                <div class=\"g-ticks\">\n                    <div class=\"g-tick\" style=\"--ga-tick:1;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:3;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:5;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:7;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:9;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:11;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:13;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:15;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:17;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:19;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:21;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:23;\"></div>\n                </div>\n                <div class=\"g-ticks\">\n                    <div class=\"g-subtick\" style=\"--ga-tick:11;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:31;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:51;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:71;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:91;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:111;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:131;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:151;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:171;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:191;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:211;\"></div>\n                    \n                </div>\n               <div class=\"g-nums\">\n                    <div class=\"g-num\" style=\"--ga-tick:1;\" >0</div>\n                    <div class=\"g-num\" style=\"--ga-tick:3;\">20</div>\n                    <div class=\"g-num\" style=\"--ga-tick:5;\">40</div>\n                    <div class=\"g-num\" style=\"--ga-tick:7;\">60</div>\n                    <div class=\"g-num\" style=\"--ga-tick:9;\">80</div>\n                    <div class=\"g-num\" style=\"--ga-tick:11;\">100</div>\n                    <div class=\"g-num\" style=\"--ga-tick:13;\">120</div>\n                    <div class=\"g-num\" style=\"--ga-tick:15;\">140</div>\n                    <div class=\"g-num\" style=\"--ga-tick:17;\">160</div>\n                    <div class=\"g-num\" style=\"--ga-tick:19;\">180</div>\n                    <div class=\"g-num\" style=\"--ga-tick:21;\">200</div>\n                    <div class=\"g-num\" style=\"--ga-tick:23;\">220</div>\n                    \n                </div>\n                <div class=\"g-label\">HLT </div>\n                <div class=\"g-needle\"></div>\n                <div class=\"g-needle-ring\"></div>\n                <div id=\"{{'gauge_val_'+$id}}\" class=\"g-val\"></div>\n            </div>\n        </div>\n    </div>\n</div>\n<script>\n(function(scope) {\n    let min = 0;\n    let max = 100;\n  scope.$watch('msg', function(msg) {\n    if (msg) {\n      // Do something when msg arrives\n        const v = Math.floor(((msg.payload - min) / (max - min)) * (100 * 0.46));\n        const d = Math.floor(((msg.payload - min) / (max - min)) * 100);\n        document.getElementById('gauge_'+scope.$id).style.setProperty('--gauge-value', v);\n        document.getElementById('gauge_val_'+scope.$id).innerText = d;\n    }\n   \n  });\n})(scope);\n</script>\n","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":true,"templateScope":"local","x":1465.9147262573242,"y":1259.034755706787,"wires":[[]]},{"id":"4894865519cc16c4","type":"ui_group","name":"Hot Liquor Tun","tab":"a74ffe3d.4eb73","order":4,"disp":true,"width":12,"collapse":false},{"id":"a74ffe3d.4eb73","type":"ui_tab","name":"Brewery","icon":"dashboard","order":1,"disabled":false,"hidden":false}]

also needs this one to display properly

[{"id":"1981e1b781103b1a","type":"ui_template","z":"1f851c1.28701e4","group":"f914d5e93fc3ec46","name":"gauge-style","order":1,"width":0,"height":0,"format":"<style id=\"hotNipi-gauge\">\n:root{\n    --needle-color:#001100;\n    --needle-second-color:#ff0000;\n    --red-ticks:9;\n    --sec-high-color:#ff00004f;\n    --sec-normal-color:#00ff004f;\n    --sec-low-color:#0000ff4f;\n    --sec-sub-color:#0000ff8f;\n}\n.g-container {\n    padding-top: 3px;\n    padding-bottom: 3px;\n    width: 100%;\n    height: 100%;\n    position: relative;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    user-select:none;\n}\n    \n.g-body {\n    width: 98%;\n    height: 98%;\n    border-radius: 15%;\n    position: relative;\n    display: flex;\n    align-content: center;\n    align-items: center;\n    justify-content: center;\n    box-shadow: 0px 5px 8px #00000045;\n    background: linear-gradient(0deg, rgba(78,78,78,1) 0%, rgba(215,215,215,1) 99%, rgba(236,236,236,1) 100%);\n}\n\n.g-body::before {    \n    content: \"\";\n    background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc1JyBoZWlnaHQ9JzUnPgogIDxyZWN0IHdpZHRoPSc1JyBoZWlnaHQ9JzUnIGZpbGw9J3doaXRlJy8+CiAgPHBhdGggZD0nTTAgNUw1IDBaTTYgNEw0IDZaTS0xIDFMMSAtMVonIHN0cm9rZT0nIzg4OCcgc3Ryb2tlLXdpZHRoPScxJy8+Cjwvc3ZnPg==\"); \n    background-repeat: repeat;\n    position: absolute;\n    top: 0px;\n    right: 0px;\n    bottom: 0px;\n    left: 0px;\n    opacity: 0.1;\n    border-radius:15%;\n}\n\n.g-sector{\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    top: 50%;\n    left: 50%;\n   \n    transform-origin: 0 0;\n}\n.g-sector-high {\n    background: var(--sec-high-color);\n    transform: rotate(328deg) skew(12deg, 23deg);\n}\n.g-sector-normal {\n    background:var(--sec-normal-color);\n    transform: rotate(328deg) skew(12deg, 23deg);\n}\n.g-sector-low {\n    background:var(--sec-low-color);\n    transform: rotate(328deg) skew(12deg, 23deg);\n}\n.g-sector-sub {\n    background:var(--sec-sub-color);\n    transform: rotate(328deg) skew(12deg, 23deg);\n}\n\n.g-ring {\n    width: 94%;\n    height: 94%;\n    border-radius: 50%;\n    position: relative;\n    display: flex;\n    align-content: center;\n    align-items: center;\n    justify-content: center;\n    background: linear-gradient(180deg, rgba(78,78,78,1) 0%, rgba(215,215,215,1) 99%, rgba(236,236,236,1) 100%);\n}\n.g-plate {\n    overflow: hidden;\n    width: 93%;\n    height: 93%;\n    border-radius: 50%;\n    position: relative;\n    box-shadow: inset 0 0 15px #000000a3;\n    background: radial-gradient(circle, #dd8400 3%, rgb(196 205 209) 1%, rgb(177 183 186) 40%, rgb(191 193 194) 100%);\n}\n.g-plate-bright {\n    overflow:hidden;\n    width: 90%;\n    height: 90%;\n    border-radius: 50%;\n    position: relative;\n    box-shadow: inset 0 0 10px yellow;\n    background: radial-gradient(circle, #ed9400 3%, rgb(255, 255, 255) 1%, rgb(255, 255, 158) 40%, rgb(148, 154, 160) 100%);\n}\n\n\n.g-ticks {\n    position: absolute;\n    top:0;\n    left:0;\n    width: 100%;\n    height: 100%;\n    filter: drop-shadow(2px 4px 6px black);\n}\n.g-tick {\n    transform: rotate(calc(calc(270deg / var(--ga-tick-count)) * var(--ga-tick) - calc(calc(270deg / var(--ga-tick-count)) + 45deg)));\n    background: #000;\n    position: relative;\n    left: 0;\n    top: 50%;\n    width: 100%;\n    height: 1px;\n    margin-bottom: -1px;\n    background: linear-gradient(90deg,rgba(0,0,0,0) 0,rgba(0,0,0,0) 2%,rgb(0 0 0 / 60%) 2%,rgb(0 0 0 / 60%) 10%,rgba(0,0,0,0) 10%);\n}\n.g-subtick {\n    transform: rotate(calc(calc(270deg / var(--ga-subtick-count)) * var(--ga-tick) - calc(calc(270deg / var(--ga-subtick-count)) + 45deg)));\n    background: #000;\n    position: relative;\n    left: 0;\n    top: 50%;\n    width: 100%;\n    height: 1px;\n    margin-bottom: -1px;\n    background: linear-gradient(90deg,rgba(0,0,0,0) 0,rgba(0,0,0,0) 2%,rgb(0 0 0 / 40%) 2%,rgb(0 0 0 / 40%) 6%,rgba(0,0,0,0) 6%);\n}\n\n.g-num {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    text-align: center;\n    transform: translate(-50%, -50%) rotate(calc(calc(270deg / var(--ga-tick-count)) * var(--ga-tick) - calc(calc(270deg /\n    var(--ga-tick-count)) + 45deg))) translate(calc(-1px * var(--container-size) * var(--gn-distance))) rotate(calc(calc(270deg / var(--ga-tick-count)) * var(--ga-tick) *-1 -\n    calc(calc(270deg / var(--ga-tick-count))*-1 - 45deg)));\n}\n\n.g-nums {\n    position: absolute;\n    top: 0;\n    width: 100%;\n    height: 100%;\n    color: #000000a1;\n    font-size: calc(var(--container-size) * 20%);\n    font-weight: 500;\n    filter: drop-shadow(2px 4px 10px black);\n}\n.g-needle {\n    transform: rotate(calc(270deg * calc(var(--gauge-value, 0deg) / 100) - 45deg));\n    transition: transform 1s;\n    background: #000;\n    position: absolute;\n    left: 0;\n    top: 49%;\n    width: 100%;\n    height: 2%;\n    filter:drop-shadow(0px 1px 3px #00000080);\n    background: linear-gradient(90deg,rgba(2,0,36,0) 0,rgba(0,0,0,0) 15%,var(--needle-color) 15%,var(--needle-color) 50%,rgba(0,0,0,0) 50%);\n}\n.g-needle-second {\n    transform: rotate(calc(270deg * calc(var(--gauge-value-second, 0deg) / 100) - 45deg));\n    transition: transform 1s;\n    background: #000;\n    position: absolute;\n    left: 0;\n    top: 49%;\n    width: 100%;\n    height: 2%;\n    filter:drop-shadow(0px 1px 3px #ff000080);  \n    background: linear-gradient(90deg,rgba(2,0,36,0) 0,rgba(0,0,0,0) 15%,var(--needle-second-color) 15%,var(--needle-second-color) 50%,rgba(0,0,0,0) 50%);\n}\n.g-needle-ring {\n    position: absolute;\n    width: calc(var(--container-size) * 1.5%);\n    height: calc(var(--container-size) * 1.5%);\n    top: 50%;\n    left: 50%;\n    background: var(--needle-color);\n    border-radius: 50%;\n    transform: translate(-50%, -50%);\n    box-shadow: 0 1px 4px #0000009c;\n}\n.g-val{\n    position: absolute;\n    text-align: center;\n    left: 50%;\n    bottom: 8%;\n    width: 80px;\n    transform: translateX(-50%);\n    font-family: monospace;\n    font-size:  calc(var(--container-size) * 40%);\n    color: #000000a1;\n    filter: drop-shadow(2px 3px 2px #00000050);\n}\n\n.g-label{\n    position: absolute;\n    text-align: center;\n    left: 50%;\n    top: 58%;\n    width: 100%;\n    transform: translateX(-50%);\n    font-family: monospace;\n    font-size:  calc(var(--container-size) * 18%);\n    color: #000000a1;\n    filter: drop-shadow(2px 3px 2px #00000080);\n}\n.g-label::after{\n    content: var(--g-unit);\n    font-size: clamp(1em,calc(var(--container-size) * 40%),1.5em);\n    position: absolute;\n    left: 0;\n    top: 100%;\n    width: 100%;\n    height: 100%;\n}\n.g-rivets{\n    position: absolute;\n    left:0;\n    top:0;\n    width: 100%;\n    height: 100%;\n}\n\n.g-rivet {\n    position: absolute;\n    width: calc(var(--container-size) * 2px);\n    height: calc(var(--container-size) * 2px);\n    border-radius: 50px;\n    background: linear-gradient(135deg, #adadad 0%,#d3d3d3 51%,#d1d1d1 68%,#8c8c8c 100%);\n    box-shadow: 0px 2px 4px #000, -1px -1px 5px rgba(0,0,0,0.2);\n    border: 1px solid rgba(255,255,255,0.1);\n}\n.g-rivet:nth-child(1){\n    top:calc(var(--container-size) * 1.5px);\n    left:calc(var(--container-size) * 1.5px);\n}\n.g-rivet:nth-child(2){\n    top:calc(var(--container-size) * 1.5px);\n    right:calc(var(--container-size) * 1.5px);\n}\n.g-rivet:nth-child(3){\n    bottom:calc(var(--container-size) * 1.5px);\n    left:calc(var(--container-size) * 1.5px);\n}\n.g-rivet:nth-child(4){\n    bottom:calc(var(--container-size) * 1.5px);\n    right:calc(var(--container-size) * 1.5px);\n}\n\n.g-rivet::before {\n    content: '';\n    position: absolute;\n    left: 50%;\n    top: 50%;\n    width: calc(var(--container-size) * 10%);\n    height: calc(var(--container-size) * 10%);\n    box-shadow: inset 0px 1px 2px #222;\n    transform: translate(-50%, -50%);\n    border-radius: 50%;\n    border-bottom: 1px solid rgba(255,255,255,0.3);\n}\n</style>","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":true,"templateScope":"global","x":1685.1143798828125,"y":797.0347290039062,"wires":[[]]},{"id":"09ad4768ace80c25","type":"ui_template","z":"1f851c1.28701e4","group":"34c8e5f1.3881fa","name":"0-220","order":50,"width":4,"height":1,"format":"<div id=\"{{'gauge_'+$id}}\" class=\"g-container\" style=\"--gauge-value:0; --container-size:6; --gn-distance:14; --ga-tick-count:11; --ga-subtick-count:22; --g-unit:''°F'\">\n    <div id=\"bgr\" class=\"g-body\">\n        <div class=\"g-ring\">\n            <div class=\"g-rivets\">\n                <div class=g-rivet></div>\n                <div class=g-rivet></div>\n                <div class=g-rivet></div>\n                <div class=g-rivet></div>\n            </div>\n            <div class=\"g-plate\">\n                <div class=\"g-ticks\">\n                    <div class=\"g-tick\" style=\"--ga-tick:1;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:2;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:3;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:4;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:5;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:6;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:7;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:8;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:9;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:10;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:11;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:12;\"></div>\n                </div>\n                <div class=\"g-ticks\">\n                    <div class=\"g-subtick\" style=\"--ga-tick:2;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:4;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:6;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:8;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:10;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:12;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:14;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:16;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:18;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:20;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:22;\"></div>\n                    \n                </div>\n               <div class=\"g-nums\">\n                    <div class=\"g-num\" style=\"--ga-tick:1;\" >0</div>\n                    <div class=\"g-num\" style=\"--ga-tick:2;\">20</div>\n                    <div class=\"g-num\" style=\"--ga-tick:3;\">40</div>\n                    <div class=\"g-num\" style=\"--ga-tick:4;\">60</div>\n                    <div class=\"g-num\" style=\"--ga-tick:5;\">80</div>\n                    <div class=\"g-num\" style=\"--ga-tick:6;\">100</div>\n                    <div class=\"g-num\" style=\"--ga-tick:7;\">120</div>\n                    <div class=\"g-num\" style=\"--ga-tick:8;\">140</div>\n                    <div class=\"g-num\" style=\"--ga-tick:9;\">160</div>\n                    <div class=\"g-num\" style=\"--ga-tick:10;\">180</div>\n                    <div class=\"g-num\" style=\"--ga-tick:11;\">200</div>\n                    <div class=\"g-num\" style=\"--ga-tick:12;\">220</div>\n                    \n                </div>\n                <div class=\"g-label\">Boil Kettle </div>\n                <div class=\"g-needle\"></div>\n                <div class=\"g-needle-ring\"></div>\n                <div id=\"{{'gauge_val_'+$id}}\" class=\"g-val\"></div>\n            </div>\n        </div>\n    </div>\n</div>\n<script>\n(function(scope) {\n    let min = 0;\n    let max = 220;\n  scope.$watch('msg', function(msg) {\n    if (msg) {\n      // Do something when msg arrives\n        const val = msg.payload\n        const v = ((val - min) / (max - min)) * 100;\n        document.getElementById('gauge_'+scope.$id).style.setProperty('--gauge-value', v);\n        document.getElementById('gauge_val_'+scope.$id).innerText = val.toFixed(1);\n    }\n   \n  });\n})(scope);\n</script>","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":true,"templateScope":"local","x":1686.1143798828125,"y":851.0347290039062,"wires":[[]]},{"id":"f914d5e93fc3ec46","type":"ui_group","name":"Group 1","tab":"99204bb9016ca23c","order":2,"disp":false,"width":"6","collapse":false},{"id":"34c8e5f1.3881fa","type":"ui_group","name":"test","tab":"85b0e00f12eded88","order":1,"disp":true,"width":6,"collapse":false},{"id":"99204bb9016ca23c","type":"ui_tab","name":"Zacksquatchworks","icon":"dashboard","order":2,"disabled":false,"hidden":false},{"id":"85b0e00f12eded88","type":"ui_tab","name":"test 1","icon":"dashboard","disabled":false,"hidden":false}]

...show us your flow, not only single nodes...my crystal ball is broken atm :wink:

ok so i have it working with a standard UI gauge,
I have also figured out how to change to F using unit-converter node.

ok its going to be in 2 parts

[{"id":"99a0ddb1.7b3e4","type":"unit-converter","z":"1f851c1.28701e4","category":"temperature","inputUnit":"C","outputUnit":"F","inputField":"payload.Temperature","outputField":"payload.Temperature","inputFieldType":"msg","outputFieldType":"msg","roundOutputField":true,"outputFieldDecimals":2,"name":"442f","x":1231.0000076293945,"y":856.0000104904175,"wires":[["dd13811052cd95db","56c51ef94bcf5ad2","4e9b4d84eca3fd6a"]]},{"id":"dd13811052cd95db","type":"ui_text","z":"1f851c1.28701e4","group":"3e7d17b4939773da","order":2,"width":6,"height":1,"name":"","label":"Boil Kettle Temp","format":"{{msg.payload}}","layout":"row-spread","x":1493.0000076293945,"y":812.0000104904175,"wires":[]},{"id":"4e9b4d84eca3fd6a","type":"debug","z":"1f851c1.28701e4","name":"boil","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1458.0000076293945,"y":851.0000104904175,"wires":[]},{"id":"56c51ef94bcf5ad2","type":"ui_template","z":"1f851c1.28701e4","group":"3e7d17b4939773da","name":"Boil Kettle","order":5,"width":6,"height":6,"format":"<div id=\"{{'gauge_'+$id}}\" class=\"g-container\" style=\"--gauge-value:0; --container-size:6; --gn-distance:14; --ga-tick-count:22; --ga-subtick-count:220; --g-unit:''°F'\">\n    <div id=\"bgr\" class=\"g-body\">\n        <div class=\"g-ring\">\n            <div class=\"g-rivets\">\n                <div class=g-rivet></div>\n                <div class=g-rivet></div>\n                <div class=g-rivet></div>\n                <div class=g-rivet></div>\n            </div>\n            <div class=\"g-plate\">\n                <div class=\"g-ticks\">\n                    <div class=\"g-tick\" style=\"--ga-tick:1;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:3;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:5;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:7;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:9;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:11;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:13;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:15;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:17;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:19;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:21;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:23;\"></div>\n                </div>\n                <div class=\"g-ticks\">\n                    <div class=\"g-subtick\" style=\"--ga-tick:11;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:31;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:51;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:71;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:91;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:111;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:131;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:151;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:171;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:191;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:211;\"></div>\n                    \n                </div>\n               <div class=\"g-nums\">\n                    <div class=\"g-num\" style=\"--ga-tick:1;\" >0</div>\n                    <div class=\"g-num\" style=\"--ga-tick:3;\">20</div>\n                    <div class=\"g-num\" style=\"--ga-tick:5;\">40</div>\n                    <div class=\"g-num\" style=\"--ga-tick:7;\">60</div>\n                    <div class=\"g-num\" style=\"--ga-tick:9;\">80</div>\n                    <div class=\"g-num\" style=\"--ga-tick:11;\">100</div>\n                    <div class=\"g-num\" style=\"--ga-tick:13;\">120</div>\n                    <div class=\"g-num\" style=\"--ga-tick:15;\">140</div>\n                    <div class=\"g-num\" style=\"--ga-tick:17;\">160</div>\n                    <div class=\"g-num\" style=\"--ga-tick:19;\">180</div>\n                    <div class=\"g-num\" style=\"--ga-tick:21;\">200</div>\n                    <div class=\"g-num\" style=\"--ga-tick:23;\">220</div>\n                    \n                </div>\n                <div class=\"g-label\">Boil Kettle </div>\n                <div class=\"g-needle\"></div>\n                <div class=\"g-needle-ring\"></div>\n                <div id=\"{{'gauge_val_'+$id}}\" class=\"g-val\"></div>\n            </div>\n        </div>\n    </div>\n</div>\n<script>\n(function(scope) {\n    let min = 0;\n    let max = 100;\n  scope.$watch('msg', function(msg) {\n    if (msg) {\n      // Do something when msg arrives\n        const v = Math.floor(((msg.payload.Temperature - min) / (max - min)) * (100 * 0.46));\n        const d = Math.floor(((msg.payload.Temperature - min) / (max - min)) * 100);\n        document.getElementById('gauge_'+scope.$id).style.setProperty('--gauge-value', v);\n        document.getElementById('gauge_val_'+scope.$id).innerText = d;\n    }\n   \n  });\n})(scope);\n</script>\n","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":true,"templateScope":"local","x":1469.447883605957,"y":888.7013654708862,"wires":[[]]},{"id":"1981e1b781103b1a","type":"ui_template","z":"1f851c1.28701e4","group":"f914d5e93fc3ec46","name":"gauge-style","order":1,"width":0,"height":0,"format":"<style id=\"hotNipi-gauge\">\n:root{\n    --needle-color:#001100;\n    --needle-second-color:#ff0000;\n    --red-ticks:9;\n    --sec-high-color:#ff00004f;\n    --sec-normal-color:#00ff004f;\n    --sec-low-color:#0000ff4f;\n    --sec-sub-color:#0000ff8f;\n}\n.g-container {\n    padding-top: 3px;\n    padding-bottom: 3px;\n    width: 100%;\n    height: 100%;\n    position: relative;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    user-select:none;\n}\n    \n.g-body {\n    width: 98%;\n    height: 98%;\n    border-radius: 15%;\n    position: relative;\n    display: flex;\n    align-content: center;\n    align-items: center;\n    justify-content: center;\n    box-shadow: 0px 5px 8px #00000045;\n    background: linear-gradient(0deg, rgba(78,78,78,1) 0%, rgba(215,215,215,1) 99%, rgba(236,236,236,1) 100%);\n}\n\n.g-body::before {    \n    content: \"\";\n    background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc1JyBoZWlnaHQ9JzUnPgogIDxyZWN0IHdpZHRoPSc1JyBoZWlnaHQ9JzUnIGZpbGw9J3doaXRlJy8+CiAgPHBhdGggZD0nTTAgNUw1IDBaTTYgNEw0IDZaTS0xIDFMMSAtMVonIHN0cm9rZT0nIzg4OCcgc3Ryb2tlLXdpZHRoPScxJy8+Cjwvc3ZnPg==\"); \n    background-repeat: repeat;\n    position: absolute;\n    top: 0px;\n    right: 0px;\n    bottom: 0px;\n    left: 0px;\n    opacity: 0.1;\n    border-radius:15%;\n}\n\n.g-sector{\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    top: 50%;\n    left: 50%;\n   \n    transform-origin: 0 0;\n}\n.g-sector-high {\n    background: var(--sec-high-color);\n    transform: rotate(328deg) skew(12deg, 23deg);\n}\n.g-sector-normal {\n    background:var(--sec-normal-color);\n    transform: rotate(328deg) skew(12deg, 23deg);\n}\n.g-sector-low {\n    background:var(--sec-low-color);\n    transform: rotate(328deg) skew(12deg, 23deg);\n}\n.g-sector-sub {\n    background:var(--sec-sub-color);\n    transform: rotate(328deg) skew(12deg, 23deg);\n}\n\n.g-ring {\n    width: 94%;\n    height: 94%;\n    border-radius: 50%;\n    position: relative;\n    display: flex;\n    align-content: center;\n    align-items: center;\n    justify-content: center;\n    background: linear-gradient(180deg, rgba(78,78,78,1) 0%, rgba(215,215,215,1) 99%, rgba(236,236,236,1) 100%);\n}\n.g-plate {\n    overflow: hidden;\n    width: 93%;\n    height: 93%;\n    border-radius: 50%;\n    position: relative;\n    box-shadow: inset 0 0 15px #000000a3;\n    background: radial-gradient(circle, #dd8400 3%, rgb(196 205 209) 1%, rgb(177 183 186) 40%, rgb(191 193 194) 100%);\n}\n.g-plate-bright {\n    overflow:hidden;\n    width: 90%;\n    height: 90%;\n    border-radius: 50%;\n    position: relative;\n    box-shadow: inset 0 0 10px yellow;\n    background: radial-gradient(circle, #ed9400 3%, rgb(255, 255, 255) 1%, rgb(255, 255, 158) 40%, rgb(148, 154, 160) 100%);\n}\n\n\n.g-ticks {\n    position: absolute;\n    top:0;\n    left:0;\n    width: 100%;\n    height: 100%;\n    filter: drop-shadow(2px 4px 6px black);\n}\n.g-tick {\n    transform: rotate(calc(calc(270deg / var(--ga-tick-count)) * var(--ga-tick) - calc(calc(270deg / var(--ga-tick-count)) + 45deg)));\n    background: #000;\n    position: relative;\n    left: 0;\n    top: 50%;\n    width: 100%;\n    height: 1px;\n    margin-bottom: -1px;\n    background: linear-gradient(90deg,rgba(0,0,0,0) 0,rgba(0,0,0,0) 2%,rgb(0 0 0 / 60%) 2%,rgb(0 0 0 / 60%) 10%,rgba(0,0,0,0) 10%);\n}\n.g-subtick {\n    transform: rotate(calc(calc(270deg / var(--ga-subtick-count)) * var(--ga-tick) - calc(calc(270deg / var(--ga-subtick-count)) + 45deg)));\n    background: #000;\n    position: relative;\n    left: 0;\n    top: 50%;\n    width: 100%;\n    height: 1px;\n    margin-bottom: -1px;\n    background: linear-gradient(90deg,rgba(0,0,0,0) 0,rgba(0,0,0,0) 2%,rgb(0 0 0 / 40%) 2%,rgb(0 0 0 / 40%) 6%,rgba(0,0,0,0) 6%);\n}\n\n.g-num {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    text-align: center;\n    transform: translate(-50%, -50%) rotate(calc(calc(270deg / var(--ga-tick-count)) * var(--ga-tick) - calc(calc(270deg /\n    var(--ga-tick-count)) + 45deg))) translate(calc(-1px * var(--container-size) * var(--gn-distance))) rotate(calc(calc(270deg / var(--ga-tick-count)) * var(--ga-tick) *-1 -\n    calc(calc(270deg / var(--ga-tick-count))*-1 - 45deg)));\n}\n\n.g-nums {\n    position: absolute;\n    top: 0;\n    width: 100%;\n    height: 100%;\n    color: #000000a1;\n    font-size: calc(var(--container-size) * 20%);\n    font-weight: 500;\n    filter: drop-shadow(2px 4px 10px black);\n}\n.g-needle {\n    transform: rotate(calc(270deg * calc(var(--gauge-value, 0deg) / 100) - 45deg));\n    transition: transform 1s;\n    background: #000;\n    position: absolute;\n    left: 0;\n    top: 49%;\n    width: 100%;\n    height: 2%;\n    filter:drop-shadow(0px 1px 3px #00000080);\n    background: linear-gradient(90deg,rgba(2,0,36,0) 0,rgba(0,0,0,0) 15%,var(--needle-color) 15%,var(--needle-color) 50%,rgba(0,0,0,0) 50%);\n}\n.g-needle-second {\n    transform: rotate(calc(270deg * calc(var(--gauge-value-second, 0deg) / 100) - 45deg));\n    transition: transform 1s;\n    background: #000;\n    position: absolute;\n    left: 0;\n    top: 49%;\n    width: 100%;\n    height: 2%;\n    filter:drop-shadow(0px 1px 3px #ff000080);  \n    background: linear-gradient(90deg,rgba(2,0,36,0) 0,rgba(0,0,0,0) 15%,var(--needle-second-color) 15%,var(--needle-second-color) 50%,rgba(0,0,0,0) 50%);\n}\n.g-needle-ring {\n    position: absolute;\n    width: calc(var(--container-size) * 1.5%);\n    height: calc(var(--container-size) * 1.5%);\n    top: 50%;\n    left: 50%;\n    background: var(--needle-color);\n    border-radius: 50%;\n    transform: translate(-50%, -50%);\n    box-shadow: 0 1px 4px #0000009c;\n}\n.g-val{\n    position: absolute;\n    text-align: center;\n    left: 50%;\n    bottom: 8%;\n    width: 80px;\n    transform: translateX(-50%);\n    font-family: monospace;\n    font-size:  calc(var(--container-size) * 40%);\n    color: #000000a1;\n    filter: drop-shadow(2px 3px 2px #00000050);\n}\n\n.g-label{\n    position: absolute;\n    text-align: center;\n    left: 50%;\n    top: 58%;\n    width: 100%;\n    transform: translateX(-50%);\n    font-family: monospace;\n    font-size:  calc(var(--container-size) * 18%);\n    color: #000000a1;\n    filter: drop-shadow(2px 3px 2px #00000080);\n}\n.g-label::after{\n    content: var(--g-unit);\n    font-size: clamp(1em,calc(var(--container-size) * 40%),1.5em);\n    position: absolute;\n    left: 0;\n    top: 100%;\n    width: 100%;\n    height: 100%;\n}\n.g-rivets{\n    position: absolute;\n    left:0;\n    top:0;\n    width: 100%;\n    height: 100%;\n}\n\n.g-rivet {\n    position: absolute;\n    width: calc(var(--container-size) * 2px);\n    height: calc(var(--container-size) * 2px);\n    border-radius: 50px;\n    background: linear-gradient(135deg, #adadad 0%,#d3d3d3 51%,#d1d1d1 68%,#8c8c8c 100%);\n    box-shadow: 0px 2px 4px #000, -1px -1px 5px rgba(0,0,0,0.2);\n    border: 1px solid rgba(255,255,255,0.1);\n}\n.g-rivet:nth-child(1){\n    top:calc(var(--container-size) * 1.5px);\n    left:calc(var(--container-size) * 1.5px);\n}\n.g-rivet:nth-child(2){\n    top:calc(var(--container-size) * 1.5px);\n    right:calc(var(--container-size) * 1.5px);\n}\n.g-rivet:nth-child(3){\n    bottom:calc(var(--container-size) * 1.5px);\n    left:calc(var(--container-size) * 1.5px);\n}\n.g-rivet:nth-child(4){\n    bottom:calc(var(--container-size) * 1.5px);\n    right:calc(var(--container-size) * 1.5px);\n}\n\n.g-rivet::before {\n    content: '';\n    position: absolute;\n    left: 50%;\n    top: 50%;\n    width: calc(var(--container-size) * 10%);\n    height: calc(var(--container-size) * 10%);\n    box-shadow: inset 0px 1px 2px #222;\n    transform: translate(-50%, -50%);\n    border-radius: 50%;\n    border-bottom: 1px solid rgba(255,255,255,0.3);\n}\n</style>","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":true,"templateScope":"global","x":1685.1143798828125,"y":797.0347290039062,"wires":[[]]},{"id":"09ad4768ace80c25","type":"ui_template","z":"1f851c1.28701e4","group":"34c8e5f1.3881fa","name":"0-220","order":50,"width":4,"height":1,"format":"<div id=\"{{'gauge_'+$id}}\" class=\"g-container\" style=\"--gauge-value:0; --container-size:6; --gn-distance:14; --ga-tick-count:11; --ga-subtick-count:22; --g-unit:''°F'\">\n    <div id=\"bgr\" class=\"g-body\">\n        <div class=\"g-ring\">\n            <div class=\"g-rivets\">\n                <div class=g-rivet></div>\n                <div class=g-rivet></div>\n                <div class=g-rivet></div>\n                <div class=g-rivet></div>\n            </div>\n            <div class=\"g-plate\">\n                <div class=\"g-ticks\">\n                    <div class=\"g-tick\" style=\"--ga-tick:1;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:2;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:3;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:4;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:5;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:6;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:7;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:8;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:9;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:10;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:11;\"></div>\n                    <div class=\"g-tick\" style=\"--ga-tick:12;\"></div>\n                </div>\n                <div class=\"g-ticks\">\n                    <div class=\"g-subtick\" style=\"--ga-tick:2;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:4;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:6;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:8;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:10;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:12;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:14;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:16;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:18;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:20;\"></div>\n                    <div class=\"g-subtick\" style=\"--ga-tick:22;\"></div>\n                    \n                </div>\n               <div class=\"g-nums\">\n                    <div class=\"g-num\" style=\"--ga-tick:1;\" >0</div>\n                    <div class=\"g-num\" style=\"--ga-tick:2;\">20</div>\n                    <div class=\"g-num\" style=\"--ga-tick:3;\">40</div>\n                    <div class=\"g-num\" style=\"--ga-tick:4;\">60</div>\n                    <div class=\"g-num\" style=\"--ga-tick:5;\">80</div>\n                    <div class=\"g-num\" style=\"--ga-tick:6;\">100</div>\n                    <div class=\"g-num\" style=\"--ga-tick:7;\">120</div>\n                    <div class=\"g-num\" style=\"--ga-tick:8;\">140</div>\n                    <div class=\"g-num\" style=\"--ga-tick:9;\">160</div>\n                    <div class=\"g-num\" style=\"--ga-tick:10;\">180</div>\n                    <div class=\"g-num\" style=\"--ga-tick:11;\">200</div>\n                    <div class=\"g-num\" style=\"--ga-tick:12;\">220</div>\n                    \n                </div>\n                <div class=\"g-label\">Boil Kettle </div>\n                <div class=\"g-needle\"></div>\n                <div class=\"g-needle-ring\"></div>\n                <div id=\"{{'gauge_val_'+$id}}\" class=\"g-val\"></div>\n            </div>\n        </div>\n    </div>\n</div>\n<script>\n(function(scope) {\n    let min = 0;\n    let max = 220;\n  scope.$watch('msg', function(msg) {\n    if (msg) {\n      // Do something when msg arrives\n        const val = msg.payload\n        const v = ((val - min) / (max - min)) * 100;\n        document.getElementById('gauge_'+scope.$id).style.setProperty('--gauge-value', v);\n        document.getElementById('gauge_val_'+scope.$id).innerText = val.toFixed(1);\n    }\n   \n  });\n})(scope);\n</script>","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":true,"templateScope":"local","x":1686.1143798828125,"y":851.0347290039062,"wires":[[]]},{"id":"9c3d32a00a61cd5f","type":"debug","z":"1f851c1.28701e4","name":"442fsensor","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1026.5643310546875,"y":895.5963913940429,"wires":[]},{"id":"4162dc019210439f","type":"link in","z":"1f851c1.28701e4","name":"","links":["4ccb4bd562321ec6"],"x":1016.5625276565552,"y":842.8950634002686,"wires":[["99a0ddb1.7b3e4","207bcda41f9fbadc"]]},{"id":"207bcda41f9fbadc","type":"debug","z":"1f851c1.28701e4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"te","targetType":"msg","statusVal":"","statusType":"auto","x":1113.23095703125,"y":776.4904648803711,"wires":[]},{"id":"3e7d17b4939773da","type":"ui_group","name":"BoilKettle","tab":"a74ffe3d.4eb73","order":2,"disp":true,"width":12,"collapse":false},{"id":"f914d5e93fc3ec46","type":"ui_group","name":"Group 1","tab":"99204bb9016ca23c","order":2,"disp":false,"width":"6","collapse":false},{"id":"34c8e5f1.3881fa","type":"ui_group","name":"test","tab":"85b0e00f12eded88","order":1,"disp":true,"width":6,"collapse":false},{"id":"a74ffe3d.4eb73","type":"ui_tab","name":"Brewery","icon":"dashboard","order":1,"disabled":false,"hidden":false},{"id":"99204bb9016ca23c","type":"ui_tab","name":"Zacksquatchworks","icon":"dashboard","order":2,"disabled":false,"hidden":false},{"id":"85b0e00f12eded88","type":"ui_tab","name":"test 1","icon":"dashboard","disabled":false,"hidden":false}]

This is the actual guage im trying to use. we are just working with the Boil Kettle as of now.

this is the stage coming from MQTT

[{"id":"a83eb32ba827c55d","type":"tab","label":"Flow 2","disabled":false,"info":"","env":[]},{"id":"d0e0c004.6fd2a","type":"change","z":"a83eb32ba827c55d","name":"WestFermenter","rules":[{"t":"set","p":"topic","pt":"msg","to":"WestFermenter","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1180.0087356567383,"y":277.0017795562744,"wires":[[]]},{"id":"12701796.dd9258","type":"change","z":"a83eb32ba827c55d","name":"Center Fermenter","rules":[{"t":"set","p":"topic","pt":"msg","to":"CenterFermenter","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1189.00883102417,"y":415.0017681121826,"wires":[[]]},{"id":"9c0c8a20.b71128","type":"change","z":"a83eb32ba827c55d","name":"HLT","rules":[{"t":"set","p":"topic","pt":"msg","to":"HLT","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1151.0087928771973,"y":483.0017499923706,"wires":[[]]},{"id":"9c20d488.d080b8","type":"change","z":"a83eb32ba827c55d","name":"Mash","rules":[{"t":"set","p":"topic","pt":"msg","to":"Mash","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1150.008804321289,"y":585.0016822814941,"wires":[[]]},{"id":"8ccbe599.592bb8","type":"change","z":"a83eb32ba827c55d","name":"EastFermenter","rules":[{"t":"set","p":"topic","pt":"msg","to":"EastFermenter","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1180.0087127685547,"y":688.0017127990723,"wires":[[]]},{"id":"7dd0da09.27a764","type":"change","z":"a83eb32ba827c55d","name":"Glycol","rules":[{"t":"set","p":"topic","pt":"msg","to":"Glycol","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1152.0086975097656,"y":787.0017709732056,"wires":[[]]},{"id":"b63ec7e2eb7e8742","type":"mqtt in","z":"a83eb32ba827c55d","name":"","topic":"Railtemp1/SENSOR","qos":"1","datatype":"auto","broker":"8db3fac0.99dd48","nl":false,"rap":false,"inputs":0,"x":196.66666412353516,"y":41.66667079925537,"wires":[["47f9a07e53311609","361b5baba80624fb"]]},{"id":"47f9a07e53311609","type":"debug","z":"a83eb32ba827c55d","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":755.1335411071777,"y":102.06622505187988,"wires":[]},{"id":"c8d06b2e7b02e048","type":"debug","z":"a83eb32ba827c55d","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"boil","targetType":"msg","statusVal":"","statusType":"auto","x":1159.1267700195312,"y":65.15860176086426,"wires":[]},{"id":"212da3aa222c8b91","type":"debug","z":"a83eb32ba827c55d","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":658.4107642080271,"y":158.58272871365858,"wires":[]},{"id":"361b5baba80624fb","type":"json","z":"a83eb32ba827c55d","name":"","property":"payload","action":"","pretty":false,"x":352.0069580078125,"y":89.97136087646484,"wires":[["212da3aa222c8b91","c5bea3284b1e541a"]]},{"id":"a147d8c8043979dd","type":"change","z":"a83eb32ba827c55d","name":"Boil","rules":[{"t":"change","p":"topic","pt":"msg","from":"DS18b20-1","fromt":"str","to":"Boil","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":971.008674621582,"y":148.0018072128296,"wires":[["c8d06b2e7b02e048"]]},{"id":"4ccb4bd562321ec6","type":"link out","z":"a83eb32ba827c55d","name":"Boil","mode":"link","links":["4162dc019210439f"],"x":1121.5591135025024,"y":151.88283920288086,"wires":[]},{"id":"c5bea3284b1e541a","type":"split","z":"a83eb32ba827c55d","name":"","splt":"\\n","spltType":"str","arraySplt":"1","arraySpltType":"len","stream":true,"addname":"topic","x":392.00695037841797,"y":182.90714168548584,"wires":[["ba96668845a56017","69e28bf5.580afc","4f747c81cec09094"]]},{"id":"69e28bf5.580afc","type":"change","z":"a83eb32ba827c55d","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"\"Railtemp1/SENSOR/\" & key","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":438.00867462158203,"y":298.0017375946045,"wires":[[]]},{"id":"ba96668845a56017","type":"debug","z":"a83eb32ba827c55d","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":691.5642700195312,"y":218.04428262939453,"wires":[]},{"id":"b7ba0628152a2d90","type":"debug","z":"a83eb32ba827c55d","name":"boil","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1256.5642547607422,"y":235.92799949645996,"wires":[]},{"id":"d76fc741de6f9ff8","type":"debug","z":"a83eb32ba827c55d","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1183.5660400390625,"y":308.9350242614746,"wires":[]},{"id":"4f747c81cec09094","type":"switch","z":"a83eb32ba827c55d","name":"If =442FBOIL","property":"payload.Id","propertyType":"msg","rules":[{"t":"cont","v":"3C01D607442","vt":"str"},{"t":"cont","v":"3C01D607551B","vt":"str"},{"t":"cont","v":"3C01D6075AAA","vt":"str"},{"t":"cont","v":"3C01D607B382","vt":"str"},{"t":"cont","v":"3C01D607ECB7","vt":"str"},{"t":"cont","v":"3C01D607FD9D","vt":"str"},{"t":"cont","v":"3C01F096D7D9","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":8,"x":467.0086441040039,"y":526.0017242431641,"wires":[["a147d8c8043979dd","b7ba0628152a2d90","4ccb4bd562321ec6","e3be74eea8c5a816"],["d76fc741de6f9ff8","d0e0c004.6fd2a"],["12701796.dd9258"],["9c0c8a20.b71128"],["9c20d488.d080b8"],["8ccbe599.592bb8"],["7dd0da09.27a764"],[]]},{"id":"7cec1889440cc7be","type":"comment","z":"a83eb32ba827c55d","name":"Sensor address legend","info":"Boil id 3C01D607442F\nWestF3C01D607551B\nCferm3C01D6075AAA\nHlt3C01D607B382\nMash3C01D607ECB7\nEferm3C01D607FD9D\nGlycol3C01F096D7D9\n","x":173.56597900390625,"y":121.87070274353027,"wires":[]},{"id":"944f65f9644713a9","type":"ui_gauge","z":"a83eb32ba827c55d","name":"","group":"251e880a.3e91e8","order":1,"width":0,"height":0,"gtype":"gage","title":"gauge","label":"units","format":"{{payload.Temperature}}","min":"-100","max":"100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1204.670223236084,"y":176.44704818725586,"wires":[]},{"id":"e3be74eea8c5a816","type":"unit-converter","z":"a83eb32ba827c55d","category":"temperature","inputUnit":"C","outputUnit":"F","inputField":"payload.Temperature","outputField":"payload.Temperature","inputFieldType":"msg","outputFieldType":"msg","roundOutputField":true,"outputFieldDecimals":2,"name":"442f","x":916.0086669921875,"y":305.0017395019531,"wires":[["944f65f9644713a9"]]},{"id":"8db3fac0.99dd48","type":"mqtt-broker","name":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"251e880a.3e91e8","type":"ui_group","name":"Profile","tab":"42b914b0.66a0ac","order":1,"disp":true,"width":"10","collapse":false},{"id":"42b914b0.66a0ac","type":"ui_tab","name":"Main","icon":"dashboard","order":1}]


bottom blue node labled Boil Kettle is the node i have changed info in
the blue node labeled Hot Liqour Tank has orginalset info see difference of pictures below.


...so, you are saying it does work, if the msg.payload is just a single value, not an object (,Temperatue)?
Try this change node before the Gauge, then use the Gauge unmodified, with only msg.payload.

[{"id":"9cb40896823b2041","type":"change","z":"a83eb32ba827c55d","name":"set payload to Temperature value","rules":[{"t":"move","p":"payload.Temperature","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":980,"y":240,"wires":[["944f65f9644713a9"]]}]

Or in tasmota console type command : SetOption8

Show temperature in
0 = Celsius (default)
1 = Fahrenheit

1 Like