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
}
]