Dashboard without Authentication

As of right now, I am waiting on my RIOs to arrive - but when I ordered them, I did not request a Codesys license, since at that point Codesys had not yet been implemented in the RIO (yeah, our vendor has dropped the ball on this delivery…) I have an EPIC available in my spares stock, so I was going to use that as a test bed for some of this - at least creating a simple configuration and trying out a test visualization. But before I devoted some time in doing so, I wanted to see if it was even within the realm of possibility.

And yeah, my HTML / CSS skills are virtually non-existent… :grin:

At last check Codesys WebVisu was not available on the EPIC. Has that changed?

No, thats still the case. Nothing has changed in that regard.

Use groov View.
According to many engineers that I have spoken to it is easier to use and it is included with every EPIC.

This is a RIO only application.
Moving the data back to a central groov Server for Windows is an option, but I see the use case of using the RIO at a small PID loop controller with local UI.

Ok gotcha. Node-Red Dashboard is what I suggest for RIO users also. UI developers can do amazing things with the typical Node-RED UI dashboard implementation.

Did you see the first post in this thread?

Im wondering if I can find some time and put something like your screenshot together with the stock Node-RED dashboard.

Yes, my searching of the Forums did turn up that post, which showed me a little more of the capabilities of the Node-RED dashboard than what I had initially done on my own. I was thinking that I could use the PID loops of the RIO directly and utilize Node-RED for some of the ancillary functionality of the loop controller project by using existing nodes for some things and building up specialty functionality by using Javascript in Function nodes, thereby avoiding using Codesys entirely, but Node-RED isn’t “realtime” so probably not the best approach - but I’m open to suggestions and insights. Ben, if you’re willing to devote some of your valuable time to that, it would be greatly appreciated, but I was not expecting that level of commitment on anyone’s part.

From my point of view, there’s lots of ways to skin this cat, so I’m just spit-balling some ideas and approaches at this point. I could even use an EPIC that is networked in with a few RIOs to act as the HMI front-end with groov View, so really nothing is off the table at the moment - I’m just looking for the cleanest, most self-contained approach. I like the idea of using the RIO since I can change the I/O assignments based upon the needs of the control application, which is where all of these mental gymnastics started.

And yes, I know that the EPIC has the GRV-MM1001-10 module that provides the same functionality as the RIO. The main reason to use a RIO is that it is a stand-alone solution, and if it fails it is only one “loop controller” that fails. I could create an EPIC configuration that could support 16 “loop controllers” with the required I/O for each controller dedicated per module, but if the EPIC fails then we lose control of all 16 loops - not ideal. I know that my peculiar world of single-loop controllers is antiquated and out-of-date, but we have critical systems that rely on these controllers and having one failure take out several of them at once could be catastrophic.

Thank you to all that are reading my ramblings. I’m finding it rather cathartic to write all of this out, but I know it can be incredibly dull to read. :laughing:

I know your focus is on ‘single loop’ controller (RIO), but for those reading along, the maximum number of PID loops in each:

EPIC = 64 loops.
RIO = 4 loops.

After about 20 minutes mucking about in the standard dashboard…

Not sure how much more to keep pushing things along.
The LED/LCD is cute, but not sure it adds much.
The ‘32’ is the temperature, but could show other things.
To stack 4 of them would be doable, but start to take up some space.
Not sure what your deployed screen-size requirements are.
Same deal with the buttons, 1x1 on the left, and 2x2 on the right. It all depends on if you have a set deployment platform in mind or or not.

Wow, for 20 minutes of work that looks pretty good! I wouldn’t ask you to continue with that endeavor, but if you could copy and post the Node-RED flow data for what you created I would greatly appreciate that. It will give me a starting point from where you left off and help give me some examples of how to arrange and organize the graphic elements.

I was thinking about using a small Android panel-mounted tablet that would be configured for a Kiosk mode browser, where the browser would be set to the IP address of the RIO Node-RED dashboard. I have a small 5" tablet that I got from a vendor that will fit our graphic panel cutouts pretty well, and it has a standard ethernet port that can be POE, along with terminals for a 12VDC connection as well. Default resolution on the display is 720x1280 in portrait mode, so lots of real estate, but don’t want to make things too small to the point of it being a vision test.

Thanks so much for your time and help Ben! It is greatly appreciated!

The LCD is ugly and messy and not native. Can l leave it out of the export?

Here it is without the LCD.
This is what the flow looks like:

As you can see, its really not much at all.

Here is the flow. You will get a red pop down on the top of the Node-RED editor when you deploy, be ready with your phone or snip tool to grab an image of the missing nodes so you can add them to your pallet and then deploy again.

[
    {
        "id": "101727313f8b016d",
        "type": "ui_digital_display",
        "z": "ed8e36d19f36ea5c",
        "name": "Time",
        "group": "2f07e616a2514b8b",
        "order": 1,
        "width": 0,
        "height": 0,
        "digits": 5,
        "decimals": 1,
        "x": 1370,
        "y": 340,
        "wires": []
    },
    {
        "id": "d9a32a32dc02c5f0",
        "type": "inject",
        "z": "ed8e36d19f36ea5c",
        "name": "1 sec",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "1",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 1130,
        "y": 340,
        "wires": [
            [
                "101727313f8b016d"
            ]
        ]
    },
    {
        "id": "b0a37ddf.3686b",
        "type": "ui_digital_display",
        "z": "ed8e36d19f36ea5c",
        "name": "Timestamp",
        "group": "2f07e616a2514b8b",
        "order": 4,
        "width": 3,
        "height": 1,
        "digits": "10",
        "decimals": "0",
        "x": 1430,
        "y": 460,
        "wires": []
    },
    {
        "id": "6292c6cd.9cc168",
        "type": "ui_text",
        "z": "ed8e36d19f36ea5c",
        "group": "2f07e616a2514b8b",
        "order": 3,
        "width": 3,
        "height": 1,
        "name": "",
        "label": "Timestamp",
        "format": "{{msg.payload}}",
        "layout": "row-spread",
        "className": "",
        "x": 1430,
        "y": 420,
        "wires": []
    },
    {
        "id": "18a60805.7181b8",
        "type": "inject",
        "z": "ed8e36d19f36ea5c",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "1",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 1030,
        "y": 440,
        "wires": [
            [
                "9f744ce0.9d1de"
            ]
        ]
    },
    {
        "id": "9f744ce0.9d1de",
        "type": "function",
        "z": "ed8e36d19f36ea5c",
        "name": "cut milliseconds",
        "func": "msg.payload /= 1000;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1220,
        "y": 440,
        "wires": [
            [
                "b0a37ddf.3686b"
            ]
        ]
    },
    {
        "id": "8dfb7ed8618bb6e9",
        "type": "ui_button",
        "z": "ed8e36d19f36ea5c",
        "name": "",
        "group": "2f07e616a2514b8b",
        "order": 5,
        "width": 1,
        "height": 1,
        "passthru": false,
        "label": "PB1",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "",
        "payloadType": "str",
        "topic": "topic",
        "topicType": "msg",
        "x": 1230,
        "y": 540,
        "wires": [
            []
        ]
    },
    {
        "id": "20358fcc8f4961ee",
        "type": "ui_button",
        "z": "ed8e36d19f36ea5c",
        "name": "",
        "group": "2f07e616a2514b8b",
        "order": 10,
        "width": 1,
        "height": 1,
        "passthru": false,
        "label": "E/I",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "",
        "payloadType": "str",
        "topic": "topic",
        "topicType": "msg",
        "x": 1230,
        "y": 580,
        "wires": [
            []
        ]
    },
    {
        "id": "ca8c255af0d31c45",
        "type": "ui_button",
        "z": "ed8e36d19f36ea5c",
        "name": "",
        "group": "2f07e616a2514b8b",
        "order": 11,
        "width": 1,
        "height": 1,
        "passthru": false,
        "label": "A/M",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "",
        "payloadType": "str",
        "topic": "topic",
        "topicType": "msg",
        "x": 1230,
        "y": 620,
        "wires": [
            []
        ]
    },
    {
        "id": "4bdc15812459c355",
        "type": "ui_button",
        "z": "ed8e36d19f36ea5c",
        "name": "",
        "group": "2f07e616a2514b8b",
        "order": 9,
        "width": 2,
        "height": 2,
        "passthru": false,
        "label": "ACK",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "",
        "payloadType": "str",
        "topic": "topic",
        "topicType": "msg",
        "x": 1390,
        "y": 540,
        "wires": [
            []
        ]
    },
    {
        "id": "3aa375526b8dfe1b",
        "type": "ui_button",
        "z": "ed8e36d19f36ea5c",
        "name": "",
        "group": "2f07e616a2514b8b",
        "order": 12,
        "width": 2,
        "height": 2,
        "passthru": false,
        "label": "D",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "",
        "payloadType": "str",
        "topic": "topic",
        "topicType": "msg",
        "x": 1390,
        "y": 580,
        "wires": [
            []
        ]
    },
    {
        "id": "de4118bbeaf59ee7",
        "type": "ui_button",
        "z": "ed8e36d19f36ea5c",
        "name": "",
        "group": "2f07e616a2514b8b",
        "order": 15,
        "width": 2,
        "height": 2,
        "passthru": false,
        "label": "S",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "",
        "payloadType": "str",
        "topic": "topic",
        "topicType": "msg",
        "x": 1390,
        "y": 620,
        "wires": [
            []
        ]
    },
    {
        "id": "2b8ff92069fdd353",
        "type": "ui_level",
        "z": "ed8e36d19f36ea5c",
        "group": "2f07e616a2514b8b",
        "order": 6,
        "width": 1,
        "height": 6,
        "name": "",
        "label": "",
        "colorHi": "#e60000",
        "colorWarn": "#ff9900",
        "colorNormal": "#00b33c",
        "colorOff": "#595959",
        "min": 0,
        "max": 100,
        "segWarn": "",
        "segHigh": "",
        "unit": "",
        "layout": "sv",
        "channelA": "",
        "channelB": "",
        "decimals": 0,
        "animations": "soft",
        "shape": 2,
        "colorschema": "valuedriven",
        "textoptions": "default",
        "colorText": "#eeeeee",
        "fontLabel": "",
        "fontValue": "",
        "fontSmall": "",
        "colorFromTheme": true,
        "textAnimations": false,
        "hideValue": false,
        "tickmode": "off",
        "peakmode": false,
        "property": "payload",
        "peaktime": 3000,
        "x": 1230,
        "y": 700,
        "wires": []
    },
    {
        "id": "a9e25aee338aa7b2",
        "type": "ui_level",
        "z": "ed8e36d19f36ea5c",
        "group": "2f07e616a2514b8b",
        "order": 8,
        "width": 1,
        "height": 6,
        "name": "",
        "label": "",
        "colorHi": "#e60000",
        "colorWarn": "#ff9900",
        "colorNormal": "#00b33c",
        "colorOff": "#595959",
        "min": 0,
        "max": 100,
        "segWarn": "",
        "segHigh": "",
        "unit": "",
        "layout": "sv",
        "channelA": "",
        "channelB": "",
        "decimals": 0,
        "animations": "soft",
        "shape": "3",
        "colorschema": "valuedriven",
        "textoptions": "default",
        "colorText": "#eeeeee",
        "fontLabel": "",
        "fontValue": "",
        "fontSmall": "",
        "colorFromTheme": true,
        "textAnimations": false,
        "hideValue": false,
        "tickmode": "segments",
        "peakmode": false,
        "property": "payload",
        "peaktime": 3000,
        "x": 1230,
        "y": 660,
        "wires": []
    },
    {
        "id": "f6982b73695d0df0",
        "type": "ui_level",
        "z": "ed8e36d19f36ea5c",
        "group": "2f07e616a2514b8b",
        "order": 7,
        "width": 1,
        "height": 6,
        "name": "",
        "label": "",
        "colorHi": "#e60000",
        "colorWarn": "#ff9900",
        "colorNormal": "#00b33c",
        "colorOff": "#595959",
        "min": 0,
        "max": 100,
        "segWarn": "",
        "segHigh": "",
        "unit": "",
        "layout": "sv",
        "channelA": "",
        "channelB": "",
        "decimals": 0,
        "animations": "soft",
        "shape": 2,
        "colorschema": "valuedriven",
        "textoptions": "default",
        "colorText": "#eeeeee",
        "fontLabel": "",
        "fontValue": "",
        "fontSmall": "",
        "colorFromTheme": true,
        "textAnimations": false,
        "hideValue": false,
        "tickmode": "off",
        "peakmode": false,
        "property": "payload",
        "peaktime": 3000,
        "x": 1230,
        "y": 780,
        "wires": []
    },
    {
        "id": "01c4b306525d036a",
        "type": "inject",
        "z": "ed8e36d19f36ea5c",
        "name": "75",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "75",
        "payloadType": "num",
        "x": 1010,
        "y": 780,
        "wires": [
            [
                "f6982b73695d0df0"
            ]
        ]
    },
    {
        "id": "d78324bab9377c40",
        "type": "inject",
        "z": "ed8e36d19f36ea5c",
        "name": "42",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "42",
        "payloadType": "num",
        "x": 1010,
        "y": 700,
        "wires": [
            [
                "2b8ff92069fdd353"
            ]
        ]
    },
    {
        "id": "8a202d1ab89a0a1f",
        "type": "inject",
        "z": "ed8e36d19f36ea5c",
        "name": "22",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "22",
        "payloadType": "num",
        "x": 1010,
        "y": 660,
        "wires": [
            [
                "a9e25aee338aa7b2"
            ]
        ]
    },
    {
        "id": "2f07e616a2514b8b",
        "type": "ui_group",
        "name": "PID",
        "tab": "83959b1a9756d20a",
        "order": 1,
        "disp": true,
        "width": "6",
        "collapse": false,
        "className": ""
    },
    {
        "id": "83959b1a9756d20a",
        "type": "ui_tab",
        "name": "PID Template",
        "icon": "dashboard",
        "disabled": false,
        "hidden": false
    }
]
1 Like

Thanks so much! Again, it is very appreciated.

That tablet sounds pretty spot on.
It would be easy to make 4 pages, one for each loop.

I was going to add your slider under the three verticals, also there is a LED, so you can add them down the side as well, so yeah, there was easy another 20 min work and it would have been super close with the slider and LED, but yeah, you can see where I was headed in duplicating what you had.
For the top 4 displays its easy to use a template node with some CSS to change the color and style in a small text area.

Its a totally different use case, but it does show the template node with the green text etc and how that might work for your 4 main values up the top.

Also, yes, I love love love sparklines and think every analog / time value should have a sparkline, but now Im getting carried away…

Yeah, that tablet is actually a pretty nice unit, rather inexpensive and fits the bill perfectly for what I am looking to do. It is sold by a company called GeekLand out of Atlanta. It’s their model GK-Q5-POE. Here’s a link in case anyone wants to check it out:
5" Android POE wall mount tablet (geekland.co)

And I was indeed thinking about doing a small trend window with sparklines on one of the subscreens I was considering where you could change the PID tuning parameters and watch the process and valve response of the algorithm. Always handy to have a visualization when tuning a PID.

Dont forget there is a dashboard trend gadget.
With a bit of function node wrangling, you can plot a few pens.
Here is an example just now.

Here I am plotting the data from some of the points in this flow:

I booted things up this morning and its a 24 hour graph, you can see the RIO heat up and settle in the office.
Anyway, point is, it would be pretty easy to add a PID chart if that’s what you needed… or a sparkline.

Ok @kprickett (and everyone else following this thread), this time I really really am done!

Just needs some sparkline love!

[
    {
        "id": "101727313f8b016d",
        "type": "ui_digital_display",
        "z": "ed8e36d19f36ea5c",
        "name": "Time",
        "group": "2f07e616a2514b8b",
        "order": 5,
        "width": 0,
        "height": 0,
        "digits": 5,
        "decimals": 1,
        "x": 1370,
        "y": 340,
        "wires": []
    },
    {
        "id": "d9a32a32dc02c5f0",
        "type": "inject",
        "z": "ed8e36d19f36ea5c",
        "name": "1 sec",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "1",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 1130,
        "y": 340,
        "wires": [
            [
                "101727313f8b016d"
            ]
        ]
    },
    {
        "id": "b0a37ddf.3686b",
        "type": "ui_digital_display",
        "z": "ed8e36d19f36ea5c",
        "name": "Timestamp",
        "group": "2f07e616a2514b8b",
        "order": 7,
        "width": 3,
        "height": 1,
        "digits": "10",
        "decimals": "0",
        "x": 1430,
        "y": 460,
        "wires": []
    },
    {
        "id": "6292c6cd.9cc168",
        "type": "ui_text",
        "z": "ed8e36d19f36ea5c",
        "group": "2f07e616a2514b8b",
        "order": 6,
        "width": 3,
        "height": 1,
        "name": "",
        "label": "Timestamp",
        "format": "{{msg.payload}}",
        "layout": "row-spread",
        "className": "",
        "x": 1430,
        "y": 420,
        "wires": []
    },
    {
        "id": "18a60805.7181b8",
        "type": "inject",
        "z": "ed8e36d19f36ea5c",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "1",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 1030,
        "y": 440,
        "wires": [
            [
                "9f744ce0.9d1de"
            ]
        ]
    },
    {
        "id": "9f744ce0.9d1de",
        "type": "function",
        "z": "ed8e36d19f36ea5c",
        "name": "cut milliseconds",
        "func": "msg.payload /= 1000;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1220,
        "y": 440,
        "wires": [
            [
                "b0a37ddf.3686b"
            ]
        ]
    },
    {
        "id": "8dfb7ed8618bb6e9",
        "type": "ui_button",
        "z": "ed8e36d19f36ea5c",
        "name": "",
        "group": "2f07e616a2514b8b",
        "order": 9,
        "width": 2,
        "height": 1,
        "passthru": false,
        "label": "PB1",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "",
        "payloadType": "str",
        "topic": "topic",
        "topicType": "msg",
        "x": 1230,
        "y": 540,
        "wires": [
            []
        ]
    },
    {
        "id": "20358fcc8f4961ee",
        "type": "ui_button",
        "z": "ed8e36d19f36ea5c",
        "name": "",
        "group": "2f07e616a2514b8b",
        "order": 15,
        "width": 2,
        "height": 1,
        "passthru": false,
        "label": "E/I",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "",
        "payloadType": "str",
        "topic": "topic",
        "topicType": "msg",
        "x": 1230,
        "y": 580,
        "wires": [
            []
        ]
    },
    {
        "id": "ca8c255af0d31c45",
        "type": "ui_button",
        "z": "ed8e36d19f36ea5c",
        "name": "",
        "group": "2f07e616a2514b8b",
        "order": 17,
        "width": 2,
        "height": 1,
        "passthru": false,
        "label": "A/M",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "",
        "payloadType": "str",
        "topic": "topic",
        "topicType": "msg",
        "x": 1230,
        "y": 620,
        "wires": [
            []
        ]
    },
    {
        "id": "4bdc15812459c355",
        "type": "ui_button",
        "z": "ed8e36d19f36ea5c",
        "name": "",
        "group": "2f07e616a2514b8b",
        "order": 14,
        "width": 2,
        "height": 2,
        "passthru": false,
        "label": "ACK",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "",
        "payloadType": "str",
        "topic": "topic",
        "topicType": "msg",
        "x": 1390,
        "y": 540,
        "wires": [
            []
        ]
    },
    {
        "id": "3aa375526b8dfe1b",
        "type": "ui_button",
        "z": "ed8e36d19f36ea5c",
        "name": "",
        "group": "2f07e616a2514b8b",
        "order": 19,
        "width": 2,
        "height": 2,
        "passthru": false,
        "label": "D",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "",
        "payloadType": "str",
        "topic": "topic",
        "topicType": "msg",
        "x": 1390,
        "y": 580,
        "wires": [
            []
        ]
    },
    {
        "id": "de4118bbeaf59ee7",
        "type": "ui_button",
        "z": "ed8e36d19f36ea5c",
        "name": "",
        "group": "2f07e616a2514b8b",
        "order": 23,
        "width": 2,
        "height": 2,
        "passthru": false,
        "label": "S",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "",
        "payloadType": "str",
        "topic": "topic",
        "topicType": "msg",
        "x": 1390,
        "y": 620,
        "wires": [
            []
        ]
    },
    {
        "id": "2b8ff92069fdd353",
        "type": "ui_level",
        "z": "ed8e36d19f36ea5c",
        "group": "2f07e616a2514b8b",
        "order": 11,
        "width": 1,
        "height": 6,
        "name": "",
        "label": "",
        "colorHi": "#e60000",
        "colorWarn": "#ff9900",
        "colorNormal": "#00b33c",
        "colorOff": "#595959",
        "min": 0,
        "max": 100,
        "segWarn": "",
        "segHigh": "",
        "unit": "",
        "layout": "sv",
        "channelA": "",
        "channelB": "",
        "decimals": 0,
        "animations": "soft",
        "shape": 2,
        "colorschema": "valuedriven",
        "textoptions": "default",
        "colorText": "#eeeeee",
        "fontLabel": "",
        "fontValue": "",
        "fontSmall": "",
        "colorFromTheme": true,
        "textAnimations": false,
        "hideValue": false,
        "tickmode": "off",
        "peakmode": false,
        "property": "payload",
        "peaktime": 3000,
        "x": 1230,
        "y": 700,
        "wires": []
    },
    {
        "id": "a9e25aee338aa7b2",
        "type": "ui_level",
        "z": "ed8e36d19f36ea5c",
        "group": "2f07e616a2514b8b",
        "order": 13,
        "width": 1,
        "height": 6,
        "name": "",
        "label": "",
        "colorHi": "#e60000",
        "colorWarn": "#ff9900",
        "colorNormal": "#00b33c",
        "colorOff": "#595959",
        "min": 0,
        "max": 100,
        "segWarn": "",
        "segHigh": "",
        "unit": "",
        "layout": "sv",
        "channelA": "",
        "channelB": "",
        "decimals": 0,
        "animations": "soft",
        "shape": "3",
        "colorschema": "valuedriven",
        "textoptions": "default",
        "colorText": "#eeeeee",
        "fontLabel": "",
        "fontValue": "",
        "fontSmall": "",
        "colorFromTheme": true,
        "textAnimations": false,
        "hideValue": false,
        "tickmode": "segments",
        "peakmode": false,
        "property": "payload",
        "peaktime": 3000,
        "x": 1230,
        "y": 660,
        "wires": []
    },
    {
        "id": "f6982b73695d0df0",
        "type": "ui_level",
        "z": "ed8e36d19f36ea5c",
        "group": "2f07e616a2514b8b",
        "order": 12,
        "width": 1,
        "height": 6,
        "name": "",
        "label": "",
        "colorHi": "#e60000",
        "colorWarn": "#ff9900",
        "colorNormal": "#00b33c",
        "colorOff": "#595959",
        "min": 0,
        "max": 100,
        "segWarn": "",
        "segHigh": "",
        "unit": "",
        "layout": "sv",
        "channelA": "",
        "channelB": "",
        "decimals": 0,
        "animations": "soft",
        "shape": 2,
        "colorschema": "valuedriven",
        "textoptions": "default",
        "colorText": "#eeeeee",
        "fontLabel": "",
        "fontValue": "",
        "fontSmall": "",
        "colorFromTheme": true,
        "textAnimations": false,
        "hideValue": false,
        "tickmode": "off",
        "peakmode": false,
        "property": "payload",
        "peaktime": 3000,
        "x": 1230,
        "y": 780,
        "wires": []
    },
    {
        "id": "01c4b306525d036a",
        "type": "inject",
        "z": "ed8e36d19f36ea5c",
        "name": "75",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "75",
        "payloadType": "num",
        "x": 1010,
        "y": 780,
        "wires": [
            [
                "f6982b73695d0df0"
            ]
        ]
    },
    {
        "id": "d78324bab9377c40",
        "type": "inject",
        "z": "ed8e36d19f36ea5c",
        "name": "42",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "42",
        "payloadType": "num",
        "x": 1010,
        "y": 700,
        "wires": [
            [
                "2b8ff92069fdd353"
            ]
        ]
    },
    {
        "id": "8a202d1ab89a0a1f",
        "type": "inject",
        "z": "ed8e36d19f36ea5c",
        "name": "22",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "22",
        "payloadType": "num",
        "x": 1010,
        "y": 660,
        "wires": [
            [
                "a9e25aee338aa7b2"
            ]
        ]
    },
    {
        "id": "bdd9e1aa70f5828b",
        "type": "ui_led",
        "z": "ed8e36d19f36ea5c",
        "order": 16,
        "group": "2f07e616a2514b8b",
        "width": 1,
        "height": 1,
        "label": "",
        "labelPlacement": "left",
        "labelAlignment": "left",
        "colorForValue": [
            {
                "color": "#ff0000",
                "value": "false",
                "valueType": "bool"
            },
            {
                "color": "#008000",
                "value": "true",
                "valueType": "bool"
            }
        ],
        "allowColorForValueInMessage": false,
        "shape": "circle",
        "showGlow": true,
        "name": "",
        "x": 1030,
        "y": 520,
        "wires": []
    },
    {
        "id": "1c186ae6f4f9eb83",
        "type": "ui_led",
        "z": "ed8e36d19f36ea5c",
        "order": 18,
        "group": "2f07e616a2514b8b",
        "width": 1,
        "height": 1,
        "label": "",
        "labelPlacement": "left",
        "labelAlignment": "left",
        "colorForValue": [
            {
                "color": "#ff0000",
                "value": "false",
                "valueType": "bool"
            },
            {
                "color": "#008000",
                "value": "true",
                "valueType": "bool"
            }
        ],
        "allowColorForValueInMessage": false,
        "shape": "circle",
        "showGlow": true,
        "name": "",
        "x": 1030,
        "y": 560,
        "wires": []
    },
    {
        "id": "194c8ee85353b832",
        "type": "ui_led",
        "z": "ed8e36d19f36ea5c",
        "order": 21,
        "group": "2f07e616a2514b8b",
        "width": 1,
        "height": 1,
        "label": "",
        "labelPlacement": "left",
        "labelAlignment": "left",
        "colorForValue": [
            {
                "color": "#808080",
                "value": "false",
                "valueType": "bool"
            },
            {
                "color": "#008000",
                "value": "true",
                "valueType": "bool"
            }
        ],
        "allowColorForValueInMessage": false,
        "shape": "circle",
        "showGlow": true,
        "name": "",
        "x": 1030,
        "y": 600,
        "wires": []
    },
    {
        "id": "0d4b06f35479f09d",
        "type": "inject",
        "z": "ed8e36d19f36ea5c",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "false",
        "payloadType": "bool",
        "x": 890,
        "y": 600,
        "wires": [
            [
                "194c8ee85353b832"
            ]
        ]
    },
    {
        "id": "bcc1fe97f40c1d95",
        "type": "inject",
        "z": "ed8e36d19f36ea5c",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "false",
        "payloadType": "bool",
        "x": 890,
        "y": 560,
        "wires": [
            [
                "1c186ae6f4f9eb83"
            ]
        ]
    },
    {
        "id": "09a0d43ac6386d09",
        "type": "inject",
        "z": "ed8e36d19f36ea5c",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "true",
        "payloadType": "bool",
        "x": 890,
        "y": 520,
        "wires": [
            [
                "bdd9e1aa70f5828b"
            ]
        ]
    },
    {
        "id": "f41ea707aecf8310",
        "type": "ui_slider",
        "z": "ed8e36d19f36ea5c",
        "name": "",
        "label": "",
        "tooltip": "",
        "group": "2f07e616a2514b8b",
        "order": 26,
        "width": 4,
        "height": 1,
        "passthru": true,
        "outs": "all",
        "topic": "topic",
        "topicType": "msg",
        "min": 0,
        "max": 10,
        "step": 1,
        "className": "",
        "x": 1390,
        "y": 700,
        "wires": [
            []
        ]
    },
    {
        "id": "84099983.33cad",
        "type": "ui_template",
        "z": "ed8e36d19f36ea5c",
        "group": "2f07e616a2514b8b",
        "name": "PID Data-bottom",
        "order": 28,
        "width": 8,
        "height": 2,
        "format": "<style>\n    #mylog {\n        min-height: 520px;\n        padding: 0;\n        background-color: black;\n        white-space: pre;\n        word-wrap: break-word;\n        white-space: pre-wrap;       /* css-3 */\n        white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */\n        white-space: -pre-wrap;      /* Opera 4-6 */\n        white-space: -o-pre-wrap;    /* Opera 7 */\n        font-size:120%;\n        color:#FFFFFF;\n        font-family: monospace;\n    }\n</style>\n\n<div id=\"mylog\" ng-bind=\"msg.payload\" contenteditable=\"true\">\n    <pre>{{msg.payload[0]}}</pre>\n</div>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "resendOnRefresh": true,
        "templateScope": "local",
        "className": "",
        "x": 1250,
        "y": 860,
        "wires": [
            []
        ]
    },
    {
        "id": "4349960df6873bdb",
        "type": "inject",
        "z": "ed8e36d19f36ea5c",
        "name": "pid dummy data",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "Valve: Fail Closed  P & S Unit: GPM    E/I Button: E = LT",
        "payloadType": "str",
        "x": 1038.2000122070312,
        "y": 867.2000122070312,
        "wires": [
            [
                "84099983.33cad"
            ]
        ]
    },
    {
        "id": "a1bf6ec05928a4c3",
        "type": "ui_template",
        "z": "ed8e36d19f36ea5c",
        "group": "2f07e616a2514b8b",
        "name": "PID Data-top left",
        "order": 1,
        "width": 3,
        "height": 2,
        "format": "<style>\n    #topLeft {\n        min-height: 50px;\n        padding: 0;\n        background-color: black;\n        white-space: pre;\n        word-wrap: break-word;\n        white-space: pre-wrap;       /* css-3 */\n        white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */\n        white-space: -pre-wrap;      /* Opera 4-6 */\n        white-space: -o-pre-wrap;    /* Opera 7 */\n        font-size:200%;\n        color:#FF0000;\n        font-family: monospace;\n    }\n</style>\n\n<div id=\"topLeft\" ng-bind=\"msg.payload\" contenteditable=\"true\">\n    <pre>{{msg.payload[0]}}</pre>\n</div>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "resendOnRefresh": true,
        "templateScope": "local",
        "className": "",
        "x": 1240,
        "y": 940,
        "wires": [
            []
        ]
    },
    {
        "id": "9d174d2daafefecc",
        "type": "inject",
        "z": "ed8e36d19f36ea5c",
        "name": "pid dummy data",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "P: -3,55.6",
        "payloadType": "str",
        "x": 1040,
        "y": 940,
        "wires": [
            [
                "a1bf6ec05928a4c3"
            ]
        ]
    },
    {
        "id": "7403aa51102d2550",
        "type": "ui_template",
        "z": "ed8e36d19f36ea5c",
        "group": "2f07e616a2514b8b",
        "name": "PID Data-top left",
        "order": 3,
        "width": 3,
        "height": 2,
        "format": "<style>\n    #topRight {\n        min-height: 50px;\n        padding: 0;\n        background-color: black;\n        white-space: pre;\n        word-wrap: break-word;\n        white-space: pre-wrap;       /* css-3 */\n        white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */\n        white-space: -pre-wrap;      /* Opera 4-6 */\n        white-space: -o-pre-wrap;    /* Opera 7 */\n        font-size:200%;\n        color:#FFA500;\n        font-family: monospace;\n    }\n</style>\n\n<div id=\"topRight\" ng-bind=\"msg.payload\" contenteditable=\"true\">\n    <pre>{{msg.payload[0]}}</pre>\n</div>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "resendOnRefresh": true,
        "templateScope": "local",
        "className": "",
        "x": 1240,
        "y": 1000,
        "wires": [
            []
        ]
    },
    {
        "id": "54687c0677d4089c",
        "type": "inject",
        "z": "ed8e36d19f36ea5c",
        "name": "pid dummy data",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "S: 2,568.0",
        "payloadType": "str",
        "x": 1040,
        "y": 1000,
        "wires": [
            [
                "7403aa51102d2550"
            ]
        ]
    },
    {
        "id": "2f07e616a2514b8b",
        "type": "ui_group",
        "name": "FIC - 0001 Fractionator Feed Flow",
        "tab": "83959b1a9756d20a",
        "order": 1,
        "disp": true,
        "width": "8",
        "collapse": false,
        "className": ""
    },
    {
        "id": "83959b1a9756d20a",
        "type": "ui_tab",
        "name": "PID Template",
        "icon": "dashboard",
        "disabled": false,
        "hidden": false
    }
]
3 Likes

LOL! Just couldn’t help yourself - you had to do that little bit extra to add some polish. I know that feeling all too well.

Ben - thanks for putting in the time and effort to help me out. I truly appreciate it.

3 Likes