Data from DB to chart for many web clients

I display data from DB on dashboard. There are chart nodes and some navigation buttons nodes (backward, forward, zoom in, zoom out). Everything works enough good until one more user looks into that dashboard.
My question is: how to do individual acting navigation buttons and data from DB for each web clients.

[
    {
        "id": "1cc1952898454799",
        "type": "tab",
        "label": "hilsher",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "0403434d98325e3c",
        "type": "s7comm read",
        "z": "1cc1952898454799",
        "connection": "a659f54ece556e6b",
        "payload": "{\"S7_Type\":\"DB\",\"S7_DBnum\":\"2\",\"S7_Datatype\":\"R\",\"S7_Offset\":\"214\",\"S7_BitOffset\":\"0\",\"S7_Quantity\":\"10\",\"S7_Name\":\"MandT\"}",
        "s7Name": "MandT",
        "topic": "",
        "name": "s7read",
        "signalSetted": false,
        "none": "true",
        "repeat": "",
        "once": false,
        "x": 90,
        "y": 140,
        "wires": [
            [
                "1ddbf04207f70ff3",
                "0062d6da0d2d7968"
            ]
        ]
    },
    {
        "id": "bab08b82dd761a0b",
        "type": "change",
        "z": "1cc1952898454799",
        "name": "change 4 rules",
        "rules": [
            {
                "t": "set",
                "p": "column_name",
                "pt": "msg",
                "to": "[\"T1\",\"M1\",\"T2\",\"M2\",\"T3\",\"M3\",\"T4\",\"M4\",\"T5\",\"M5\"]",
                "tot": "json"
            },
            {
                "t": "set",
                "p": "column_sort",
                "pt": "msg",
                "to": "payload.value",
                "tot": "msg"
            },
            {
                "t": "set",
                "p": "database",
                "pt": "msg",
                "to": "Real10",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "command",
                "pt": "msg",
                "to": "insert",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 120,
        "y": 240,
        "wires": [
            [
                "66bdce5fb92eae86",
                "5a648f51219045b9",
                "c4280258fb2230cd"
            ]
        ]
    },
    {
        "id": "f558f7433c273bf4",
        "type": "MySQL-Connector",
        "z": "1cc1952898454799",
        "server": "2ea45443fdc8c7c1",
        "name": "nrdb_1",
        "x": 160,
        "y": 340,
        "wires": [
            []
        ]
    },
    {
        "id": "c4280258fb2230cd",
        "type": "sql-prepare",
        "z": "1cc1952898454799",
        "name": "PrepareSQL_1",
        "x": 120,
        "y": 280,
        "wires": [
            [
                "02fde007491eb0e5"
            ]
        ]
    },
    {
        "id": "02fde007491eb0e5",
        "type": "link out",
        "z": "1cc1952898454799",
        "name": "link out 1",
        "mode": "link",
        "links": [
            "c72f3b31dc034a1c"
        ],
        "x": 235,
        "y": 280,
        "wires": []
    },
    {
        "id": "c72f3b31dc034a1c",
        "type": "link in",
        "z": "1cc1952898454799",
        "name": "link in 1",
        "links": [
            "02fde007491eb0e5"
        ],
        "x": 65,
        "y": 340,
        "wires": [
            [
                "f558f7433c273bf4"
            ]
        ]
    },
    {
        "id": "105ce49145f6100d",
        "type": "inject",
        "z": "1cc1952898454799",
        "name": "1с",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "1",
        "crontab": "",
        "once": true,
        "onceDelay": "0.5",
        "topic": "",
        "payload": "true",
        "payloadType": "bool",
        "x": 90,
        "y": 100,
        "wires": [
            [
                "0403434d98325e3c"
            ]
        ]
    },
    {
        "id": "1ddbf04207f70ff3",
        "type": "debug",
        "z": "1cc1952898454799",
        "name": "debug 7",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload.value",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 260,
        "y": 120,
        "wires": []
    },
    {
        "id": "7f96bbfea42d628a",
        "type": "comment",
        "z": "1cc1952898454799",
        "name": "read and write to database",
        "info": "",
        "x": 130,
        "y": 40,
        "wires": []
    },
    {
        "id": "71ac5a3285006388",
        "type": "comment",
        "z": "1cc1952898454799",
        "name": "read from database and draw",
        "info": "",
        "x": 520,
        "y": 40,
        "wires": []
    },
    {
        "id": "3baaecb823870624",
        "type": "inject",
        "z": "1cc1952898454799",
        "name": "one shot",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": "0.1",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 480,
        "y": 100,
        "wires": [
            [
                "416c012694dd550a"
            ]
        ],
        "info": "28800000 это 8 часов"
    },
    {
        "id": "72957b305e5b58b5",
        "type": "MySQL-Connector",
        "z": "1cc1952898454799",
        "server": "2ea45443fdc8c7c1",
        "name": "nrdb_2",
        "x": 620,
        "y": 340,
        "wires": [
            [
                "70436c7a8fc911f1"
            ]
        ]
    },
    {
        "id": "66bdce5fb92eae86",
        "type": "debug",
        "z": "1cc1952898454799",
        "name": "debug 8",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "column_name",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 260,
        "y": 160,
        "wires": []
    },
    {
        "id": "5a648f51219045b9",
        "type": "debug",
        "z": "1cc1952898454799",
        "name": "debug 9",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "column_sort",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 300,
        "y": 200,
        "wires": []
    },
    {
        "id": "0062d6da0d2d7968",
        "type": "rbe",
        "z": "1cc1952898454799",
        "name": "",
        "func": "rbe",
        "gap": "",
        "start": "",
        "inout": "out",
        "septopics": true,
        "property": "payload.value",
        "topi": "topic",
        "x": 90,
        "y": 200,
        "wires": [
            [
                "bab08b82dd761a0b"
            ]
        ]
    },
    {
        "id": "ac4ca66c67841cf7",
        "type": "function",
        "z": "1cc1952898454799",
        "name": "yes",
        "func": "// Create a data variable   \nvar series = [\"temp outdoor\"];\nvar labels = [\"C degrees\"];\nvar jsondata = msg.payload;\nmsg.payload = [{\"series\":series,\"data\":[jsondata],\"labels\":labels}]; \nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 650,
        "y": 540,
        "wires": [
            [
                "a2cc9238bb03ad52"
            ]
        ]
    },
    {
        "id": "a2cc9238bb03ad52",
        "type": "ui_chart",
        "z": "1cc1952898454799",
        "name": "",
        "group": "efc2b8b4bf846c50",
        "order": 1,
        "width": "23",
        "height": "6",
        "label": "outdoor temperature",
        "chartType": "line",
        "legend": "false",
        "xformat": "DD-MM HH:mm",
        "interpolate": "linear",
        "nodata": "данные загружаются",
        "dot": false,
        "ymin": "",
        "ymax": "",
        "removeOlder": 1,
        "removeOlderPoints": "",
        "removeOlderUnit": "1",
        "cutout": 0,
        "useOneColor": false,
        "useUTC": false,
        "colors": [
            "#1f77b4",
            "#aec7e8",
            "#ff7f0e",
            "#2ca02c",
            "#98df8a",
            "#d62728",
            "#ff9896",
            "#9467bd",
            "#c5b0d5"
        ],
        "outputs": 1,
        "useDifferentColor": false,
        "className": "",
        "x": 500,
        "y": 580,
        "wires": [
            []
        ]
    },
    {
        "id": "cb0ba33a53ccfc3b",
        "type": "function",
        "z": "1cc1952898454799",
        "name": "form query",
        "func": "// увы, такой способ запросов для меня самый наглядный\n//var sD = msg.myData;\n//var eD = sD + 84600;\nvar s = '';\ns = s + 'select UNIX_TIMESTAMP(TS)*1000 AS x, T5 AS y';\ns = s + ' from Real10';\ns = s + ' where TS between ';\ns = s + '\\'' + msg.sDs + '\\' and \\'' + msg.eDs + '\\'';\n//s = s + ' DATE_SUB(NOW(),INTERVAL 8 HOUR) and NOW()';\ns = s + ' order by TS asc';\nmsg.topic = s;\ndelete msg.payload;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 470,
        "y": 340,
        "wires": [
            [
                "72957b305e5b58b5",
                "cb0ce13607609852"
            ]
        ]
    },
    {
        "id": "cb0ce13607609852",
        "type": "debug",
        "z": "1cc1952898454799",
        "name": "debug 16",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 820,
        "y": 340,
        "wires": []
    },
    {
        "id": "416c012694dd550a",
        "type": "ui_date_picker",
        "z": "1cc1952898454799",
        "name": "",
        "label": "date",
        "group": "efc2b8b4bf846c50",
        "order": 1,
        "width": "4",
        "height": "1",
        "passthru": true,
        "topic": "topic",
        "topicType": "msg",
        "className": "",
        "x": 610,
        "y": 100,
        "wires": [
            [
                "c3dc5738ee0883c7"
            ]
        ]
    },
    {
        "id": "0c35756d5bf280fc",
        "type": "ui_button",
        "z": "1cc1952898454799",
        "name": "",
        "group": "efc2b8b4bf846c50",
        "order": 11,
        "width": "2",
        "height": "1",
        "passthru": false,
        "label": "forward",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "true",
        "payloadType": "bool",
        "topic": "topic",
        "topicType": "msg",
        "x": 620,
        "y": 260,
        "wires": [
            [
                "71cde9ffcf75159b"
            ]
        ]
    },
    {
        "id": "161f197ddf457941",
        "type": "ui_button",
        "z": "1cc1952898454799",
        "name": "",
        "group": "efc2b8b4bf846c50",
        "order": 10,
        "width": "2",
        "height": "1",
        "passthru": false,
        "label": "backward",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "true",
        "payloadType": "bool",
        "topic": "topic",
        "topicType": "msg",
        "x": 620,
        "y": 140,
        "wires": [
            [
                "6ea46eea10e8aec0"
            ]
        ]
    },
    {
        "id": "c3dc5738ee0883c7",
        "type": "function",
        "z": "1cc1952898454799",
        "name": "function 8",
        "func": "// штамп времени в дату\nvar date = new Date(msg.payload);\n// обнуляем часы, минуты, секунды\n// то есть всегда с начала суток начинаем\n// если произошла смена даты\ndate.setHours(0,0,0);\n// дату начала в штамп времени обратно\nmsg.sD = date.getTime();\n// при выборе даты zoom всегда 8 часов\nmsg.zoom = 86400000;\nmsg.eD = msg.sD + msg.zoom;\n// сбрасываем msg.payload\nmsg.payload = false;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 760,
        "y": 100,
        "wires": [
            [
                "3e56f09e30313130"
            ]
        ]
    },
    {
        "id": "6ea46eea10e8aec0",
        "type": "function",
        "z": "1cc1952898454799",
        "name": "backward",
        "func": "// читаем сохранённые с предидущего раза значения\nmsg.sD = flow.get('sD') || 0;\nmsg.eD = flow.get('eD') || 0;\nmsg.zoom = flow.get('zoom') || 0;\n// суть этой функции уменьшить sD и eD на zoom\n// точнее на значение равное зум \nif (msg.payload == true)\n{\n    // сбрасываем msg.payload\n    msg.payload = false;\n    \n    // штамп времени в дату\n    msg.sD = msg.sD - msg.zoom;\n    msg.eD = msg.eD - msg.zoom;\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 760,
        "y": 140,
        "wires": [
            [
                "48355de8d14f7eb9"
            ]
        ]
    },
    {
        "id": "71cde9ffcf75159b",
        "type": "function",
        "z": "1cc1952898454799",
        "name": "forward",
        "func": "// читаем сохранённые с предидущего раза значения\nmsg.sD = flow.get('sD') || 0;\nmsg.eD = flow.get('eD') || 0;\nmsg.zoom = flow.get('zoom') || 0;\n// суть этой функции увеличить sD и eD на zoom\n// точнее на значение равное зум \nif (msg.payload == true)\n{\n    // сбрасываем msg.payload\n    msg.payload = false;\n    \n    // штамп времени в дату\n    msg.sD = msg.sD + msg.zoom;\n    msg.eD = msg.eD + msg.zoom;\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 760,
        "y": 260,
        "wires": [
            [
                "e511c48f05c1ec25"
            ]
        ]
    },
    {
        "id": "7228f61887731e7d",
        "type": "ui_button",
        "z": "1cc1952898454799",
        "name": "",
        "group": "efc2b8b4bf846c50",
        "order": 12,
        "width": "2",
        "height": "1",
        "passthru": false,
        "label": "zoom in",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "true",
        "payloadType": "bool",
        "topic": "topic",
        "topicType": "msg",
        "x": 620,
        "y": 180,
        "wires": [
            [
                "3346d85af9aea2e6"
            ]
        ]
    },
    {
        "id": "3346d85af9aea2e6",
        "type": "function",
        "z": "1cc1952898454799",
        "name": "zoom+",
        "func": "// читаем сохранённые с предидущего раза значения\nmsg.sD = flow.get('sD') || 0;\nmsg.eD = flow.get('eD') || 0;\nmsg.zoom = flow.get('zoom') || 0;\n// суть этой функции увеличить zoom на 1 час\n// 3600000 час, 86400000 сутки\nif (msg.payload == true)\n{\n    // сбрасываем msg.payload\n    msg.payload = false;\n    \n    // зум изменяем в пределах 1..24 часов\n    if (msg.zoom <= 86400000)\n    {\n        msg.zoom = msg.zoom - 3600000;\n        msg.eD = msg.sD + msg.zoom;\n    }\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 750,
        "y": 180,
        "wires": [
            [
                "1727b8394aa1c44b"
            ]
        ]
    },
    {
        "id": "b64a288f72d91eb7",
        "type": "ui_button",
        "z": "1cc1952898454799",
        "name": "",
        "group": "efc2b8b4bf846c50",
        "order": 12,
        "width": "2",
        "height": "1",
        "passthru": false,
        "label": "zoom out",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "true",
        "payloadType": "bool",
        "topic": "topic",
        "topicType": "msg",
        "x": 620,
        "y": 220,
        "wires": [
            [
                "572f5c99b0130914"
            ]
        ]
    },
    {
        "id": "572f5c99b0130914",
        "type": "function",
        "z": "1cc1952898454799",
        "name": "zoom-",
        "func": "// читаем сохранённые с предидущего раза значения\nmsg.sD = flow.get('sD') || 0;\nmsg.eD = flow.get('eD') || 0;\nmsg.zoom = flow.get('zoom') || 0;\n// суть этой функции уменьшить zoom на 1 час\n// 3600000 час, 86400000 сутки\nif (msg.payload == true)\n{\n    // сбрасываем msg.payload\n    msg.payload = false;\n    \n    // зум изменяем в пределах 1..24 часов\n    if ((msg.zoom >= 3600000) && (msg.zoom < 86400000))\n        {\n            msg.zoom = msg.zoom + 3600000;\n            msg.eD = msg.sD + msg.zoom;\n        }\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 750,
        "y": 220,
        "wires": [
            [
                "d1bbdaa824d78f37"
            ]
        ]
    },
    {
        "id": "3e56f09e30313130",
        "type": "link out",
        "z": "1cc1952898454799",
        "name": "link out 2",
        "mode": "link",
        "links": [
            "c1d3cab6e7e98767"
        ],
        "x": 855,
        "y": 100,
        "wires": []
    },
    {
        "id": "c1d3cab6e7e98767",
        "type": "link in",
        "z": "1cc1952898454799",
        "name": "link in 2",
        "links": [
            "3e56f09e30313130",
            "48355de8d14f7eb9",
            "1727b8394aa1c44b",
            "d1bbdaa824d78f37",
            "e511c48f05c1ec25"
        ],
        "x": 415,
        "y": 300,
        "wires": [
            [
                "2338c9e7794bd67c"
            ]
        ]
    },
    {
        "id": "48355de8d14f7eb9",
        "type": "link out",
        "z": "1cc1952898454799",
        "name": "link out 3",
        "mode": "link",
        "links": [
            "c1d3cab6e7e98767"
        ],
        "x": 855,
        "y": 140,
        "wires": []
    },
    {
        "id": "1727b8394aa1c44b",
        "type": "link out",
        "z": "1cc1952898454799",
        "name": "link out 4",
        "mode": "link",
        "links": [
            "c1d3cab6e7e98767"
        ],
        "x": 855,
        "y": 180,
        "wires": []
    },
    {
        "id": "d1bbdaa824d78f37",
        "type": "link out",
        "z": "1cc1952898454799",
        "name": "link out 5",
        "mode": "link",
        "links": [
            "c1d3cab6e7e98767"
        ],
        "x": 855,
        "y": 220,
        "wires": []
    },
    {
        "id": "e511c48f05c1ec25",
        "type": "link out",
        "z": "1cc1952898454799",
        "name": "link out 6",
        "mode": "link",
        "links": [
            "c1d3cab6e7e98767"
        ],
        "x": 855,
        "y": 260,
        "wires": []
    },
    {
        "id": "2338c9e7794bd67c",
        "type": "function",
        "z": "1cc1952898454799",
        "name": "store sD",
        "func": "// Может тут проверку вставить, сохранять только не глупое?\nflow.set('sD', msg.sD);\nflow.set('eD', msg.eD);\nflow.set('zoom', msg.zoom);\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 520,
        "y": 300,
        "wires": [
            [
                "b54c966f318360eb"
            ]
        ]
    },
    {
        "id": "b54c966f318360eb",
        "type": "function",
        "z": "1cc1952898454799",
        "name": "date conversion",
        "func": "// одинаково для sD и eD\n//-------------------------------------------------- sD\n// штамп времени в дату, часовой пояс учитываем тут\n// так как он потом выбросится\nvar myDate = new Date(msg.sD + 10800000);\n// выполняем преобразование типов\n// после преобразования 2024-01-28T07:49:50.003Z\nmyDate = myDate.toISOString();\n// убираем лишнее, находим позицию точки\nvar n = myDate.indexOf(\".\");\n// находим позицию T\nvar k = myDate.indexOf(\"T\");\n// соединяем только то что надо\nmyDate = myDate.slice(0, k) + ' ' + myDate.slice(k+1, n);\nmsg.sDs = myDate;\n//-------------------------------------------------- eD\n// штамп времени в дату, часовой пояс учитываем тут\n// так как он потом выбросится\nvar myDate = new Date(msg.eD + 10800000);\n// выполняем преобразование типов\n// после преобразования 2024-01-28T07:49:50.003Z\nmyDate = myDate.toISOString();\n// убираем лишнее, находим позицию точки\nvar n = myDate.indexOf(\".\");\n// находим позицию T\nvar k = myDate.indexOf(\"T\");\n// соединяем только то что надо\nmyDate = myDate.slice(0, k) + ' ' + myDate.slice(k + 1, n);\nmsg.eDs = myDate;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 680,
        "y": 300,
        "wires": [
            [
                "cb0ba33a53ccfc3b"
            ]
        ]
    },
    {
        "id": "1679a21e323c6ade",
        "type": "switch",
        "z": "1cc1952898454799",
        "name": "count check",
        "property": "myCount",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "0",
                "vt": "num"
            },
            {
                "t": "gt",
                "v": "0",
                "vt": "num"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 630,
        "y": 400,
        "wires": [
            [
                "cac2eacb3c5c6552"
            ],
            [
                "7fea6e4cb445252e"
            ]
        ]
    },
    {
        "id": "70436c7a8fc911f1",
        "type": "function",
        "z": "1cc1952898454799",
        "name": "count",
        "func": "var LL = msg.payload;\nmsg.myCount = LL.length;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 450,
        "y": 400,
        "wires": [
            [
                "1679a21e323c6ade"
            ]
        ]
    },
    {
        "id": "cac2eacb3c5c6552",
        "type": "function",
        "z": "1cc1952898454799",
        "name": "StrOutNo",
        "func": "msg.StrOut = 'NO data belong to interval<br>';\nmsg.StrOut = msg.StrOut + msg.sDs;\nmsg.StrOut = msg.StrOut + '____';\nmsg.StrOut = msg.StrOut + msg.eDs;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 840,
        "y": 440,
        "wires": [
            [
                "f05ec1757bc5c366"
            ]
        ]
    },
    {
        "id": "f05ec1757bc5c366",
        "type": "ui_template",
        "z": "1cc1952898454799",
        "group": "efc2b8b4bf846c50",
        "name": "",
        "order": 6,
        "width": "8",
        "height": "1",
        "format": "<div ng-bind-html=\"msg.StrOut\"></div>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "resendOnRefresh": true,
        "templateScope": "local",
        "className": "",
        "x": 460,
        "y": 500,
        "wires": [
            [
                "7bda10432997c7c5"
            ]
        ]
    },
    {
        "id": "7fea6e4cb445252e",
        "type": "function",
        "z": "1cc1952898454799",
        "name": "StrOutYes",
        "func": "msg.StrOut = 'these data belong to time interval<br>';\nmsg.StrOut = msg.StrOut + msg.sDs;\nmsg.StrOut = msg.StrOut + '____';\nmsg.StrOut = msg.StrOut + msg.eDs;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 640,
        "y": 440,
        "wires": [
            [
                "f05ec1757bc5c366"
            ]
        ]
    },
    {
        "id": "7bda10432997c7c5",
        "type": "switch",
        "z": "1cc1952898454799",
        "name": "count check",
        "property": "myCount",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "0",
                "vt": "num"
            },
            {
                "t": "gt",
                "v": "0",
                "vt": "num"
            }
        ],
        "checkall": "false",
        "repair": false,
        "outputs": 2,
        "x": 630,
        "y": 500,
        "wires": [
            [
                "3e1bc2c88e199da0",
                "429e998af258a7c9"
            ],
            [
                "ac4ca66c67841cf7",
                "3e1bc2c88e199da0"
            ]
        ]
    },
    {
        "id": "429e998af258a7c9",
        "type": "function",
        "z": "1cc1952898454799",
        "name": "no",
        "func": "// Create a data variable   \nvar series = [\"temp outdoor\"];\nvar labels = [\"C degrees\"];\nvar jsondata = [{ \"x\": msg.sD, \"y\": 0 }, { \"x\": msg.eD, \"y\": 0 }];\nmsg.payload = [{ \"series\": series, \"data\": [jsondata],\"labels\":labels}]; \nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 830,
        "y": 540,
        "wires": [
            [
                "a2cc9238bb03ad52"
            ]
        ]
    },
    {
        "id": "3e1bc2c88e199da0",
        "type": "debug",
        "z": "1cc1952898454799",
        "name": "debug 32",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 820,
        "y": 500,
        "wires": []
    },
    {
        "id": "a659f54ece556e6b",
        "type": "s7comm",
        "ip": "192.168.200.250",
        "port": "102",
        "rack": "0",
        "slot": "1",
        "payload": [
            {
                "S7_Type": "DB",
                "S7_DBnum": "2",
                "S7_Datatype": "R",
                "S7_Offset": "214",
                "S7_BitOffset": "0",
                "S7_Quantity": "10",
                "S7_Name": "MandT"
            }
        ]
    },
    {
        "id": "2ea45443fdc8c7c1",
        "type": "MySQL-Server-Connector",
        "name": "",
        "host": "192.168.200.230",
        "port": "3306",
        "user": "RemUser",
        "password": "z0359305",
        "tls": false,
        "database": "nrdb"
    },
    {
        "id": "efc2b8b4bf846c50",
        "type": "ui_group",
        "name": "test_1",
        "tab": "e38dd9e218f0313a",
        "order": 1,
        "disp": false,
        "width": "23",
        "collapse": false,
        "className": ""
    },
    {
        "id": "e38dd9e218f0313a",
        "type": "ui_tab",
        "name": "SFZ",
        "icon": "dashboard",
        "disabled": false,
        "hidden": false
    }
]

Hi,
Maybe you can use ui-control to get the users IP, and only allow the socketID linked to that IP to use controls until disconnect or timeout. Or a button to lock control to socketID , and a button to ask for control, with a timeout to take control if no response from user in control.

Or try the new Dashboard 2, which i believe allows multiple users.

1 Like

I don't think that feature is implemented yet.

I think use socketID is good idea. Output of Chart node has a socketID, so there isn't need use ui-control.
I'll do-over my flow and share results here. Many thanks!

I solved issue of chart multi user. My beginners flow is as follow:

[
    {
        "id": "da8c237aa1bd0ab1",
        "type": "tab",
        "label": "Read DB",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "71ac5a3285006388",
        "type": "comment",
        "z": "da8c237aa1bd0ab1",
        "name": "read from database and draw",
        "info": "",
        "x": 140,
        "y": 20,
        "wires": []
    },
    {
        "id": "72957b305e5b58b5",
        "type": "MySQL-Connector",
        "z": "da8c237aa1bd0ab1",
        "server": "2ea45443fdc8c7c1",
        "name": "nrdb_2",
        "x": 580,
        "y": 120,
        "wires": [
            [
                "70436c7a8fc911f1"
            ]
        ]
    },
    {
        "id": "0c35756d5bf280fc",
        "type": "ui_button",
        "z": "da8c237aa1bd0ab1",
        "name": "",
        "group": "efc2b8b4bf846c50",
        "order": 11,
        "width": "2",
        "height": "1",
        "passthru": false,
        "label": "forward",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "",
        "payloadType": "date",
        "topic": "topic",
        "topicType": "msg",
        "x": 80,
        "y": 180,
        "wires": [
            [
                "71cde9ffcf75159b"
            ]
        ]
    },
    {
        "id": "161f197ddf457941",
        "type": "ui_button",
        "z": "da8c237aa1bd0ab1",
        "name": "",
        "group": "efc2b8b4bf846c50",
        "order": 10,
        "width": "2",
        "height": "1",
        "passthru": false,
        "label": "backward",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "",
        "payloadType": "date",
        "topic": "topic",
        "topicType": "msg",
        "x": 80,
        "y": 60,
        "wires": [
            [
                "6ea46eea10e8aec0"
            ]
        ]
    },
    {
        "id": "c3dc5738ee0883c7",
        "type": "function",
        "z": "da8c237aa1bd0ab1",
        "name": "dat-old",
        "func": "//------------------------------------------------------- 1\n// if there is no navigation mark or navigation mark is false,\n// then the date has been changed by datepicker \nif (msg.fbz !== true){\n    // copy stored list of sockets ID in local variable\n    var SocketArray = flow.get('SocketList') || [];\n    // looking for the same socket in list, was there the same earlier?\n    var i = SocketArray.findIndex(obj => {\n        return obj.socketid === msg.socketid\n    });\n    // yes, it was here\n    if (i != -1) {\n        // изменяем индивидуальную навигацию\n        msg.zoom = 86400000; // сутки 86400000, час 3600000\n        // since when date been changed by date picker,\n        // the time is not from the beginning of the day,\n        // we should set zero for hours, minutes, seconds, milliseconds\n        let nD = new Date(msg.payload);\n        nD.setHours(0, 0, 0, 0);\n        msg.sD = nD.getTime();\n        msg.eD = msg.sD + msg.zoom;\n        // writing new personal navigation data\n        SocketArray[i].sD = msg.sD;\n        SocketArray[i].eD = msg.eD;\n        SocketArray[i].zoom = msg.zoom;\n        // Updating the activity mark. Here payload's date in the past, so ...\n        let dateObject = new Date();\n        SocketArray[i].sTS = dateObject.getTime();\n    }\n    else {    // no, it wasn't here \n        // forming new object\n        let se = { 'socketid': '', 'sD': 0, 'eD': 0, 'zoom': 0, 'sTS': 0 };\n        se.socketid = msg.socketid;\n        se.zoom = 86400000; // day is 86400000\n        let nD = new Date(msg.payload);\n        nD.setHours(0, 0, 0, 0);\n        se.sD = nD.getTime();\n        se.eD = se.sD + se.zoom;\n        // Setting activity mark. Here payload's date in the past, so ...\n        let dateObject = new Date();\n        se.sTS = dateObject.getTime();\n        // adding new object into the list of sockets\n        SocketArray.push(se);\n        // work set of navigation data now is as follow\n        msg.sD = se.sD;\n        msg.eD = se.eD;\n        msg.zoom = se.zoom;\n    }\n    // updating stored list of sockets\n    flow.set('SocketList', SocketArray);  \n}\n// navigation data changed mark reset\nmsg.fbz = false;  \n//------------------------------------------------------- 2\n// deleting old entries from the list of sockets\n// copy stored list of sockets ID in local variable\nvar SocketArray = flow.get('SocketList') || [];\n// Now we sort the list in ascending order of relevance time.\n// Why, since the push method adds an element to the end, isn't it?\n// However, in fact, during few days of work on the project, \n// the list of sockets contains not ascending activity mark elements.\n// It's weird, I don't understand why it's happened.\nSocketArray.sort(function (a, b) {\n    return parseFloat(a.sTS) - parseFloat(b.sTS);\n});\n// After that the oldest object in the array has an index of 0,\n// let it be no older than 1 day, if it is older, we should delete it.\nlet dateObject = new Date();\nlet timeObject = dateObject.getTime();\nif (timeObject >= SocketArray[0].sTS + 86400000) {\n    // deteting object in 0 position\n    SocketArray.splice(0, 1)\n};\n// updating stored list of sockets\nflow.set('SocketList', SocketArray);\n//------------------------------------------------------- end\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 550,
        "y": 60,
        "wires": [
            [
                "22fbe3bc22e4f623",
                "b54c966f318360eb"
            ]
        ]
    },
    {
        "id": "6ea46eea10e8aec0",
        "type": "function",
        "z": "da8c237aa1bd0ab1",
        "name": "backward",
        "func": "// copy stored list of sockets ID in local variable\nvar SocketArray = flow.get('SocketList') || [];\n// looking for the same socket in list, was there the same earlier?\nvar i = SocketArray.findIndex(obj => {\n    return obj.socketid === msg.socketid});\n// yes, it was here\nif (i != -1){\n    // reading personal navigation data and change it\n    msg.zoom = SocketArray[i].zoom;\n    msg.sD = SocketArray[i].sD - msg.zoom;\n    msg.eD = SocketArray[i].eD - msg.zoom;    \n    // writing new personal navigation data\n    SocketArray[i].sD = msg.sD;\n    SocketArray[i].eD = msg.eD;\n    SocketArray[i].zoom = msg.zoom;\n    // updating the activity mark\n    SocketArray[i].sTS = msg.payload;\n// no, it wasn't here     \n} else {\n    // forming new object\n    let se = { 'socketid': '', 'sD': 0, 'eD': 0, 'zoom': 0, 'sTS': 0 };\n    se.socketid = msg.socketid;\n    se.eD = msg.payload;\n    se.zoom = 86400000; // day is 86400000\n    se.sD = se.eD - se.zoom;\n    se.sTS = se.eD;\n    // adding new object into the list of sockets\n    SocketArray.push(se);\n    // work set of navigation data now is as follow\n    msg.sD = se.sD;\n    msg.eD = se.eD;\n    msg.zoom = se.zoom;\n}\n// updating stored list of sockets\nflow.set('SocketList', SocketArray);\n// correct value of msg.payload is needed for date picker\nmsg.payload = msg.sD;\n// navigation data was changed, mark\nmsg.fbz = true;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 220,
        "y": 60,
        "wires": [
            [
                "416c012694dd550a"
            ]
        ]
    },
    {
        "id": "71cde9ffcf75159b",
        "type": "function",
        "z": "da8c237aa1bd0ab1",
        "name": "forward",
        "func": "// copy stored list of sockets ID in local variable\nvar SocketArray = flow.get('SocketList') || [];\n// looking for the same socket in list, was there the same earlier?\nvar i = SocketArray.findIndex(obj => {\n    return obj.socketid === msg.socketid\n});\n// yes, it was here\nif (i != -1) {\n    // reading personal navigation data and change it\n    msg.zoom = SocketArray[i].zoom;\n    msg.sD = SocketArray[i].sD + msg.zoom;\n    msg.eD = SocketArray[i].eD + msg.zoom;\n    // writing new personal navigation data\n    SocketArray[i].sD = msg.sD;\n    SocketArray[i].eD = msg.eD;\n    SocketArray[i].zoom = msg.zoom;\n    // updating the activity mark\n    SocketArray[i].sTS = msg.payload;\n    // no, it wasn't here\n} else {\n    // forming new object\n    let se = { 'socketid': '', 'sD': 0, 'eD': 0, 'zoom': 0, 'sTS': 0 };\n    se.socketid = msg.socketid;\n    se.eD = msg.payload;\n    se.zoom = 86400000; // day is 86400000\n    se.sD = se.eD - se.zoom;\n    se.sTS = se.eD;\n    // adding new object into the list of sockets\n    SocketArray.push(se);\n    // work set of navigation data now is as follow\n    msg.sD = se.sD;\n    msg.eD = se.eD;\n    msg.zoom = se.zoom;\n}\n// updating stored list of sockets\nflow.set('SocketList', SocketArray);\n// correct value of msg.payload is needed for date picker\nmsg.payload = msg.sD;\n// navigation data was changed, mark\nmsg.fbz = true;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 220,
        "y": 180,
        "wires": [
            [
                "416c012694dd550a"
            ]
        ]
    },
    {
        "id": "7228f61887731e7d",
        "type": "ui_button",
        "z": "da8c237aa1bd0ab1",
        "name": "",
        "group": "efc2b8b4bf846c50",
        "order": 12,
        "width": "2",
        "height": "1",
        "passthru": false,
        "label": "zoom in",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "",
        "payloadType": "date",
        "topic": "topic",
        "topicType": "msg",
        "x": 80,
        "y": 100,
        "wires": [
            [
                "3346d85af9aea2e6"
            ]
        ]
    },
    {
        "id": "3346d85af9aea2e6",
        "type": "function",
        "z": "da8c237aa1bd0ab1",
        "name": "zoom in",
        "func": "// copy stored list of sockets ID in local variable\nvar SocketArray = flow.get('SocketList') || [];\n// looking for the same socket in list, was there the same earlier?\nvar i = SocketArray.findIndex(obj => {\n    return obj.socketid === msg.socketid\n});\n// yes, it was here\nif (i != -1) {\n    // reading personal navigation data and change it\n    msg.zoom = SocketArray[i].zoom;\n    // zoom in is limited here, one hour is 3600000\n    // zoom in/out is asymmetric in first version\n    if (msg.zoom !== 3600000) { msg.zoom = msg.zoom - 3600000; };    \n    msg.sD = SocketArray[i].sD;\n    msg.eD = SocketArray[i].sD + msg.zoom;\n    // writing new personal navigation data\n    SocketArray[i].sD = msg.sD;\n    SocketArray[i].eD = msg.eD;\n    SocketArray[i].zoom = msg.zoom;\n    // updating the activity mark\n    SocketArray[i].sTS = msg.payload;\n    // no, it wasn't here\n} else {\n    // forming new object\n    let se = { 'socketid': '', 'sD': 0, 'eD': 0, 'zoom': 0, 'sTS': 0 };\n    se.socketid = msg.socketid;\n    se.eD = msg.payload;\n    se.zoom = 86400000; // day is 86400000\n    se.sD = se.eD - se.zoom;\n    se.sTS = se.eD;\n    // adding new object into the list of sockets\n    SocketArray.push(se);\n    // work set of navigation data now is as follow\n    msg.sD = se.sD;\n    msg.eD = se.eD;\n    msg.zoom = se.zoom;\n}\n// updating stored list of sockets\nflow.set('SocketList', SocketArray);\n// correct value of msg.payload is needed for date picker\nmsg.payload = msg.sD;\n// navigation data was changed, mark\nmsg.fbz = true;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 220,
        "y": 100,
        "wires": [
            [
                "416c012694dd550a"
            ]
        ]
    },
    {
        "id": "b64a288f72d91eb7",
        "type": "ui_button",
        "z": "da8c237aa1bd0ab1",
        "name": "",
        "group": "efc2b8b4bf846c50",
        "order": 12,
        "width": "2",
        "height": "1",
        "passthru": false,
        "label": "zoom out",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "",
        "payloadType": "date",
        "topic": "topic",
        "topicType": "msg",
        "x": 80,
        "y": 140,
        "wires": [
            [
                "572f5c99b0130914"
            ]
        ]
    },
    {
        "id": "572f5c99b0130914",
        "type": "function",
        "z": "da8c237aa1bd0ab1",
        "name": "zoom out",
        "func": "// copy stored list of sockets ID in local variable\nvar SocketArray = flow.get('SocketList') || [];\n// looking for the same socket in list, was there the same earlier?\nvar i = SocketArray.findIndex(obj => {\n    return obj.socketid === msg.socketid\n});\n// yes, it was here\nif (i != -1) {\n    // reading personal navigation data and change it\n    msg.zoom = SocketArray[i].zoom;\n    // zoom in is limited here, one hour is 3600000, one day is 86400000\n    // zoom in/out is asymmetric in first version\n    if (msg.zoom !== 86400000) { msg.zoom = msg.zoom + 3600000; }; \n    msg.sD = SocketArray[i].sD;\n    msg.eD = SocketArray[i].sD + msg.zoom;\n    // writing new personal navigation data\n    SocketArray[i].sD = msg.sD;\n    SocketArray[i].eD = msg.eD;\n    SocketArray[i].zoom = msg.zoom;\n    // updating the activity mark\n    SocketArray[i].sTS = msg.payload;\n    // no, it wasn't here\n} else {\n    // forming new object\n    let se = { 'socketid': '', 'sD': 0, 'eD': 0, 'zoom': 0, 'sTS': 0 };\n    se.socketid = msg.socketid;\n    se.eD = msg.payload;\n    se.zoom = 86400000; // day is 86400000\n    se.sD = se.eD - se.zoom;\n    se.sTS = se.eD;\n    // adding new object into the list of sockets\n    SocketArray.push(se);\n    // work set of navigation data now is as follow\n    msg.sD = se.sD;\n    msg.eD = se.eD;\n    msg.zoom = se.zoom;\n}\n// updating stored list of sockets\nflow.set('SocketList', SocketArray);\n// correct value of msg.payload is needed for date picker\nmsg.payload = msg.sD;\n// navigation data was changed, mark\nmsg.fbz = true;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 220,
        "y": 140,
        "wires": [
            [
                "416c012694dd550a"
            ]
        ]
    },
    {
        "id": "b54c966f318360eb",
        "type": "function",
        "z": "da8c237aa1bd0ab1",
        "name": "date string",
        "func": "// MySQL date format differs from ISO date format.\n// So, we should made some changes.\n// 2024-01-28T07:49:50.003Z -> 2024-01-28 07:49:50\n//-------------------------------------------------- sD\n// here 10800000 is +3 hours for MSK time zone\nvar myDate = new Date(msg.sD + 10800000);\nmyDate = myDate.toISOString();\nvar n = myDate.indexOf(\".\");\nvar k = myDate.indexOf(\"T\");\nmyDate = myDate.slice(0, k) + ' ' + myDate.slice(k+1, n);\nmsg.sDs = myDate;\n//-------------------------------------------------- eD\nvar myDate = new Date(msg.eD + 10800000);\nmyDate = myDate.toISOString();\nvar n = myDate.indexOf(\".\");\nvar k = myDate.indexOf(\"T\");\nmyDate = myDate.slice(0, k) + ' ' + myDate.slice(k + 1, n);\nmsg.eDs = myDate;\n// --------------------------- forming SQL query\nvar s = '';\ns = s + 'select UNIX_TIMESTAMP(TS)*1000 AS x, T5 AS y';\ns = s + ' from Real10';\ns = s + ' where TS between ';\ns = s + '\\'' + msg.sDs + '\\' and \\'' + msg.eDs + '\\'';\ns = s + ' order by TS asc';\nmsg.topic = s;\ndelete msg.payload;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 430,
        "y": 120,
        "wires": [
            [
                "72957b305e5b58b5"
            ]
        ]
    },
    {
        "id": "1679a21e323c6ade",
        "type": "switch",
        "z": "da8c237aa1bd0ab1",
        "name": "count",
        "property": "myCount",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "0",
                "vt": "num"
            },
            {
                "t": "gt",
                "v": "0",
                "vt": "num"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 410,
        "y": 180,
        "wires": [
            [
                "cac2eacb3c5c6552"
            ],
            [
                "7fea6e4cb445252e"
            ]
        ]
    },
    {
        "id": "70436c7a8fc911f1",
        "type": "function",
        "z": "da8c237aa1bd0ab1",
        "name": "count",
        "func": "var LL = msg.payload;\nmsg.myCount = LL.length;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 710,
        "y": 120,
        "wires": [
            [
                "1679a21e323c6ade"
            ]
        ]
    },
    {
        "id": "cac2eacb3c5c6552",
        "type": "function",
        "z": "da8c237aa1bd0ab1",
        "name": "C_No",
        "func": "// we inform about the absence of data in the time interval \nmsg.StrOut = 'NO data belong to interval<br>';\nmsg.StrOut = msg.StrOut + msg.sDs;\nmsg.StrOut = msg.StrOut + '____';\nmsg.StrOut = msg.StrOut + msg.eDs;\n// Create a data set for chart - zero line because no data \nvar series = [\"temp outdoor\"];\nvar labels = [\"C degrees\"];\nvar jsondata = [{ \"x\": msg.sD, \"y\": 0 }, { \"x\": msg.eD, \"y\": 0 }];\nmsg.payload = [{ \"series\": series, \"data\": [jsondata], \"labels\": labels }]; \nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 530,
        "y": 180,
        "wires": [
            [
                "f05ec1757bc5c366"
            ]
        ]
    },
    {
        "id": "f05ec1757bc5c366",
        "type": "ui_template",
        "z": "da8c237aa1bd0ab1",
        "group": "efc2b8b4bf846c50",
        "name": "",
        "order": 6,
        "width": "8",
        "height": "1",
        "format": "<div ng-bind-html=\"msg.StrOut\"></div>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "resendOnRefresh": true,
        "templateScope": "local",
        "className": "",
        "x": 700,
        "y": 180,
        "wires": [
            [
                "a2cc9238bb03ad52"
            ]
        ]
    },
    {
        "id": "7fea6e4cb445252e",
        "type": "function",
        "z": "da8c237aa1bd0ab1",
        "name": "C_Yes",
        "func": "// we inform about the time interval \nmsg.StrOut = 'these data belong to time interval<br>';\nmsg.StrOut = msg.StrOut + msg.sDs;\nmsg.StrOut = msg.StrOut + '____';\nmsg.StrOut = msg.StrOut + msg.eDs;\n// Create a data set for chart - data present   \nvar series = [\"temp outdoor\"];\nvar labels = [\"C degrees\"];\nvar jsondata = msg.payload;\nmsg.payload = [{ \"series\": series, \"data\": [jsondata], \"labels\": labels }]; \nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 530,
        "y": 220,
        "wires": [
            [
                "f05ec1757bc5c366"
            ]
        ]
    },
    {
        "id": "a2cc9238bb03ad52",
        "type": "ui_chart",
        "z": "da8c237aa1bd0ab1",
        "name": "",
        "group": "efc2b8b4bf846c50",
        "order": 1,
        "width": "23",
        "height": "6",
        "label": "graphics",
        "chartType": "line",
        "legend": "false",
        "xformat": "H:mm:ss",
        "interpolate": "linear",
        "nodata": "данные загружаются",
        "dot": false,
        "ymin": "",
        "ymax": "",
        "removeOlder": 1,
        "removeOlderPoints": "",
        "removeOlderUnit": "1",
        "cutout": 0,
        "useOneColor": false,
        "useUTC": false,
        "colors": [
            "#1f77b4",
            "#aec7e8",
            "#ff7f0e",
            "#2ca02c",
            "#98df8a",
            "#d62728",
            "#ff9896",
            "#9467bd",
            "#c5b0d5"
        ],
        "outputs": 1,
        "useDifferentColor": false,
        "className": "",
        "x": 700,
        "y": 220,
        "wires": [
            []
        ]
    },
    {
        "id": "22fbe3bc22e4f623",
        "type": "debug",
        "z": "da8c237aa1bd0ab1",
        "name": "debug 40",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 700,
        "y": 60,
        "wires": []
    },
    {
        "id": "416c012694dd550a",
        "type": "ui_date_picker",
        "z": "da8c237aa1bd0ab1",
        "name": "calendar",
        "label": "date",
        "group": "efc2b8b4bf846c50",
        "order": 1,
        "width": "4",
        "height": "1",
        "passthru": true,
        "topic": "topic",
        "topicType": "msg",
        "className": "",
        "x": 420,
        "y": 60,
        "wires": [
            [
                "c3dc5738ee0883c7"
            ]
        ]
    },
    {
        "id": "2ea45443fdc8c7c1",
        "type": "MySQL-Server-Connector",
        "name": "",
        "host": "192.168.200.230",
        "port": "3306",
        "user": "RemUser",
        "password": "z0359305",
        "tls": false,
        "database": "nrdb"
    },
    {
        "id": "efc2b8b4bf846c50",
        "type": "ui_group",
        "name": "test_1",
        "tab": "e38dd9e218f0313a",
        "order": 1,
        "disp": false,
        "width": "23",
        "collapse": false,
        "className": ""
    },
    {
        "id": "e38dd9e218f0313a",
        "type": "ui_tab",
        "name": "SFZ",
        "icon": "dashboard",
        "disabled": false,
        "hidden": false
    }
]

I celebrated too soon!
My test system had only "template" node. Than node works socketid sensitive way. But nodes "date picker" and "chart" it seems so work not socketid sensitive way.
Could somebody be so kind to make nodes "date picker" and "chart" socketid sensitive.
Help!

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