What I have been trying to do is create one without use of UI Dashboard so that it was separate from my dashboard. I used Simple Web Page flow by @dceejay and added a SVG to it. Here is the modified template node with external SVG. I am just at the beginning of this project but it might give you some ideas.
[{"id":"aca96bca.024aa8","type":"template","z":"fc610c9a.5866b","name":"Simple Web Page","field":"payload","fieldType":"msg","format":"html","syntax":"mustache","template":"<!DOCTYPE HTML>\n<html>\n <head>\n <title>Compressor System</title>\n <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css\">\n <object id=\"svgObject\" type=\"image/svg+xml\" data=\"compressor.svg\" >\n Your browser doesn't support SVG\n <script type=\"text/javascript\">\n var ws;\n var wsUri = \"ws:\";\n var loc = window.location;\n console.log(loc);\n if (loc.protocol === \"https:\") { wsUri = \"wss:\"; }\n // This needs to point to the web socket in the Node-RED flow\n // ... in this case it's ws/simple\n wsUri += \"//\" + loc.host + loc.pathname.replace(\"simple\",\"ws/simple\");\n\n\n\n function wsConnect() {\n console.log(\"connect\",wsUri);\n ws = new WebSocket(wsUri);\n //var line = \"\"; // either uncomment this for a building list of messages\n var a = document.getElementById(\"svgObject\");\n //console.log(a);\n \t// Get the SVG document inside the Object tag\n \tvar svgDoc = a.contentDocument;\n //console.log(svgDoc);\n \t// Get one of the SVG items by ID;\n \tvar svgItem = svgDoc.getElementById(\"tspan86\");\n //console.log(svgItem);\n \t// Set the colour to something else\n\n ws.onmessage = function(msg) {\n var line = \"\"; // or uncomment this to overwrite the existing message\n // parse the incoming message as a JSON object\n var data = msg.data;\n console.log(data);\n // build the output from the topic and payload parts of the object\n line += \"<p>\"+data+\"</p>\";\n // replace the messages div with the new \"line\"\n \tconsole.log(svgItem);\n svgItem.innerHTML = data; \n // \tdocument.getElementById('messages').innerHTML = line;\n // svgItem.getElementById('tspan66').innerText = data;\n //ws.send(JSON.stringify({data:data}));\n if (data ==\"OFF\") {\n document.getElementById(\"stop\").disabled = true;\n document.getElementById(\"start\").disabled = false;\n } else {\n document.getElementById(\"stop\").disabled = false;\n document.getElementById(\"start\").disabled = true;\n }\n }\n ws.onopen = function() {\n // update the status div with the connection status\n document.getElementById('status').innerHTML = \"connected\";\n //ws.send(\"Open for data\");\n console.log(\"connected\");\n }\n ws.onclose = function() {\n // update the status div with the connection status\n document.getElementById('status').innerHTML = \"not connected\";\n // in case of lost connection tries to reconnect every 3 secs\n setTimeout(wsConnect,3000);\n }\n }\n \n function doit(m) {\n if (ws) { ws.send(m); }\n }\n </script>\n </object>\n </head>\n <body onload=\"wsConnect();\" onunload=\"ws.disconnect();\">\n <font face=\"Arial\">\n // <div style=\"font-size:40px;\" id=\"messages\"></div>\n <button id=\"stop\" style=\"height:100px;width:200px;font-size: 30px;background-color: #f44336\" onclick='doit(\"OFF\");' class=\"btn\"><i class=\"fa fa-times-circle\"> STOP</i></button>\n <button id=\"start\" style=\"height:100px;width:200px;font-size: 30px;background-color: #4CAF50\" onclick='doit(\"ON\");' class=\"btn\"><i class=\"fa fa-play-circle\"> START</i></button>\n <hr/>\n <div id=\"status\">unknown</div>\n </font>\n </body>\n</html>\n","x":590,"y":80,"wires":[["3e513425.c5a79c"]]}]
compressor.svg
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:lucid="lucid"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1024"
height="768"
version="1.1"
id="svg230"
sodipodi:docname="compressor.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
viewBox="-4 450 624.64 468.48">
<metadata
id="metadata236">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs234" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1018"
id="namedview232"
showgrid="false"
inkscape:zoom="0.8828436"
inkscape:cx="-58.07226"
inkscape:cy="384.71952"
inkscape:window-x="1912"
inkscape:window-y="1072"
inkscape:window-maximized="1"
inkscape:current-layer="compressor"
scale-x="0.61"
viewbox-x="-4"
viewbox-y="450" />
<g
lucid:page-tab-id="0_0"
id="compressor"
transform="translate(-517.75,213.4108)">
<g
id="seperator"
style="fill:#ffeca9;stroke:#000000;stroke-width:2">
<path
d="m 885.1,493.34 c 0,0 -1.46,3.35 -3.42,5.94 -1.96,2.6 -4.9,6.4 -8.82,9.44 -3.84,3.04 -9.4,6.24 -13.4,7.46 -3.92,1.07 -6.7,2.13 -12.83,2.13 -6.2,0.17 -10.87,0.32 -17.48,-2.42 -6.62,-2.74 -8.25,-3.5 -12.67,-7 -4.33,-3.66 -8.74,-8.54 -10.7,-12.04 -2.04,-3.5 -2.37,-4.57 -2.37,-4.57"
id="path124"
inkscape:connector-curvature="0" />
<path
d="m 884.95,492.57 h -81.3 V 366.3 h 81.3 z"
id="path126"
inkscape:connector-curvature="0" />
</g>
<path
d="m 820.95,366.14 v 69.05 h 47.43 v -69.06 m -57.6,0.01 h 10.17 m 47.43,0 h 10.17"
id="seperatorelement"
inkscape:connector-curvature="0"
style="fill:#c7e8ac;stroke:#000000;stroke-width:2" />
<path
d="m 666.88,359.24 97.3,16.6 v 49.46 l -97.3,16.27 z"
id="rotor"
inkscape:connector-curvature="0"
style="fill:#7f5410;stroke:#000000;stroke-width:2" />
<g
id="airfilter">
<path
style="fill:none;stroke:#000000;stroke-width:2"
inkscape:connector-curvature="0"
id="path134"
d="m 724.4,286.62 v 46.86 h 51.97 v -46.86 z" />
<path
style="fill:#ffffff;stroke:#000000;stroke-width:2"
inkscape:connector-curvature="0"
id="path136"
d="m 776.37,286.62 c 0,-12.74 -11.64,-23.07 -26,-23.07 -14.34,0 -25.98,10.33 -25.98,23.07 0,12.75 11.63,23.08 25.98,23.08 14.35,0 26,-10.33 26,-23.08 z" />
</g>
<g
id="airin">
<path
d="m 765.24,374.8 -0.13,3 -0.92,-0.03 v -1.93 l -1.97,-0.34 0.04,-0.8 z m 1.69,-40.26 -3,-0.13 0.05,-0.92 h 3 z"
id="path140"
inkscape:connector-curvature="0" />
<path
d="m 738.05,370.37 -1.24,-35.9"
id="path142"
inkscape:connector-curvature="0"
style="fill:none;stroke:#000000;stroke-width:3" />
<path
style="fill:none;stroke:#000000;stroke-width:3"
inkscape:connector-curvature="0"
id="path138"
d="m 763.74,374.75 1.7,-40.27" />
<path
inkscape:connector-curvature="0"
id="path144"
d="m 739.6,371.65 -3.03,-0.52 -0.02,-0.7 3,-0.1 z m -1.3,-37.23 -3,0.1 -0.02,-1.04 h 3 z" />
</g>
<g
id="wetout">
<g
id="g150"
style="stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none"
transform="matrix(0.95726311,0,0,1,36.264386,0)">
<path
d="m 833.25,449.12 h -31.03 v 27.63 h 31.03 z"
id="path146"
inkscape:connector-curvature="0"
style="fill:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none" />
<path
d="m 833.25,476.75 c 8.45,0 15.3,-6.18 15.3,-13.8 0,-7.64 -6.85,-13.83 -15.3,-13.83 -8.44,0 -15.28,6.2 -15.28,13.82 0,7.63 6.84,13.8 15.28,13.8 z"
id="path148"
inkscape:connector-curvature="0"
style="fill:#ffffff;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none" />
</g>
<path
d="m 804.36,447.67 -0.16,1.45 h -1.98 v 1.33 l -1.17,-0.13 0.33,-2.98 z m -38.94,-22.02 -2.68,1.36 -0.7,-1.34 2.14,-0.36 v -2.08 z"
id="path154"
inkscape:connector-curvature="0" />
<path
d="m 739.55,430.24 -2.87,0.87 -0.35,-1.14 2.98,-0.5 z M 802.22,475 v 1.75 h 1.98 l -0.12,1.42 -3,-0.25 0.26,-3 z"
id="path158"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:3.06226945;stroke-miterlimit:4;stroke-dasharray:none"
inkscape:connector-curvature="0"
id="path152"
d="m 802.75695,448.83 -10.21105,-0.62 -7.2936,-1.4 -5.31392,-1.77 -3.95938,-1.94 -3.12583,-2.06 -2.45899,-2.16 -2.00053,-2.3 -1.64627,-2.5 -1.31285,-2.8 -1.00027,-3.22 -0.35426,-1.73" />
<path
style="fill:none;stroke:#000000;stroke-width:3.03735805;stroke-miterlimit:4;stroke-dasharray:none"
inkscape:connector-curvature="0"
id="path156"
d="m 738.12669,430.68053 0.95374,4.52797 1.21011,4.13814 1.48701,3.83828 1.71261,3.5684 1.94849,3.3485 2.20487,3.15858 2.46125,2.99865 2.72789,2.82873 3.04579,2.6788 3.38422,2.54886 3.77391,2.39892 4.20464,2.239 4.71739,2.04908 5.23016,1.79919 5.86597,1.53931 6.48129,1.15948 7.13763,0.71967 6.19414,0.19991" />
</g>
<path
d="m 1035.74,454.85 v 37.1 h 99.6 v -37.1 z m 9.96,0 v 37.1 m 79.7,-37.1 v 37.1 m -79.7,-27.82 h 79.7 m -79.7,9.27 h 79.7 m -79.7,9.28 h 79.7 m -89.6,-99.18 v 60.02 h 99.3 v -60 z m 9.94,0 v 60.02 m 79.43,-60 v 60 m -79.43,-45 h 79.43 m -79.43,15 h 79.43 m -79.43,15 h 79.43"
id="radiator"
inkscape:connector-curvature="0"
style="fill:#b2b2b2;stroke:#000000;stroke-width:2" />
<g
id="thermostatic">
<path
style="fill:#ffffff;stroke:#000000;stroke-width:2"
inkscape:connector-curvature="0"
id="path162"
d="m 1018.57,461.9 v 20.83 c 5.16,1.34 10.04,1.24 14.68,0 V 461.9 c -5.62,-1.15 -10.5,-1.12 -14.68,0 z" />
<path
style="fill:#ffffff;stroke:#000000;stroke-width:2"
inkscape:connector-curvature="0"
id="path163"
d="m 1030.7,477.53 c 0,2.23 -2.07,4.03 -4.65,4.03 -2.58,0 -4.68,-1.8 -4.68,-4.03 0,-2.24 2.1,-4.06 4.68,-4.06 2.58,0 4.66,1.82 4.66,4.06 z m -0.13,-10.31 c 0,2.24 -2.08,4.04 -4.66,4.04 -2.57,0 -4.65,-1.8 -4.65,-4.04 0,-2.24 2.08,-4.06 4.66,-4.06 2.6,0 4.67,1.82 4.67,4.06 z" />
</g>
<g
id="oilout">
<path
d="m 845.76,518.26 v 0.9 h -3 v -1.1 z m 172.81,-48.73 h -1 v -3 h 1 z"
id="path174"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:3"
inkscape:connector-curvature="0"
id="path170"
d="m 847.26,519.16 v 13.12 H 954.3 v -64.25 l 0.88,-2.12 2.12,-0.87 h 60.27" />
<path
style="fill:none;stroke:#000000;stroke-width:3"
inkscape:connector-curvature="0"
id="path172"
d="m 841.26,519.16 v 16.12 l 0.88,2.12 2.12,0.88 H 957.3 l 2.12,-0.88 0.88,-2.12 v -64.25 h 57.27" />
</g>
<g
id="oilfilter"
style="fill:#7f5410;stroke:#000000;stroke-width:2">
<path
d="m 805.1,653.4 c 0,0 -0.75,1.35 -1.75,2.38 -1,1.04 -2.5,2.56 -4.5,3.78 -1.94,1.22 -4.77,2.5 -6.8,3 -2,0.42 -3.42,0.84 -6.54,0.84 -3.15,0.06 -5.52,0.12 -8.9,-0.97 -3.35,-1.1 -4.2,-1.4 -6.43,-2.8 -2.2,-1.47 -4.45,-3.42 -5.45,-4.82 -1.04,-1.4 -1.2,-1.82 -1.2,-1.82"
id="path176"
inkscape:connector-curvature="0" />
<path
d="m 805.02,653.1 h -41.38 v -50.52 h 41.38 z"
id="path178"
inkscape:connector-curvature="0" />
</g>
<path
d="m 759.57,569.6 v 33.32 h 48.9 v -33.3 z"
id="oilfilterblock"
inkscape:connector-curvature="0"
style="fill:#ffffff;stroke:#000000;stroke-width:2" />
<g
id="filterin">
<path
d="m 809.48,587.76 h -1 v -3 h 1 z m 209.09,-109.38 h -1 v -3 h 1 z"
id="path188"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:3"
inkscape:connector-curvature="0"
id="path184"
d="M 809.48,583.26 H 978.14 V 476.88 l 0.88,-2.12 2.12,-0.88 h 36.43" />
<path
style="fill:none;stroke:#000000;stroke-width:3"
inkscape:connector-curvature="0"
id="path186"
d="m 809.48,589.26 h 171.66 l 2.12,-0.87 0.88,-2.14 V 479.88 h 33.43" />
</g>
<g
id="filterout">
<path
d="m 759.57,587.76 h -1 v -3 h 1 z M 713.9,434.97 h -3 v -0.76 l 3,-0.5 z"
id="path194"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:3"
inkscape:connector-curvature="0"
id="path190"
d="M 758.57,589.26 H 712.4 l -2.12,-0.87 -0.88,-2.14 v -151.3" />
<path
style="fill:none;stroke:#000000;stroke-width:3"
inkscape:connector-curvature="0"
id="path192"
d="M 758.57,583.26 H 715.4 v -148.3" />
</g>
<g
id="scavanger">
<path
style="fill:none;stroke:#000000"
inkscape:connector-curvature="0"
id="path196"
d="M 825.82,428.56 V 359.43 H 785.3 v 53.85 l -0.3,0.7 -0.7,0.3 h -19.12" />
<path
style="fill:none;stroke:#000000"
inkscape:connector-curvature="0"
id="path198"
d="m 827.82,428.56 v -70.13 l -0.3,-0.7 -0.7,-0.3 H 784.3 l -0.7,0.3 -0.3,0.7 v 53.85 h -18.12 m 61.64,16.28 v 3" />
</g>
<g
id="airout">
<path
d="m 869.48,350.3 h -1.5 v -3 h 1.5 z m 166.32,43 h -1 v -3 h 1 z"
id="path208"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:3"
inkscape:connector-curvature="0"
id="path204"
d="m 869.48,345.8 h 82.66 l 2.12,0.9 0.88,2.1 v 40 h 79.67" />
<path
style="fill:none;stroke:#000000;stroke-width:3"
inkscape:connector-curvature="0"
id="path206"
d="m 869.48,351.8 h 79.66 v 40 l 0.88,2.12 2.12,0.88 h 82.67" />
</g>
<g
id="pressurecheck">
<path
d="m 846.02,349.48 h 20 v 10 h -20 z"
id="path210"
inkscape:connector-curvature="0"
style="fill:none" />
<path
style="fill:#ffffff;stroke:#000000;stroke-width:3"
inkscape:connector-curvature="0"
id="path202"
d="m 844.5,330.95 v 35.72 h 23.48 v -35.72 z" />
<path
d="m 849.02,349.48 c 0,0.55 -0.45,1 -1,1 -0.55,0 -1,-0.45 -1,-1 0,-0.55 0.45,-1 1,-1 0.55,0 1,0.45 1,1 z m 2,-2 h 10 z m 10,0 -1,-1 v 2 z"
id="path214"
inkscape:connector-curvature="0"
style="stroke:#000000" />
<path
d="m 848.02,359.48 v -10 l 16,10 v -10"
id="path212"
inkscape:connector-curvature="0"
style="fill:none;stroke:#000000" />
</g>
<g
id="motor">
<path
style="fill:#ffffff;stroke:#000000;stroke-width:3"
inkscape:connector-curvature="0"
id="path216"
d="M 519.25,368.8 H 634.5 v 55.6 H 519.25 Z" />
<path
style="fill:none;stroke:#000000;stroke-width:3"
inkscape:connector-curvature="0"
id="path218"
d="m 546.88,359.25 v 83 m 60.42,-83 v 83 M 634.5,396.6 H 667" />
</g>
<path
d="m 741.9,341.2 9.68,19.1 9.66,-19.1 z"
id="airinflow"
inkscape:connector-curvature="0"
style="fill:#c1e4f7;stroke:#000000;stroke-width:3" />
<path
d="m 774.83,467.9 21.07,-3.7 -15.44,-14.8 z"
id="wetoutflow"
inkscape:connector-curvature="0"
style="fill:#ffeca9;stroke:#000000;stroke-width:3" />
<path
d="m 910.7,358.6 19.1,-9.68 -19.1,-9.66 z"
id="airoutflow"
inkscape:connector-curvature="0"
style="fill:#c1e4f7;stroke:#000000;stroke-width:3" />
<path
d="m 926.65,576.48 -19.08,9.68 19.08,9.66 z M 907,544.73 926.07,535.05 907,525.4 Z m -184.74,-26.06 -9.68,-19.08 -9.66,19.07 h 19.34 z"
id="oilflow"
inkscape:connector-curvature="0"
style="fill:#7f5410;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:19.52px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;-inkscape-font-specification:'sans-serif, Normal';font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;"
x="757.63397"
y="563.83093"
id="messages1"><tspan
sodipodi:role="line"
x="757.63397"
y="563.83093"
id="tspan66">oildiff</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:19.52000046px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
x="518.4696"
y="255.66708"
id="messages1-4"><tspan
style="stroke-width:1"
sodipodi:role="line"
x="518.4696"
y="255.66708"
id="tspan86">status</tspan></text>
</g>
</svg>