Reading a Json file from a render farm and display in UI Table

Hi,
I made a small personal Render-Farm that writes and overwrites a Json text file to an ftp every minute. In Node Red I read this text file with a "http request node" that then gets fed into a UI Table. The Table gets filled out correctly. The only issue I have is that the "http request node" doesn't read the latest version of this text file. So the text file updates every min with new data. If I go directly to the http link of the text file with a browser I see the data getting updated every min. But in Node Red the "http request node" doesn't seem to update. Whenever I send a Get it reads the first text file that was made. It's like it doesn't clear the history or something. How does one read a text file on a http link in Node Red?

Below an example of the text file:

[
{"SHOT":"SHOT_01_HOR_ALL-LAYERS_HANGAR-INTRO","RANGE":"(1..100)","PROG":33,"FRAMES":"<34..100>"},
{"SHOT":"SHOT_02_HOR_ALL-LAYERS_FlY-OVER","RANGE":"(1..110)","PROG":0,"FRAMES":"<1..110>"},
{"SHOT":"SHOT_03_HOR_ALL-LAYERS_STEP-DOWN","RANGE":"(1..55)","PROG":0,"FRAMES":"<1..55>"},
{"SHOT":"SHOT_04_HOR_ALL-LAYERS_DECREASE-TENSION","RANGE":"(1..55)","PROG":0,"FRAMES":"<1..55>"},
{"SHOT":"SHOT_05_HOR_ALL-LAYERS_INCREASE-TENSION","RANGE":"(1..50)","PROG":0,"FRAMES":"<1..50>"},
{"SHOT":"SHOT_06_HOR_ALL-LAYERS_CLOSE-TLS","RANGE":"(1..75)","PROG":100,"FRAMES":"< COMPLETE >"},
{"SHOT":"SHOT_07_HOR_ALL-LAYERS_CLOSE-TOECAP","RANGE":"(1..55)","PROG":0,"FRAMES":"<1..55>"},
{"SHOT":"SHOT_08_HOR_ALL-LAYERS_CLOSE-SHOE","RANGE":"(1..40)","PROG":100,"FRAMES":"< COMPLETE >"},
{"SHOT":"SHOT_09_HOR_ALL-LAYERS_LACE-CLOSE","RANGE":"(1..60)","PROG":100,"FRAMES":"< COMPLETE >"},
{"SHOT":"SHOT_10_HOR_ALL-LAYERS_TLS-WIRE-IN","RANGE":"(1..30)","PROG":100,"FRAMES":"< COMPLETE >"},
{"SHOT":"SHOT_11_HOR_ALL-LAYERS_TLS-PUSH-IN","RANGE":"(1..50)","PROG":100,"FRAMES":"< COMPLETE >"},
{"SHOT":"SHOT_12_HOR_ALL-LAYERS_TLS-PULL-OUT","RANGE":"(1..20)","PROG":100,"FRAMES":"< COMPLETE >"},
{"SHOT":"SHOT_13_HOR_ALL-LAYERS_WIRE-CLOSE-SHOE","RANGE":"(1..40)","PROG":100,"FRAMES":"< COMPLETE >"},
{"SHOT":"SHOT_14_HOR_ALL-LAYERS_CONTAINER","RANGE":"(1..100)","PROG":100,"FRAMES":"< COMPLETE >"},
{"SHOT":"SHOT_15_HOR_ALL-LAYERS_TLS-MORPHE","RANGE":"(1..125)","PROG":0,"FRAMES":"<1..125>"},
{"SHOT":"SHOT_16_HOR_ALL-LAYERS_AIRPLANE-MORPHE","RANGE":"(1..125)","PROG":0,"FRAMES":"<1..125>"},
{"SHOT":"SHOT_17_HOR_ALL-LAYERS_SIDE-SHOE","RANGE":"(1..40)","PROG":0,"FRAMES":"<1..40>"},
{"SHOT":"SHOT_18_HOR_ALL-LAYERS_SHOE-TURN","RANGE":"(1..85)","PROG":0,"FRAMES":"<1..85>"},
{"SHOT":"SHOT_19_HOR_ALL-LAYERS_LACE-CLOSE-INSERT","RANGE":"(1..55)","PROG":100,"FRAMES":"< COMPLETE >"},
{"SHOT":"SHOT_20_HOR_ALL-LAYERS_INSERT-END","RANGE":"(1..60)","PROG":0,"FRAMES":"<1..60>"},
{"SHOT":"SHOT_21_HOR_ALL-LAYERS_MICROFIBER","RANGE":"(1..60)","PROG":100,"FRAMES":"< COMPLETE >"},
{"SHOT":"SHOT_22_HOR_ALL-LAYERS_DECREASE-TENSION-B","RANGE":"(1..55)","PROG":0,"FRAMES":"<1..55>"},
{"SHOT":"SHOT_23_HOR_ALL-LAYERS_PRINT-A","RANGE":"(1..4)","PROG":100,"FRAMES":"< COMPLETE >"},
{"SHOT":"SHOT_24_HOR_ALL-LAYERS_PRINT-B","RANGE":"(1..4)","PROG":100,"FRAMES":"< COMPLETE >"},
{"SHOT":"SHOT_25_HOR_ALL-LAYERS_FlY-OVER-NO-SHOES","RANGE":"(110..110)","PROG":100,"FRAMES":"< COMPLETE >"}
]

This is what the table looks like when I read the text file with the http request node:

Since you havent shared your flow its little difficult to check anything.
I dont know if this applies to the Http request node but .. could this be a caching issue ?
There is a request header that controls the caching :

Does sending/setting this header just before the request node fix the issue ?

Example :
msg.headers["Cache-Control"] = "no-cache"

Here is the node flow:

[
    {
        "id": "9cb597d5a7bf8129",
        "type": "ui_table",
        "z": "c15f0fc498f6a014",
        "group": "e5aef99a33253423",
        "name": "",
        "order": 12,
        "width": "10",
        "height": "22",
        "columns": [
            {
                "field": "SHOT",
                "title": "SHOT",
                "width": "65%",
                "align": "left",
                "formatter": "plaintext",
                "formatterParams": {
                    "target": "_blank"
                }
            },
            {
                "field": "RANGE",
                "title": "RANGE",
                "width": "10%",
                "align": "center",
                "formatter": "plaintext",
                "formatterParams": {
                    "target": "_blank"
                }
            },
            {
                "field": "PROG",
                "title": "PROG",
                "width": "10%",
                "align": "left",
                "formatter": "progress",
                "formatterParams": {
                    "target": "_blank"
                }
            },
            {
                "field": "FRAMES",
                "title": "FRAMES",
                "width": "15%",
                "align": "center",
                "formatter": "plaintext",
                "formatterParams": {
                    "target": "_blank"
                }
            }
        ],
        "outputs": 0,
        "cts": false,
        "x": 2050,
        "y": 180,
        "wires": []
    },
    {
        "id": "2c0b438335294857",
        "type": "json",
        "z": "c15f0fc498f6a014",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 1890,
        "y": 180,
        "wires": [
            [
                "9cb597d5a7bf8129"
            ]
        ]
    },
    {
        "id": "8035eeb623202a66",
        "type": "http request",
        "z": "c15f0fc498f6a014",
        "name": "",
        "method": "GET",
        "ret": "txt",
        "paytoqs": "ignore",
        "url": "https://I_removed_the_link_here",
        "tls": "",
        "persist": true,
        "proxy": "",
        "authType": "",
        "credentials": {},
        "x": 1710,
        "y": 180,
        "wires": [
            [
                "2c0b438335294857"
            ]
        ]
    },
    {
        "id": "8137554f5934eb06",
        "type": "inject",
        "z": "c15f0fc498f6a014",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "10",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "payloadType": "date",
        "x": 1490,
        "y": 180,
        "wires": [
            [
                "8035eeb623202a66"
            ]
        ]
    },
    {
        "id": "e5aef99a33253423",
        "type": "ui_group",
        "name": "TABLE TEST",
        "tab": "461f3885ff28d84f",
        "order": 1,
        "disp": true,
        "width": "10",
        "collapse": false,
        "className": ""
    },
    {
        "id": "461f3885ff28d84f",
        "type": "ui_tab",
        "name": "TABLE",
        "icon": "dashboard",
        "order": 2,
        "disabled": false,
        "hidden": false
    }
]

is there a reason you have "Enable connection keep-alive" checked ?
does it make a difference if you disable it ?
have you tested the no-cache header suggestion ?

I had the "Enable connection keep-alive" disabled before.. I was just trying to get it to work. I'm not sure how to implement the No Cache. Do I put a function node between timestamp and the http request node?
If so That is what I tried and it didn't work.

yes .. a function or a Change node would do but it seems that thats not the problem.
I created a server on my system serving a text file with your data and did an http request to read it.
then made a small change, saved and read it again. The changes are read by the http request in my test with no problem.

are you sure its the http request that its not reading the changes in your flow ?
have you wired a debug node directly after the request node to confirm that?

I've send you a private message with the url.

OK so it works, only thing I can't figure out is how to get the value in the progressbar. Like in the example to the left. It shows 90% in the progressbar.

This is the flow used so far. Special thanks to UnborN...

[
    {
        "id": "9cb597d5a7bf8129",
        "type": "ui_table",
        "z": "c15f0fc498f6a014",
        "group": "e5aef99a33253423",
        "name": "TEST1",
        "order": 12,
        "width": "10",
        "height": "22",
        "columns": [
            {
                "field": "SHOT",
                "title": "SHOT",
                "width": "65%",
                "align": "left",
                "formatter": "plaintext",
                "formatterParams": {
                    "target": "_blank"
                }
            },
            {
                "field": "RANGE",
                "title": "RANGE",
                "width": "10%",
                "align": "center",
                "formatter": "plaintext",
                "formatterParams": {
                    "target": "_blank"
                }
            },
            {
                "field": "PROG",
                "title": "PROG",
                "width": "10%",
                "align": "left",
                "formatter": "progress",
                "formatterParams": {
                    "target": "_blank"
                }
            },
            {
                "field": "FRAMES",
                "title": "FRAMES",
                "width": "15%",
                "align": "center",
                "formatter": "plaintext",
                "formatterParams": {
                    "target": "_blank"
                }
            }
        ],
        "outputs": 0,
        "cts": false,
        "x": 1860,
        "y": 220,
        "wires": []
    },
    {
        "id": "8137554f5934eb06",
        "type": "inject",
        "z": "c15f0fc498f6a014",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "10",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "payloadType": "date",
        "x": 1330,
        "y": 220,
        "wires": [
            [
                "611010f410660c95"
            ]
        ]
    },
    {
        "id": "611010f410660c95",
        "type": "function",
        "z": "c15f0fc498f6a014",
        "name": "",
        "func": "msg.headers = {};\nmsg.headers[\"Cache-Control\"] = \"no-cache\"\nmsg.headers[\"Pragma\"] = \"no-cache\"\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1500,
        "y": 220,
        "wires": [
            [
                "ed6ff04eabbe6ef2"
            ]
        ]
    },
    {
        "id": "ad041b238c0a1439",
        "type": "comment",
        "z": "c15f0fc498f6a014",
        "name": "Save this as a text file and copy it to an URL, use the same URL in the http request node",
        "info": "[\n{\"SHOT\":\"SHOT_01_HOR_ALL-LAYERS_TEST-AAAA\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_02_HOR_ALL-LAYERS_TEST-BBBB\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_03_HOR_ALL-LAYERS_TEST-CCCC\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_04_HOR_ALL-LAYERS_TEST-DDDD\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_05_HOR_ALL-LAYERS_TEST-EEEE\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_06_HOR_ALL-LAYERS_TEST-FFFF\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_07_HOR_ALL-LAYERS_TEST-GGGG\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_08_HOR_ALL-LAYERS_TEST-HHHH\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_09_HOR_ALL-LAYERS_TEST-IIII\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_10_HOR_ALL-LAYERS_TEST-JJJJ\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_11_HOR_ALL-LAYERS_TEST-KKKK\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_12_HOR_ALL-LAYERS_TEST-LLLL\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_13_HOR_ALL-LAYERS_TEST-MMMM\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_14_HOR_ALL-LAYERS_TEST-NNNN\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_15_HOR_ALL-LAYERS_TEST-OOOO\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_16_HOR_ALL-LAYERS_TEST-PPPP\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_17_HOR_ALL-LAYERS_TEST-QQQQ\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_18_HOR_ALL-LAYERS_TEST-RRRR\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_19_HOR_ALL-LAYERS_TEST-SSSS\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_20_HOR_ALL-LAYERS_TEST-TTTT\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_21_HOR_ALL-LAYERS_TEST-UUUU\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_22_HOR_ALL-LAYERS_TEST-VVVV\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_23_HOR_ALL-LAYERS_TEST-WWWW\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_24_HOR_ALL-LAYERS_TEST-XXXX\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_25_HOR_ALL-LAYERS_TEST-YYYY\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"}\n]",
        "x": 1540,
        "y": 260,
        "wires": []
    },
    {
        "id": "ed6ff04eabbe6ef2",
        "type": "http request",
        "z": "c15f0fc498f6a014",
        "name": "renderfarm",
        "method": "GET",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 1670,
        "y": 220,
        "wires": [
            [
                "9cb597d5a7bf8129"
            ]
        ]
    },
    {
        "id": "e5aef99a33253423",
        "type": "ui_group",
        "name": "TABLE TEST",
        "tab": "461f3885ff28d84f",
        "order": 1,
        "disp": true,
        "width": "10",
        "collapse": false,
        "className": ""
    },
    {
        "id": "461f3885ff28d84f",
        "type": "ui_tab",
        "name": "TABLE",
        "icon": "dashboard",
        "order": 2,
        "disabled": false,
        "hidden": false
    }
]

Im glad you have it working

Regarding the percentage in the progress bar, based on the ui_control example from the ui_table examples

[{"id":"f7c8902ad62de588","type":"debug","z":"5847b7aa62131d37","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":810,"y":800,"wires":[]},{"id":"3a167096fe25da22","type":"inject","z":"5847b7aa62131d37","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":290,"y":880,"wires":[["c742bd67b53375c1"]]},{"id":"c742bd67b53375c1","type":"function","z":"5847b7aa62131d37","name":"","func":"msg.headers = {};\nmsg.headers[\"Cache-Control\"] = \"no-cache\"\nmsg.headers[\"Pragma\"] = \"no-cache\"\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":470,"y":880,"wires":[["04664a28783869ad"]]},{"id":"2f483df4000bc3f1","type":"comment","z":"5847b7aa62131d37","name":"Save this as a text file and copy it to an URL, use the same URL in the http request node","info":"[\n{\"SHOT\":\"SHOT_01_HOR_ALL-LAYERS_TEST-AAAA\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_02_HOR_ALL-LAYERS_TEST-BBBB\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_03_HOR_ALL-LAYERS_TEST-CCCC\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_04_HOR_ALL-LAYERS_TEST-DDDD\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_05_HOR_ALL-LAYERS_TEST-EEEE\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_06_HOR_ALL-LAYERS_TEST-FFFF\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_07_HOR_ALL-LAYERS_TEST-GGGG\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_08_HOR_ALL-LAYERS_TEST-HHHH\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_09_HOR_ALL-LAYERS_TEST-IIII\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_10_HOR_ALL-LAYERS_TEST-JJJJ\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_11_HOR_ALL-LAYERS_TEST-KKKK\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_12_HOR_ALL-LAYERS_TEST-LLLL\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_13_HOR_ALL-LAYERS_TEST-MMMM\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_14_HOR_ALL-LAYERS_TEST-NNNN\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_15_HOR_ALL-LAYERS_TEST-OOOO\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_16_HOR_ALL-LAYERS_TEST-PPPP\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_17_HOR_ALL-LAYERS_TEST-QQQQ\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_18_HOR_ALL-LAYERS_TEST-RRRR\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_19_HOR_ALL-LAYERS_TEST-SSSS\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_20_HOR_ALL-LAYERS_TEST-TTTT\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_21_HOR_ALL-LAYERS_TEST-UUUU\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_22_HOR_ALL-LAYERS_TEST-VVVV\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_23_HOR_ALL-LAYERS_TEST-WWWW\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_24_HOR_ALL-LAYERS_TEST-XXXX\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_25_HOR_ALL-LAYERS_TEST-YYYY\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"}\n]","x":530,"y":1020,"wires":[]},{"id":"04664a28783869ad","type":"http request","z":"5847b7aa62131d37","name":"renderfarm","method":"GET","ret":"obj","paytoqs":"ignore","url":"url ","tls":"","persist":false,"proxy":"","authType":"","senderr":false,"x":640,"y":880,"wires":[["f7c8902ad62de588","8115c722.5d91d8"]]},{"id":"5aadc209c20750ed","type":"ui_table","z":"5847b7aa62131d37","group":"e7750b1af4e6fab9","name":"TEST1","order":12,"width":"32","height":"22","columns":[{"field":"SHOT","title":"SHOT","width":"65%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"RANGE","title":"RANGE","width":"10%","align":"center","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"PROG","title":"PROG","width":"10%","align":"left","formatter":"progress","formatterParams":{"target":"_blank"}},{"field":"FRAMES","title":"FRAMES","width":"15%","align":"center","formatter":"plaintext","formatterParams":{"target":"_blank"}}],"outputs":0,"cts":false,"x":980,"y":880,"wires":[]},{"id":"8115c722.5d91d8","type":"change","z":"5847b7aa62131d37","name":"ui_control","rules":[{"t":"set","p":"ui_control","pt":"msg","to":"{\"tabulator\":{\"columnResized\":\"function(column){     var newColumn = {         field: column._column.field,         visible: column._column.visible,         width: column._column.width,         widthFixed: column._column.widthFixed,         widthStyled: column._column.widthStyled     }; this.send({topic:this.config.topic,ui_control:{callback:'columnResized',columnWidths:newColumn}}); }\",\"columnMoved\":\"function(column, columns){     var newColumns=[];     columns.forEach(function (column) {         newColumns.push({'field': column._column.field});     });     this.send({topic:this.config.topic,ui_control:{callback:'columnMoved',columns:newColumns}}); }\",\"groupHeader\":\"function (value, count, data, group) {return value + \\\"<span style='color:#d00; margin-left:10px;'>(\\\" + count + \\\" Termostat\\\"+((count>1) ? \\\"e\\\" : \\\"\\\") + \\\")</span>\\\";}\",\"columns\":[{\"formatterParams\":{\"target\":\"_blank\",\"min\":0,\"max\":99,\"color\":[\"gray\",\"orange\",\"green\"],\"legend\":\"function (value) {return (value>0)? '&nbsp;&nbsp;'+value+' %' : '-';}\",\"legendColor\":\"#101010\",\"legendAlign\":\"center\"},\"title\":\"PROG\",\"field\":\"PROG\",\"formatter\":\"progress\",\"topCalc\":\"max\",\"width\":100}],\"layout\":\"fitColumns\",\"movableColumns\":true,\"groupBy\":\"\"},\"customHeight\":12}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":820,"y":880,"wires":[["5aadc209c20750ed"]]},{"id":"92e26730d3bf33b3","type":"inject","z":"5847b7aa62131d37","name":"test data","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[{\"SHOT\":\"SHOT_01_HOR_ALL-LAYERS_TEST-AAAA\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_02_HOR_ALL-LAYERS_TEST-BBBB\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_03_HOR_ALL-LAYERS_TEST-CCCC\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_04_HOR_ALL-LAYERS_TEST-DDDD\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_05_HOR_ALL-LAYERS_TEST-EEEE\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_06_HOR_ALL-LAYERS_TEST-FFFF\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_07_HOR_ALL-LAYERS_TEST-GGGG\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_08_HOR_ALL-LAYERS_TEST-HHHH\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_09_HOR_ALL-LAYERS_TEST-IIII\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_10_HOR_ALL-LAYERS_TEST-JJJJ\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_11_HOR_ALL-LAYERS_TEST-KKKK\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_12_HOR_ALL-LAYERS_TEST-LLLL\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_13_HOR_ALL-LAYERS_TEST-MMMM\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_14_HOR_ALL-LAYERS_TEST-NNNN\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_15_HOR_ALL-LAYERS_TEST-OOOO\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_16_HOR_ALL-LAYERS_TEST-PPPP\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_17_HOR_ALL-LAYERS_TEST-QQQQ\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_18_HOR_ALL-LAYERS_TEST-RRRR\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_19_HOR_ALL-LAYERS_TEST-SSSS\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_20_HOR_ALL-LAYERS_TEST-TTTT\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_21_HOR_ALL-LAYERS_TEST-UUUU\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_22_HOR_ALL-LAYERS_TEST-VVVV\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_23_HOR_ALL-LAYERS_TEST-WWWW\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_24_HOR_ALL-LAYERS_TEST-XXXX\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_25_HOR_ALL-LAYERS_TEST-YYYY\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"}]","payloadType":"json","x":640,"y":960,"wires":[["8115c722.5d91d8"]]},{"id":"e7750b1af4e6fab9","type":"ui_group","name":"TABLE TEST","tab":"461f3885ff28d84f","order":1,"disp":true,"width":"32","collapse":false,"className":""},{"id":"461f3885ff28d84f","type":"ui_tab","name":"TABLE","icon":"dashboard","order":2,"disabled":false,"hidden":false}]

There is an extra black row can this be removed? And how can I set the text to white in your example?

Almost there... The PROG text color is now white, it is more visible then the black text.
I would only like to remove the black bar.

And here is the flow so far:

[
    {
        "id": "9cb597d5a7bf8129",
        "type": "ui_table",
        "z": "c15f0fc498f6a014",
        "group": "e5aef99a33253423",
        "name": "TEST1",
        "order": 12,
        "width": "10",
        "height": "22",
        "columns": [
            {
                "field": "SHOT",
                "title": "SHOT",
                "width": "65%",
                "align": "left",
                "formatter": "plaintext",
                "formatterParams": {
                    "target": "_blank"
                }
            },
            {
                "field": "RANGE",
                "title": "RANGE",
                "width": "10%",
                "align": "center",
                "formatter": "plaintext",
                "formatterParams": {
                    "target": "_blank"
                }
            },
            {
                "field": "PROG",
                "title": "PROG",
                "width": "10%",
                "align": "left",
                "formatter": "progress",
                "formatterParams": {
                    "target": "_blank"
                }
            },
            {
                "field": "FRAMES",
                "title": "FRAMES",
                "width": "15%",
                "align": "center",
                "formatter": "plaintext",
                "formatterParams": {
                    "target": "_blank"
                }
            }
        ],
        "outputs": 0,
        "cts": false,
        "x": 1000,
        "y": 200,
        "wires": []
    },
    {
        "id": "8035eeb623202a66",
        "type": "http request",
        "z": "c15f0fc498f6a014",
        "name": "DUMMY",
        "method": "GET",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "credentials": {},
        "x": 640,
        "y": 200,
        "wires": [
            [
                "29edea72ba4352b2",
                "e6d07fa1a97184ce"
            ]
        ]
    },
    {
        "id": "8137554f5934eb06",
        "type": "inject",
        "z": "c15f0fc498f6a014",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "10",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "payloadType": "date",
        "x": 270,
        "y": 200,
        "wires": [
            [
                "611010f410660c95"
            ]
        ]
    },
    {
        "id": "611010f410660c95",
        "type": "function",
        "z": "c15f0fc498f6a014",
        "name": "",
        "func": "msg.headers = {};\nmsg.headers[\"Cache-Control\"] = \"no-cache\"\nmsg.headers[\"Pragma\"] = \"no-cache\"\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 440,
        "y": 200,
        "wires": [
            [
                "69ccdc31a1c60ac3",
                "8035eeb623202a66"
            ]
        ]
    },
    {
        "id": "ad041b238c0a1439",
        "type": "comment",
        "z": "c15f0fc498f6a014",
        "name": "Save this as a text file and copy it to an URL, use the same URL in the http request node",
        "info": "[\n{\"SHOT\":\"SHOT_01_HOR_ALL-LAYERS_TEST-AAAA\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_02_HOR_ALL-LAYERS_TEST-BBBB\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_03_HOR_ALL-LAYERS_TEST-CCCC\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_04_HOR_ALL-LAYERS_TEST-DDDD\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_05_HOR_ALL-LAYERS_TEST-EEEE\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_06_HOR_ALL-LAYERS_TEST-FFFF\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_07_HOR_ALL-LAYERS_TEST-GGGG\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_08_HOR_ALL-LAYERS_TEST-HHHH\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_09_HOR_ALL-LAYERS_TEST-IIII\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_10_HOR_ALL-LAYERS_TEST-JJJJ\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_11_HOR_ALL-LAYERS_TEST-KKKK\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_12_HOR_ALL-LAYERS_TEST-LLLL\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_13_HOR_ALL-LAYERS_TEST-MMMM\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_14_HOR_ALL-LAYERS_TEST-NNNN\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_15_HOR_ALL-LAYERS_TEST-OOOO\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_16_HOR_ALL-LAYERS_TEST-PPPP\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_17_HOR_ALL-LAYERS_TEST-QQQQ\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_18_HOR_ALL-LAYERS_TEST-RRRR\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_19_HOR_ALL-LAYERS_TEST-SSSS\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_20_HOR_ALL-LAYERS_TEST-TTTT\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_21_HOR_ALL-LAYERS_TEST-UUUU\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_22_HOR_ALL-LAYERS_TEST-VVVV\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_23_HOR_ALL-LAYERS_TEST-WWWW\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_24_HOR_ALL-LAYERS_TEST-XXXX\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_25_HOR_ALL-LAYERS_TEST-YYYY\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"}\n]",
        "x": 620,
        "y": 140,
        "wires": []
    },
    {
        "id": "e6d07fa1a97184ce",
        "type": "change",
        "z": "c15f0fc498f6a014",
        "name": "ui_control",
        "rules": [
            {
                "t": "set",
                "p": "ui_control",
                "pt": "msg",
                "to": "{\"tabulator\":{\"columnResized\":\"function(column){     var newColumn = {         field: column._column.field,         visible: column._column.visible,         width: column._column.width,         widthFixed: column._column.widthFixed,         widthStyled: column._column.widthStyled     }; this.send({topic:this.config.topic,ui_control:{callback:'columnResized',columnWidths:newColumn}}); }\",\"columnMoved\":\"function(column, columns){     var newColumns=[];     columns.forEach(function (column) {         newColumns.push({'field': column._column.field});     });     this.send({topic:this.config.topic,ui_control:{callback:'columnMoved',columns:newColumns}}); }\",\"groupHeader\":\"function (value, count, data, group) {return value + \\\"<span style='color:#d255; margin-left:10px;'>(\\\" + count + \\\" Termostat\\\"+((count>1) ? \\\"e\\\" : \\\"\\\") + \\\")</span>\\\";}\",\"columns\":[{\"formatterParams\":{\"target\":\"_blank\",\"min\":0,\"max\":100,\"color\":[\"red\",\"orange\",\"orange\",\"orange\",\"orange\",\"orange\",\"orange\",\"orange\",\"orange\",\"green\"],\"legend\":\"function (value) {return (value>0)? '&nbsp;&nbsp;'+value+' % ' : '-';}\",\"legendColor\":\"white\",\"legendAlign\":\"center\"},\"title\":\"PROG\",\"field\":\"PROG\",\"formatter\":\"progress\",\"topCalc\":\"max\",\"color\":\"white\"}],\"layout\":\"fitColumns\",\"movableColumns\":true,\"groupBy\":\"\"},\"customHeight\":30}",
                "tot": "json"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 840,
        "y": 200,
        "wires": [
            [
                "9cb597d5a7bf8129"
            ]
        ]
    },
    {
        "id": "e5aef99a33253423",
        "type": "ui_group",
        "name": "TABLE TEST",
        "tab": "461f3885ff28d84f",
        "order": 1,
        "disp": true,
        "width": "10",
        "collapse": false,
        "className": ""
    },
    {
        "id": "461f3885ff28d84f",
        "type": "ui_tab",
        "name": "TABLE",
        "icon": "dashboard",
        "order": 2,
        "disabled": false,
        "hidden": false
    }
]
1 Like

The black bar (due to dark theme) is because of the topCalc:"max" option that shows the max value at this row. you can remove it along with a few other unnecessary lines

[{"id":"071635dd1eb716b0","type":"ui_table","z":"5847b7aa62131d37","group":"64cab9eb23d3e552","name":"TEST1","order":12,"width":"10","height":"22","columns":[{"field":"SHOT","title":"SHOT","width":"65%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"RANGE","title":"RANGE","width":"10%","align":"center","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"PROG","title":"PROG","width":"10%","align":"left","formatter":"progress","formatterParams":{"target":"_blank"}},{"field":"FRAMES","title":"FRAMES","width":"15%","align":"center","formatter":"plaintext","formatterParams":{"target":"_blank"}}],"outputs":0,"cts":false,"x":680,"y":540,"wires":[]},{"id":"35210755562ebfb0","type":"change","z":"5847b7aa62131d37","name":"ui_control","rules":[{"t":"set","p":"ui_control","pt":"msg","to":"{\"tabulator\":{\"columns\":[{\"formatterParams\":{\"target\":\"_blank\",\"min\":0,\"max\":100,\"color\":[\"red\",\"orange\",\"orange\",\"orange\",\"orange\",\"orange\",\"orange\",\"orange\",\"orange\",\"green\"],\"legend\":\"function (value) {return (value>0)? '&nbsp;&nbsp;'+value+' % ' : '-';}\",\"legendColor\":\"white\",\"legendAlign\":\"center\"},\"title\":\"PROG\",\"field\":\"PROG\",\"formatter\":\"progress\",\"color\":\"white\"}],\"layout\":\"fitColumns\",\"movableColumns\":true},\"customHeight\":30}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":520,"y":540,"wires":[["071635dd1eb716b0"]]},{"id":"f1b851ac0a927a17","type":"inject","z":"5847b7aa62131d37","name":"fake data","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[{\"SHOT\":\"SHOT_01_HOR_ALL-LAYERS_TEST-AAAA\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_02_HOR_ALL-LAYERS_TEST-BBBB\",\"RANGE\":\"(1..100)\",\"PROG\":13,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_03_HOR_ALL-LAYERS_TEST-CCCC\",\"RANGE\":\"(1..100)\",\"PROG\":23,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_04_HOR_ALL-LAYERS_TEST-DDDD\",\"RANGE\":\"(1..100)\",\"PROG\":33,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_05_HOR_ALL-LAYERS_TEST-EEEE\",\"RANGE\":\"(1..100)\",\"PROG\":43,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_06_HOR_ALL-LAYERS_TEST-FFFF\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_07_HOR_ALL-LAYERS_TEST-GGGG\",\"RANGE\":\"(1..100)\",\"PROG\":63,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_08_HOR_ALL-LAYERS_TEST-HHHH\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_09_HOR_ALL-LAYERS_TEST-IIII\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_10_HOR_ALL-LAYERS_TEST-JJJJ\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_11_HOR_ALL-LAYERS_TEST-KKKK\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_12_HOR_ALL-LAYERS_TEST-LLLL\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_13_HOR_ALL-LAYERS_TEST-MMMM\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_14_HOR_ALL-LAYERS_TEST-NNNN\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_15_HOR_ALL-LAYERS_TEST-OOOO\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_16_HOR_ALL-LAYERS_TEST-PPPP\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_17_HOR_ALL-LAYERS_TEST-QQQQ\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_18_HOR_ALL-LAYERS_TEST-RRRR\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_19_HOR_ALL-LAYERS_TEST-SSSS\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_20_HOR_ALL-LAYERS_TEST-TTTT\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_21_HOR_ALL-LAYERS_TEST-UUUU\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_22_HOR_ALL-LAYERS_TEST-VVVV\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_23_HOR_ALL-LAYERS_TEST-WWWW\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_24_HOR_ALL-LAYERS_TEST-XXXX\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},{\"SHOT\":\"SHOT_25_HOR_ALL-LAYERS_TEST-YYYY\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"}]","payloadType":"json","x":340,"y":540,"wires":[["35210755562ebfb0"]]},{"id":"64cab9eb23d3e552","type":"ui_group","name":"TABLE TEST","tab":"461f3885ff28d84f","order":1,"disp":true,"width":"10","collapse":false,"className":""},{"id":"461f3885ff28d84f","type":"ui_tab","name":"TABLE","icon":"dashboard","order":2,"disabled":false,"hidden":false}]

Thanks a lot, this is how I wanted the table to be..

To summarize, this is the UI Table example and below is the flow used to create the final UI Table.

[
    {
        "id": "9cb597d5a7bf8129",
        "type": "ui_table",
        "z": "c15f0fc498f6a014",
        "group": "e5aef99a33253423",
        "name": "TEST1",
        "order": 12,
        "width": "10",
        "height": "22",
        "columns": [
            {
                "field": "SHOT",
                "title": "SHOT",
                "width": "65%",
                "align": "left",
                "formatter": "plaintext",
                "formatterParams": {
                    "target": "_blank"
                }
            },
            {
                "field": "RANGE",
                "title": "RANGE",
                "width": "10%",
                "align": "center",
                "formatter": "plaintext",
                "formatterParams": {
                    "target": "_blank"
                }
            },
            {
                "field": "PROG",
                "title": "PROG",
                "width": "10%",
                "align": "left",
                "formatter": "progress",
                "formatterParams": {
                    "target": "_blank"
                }
            },
            {
                "field": "FRAMES",
                "title": "FRAMES",
                "width": "15%",
                "align": "center",
                "formatter": "plaintext",
                "formatterParams": {
                    "target": "_blank"
                }
            }
        ],
        "outputs": 0,
        "cts": false,
        "x": 1060,
        "y": 140,
        "wires": []
    },
    {
        "id": "ea23f50c7b4fdc52",
        "type": "function",
        "z": "c15f0fc498f6a014",
        "name": "clearData",
        "func": "\nmsg.payload={\n    command:\"clearData\",\n    arguments: [],\n    returnPromise: true\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 820,
        "y": 200,
        "wires": [
            [
                "9cb597d5a7bf8129"
            ]
        ],
        "info": "# clear data\n\nunfortunately this command (currently) do not send a promise back! So we have to pass it directly to the table handler"
    },
    {
        "id": "91595cab4e1da836",
        "type": "inject",
        "z": "c15f0fc498f6a014",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 640,
        "y": 200,
        "wires": [
            [
                "ea23f50c7b4fdc52"
            ]
        ]
    },
    {
        "id": "8137554f5934eb06",
        "type": "inject",
        "z": "c15f0fc498f6a014",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "10",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "payloadType": "date",
        "x": 250,
        "y": 140,
        "wires": [
            [
                "611010f410660c95"
            ]
        ]
    },
    {
        "id": "611010f410660c95",
        "type": "function",
        "z": "c15f0fc498f6a014",
        "name": "",
        "func": "msg.headers = {};\nmsg.headers[\"Cache-Control\"] = \"no-cache\"\nmsg.headers[\"Pragma\"] = \"no-cache\"\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 420,
        "y": 140,
        "wires": [
            [
                "69ccdc31a1c60ac3",
                "8035eeb623202a66",
                "8e389a5c8a43c82e"
            ]
        ]
    },
    {
        "id": "ad041b238c0a1439",
        "type": "comment",
        "z": "c15f0fc498f6a014",
        "name": "Save this as a text file and copy it to an URL, use the same URL in the http request node",
        "info": "[\n{\"SHOT\":\"SHOT_01_HOR_ALL-LAYERS_TEST-AAAA\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_02_HOR_ALL-LAYERS_TEST-BBBB\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_03_HOR_ALL-LAYERS_TEST-CCCC\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_04_HOR_ALL-LAYERS_TEST-DDDD\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_05_HOR_ALL-LAYERS_TEST-EEEE\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_06_HOR_ALL-LAYERS_TEST-FFFF\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_07_HOR_ALL-LAYERS_TEST-GGGG\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_08_HOR_ALL-LAYERS_TEST-HHHH\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_09_HOR_ALL-LAYERS_TEST-IIII\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_10_HOR_ALL-LAYERS_TEST-JJJJ\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_11_HOR_ALL-LAYERS_TEST-KKKK\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_12_HOR_ALL-LAYERS_TEST-LLLL\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_13_HOR_ALL-LAYERS_TEST-MMMM\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_14_HOR_ALL-LAYERS_TEST-NNNN\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_15_HOR_ALL-LAYERS_TEST-OOOO\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_16_HOR_ALL-LAYERS_TEST-PPPP\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_17_HOR_ALL-LAYERS_TEST-QQQQ\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_18_HOR_ALL-LAYERS_TEST-RRRR\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_19_HOR_ALL-LAYERS_TEST-SSSS\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_20_HOR_ALL-LAYERS_TEST-TTTT\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_21_HOR_ALL-LAYERS_TEST-UUUU\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_22_HOR_ALL-LAYERS_TEST-VVVV\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_23_HOR_ALL-LAYERS_TEST-WWWW\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_24_HOR_ALL-LAYERS_TEST-XXXX\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"},\n{\"SHOT\":\"SHOT_25_HOR_ALL-LAYERS_TEST-YYYY\",\"RANGE\":\"(1..100)\",\"PROG\":3,\"FRAMES\":\"<4..100>\"}\n]",
        "x": 600,
        "y": 100,
        "wires": []
    },
    {
        "id": "8e389a5c8a43c82e",
        "type": "http request",
        "z": "c15f0fc498f6a014",
        "name": "DUMMY",
        "method": "GET",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 640,
        "y": 140,
        "wires": [
            [
                "a214cc114bf0cb9a"
            ]
        ]
    },
    {
        "id": "a214cc114bf0cb9a",
        "type": "change",
        "z": "c15f0fc498f6a014",
        "name": "ui_control",
        "rules": [
            {
                "t": "set",
                "p": "ui_control",
                "pt": "msg",
                "to": "{\"tabulator\":{\"columns\":[{\"formatterParams\":{\"target\":\"_blank\",\"min\":0,\"max\":100,\"color\":[\"red\",\"orange\",\"orange\",\"orange\",\"orange\",\"orange\",\"orange\",\"orange\",\"orange\",\"green\"],\"legend\":\"function (value) {return (value>0)? '&nbsp;&nbsp;'+value+' % ' : '-';}\",\"legendColor\":\"white\",\"legendAlign\":\"center\"},\"title\":\"PROG\",\"field\":\"PROG\",\"formatter\":\"progress\",\"color\":\"white\"}],\"layout\":\"fitColumns\",\"movableColumns\":true},\"customHeight\":30}",
                "tot": "json"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 820,
        "y": 140,
        "wires": [
            [
                "9cb597d5a7bf8129"
            ]
        ]
    },
    {
        "id": "e5aef99a33253423",
        "type": "ui_group",
        "name": "TABLE TEST",
        "tab": "461f3885ff28d84f",
        "order": 1,
        "disp": true,
        "width": "10",
        "collapse": false,
        "className": ""
    },
    {
        "id": "461f3885ff28d84f",
        "type": "ui_tab",
        "name": "TABLE",
        "icon": "dashboard",
        "order": 2,
        "disabled": false,
        "hidden": false
    }
]

And this is a Python script I used. It writes a JSON format in a text file called "node_red_dummy.txt" and saves it every 10 sec to an FTP. The PROG and FRAMES data changes every 10 sec.
This I've used to test if the HTTP Request Node actually updates the data.
PS. I'm not a programmer so the script might not be ideal but it works for me.
But I put it out here for anybody starting out like me using the NR UI Table.

Special Thanks to @UnborN for helping me out... I owe you a few beers :wink:

def node_red_data(hip_file_name,range_range,done,render,comma):
  if comma==1:
    node_red_data='{"SHOT":"'+hip_file_name+'","RANGE":"'+range_range+'","PROG":'+done+',"FRAMES":"'+render+'"},\n'
  else:
    node_red_data='{"SHOT":"'+hip_file_name+'","RANGE":"'+range_range+'","PROG":'+done+',"FRAMES":"'+render+'"}\n'
  return node_red_data


def save_node_red_full_data_to_txt(node_red_content):
  node_red_file=r"E:\your_local_path\node_red_dummy.txt"

  try:
    node_red_temp = open(node_red_file, "w")
    node_red_temp.write(node_red_content)
    node_red_temp.close()

  except:
    print('Node Red save request failed for an unknow reason!')


def send_node_red_data_to_ftp():
  print("\n>>>> Sending Node Red data to FTP")
  node_red_file_name="node_red_dummy.txt"
  node_red_file= "E:/your_local_path/node_red_dummy.txt"
  try:
    ftp = FTP('place here your ftp address')
    ftp.login("username","password")
    ftp.cwd('/public_html/renderq/')

    my_node_red_file = open(node_red_file,'rb')
    serverfilepath = '/public_html/renderq/'
    ftp.storlines('STOR ' + node_red_file_name, my_node_red_file)
    ftp.retrlines('LIST')

    ftp.quit()
    my_node_red_file.close()
  except:
    print('FTP  Node Red request failed for unknow reason!')
  print("<<<< Node Red Data to FTP completed")


 ######  ########    ###    ########  ########
##    ##    ##      ## ##   ##     ##    ##
##          ##     ##   ##  ##     ##    ##
 ######     ##    ##     ## ########     ##
      ##    ##    ######### ##   ##      ##
##    ##    ##    ##     ## ##    ##     ##
 ######     ##    ##     ## ##     ##    ##

import os, glob, subprocess, time, shutil
from ftplib import FTP


hip_file_name=""
range_range=""
done=""
render=""
i=0
comma=1
node_red_full_data=''
node_red_intro='[\n'
node_red_outro='\n]'
render_complete=0
loop=0


while loop!=101:

  range_range="(1..100)"
  done=str(loop)
  if loop<100:
    render="<"+str(loop+1)+"..100>"
  else:
    render="<COMPLETE>"
  i=0
  for i in range(1,26):
    hip_file_name="SHOT_"+(str(i)).zfill(2)+"_HOR_ALL-LAYERS_TEST-"+chr(64+i)+chr(64+i)+chr(64+i)+chr(64+i)
    node_red_full_data+=node_red_data(hip_file_name,range_range,done,render,comma)

  print(node_red_intro+node_red_full_data[:-2]+node_red_outro)
  node_red_content=node_red_intro+node_red_full_data[:-2]+node_red_outro
  save_node_red_full_data_to_txt(node_red_content)
  send_node_red_data_to_ftp()
  time.sleep(10)

  node_red_full_data=''

  if loop==100:
    loop=0
  else:
    loop+=1
1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.