{
  "custom": {
    "delay": 2000,
    "update": 2000
  },
  "params": {},
  "propConfig": {
    "custom.delay": {
      "persistent": true
    },
    "custom.update": {
      "persistent": true
    }
  },
  "props": {
    "defaultSize": {
      "height": 1080,
      "width": 1920
    }
  },
  "root": {
    "children": [
      {
        "children": [
          {
            "children": [
              {
                "meta": {
                  "name": "Label"
                },
                "position": {
                  "basis": "10px"
                },
                "props": {
                  "style": {
                    "classes": "Text-Styles/Ariel-Bold-White-12pt",
                    "fontSize": 20,
                    "textAlign": "center"
                  }
                },
                "type": "ia.display.label"
              },
              {
                "meta": {
                  "name": "Label_0"
                },
                "position": {
                  "basis": "800px"
                },
                "props": {
                  "style": {
                    "classes": "Labels/Label"
                  },
                  "text": "Import/Add Device"
                },
                "type": "ia.display.label"
              },
              {
                "meta": {
                  "name": "Label_2"
                },
                "position": {
                  "basis": "145px"
                },
                "type": "ia.display.label"
              },
              {
                "meta": {
                  "name": "Label_1"
                },
                "position": {
                  "basis": "800px"
                },
                "props": {
                  "style": {
                    "classes": "Labels/Label"
                  },
                  "text": "Export/Remove Device"
                },
                "type": "ia.display.label"
              },
              {
                "meta": {
                  "name": "Label_4"
                },
                "position": {
                  "basis": "10px",
                  "grow": 1
                },
                "type": "ia.display.label"
              }
            ],
            "meta": {
              "name": "FlexContainer_0"
            },
            "position": {
              "basis": "32px",
              "grow": 1,
              "shrink": 0
            },
            "type": "ia.container.flex"
          },
          {
            "children": [
              {
                "meta": {
                  "name": "Label_0"
                },
                "position": {
                  "basis": "10px"
                },
                "type": "ia.display.label"
              },
              {
                "events": {
                  "component": {
                    "onEditCellCommit": {
                      "config": {
                        "script": "\t\n\t\n\tdef get_headers_index(headers,col):\n\t    for i,value in enumerate(headers):\n\t        if value \u003d\u003d col:\n\t\t    \treturn i\n\t\n\t\n\tdata \u003d self.props.data\n\theaders \u003d system.dataset.getColumnHeaders(data)\n\tcol \u003d event.column\n\trow \u003d event.rowIndex\n\tvalue \u003d event.value\n\tcol_index \u003d get_headers_index(headers,col)\n\tself.props.data \u003d system.dataset.setValue(data, row, col_index, value)\n\t\n\t"
                      },
                      "scope": "G",
                      "type": "script"
                    }
                  }
                },
                "meta": {
                  "name": "AddTable"
                },
                "position": {
                  "basis": "800px"
                },
                "propConfig": {
                  "props.data": {
                    "onChange": {
                      "enabled": null,
                      "script": "\tpayload \u003d self.props.data\n\tsystem.perspective.sendMessage(\"addtable-data-update\", payload \u003d payload , scope \u003d \"view\")"
                    }
                  },
                  "props.selection.selectedRow": {
                    "onChange": {
                      "enabled": null,
                      "script": "\tif currentValue.value is not None:\n\t\tpayload \u003d currentValue.value\t\n\telse:\n\t\tpayload \u003d -1\n\tsystem.perspective.sendMessage(\"addtable-selection-update\", payload \u003d payload , scope \u003d \"view\")"
                    }
                  }
                },
                "props": {
                  "columns": [
                    {
                      "align": "center",
                      "boolean": "checkbox",
                      "dateFormat": "MM/DD/YYYY",
                      "editable": true,
                      "field": "Device Name",
                      "footer": {
                        "align": "center",
                        "justify": "left",
                        "style": {
                          "classes": ""
                        },
                        "title": ""
                      },
                      "header": {
                        "align": "center",
                        "justify": "left",
                        "style": {
                          "classes": ""
                        },
                        "title": ""
                      },
                      "justify": "auto",
                      "number": "value",
                      "numberFormat": "0,0.##",
                      "progressBar": {
                        "bar": {
                          "color": "",
                          "style": {
                            "classes": ""
                          }
                        },
                        "max": 100,
                        "min": 0,
                        "track": {
                          "color": "",
                          "style": {
                            "classes": ""
                          }
                        },
                        "value": {
                          "enabled": true,
                          "format": "0,0.##",
                          "justify": "center",
                          "style": {
                            "classes": ""
                          }
                        }
                      },
                      "render": "auto",
                      "resizable": true,
                      "sort": "none",
                      "sortable": true,
                      "strictWidth": false,
                      "style": {
                        "classes": ""
                      },
                      "toggleSwitch": {
                        "color": {
                          "selected": "",
                          "unselected": ""
                        }
                      },
                      "viewParams": {},
                      "viewPath": "",
                      "visible": true,
                      "width": ""
                    },
                    {
                      "align": "center",
                      "boolean": "checkbox",
                      "dateFormat": "MM/DD/YYYY",
                      "editable": true,
                      "field": "Hostname",
                      "footer": {
                        "align": "center",
                        "justify": "left",
                        "style": {
                          "classes": ""
                        },
                        "title": ""
                      },
                      "header": {
                        "align": "center",
                        "justify": "left",
                        "style": {
                          "classes": ""
                        },
                        "title": ""
                      },
                      "justify": "auto",
                      "number": "value",
                      "numberFormat": "0,0.##",
                      "progressBar": {
                        "bar": {
                          "color": "",
                          "style": {
                            "classes": ""
                          }
                        },
                        "max": 100,
                        "min": 0,
                        "track": {
                          "color": "",
                          "style": {
                            "classes": ""
                          }
                        },
                        "value": {
                          "enabled": true,
                          "format": "0,0.##",
                          "justify": "center",
                          "style": {
                            "classes": ""
                          }
                        }
                      },
                      "render": "auto",
                      "resizable": true,
                      "sort": "none",
                      "sortable": true,
                      "strictWidth": false,
                      "style": {
                        "classes": ""
                      },
                      "toggleSwitch": {
                        "color": {
                          "selected": "",
                          "unselected": ""
                        }
                      },
                      "viewParams": {},
                      "viewPath": "",
                      "visible": true,
                      "width": ""
                    },
                    {
                      "align": "center",
                      "boolean": "checkbox",
                      "dateFormat": "MM/DD/YYYY",
                      "editable": true,
                      "field": "Driver",
                      "footer": {
                        "align": "center",
                        "justify": "left",
                        "style": {
                          "classes": ""
                        },
                        "title": ""
                      },
                      "header": {
                        "align": "center",
                        "justify": "left",
                        "style": {
                          "classes": ""
                        },
                        "title": ""
                      },
                      "justify": "auto",
                      "number": "value",
                      "numberFormat": "0,0.##",
                      "progressBar": {
                        "bar": {
                          "color": "",
                          "style": {
                            "classes": ""
                          }
                        },
                        "max": 100,
                        "min": 0,
                        "track": {
                          "color": "",
                          "style": {
                            "classes": ""
                          }
                        },
                        "value": {
                          "enabled": true,
                          "format": "0,0.##",
                          "justify": "center",
                          "style": {
                            "classes": ""
                          }
                        }
                      },
                      "render": "view",
                      "resizable": true,
                      "sort": "none",
                      "sortable": true,
                      "strictWidth": false,
                      "style": {
                        "classes": ""
                      },
                      "toggleSwitch": {
                        "color": {
                          "selected": "",
                          "unselected": ""
                        }
                      },
                      "viewParams": {},
                      "viewPath": "Main-Views/Device-Manager/DriverDropDown",
                      "visible": true,
                      "width": ""
                    }
                  ],
                  "data": {
                    "$": [
                      "ds",
                      192,
                      1638525899295
                    ],
                    "$columns": [
                      {
                        "data": [
                          "IEC_Test"
                        ],
                        "name": "Device Name",
                        "type": "String"
                      },
                      {
                        "data": [
                          "lsdcknsncls"
                        ],
                        "name": "Hostname",
                        "type": "String"
                      },
                      {
                        "data": [
                          "S7300"
                        ],
                        "name": "Driver",
                        "type": "String"
                      }
                    ]
                  },
                  "rows": {
                    "subviewExpansionMode": "single"
                  },
                  "selection": {
                    "data": [
                      {
                        "Driver": "S7300"
                      }
                    ],
                    "enableColumnSelection": true,
                    "selectedColumn": "Driver",
                    "selectedRow": 0
                  }
                },
                "scripts": {
                  "customMethods": [],
                  "extensionFunctions": null,
                  "messageHandlers": [
                    {
                      "messageType": "update-addtable-data",
                      "pageScope": false,
                      "script": "\tself.props.data \u003d payload",
                      "sessionScope": false,
                      "viewScope": true
                    },
                    {
                      "messageType": "update-addtable-selectedrow",
                      "pageScope": false,
                      "script": "\tif payload \u003d\u003d -1:\n\t\tself.props.selection.selectedRow \u003d None",
                      "sessionScope": false,
                      "viewScope": true
                    },
                    {
                      "messageType": "addtable-dropdown-updaterow",
                      "pageScope": true,
                      "script": "\t#newData \u003d []\n\tsystem.perspective.print(\"DropDownMessage\")\n\thostname \u003d str(payload[\u0027Hostname\u0027])\n\tvalue \u003d payload[\u0027value\u0027]\n\tdata \u003d system.dataset.toPyDataSet(self.props.data)\n\tnewData \u003d data\n\tupdate \u003d False \n\tfor row in range(data.getRowCount()):\n\t\tsystem.perspective.print(\"Looping\")\n\t\tif data[row][\u0027Hostname\u0027] \u003d\u003d hostname:\n\t\t\tsystem.perspective.print(\"New Data\")\n\t\t\tnewData \u003d system.dataset.updateRow(data , row , {\"Driver\": value})\n\t\t\tbreak\n\t\t\n\tself.props.data \u003d newData\n",
                      "sessionScope": false,
                      "viewScope": true
                    }
                  ]
                },
                "type": "ia.display.table"
              },
              {
                "meta": {
                  "name": "Label_3"
                },
                "position": {
                  "basis": "10px"
                },
                "type": "ia.display.label"
              },
              {
                "children": [
                  {
                    "custom": {
                      "file_data": ""
                    },
                    "events": {
                      "component": {
                        "onFileReceived": {
                          "config": {
                            "script": "\tsystem.perspective.print(\"uploading\")\n\tself.custom.file_data \u003d event.file.getString()\n\t\n\n"
                          },
                          "scope": "G",
                          "type": "script"
                        }
                      }
                    },
                    "meta": {
                      "name": "FileUpload"
                    },
                    "position": {
                      "basis": "30px",
                      "shrink": 0
                    },
                    "propConfig": {
                      "custom.file_data": {
                        "onChange": {
                          "enabled": null,
                          "script": "\tif currentValue.value :\n\t\ttmp \u003d currentValue.value.replace(\"\\n\", \",\").replace(\u0027\"\u0027, \u0027\u0027)\n\t\t\n\t\tdata \u003d tmp.split(\",\")\n\t\theaders \u003d data[0:3]\n\t\tvalues \u003d []\n\t\tprint(headers)\n\t\n\t\tfor i in range(0,(len(data)-3),3):\n\t\t\tif i \u003d\u003d 0:\n\t\t\t\tpass\n\t\t\telse:\n\t\t\t\tvalue \u003d [data[i] , data[i+1] , data[i+2]]\n\t\t\t\t#value \u003d {\"Device name\":data[i] , \"Hostname\": data[i+1], \"Driver\":data[i+2]}\n\t\t\t\tprint(len(value))\n\t\t\t\tvalues.append(value)\n\t\t\n\t\n\t\tnew_data \u003d system.dataset.toDataSet(headers,values)\n\t\t#new_data \u003d values\n\t\tsystem.perspective.sendMessage(\"update-addtable-data\", payload \u003d new_data, scope \u003d \"view\")\n\t\tself.custom.file_data \u003d \"\""
                        }
                      }
                    },
                    "props": {
                      "fileUploadIcon": {
                        "color": "#000000",
                        "name": "Import"
                      },
                      "style": {
                        "backgroundColor": "#BAB6B6",
                        "classes": ""
                      },
                      "supportedFileTypes": [
                        "csv"
                      ]
                    },
                    "type": "ia.input.fileupload"
                  },
                  {
                    "meta": {
                      "name": "Label_0"
                    },
                    "position": {
                      "basis": "10px"
                    },
                    "type": "ia.display.label"
                  },
                  {
                    "custom": {
                      "AddTableData": {
                        "$": [
                          "ds",
                          192,
                          1638525899295
                        ],
                        "$columns": [
                          {
                            "data": [
                              "IEC_Test"
                            ],
                            "name": "Device Name",
                            "type": "String"
                          },
                          {
                            "data": [
                              "lsdcknsncls"
                            ],
                            "name": "Hostname",
                            "type": "String"
                          },
                          {
                            "data": [
                              "S7300"
                            ],
                            "name": "Driver",
                            "type": "String"
                          }
                        ]
                      }
                    },
                    "events": {
                      "component": {
                        "onActionPerformed": {
                          "config": {
                            "script": "\tdata \u003d self.custom.AddTableData\n\tpayload \u003d system.dataset.addRow(data,[\"\",\"\",\"\"])\n\tsystem.perspective.sendMessage(\"update-addtable-data\", payload\u003dpayload, scope\u003d\"view\")"
                          },
                          "scope": "G",
                          "type": "script"
                        }
                      }
                    },
                    "meta": {
                      "name": "Button_0"
                    },
                    "position": {
                      "basis": "30px",
                      "shrink": 0
                    },
                    "props": {
                      "image": {
                        "icon": {
                          "path": "material/add"
                        }
                      },
                      "style": {
                        "classes": "Buttons/PB_1"
                      },
                      "text": "Add Row"
                    },
                    "scripts": {
                      "customMethods": [],
                      "extensionFunctions": null,
                      "messageHandlers": [
                        {
                          "messageType": "addtable-data-update",
                          "pageScope": false,
                          "script": "\t# implement your handler here\n\tself.custom.AddTableData \u003d payload",
                          "sessionScope": false,
                          "viewScope": true
                        }
                      ]
                    },
                    "type": "ia.input.button"
                  },
                  {
                    "meta": {
                      "name": "Label"
                    },
                    "position": {
                      "basis": "10px"
                    },
                    "type": "ia.display.label"
                  },
                  {
                    "custom": {
                      "AddTableData": {
                        "$": [
                          "ds",
                          192,
                          1638525899295
                        ],
                        "$columns": [
                          {
                            "data": [
                              "IEC_Test"
                            ],
                            "name": "Device Name",
                            "type": "String"
                          },
                          {
                            "data": [
                              "lsdcknsncls"
                            ],
                            "name": "Hostname",
                            "type": "String"
                          },
                          {
                            "data": [
                              "S7300"
                            ],
                            "name": "Driver",
                            "type": "String"
                          }
                        ]
                      },
                      "SelectedRow": 0
                    },
                    "events": {
                      "component": {
                        "onActionPerformed": {
                          "config": {
                            "script": "\trow_to_delete \u003d self.custom.SelectedRow\n\tdataset \u003d self.custom.AddTableData\n\trows \u003d dataset.getRowCount()\n\tsystem.perspective.print(\"The row is \"+ str(row_to_delete))\n\tsystem.perspective.print(\"The number of row(s) is \"+ str(rows))\n\tif row_to_delete is not None:\n\t\tif row_to_delete or (row_to_delete \u003d\u003d 0 and rows \u003e 1):\n\t\t\tsystem.perspective.print(\"Deleting \"+ str(row_to_delete))\n\t\t\tpayload \u003d system.dataset.deleteRow(dataset,row_to_delete)\n\t\telif row_to_delete \u003d\u003d 0  and rows \u003d\u003d 1:\n\t\t\tsystem.perspective.print(\"Deleting \"+ str(row_to_delete))\n\t\t\tpayload \u003d system.dataset.updateRow(dataset,row_to_delete,{\"Device Name\":\"\",\"Hostname\":\"\",\"Driver\":\"\"}) \n\t\t\t\n\t\tsystem.perspective.sendMessage(\"update-addtable-data\", payload\u003dpayload, scope\u003d\"view\")\n\t\tsystem.perspective.sendMessage(\"update-addtable-selectedrow\", payload\u003d -1, scope\u003d\"view\")\n\t\n\t"
                          },
                          "scope": "G",
                          "type": "script"
                        }
                      }
                    },
                    "meta": {
                      "name": "Button_1"
                    },
                    "position": {
                      "basis": "30px",
                      "shrink": 0
                    },
                    "props": {
                      "image": {
                        "icon": {
                          "path": "material/remove"
                        }
                      },
                      "style": {
                        "classes": "Buttons/PB_1"
                      },
                      "text": "Delete Row"
                    },
                    "scripts": {
                      "customMethods": [],
                      "extensionFunctions": null,
                      "messageHandlers": [
                        {
                          "messageType": "addtable-data-update",
                          "pageScope": false,
                          "script": "\tself.custom.AddTableData \u003d payload",
                          "sessionScope": false,
                          "viewScope": true
                        },
                        {
                          "messageType": "addtable-selection-update",
                          "pageScope": false,
                          "script": "\tsystem.perspective.print(payload)\n\tif payload \u003d\u003d -1:\n\t\tself.custom.SelectedRow \u003d None\t\n\telse:\n\t\tself.custom.SelectedRow \u003d payload",
                          "sessionScope": false,
                          "viewScope": true
                        }
                      ]
                    },
                    "type": "ia.input.button"
                  },
                  {
                    "meta": {
                      "name": "Label_1"
                    },
                    "position": {
                      "basis": "10px"
                    },
                    "type": "ia.display.label"
                  },
                  {
                    "custom": {
                      "AddTableData": {
                        "$": [
                          "ds",
                          192,
                          1638525899295
                        ],
                        "$columns": [
                          {
                            "data": [
                              "IEC_Test"
                            ],
                            "name": "Device Name",
                            "type": "String"
                          },
                          {
                            "data": [
                              "lsdcknsncls"
                            ],
                            "name": "Hostname",
                            "type": "String"
                          },
                          {
                            "data": [
                              "S7300"
                            ],
                            "name": "Driver",
                            "type": "String"
                          }
                        ]
                      },
                      "Drivers": "{\"S7300\":\"\",\"S7400\":\"\",\"S71200\":\"\",\"S71500\":\"S7\", \"CompactLogix\":\"\",\"Legacy Allen-Bradley\":\"\",\"ControlLogix\":\"\", \"LogixDriver\":\"\",\"MicroLogix\":\"\"} "
                    },
                    "events": {
                      "component": {
                        "onActionPerformed": {
                          "config": {
                            "script": "\timport sys\n\timport re\n\tfrom java.lang import Exception\n\t\n\tdef drivers():\n\t\tdrivers_dict \u003d self.custom.Drivers\n\t\tdrivers_decode \u003d system.util.jsonDecode(drivers_dict)\n\t\treturn drivers_decode\n\t\n\tdef decode(tagPath):\n\t     device_cfg \u003d system.tag.read(tagPath).value\n\t     device_decode \u003d system.util.jsonDecode(device_cfg)\n\t     return device_decode\n\t\n\t\n\tdef update_add_devices(device_list,drivers):\n\t\tfc \u003d system.tag.read(\"Configuration/FC\").value\n\t\tprefix \u003d fc\t\n\t\tdevices_data \u003d self.custom.AddTableData\n\t\tpy_devices \u003d system.dataset.toPyDataSet(devices_data)\n\t\tcurrent_device_list \u003d device_list.get(\"Devicestatus\",\"\")\n\t\tdevices_to_check \u003d [i for i in current_device_list]\n\t\tdevices_to_add \u003d {}\n\t\terror\u003d[]\n\t\tif py_devices:\n\t\t\tfor i,j in enumerate(py_devices):\n\t\t\t\trow \u003d[]\n\t\t\t\tname \u003d j[0]\n\t\t\t\thostname \u003d j[1]\n\t\t\t\tdriver \u003d j[2]\n\t\t\t\tsystem.perspective.print(drivers.get(j[2]))\t\n\t\t\t\tcheck_driver \u003d drivers.get(j[2],\"False\")\n\t\t\t\tif name.startswith(prefix):\n\t\t\t\t\tif name not in devices_to_check:\n\t\t\t\t\t\tif j[0] and j[1] and check_driver !\u003d \"False\":\n\t\t\t\t\t\t\trow.append(hostname)\n\t\t\t\t\t\t\trow.append(driver)\n\t\t\t\t\t\t\tdevices_to_add[name] \u003d row\n\t\t\t\t\t\telse:\n\t\t\t\t\t\t\terror.append(i)\n\t\t\t\t\telse:\n\t\t\t\t\t   system.perspective.print(\"Device already exists: %s\" % (name))\n\t\t\t\t\t   message \u003d {\"labelText\":\"Device already exists: %s\" % (name),\"acceptPB\":\"Ok\", \"cancelPB\":\"hide\",\"iconPath\":\"material/error\" }\n\t\t\t\t\t   system.perspective.openPopup(\"Exists\",\u0027PopUp-Views/UserInfo\u0027, params \u003d {\u0027Message\u0027:message})\n\t\t\t\telse:\n\t\t\t\t\t system.perspective.print(\"Use the correct prefix: %s\" % (fc))\n\t\t\t\t\t message \u003d {\"labelText\":\"Use the correct prefix: %s\" % (fc),\"acceptPB\":\"Ok\", \"cancelPB\":\"hide\",\"iconPath\":\"material/error\" }\n\t\t\t\t\t system.perspective.openPopup(\"Exists\",\u0027PopUp-Views/UserInfo\u0027, params \u003d {\u0027Message\u0027:message})\n\t\t#\tdisplay_err\u003d\"\"\n\t\t#\tdisplay_err \u003d display_err.join(error)\n\t\t\tif error:\n\t\t\t\tdisplay_err \u003d str(error)\n\t\t\t\tsystem.perspective.print(\"Missing data in row: %s\" % (display_err))\n\t\t\t\tmessage \u003d {\"labelText\":\"Missing data in row: %s\" % (display_err),\"acceptPB\":\"Ok\", \"cancelPB\":\"hide\",\"iconPath\":\"material/error\" }\n\t\t\t\tsystem.perspective.openPopup(\"Exists\",\u0027PopUp-Views/UserInfo\u0027, params \u003d {\u0027Message\u0027:message})\n\t\t\tdevice_list[\"AddDevices\"] \u003d devices_to_add    \n\t\t\tencode \u003d system.util.jsonEncode(device_list)\n\t\t\tsystem.tag.write(\"System/DeviceList\",encode)\n\t\n\ttry:\n\t\topc_drivers \u003d drivers()\n\t\tif system.tag.exists(\"System/DeviceStatus\"):\n\t\t\tcfg \u003d decode(\"System/DeviceStatus\")\n\t\t\tupdate_add_devices(cfg,opc_drivers)\n\texcept:\n\t    exc_type, exc_obj, tb \u003d sys.exc_info()\n\t    lineno \u003d tb.tb_lineno\n\t    error_description\u003dstr(lineno)+\" , \"+str(exc_type)+\" , \"+str(exc_obj)\n\t    system.perspective.print(error_description)"
                          },
                          "scope": "G",
                          "type": "script"
                        }
                      }
                    },
                    "meta": {
                      "name": "Button_2"
                    },
                    "position": {
                      "basis": "30px",
                      "shrink": 0
                    },
                    "props": {
                      "AddTableData": {
                        "$": [
                          "ds",
                          192,
                          1638376388559
                        ],
                        "$columns": [
                          {
                            "data": [
                              "IECTest1",
                              "IECTest2"
                            ],
                            "name": "Device Name",
                            "type": "String"
                          },
                          {
                            "data": [
                              "IECTest1",
                              ""
                            ],
                            "name": "Hostname",
                            "type": "String"
                          },
                          {
                            "data": [
                              "S71500",
                              ""
                            ],
                            "name": "Driver",
                            "type": "String"
                          }
                        ]
                      },
                      "image": {
                        "icon": {
                          "path": "material/keyboard_return"
                        }
                      },
                      "style": {
                        "classes": "Buttons/PB_1"
                      },
                      "text": "Add Device"
                    },
                    "scripts": {
                      "customMethods": [],
                      "extensionFunctions": null,
                      "messageHandlers": [
                        {
                          "messageType": "addtable-data-update",
                          "pageScope": false,
                          "script": "\t\n\tself.custom.AddTableData \u003d payload",
                          "sessionScope": false,
                          "viewScope": true
                        }
                      ]
                    },
                    "type": "ia.input.button"
                  },
                  {
                    "meta": {
                      "name": "Label_2"
                    },
                    "position": {
                      "basis": "10px"
                    },
                    "type": "ia.display.label"
                  },
                  {
                    "events": {
                      "dom": {
                        "onClick": {
                          "config": {
                            "script": "\theader \u003d [\"Device Name\",\"Hostname\",\"Driver\"]\n\ttable \u003d [[\"\",\"\",\"\"]]\n\tpayload \u003d system.dataset.toDataSet(header,table)\n\tsystem.perspective.sendMessage(\"update-addtable-data\", payload\u003dpayload, scope\u003d\"view\")\n\tsystem.perspective.sendMessage(\"update-addtable-selectedrow\", payload\u003d -1, scope\u003d\"view\")"
                          },
                          "scope": "G",
                          "type": "script"
                        }
                      }
                    },
                    "meta": {
                      "name": "Icon"
                    },
                    "position": {
                      "basis": "30px"
                    },
                    "props": {
                      "color": "#FFFFFF",
                      "path": "material/delete_forever",
                      "style": {
                        "borderBottomLeftRadius": 5,
                        "borderBottomRightRadius": 5,
                        "borderColor": "#AAAAAA",
                        "borderStyle": "solid",
                        "borderTopLeftRadius": 5,
                        "borderTopRightRadius": 5,
                        "borderWidth": 1,
                        "classes": "Buttons/PB_1"
                      }
                    },
                    "type": "ia.display.icon"
                  }
                ],
                "meta": {
                  "name": "FlexContainer"
                },
                "position": {
                  "basis": "125px",
                  "shrink": 0
                },
                "props": {
                  "direction": "column"
                },
                "type": "ia.container.flex"
              },
              {
                "meta": {
                  "name": "Label_2"
                },
                "position": {
                  "basis": "10px"
                },
                "type": "ia.display.label"
              },
              {
                "meta": {
                  "name": "DeleteTable"
                },
                "position": {
                  "basis": "800px"
                },
                "propConfig": {
                  "props.data": {
                    "onChange": {
                      "enabled": null,
                      "script": "\tpayload \u003d self.props.data\n\tsystem.perspective.sendMessage(\"deletetable-data-update\", payload \u003d payload , scope \u003d \"view\")"
                    }
                  },
                  "props.selection.selectedRow": {
                    "onChange": {
                      "enabled": null,
                      "script": "\tif currentValue.value is not None:\n\t\tpayload \u003d currentValue.value\t\n\telse:\n\t\tpayload \u003d -1\n\tsystem.perspective.sendMessage(\"deletetable-selection-update\", payload \u003d payload , scope \u003d \"view\")"
                    }
                  }
                },
                "props": {
                  "columns": [
                    {
                      "align": "center",
                      "boolean": "checkbox",
                      "dateFormat": "MM/DD/YYYY",
                      "editable": true,
                      "field": "Device Name",
                      "footer": {
                        "align": "center",
                        "justify": "left",
                        "style": {
                          "classes": ""
                        },
                        "title": ""
                      },
                      "header": {
                        "align": "center",
                        "justify": "left",
                        "style": {
                          "classes": ""
                        },
                        "title": ""
                      },
                      "justify": "auto",
                      "number": "value",
                      "numberFormat": "0,0.##",
                      "progressBar": {
                        "bar": {
                          "color": "",
                          "style": {
                            "classes": ""
                          }
                        },
                        "max": 100,
                        "min": 0,
                        "track": {
                          "color": "",
                          "style": {
                            "classes": ""
                          }
                        },
                        "value": {
                          "enabled": true,
                          "format": "0,0.##",
                          "justify": "center",
                          "style": {
                            "classes": ""
                          }
                        }
                      },
                      "render": "auto",
                      "resizable": true,
                      "sort": "none",
                      "sortable": true,
                      "strictWidth": false,
                      "style": {
                        "classes": ""
                      },
                      "toggleSwitch": {
                        "color": {
                          "selected": "",
                          "unselected": ""
                        }
                      },
                      "viewParams": {},
                      "viewPath": "",
                      "visible": true,
                      "width": ""
                    },
                    {
                      "align": "center",
                      "boolean": "checkbox",
                      "dateFormat": "MM/DD/YYYY",
                      "editable": true,
                      "field": "Hostname",
                      "footer": {
                        "align": "center",
                        "justify": "left",
                        "style": {
                          "classes": ""
                        },
                        "title": ""
                      },
                      "header": {
                        "align": "center",
                        "justify": "left",
                        "style": {
                          "classes": ""
                        },
                        "title": ""
                      },
                      "justify": "auto",
                      "number": "value",
                      "numberFormat": "0,0.##",
                      "progressBar": {
                        "bar": {
                          "color": "",
                          "style": {
                            "classes": ""
                          }
                        },
                        "max": 100,
                        "min": 0,
                        "track": {
                          "color": "",
                          "style": {
                            "classes": ""
                          }
                        },
                        "value": {
                          "enabled": true,
                          "format": "0,0.##",
                          "justify": "center",
                          "style": {
                            "classes": ""
                          }
                        }
                      },
                      "render": "auto",
                      "resizable": true,
                      "sort": "none",
                      "sortable": true,
                      "strictWidth": false,
                      "style": {
                        "classes": ""
                      },
                      "toggleSwitch": {
                        "color": {
                          "selected": "",
                          "unselected": ""
                        }
                      },
                      "viewParams": {},
                      "viewPath": "",
                      "visible": true,
                      "width": ""
                    },
                    {
                      "align": "center",
                      "boolean": "checkbox",
                      "dateFormat": "MM/DD/YYYY",
                      "editable": true,
                      "field": "Driver",
                      "footer": {
                        "align": "center",
                        "justify": "left",
                        "style": {
                          "classes": ""
                        },
                        "title": ""
                      },
                      "header": {
                        "align": "center",
                        "justify": "left",
                        "style": {
                          "classes": ""
                        },
                        "title": ""
                      },
                      "justify": "auto",
                      "number": "value",
                      "numberFormat": "0,0.##",
                      "progressBar": {
                        "bar": {
                          "color": "",
                          "style": {
                            "classes": ""
                          }
                        },
                        "max": 100,
                        "min": 0,
                        "track": {
                          "color": "",
                          "style": {
                            "classes": ""
                          }
                        },
                        "value": {
                          "enabled": true,
                          "format": "0,0.##",
                          "justify": "center",
                          "style": {
                            "classes": ""
                          }
                        }
                      },
                      "render": "auto",
                      "resizable": true,
                      "sort": "none",
                      "sortable": true,
                      "strictWidth": false,
                      "style": {
                        "classes": ""
                      },
                      "toggleSwitch": {
                        "color": {
                          "selected": "",
                          "unselected": ""
                        }
                      },
                      "viewParams": {},
                      "viewPath": "",
                      "visible": true,
                      "width": ""
                    }
                  ],
                  "data": {
                    "$": [
                      "ds",
                      192,
                      1638468310855
                    ],
                    "$columns": [
                      {
                        "data": [
                          "IEC_Test"
                        ],
                        "name": "Device Name",
                        "type": "String"
                      },
                      {
                        "data": [
                          "lsdcknsncls"
                        ],
                        "name": "Hostname",
                        "type": "String"
                      },
                      {
                        "data": [
                          "S7300"
                        ],
                        "name": "Driver",
                        "type": "String"
                      }
                    ]
                  },
                  "selection": {
                    "data": [
                      {
                        "Driver": "S7300"
                      }
                    ],
                    "enableColumnSelection": true,
                    "selectedColumn": "Driver",
                    "selectedRow": 0
                  }
                },
                "scripts": {
                  "customMethods": [],
                  "extensionFunctions": null,
                  "messageHandlers": [
                    {
                      "messageType": "update-deletetable-data",
                      "pageScope": false,
                      "script": "\tself.props.data \u003d payload ",
                      "sessionScope": false,
                      "viewScope": true
                    },
                    {
                      "messageType": "update-deletetable-selectedrow",
                      "pageScope": false,
                      "script": "\tif payload \u003d\u003d -1:\n\t\tself.props.selection.selectedRow \u003d None",
                      "sessionScope": false,
                      "viewScope": true
                    }
                  ]
                },
                "type": "ia.display.table"
              },
              {
                "meta": {
                  "name": "Label_1"
                },
                "position": {
                  "basis": "10px"
                },
                "type": "ia.display.label"
              },
              {
                "children": [
                  {
                    "events": {
                      "component": {
                        "onActionPerformed": {
                          "config": {
                            "script": "\timport sys\n\tfrom java.lang import Exception\n\t\n\tdef update_delete_table():\t\n\t\t\tprefix \u003d system.tag.read(\"Configuration/FC\").value\n\t\t\tdevices\u003d system.tag.read(\"System/DeviceStatus\").value\n\t\t\tdecode_devices\u003d system.util.jsonDecode(devices)\n\t\t\tdevice_status\u003d decode_devices.get(\"Devicestatus\",\"\")\n\t\t\ttable\u003d []\n\t\t\tif device_status:\n\t\t\t\tfor i in device_status:\n\t\t\t\t\trow \u003d[]\n\t\t\t\t\tname\u003d [i]\n\t\t\t\t\tif i.startswith(prefix):\n\t\t\t\t\t\trow\u003d device_status[i]\n\t\t\t\t\t\thostname \u003d [row[3]]\n\t\t\t\t\t\tdriver \u003d [row[2]]\n\t\t\t\t\t\tnew_row \u003d name + hostname + driver\n\t\t\t\t\t\ttable.append(new_row)\n\t\t\t\n\t\t\tif not len(table):\n\t\t\t\ttable.append([\"\",\"\",\"\"])\n\t\t\t\t\t\t\n\t\t\theader\u003d [\"Device Name\",\"Hostname\",\"Driver\"]\n\t\t\tdevice_dataset \u003d system.dataset.toDataSet(header,table)\n\t\t\tsystem.perspective.print(device_dataset)\n\t\t\tsystem.perspective.sendMessage(\"update-deletetable-data\", payload \u003d device_dataset , scope\u003d\"view\") \n\t\t\t\n#\ttry:\n\tif system.tag.exists(\"System/DeviceStatus\"):\n\t    update_delete_table()\n#\texcept:\n#\t    logger \u003d system.util.getLogger(\"Update_delete_table\")\n#\t    exc_type, exc_obj, tb \u003d sys.exc_info()"
                          },
                          "scope": "G",
                          "type": "script"
                        }
                      }
                    },
                    "meta": {
                      "name": "Button"
                    },
                    "position": {
                      "basis": "30px",
                      "shrink": 0
                    },
                    "props": {
                      "image": {
                        "icon": {
                          "path": "material/update"
                        }
                      },
                      "style": {
                        "classes": "Buttons/PB_1"
                      },
                      "text": "Update"
                    },
                    "type": "ia.input.button"
                  },
                  {
                    "meta": {
                      "name": "Label_0"
                    },
                    "position": {
                      "basis": "10px"
                    },
                    "type": "ia.display.label"
                  },
                  {
                    "custom": {
                      "DeleteTableData": {
                        "$": [
                          "ds",
                          192,
                          1638468310856
                        ],
                        "$columns": [
                          {
                            "data": [
                              "IEC_Test"
                            ],
                            "name": "Device Name",
                            "type": "String"
                          },
                          {
                            "data": [
                              "lsdcknsncls"
                            ],
                            "name": "Hostname",
                            "type": "String"
                          },
                          {
                            "data": [
                              "S7300"
                            ],
                            "name": "Driver",
                            "type": "String"
                          }
                        ]
                      },
                      "SelectedRow": 0
                    },
                    "events": {
                      "component": {
                        "onActionPerformed": {
                          "config": {
                            "script": "\timport sys\n\tfrom java.lang import Exception\n\t\n\tdef decode(tagPath):\n\t     device_cfg \u003d system.tag.read(tagPath).value\n\t     device_decode \u003d system.util.jsonDecode(device_cfg)\n\t     return device_decode\n\t\n\t\n\tdef update_delete_devices(device_list):\n\t\trow_to_delete \u003d self.parent.parent.getChild(\u0027DeleteTable\u0027).props.selection.selectedRow\n\t\tdelete_data \u003d self.parent.parent.getChild(\u0027DeleteTable\u0027).props.data\n\t\tsystem.perspective.print(device_list)\n\t\tpy_devices \u003d system.dataset.toPyDataSet(delete_data)\n#\t\tsystem.perspective.print(py_devices)\n\t\trow \u003d[]\n\t\tif py_devices:\n\t\t\tfor i,j in enumerate(py_devices):\n\t\t\t\tif i \u003d\u003d row_to_delete:\n\t\t\t\t\tname \u003d j[0]\n\t\t\t\t\trow.append(name)\n\t\t\tdevice_list[\"Removedevices\"] \u003d row    \n\t\t\tencode \u003d system.util.jsonEncode(device_list)\n\t\t\t#proceed \u003d system.gui.confirm(\"Device %s will be removed from the gateway, do you wish to proceed?\" % (name), \"Remove Device\",1)\n\t\t\t#if proceed:\n\t\t\t#system.tag.write(\"System/DeviceList\",encode)\n\t\t\tsystem.tag.writeBlocking([\"System/DeviceList\",], encode)\n\t\t\t\n#\ttry:\n\tcfg \u003d decode(\"System/DeviceList\")\n\tupdate_delete_devices(cfg)\n\t\t\n#\texcept:\n#\t    logger \u003d system.util.getLogger(\"Device_Delete\")\n#\t    exc_type, exc_obj, tb \u003d sys.exc_info()\n#\t    lineno \u003d tb.tb_lineno\n#\t    logger.error(\"Error: %s, %s, %s\" % (lineno, exc_type, exc_obj))\n#\t    "
                          },
                          "scope": "G",
                          "type": "script"
                        }
                      }
                    },
                    "meta": {
                      "name": "Button_0"
                    },
                    "position": {
                      "basis": "30px",
                      "shrink": 0
                    },
                    "props": {
                      "image": {
                        "icon": {
                          "path": "material/remove"
                        }
                      },
                      "style": {
                        "classes": "Buttons/PB_1"
                      },
                      "text": "Remove Device"
                    },
                    "scripts": {
                      "customMethods": [],
                      "extensionFunctions": null,
                      "messageHandlers": [
                        {
                          "messageType": "deletetable-selection-update",
                          "pageScope": false,
                          "script": "\tif payload \u003d\u003d -1:\n\t\tself.custom.SelectedRow \u003d None\t\n\telse:\n\t\tself.custom.SelectedRow \u003d payload",
                          "sessionScope": false,
                          "viewScope": true
                        },
                        {
                          "messageType": "deletetable-data-update",
                          "pageScope": false,
                          "script": "\tself.custom.DeleteTableData \u003d payload",
                          "sessionScope": false,
                          "viewScope": true
                        }
                      ]
                    },
                    "type": "ia.input.button"
                  },
                  {
                    "meta": {
                      "name": "Label"
                    },
                    "position": {
                      "basis": "10px"
                    },
                    "type": "ia.display.label"
                  },
                  {
                    "custom": {
                      "DeleteTableData": {
                        "$": [
                          "ds",
                          192,
                          1638468310856
                        ],
                        "$columns": [
                          {
                            "data": [
                              "IEC_Test"
                            ],
                            "name": "Device Name",
                            "type": "String"
                          },
                          {
                            "data": [
                              "lsdcknsncls"
                            ],
                            "name": "Hostname",
                            "type": "String"
                          },
                          {
                            "data": [
                              "S7300"
                            ],
                            "name": "Driver",
                            "type": "String"
                          }
                        ]
                      }
                    },
                    "events": {
                      "dom": {
                        "onClick": {
                          "config": {
                            "script": "\timport sys\n\tfrom java.lang import Exception\n\t\n\tdef save_devices():\n\t\tdevices_to_save \u003d self.custom.DeleteTableData\n\t\tpy_devices \u003d system.dataset.toPyDataSet(devices_to_save)\n\t\tdevice_list \u003d []\n\t\tfor i,j in enumerate(py_devices):\n\t\t#check the required fields have data in them.\n\t\t\trow \u003d[]\n\t\t\tname \u003d j[0]\n\t\t\thostname \u003d j[1]\n\t\t\tdriver \u003d j[2]\n\t\t\trow.append(name)\n\t\t\trow.append(hostname)\n\t\t\trow.append(driver)\n\t\t\tdevice_list.append(row)\n\t\tHeader \u003d [\u0027Device Name\u0027,\u0027Hostname\u0027,\u0027Driver\u0027]\n\t\tdevice_dataset \u003d system.dataset.toDataSet(Header,device_list)\n\t\tcsv_file \u003d system.dataset.toCSV(device_dataset)\n\t\tsystem.perspective.download(filename\u003d \"myExport.csv\", data \u003d csv_file, contentType\u003d \"text/csv; charset\u003dutf-8\")\n#\t\tfilePath \u003d system.file.saveFile(\"myExport.csv\", \"csv\", \"Gateway Devices\")   \n#\t\tif filePath:\n#\t\t    system.file.writeFile(filePath, csv_file)\n\t\n\t\n#\ttry: \n\tsave_devices()\n#\texcept:\n#\t    logger \u003d system.util.getLogger(\"save_devices\")\n#\t    exc_type, exc_obj, tb \u003d sys.exc_info()\n#\t    lineno \u003d tb.tb_lineno\n#\t    logger.error(\"Error: %s, %s, %s\" % (lineno, exc_type, exc_obj))"
                          },
                          "scope": "G",
                          "type": "script"
                        }
                      }
                    },
                    "meta": {
                      "name": "Icon"
                    },
                    "position": {
                      "basis": "30px"
                    },
                    "props": {
                      "color": "#FFFFFF",
                      "path": "material/save",
                      "style": {
                        "borderBottomLeftRadius": 5,
                        "borderBottomRightRadius": 5,
                        "borderColor": "#AAAAAA",
                        "borderStyle": "solid",
                        "borderTopLeftRadius": 5,
                        "borderTopRightRadius": 5,
                        "borderWidth": 1,
                        "classes": "Buttons/PB_1"
                      }
                    },
                    "scripts": {
                      "customMethods": [],
                      "extensionFunctions": null,
                      "messageHandlers": [
                        {
                          "messageType": "deletetable-data-update",
                          "pageScope": false,
                          "script": "\tself.custom.DeleteTableData \u003d payload",
                          "sessionScope": false,
                          "viewScope": true
                        }
                      ]
                    },
                    "type": "ia.display.icon"
                  },
                  {
                    "meta": {
                      "name": "Label_1"
                    },
                    "position": {
                      "basis": "10px"
                    },
                    "type": "ia.display.label"
                  },
                  {
                    "custom": {
                      "DeleteTableData": "value",
                      "SelectedRow": "value"
                    },
                    "events": {
                      "dom": {
                        "onClick": {
                          "config": {
                            "script": "\theader \u003d [\"Device Name\",\"Hostname\",\"Driver\"]\n\ttable \u003d [[\"\",\"\",\"\"]]\n\tdevice_dataset \u003d system.dataset.toDataSet(header,table)\n\tsystem.perspective.sendMessage(\"update-deletetable-data\", payload\u003ddevice_dataset, scope\u003d\"view\")\n\tsystem.perspective.sendMessage(\"update-deletetable-selectedrow\", payload\u003d -1, scope\u003d\"view\")"
                          },
                          "scope": "G",
                          "type": "script"
                        }
                      }
                    },
                    "meta": {
                      "name": "Icon_0"
                    },
                    "position": {
                      "basis": "30px"
                    },
                    "props": {
                      "color": "#FFFFFF",
                      "path": "material/delete_forever",
                      "style": {
                        "borderBottomLeftRadius": 5,
                        "borderBottomRightRadius": 5,
                        "borderColor": "#AAAAAA",
                        "borderStyle": "solid",
                        "borderTopLeftRadius": 5,
                        "borderTopRightRadius": 5,
                        "borderWidth": 1,
                        "classes": "Buttons/PB_1"
                      }
                    },
                    "type": "ia.display.icon"
                  }
                ],
                "meta": {
                  "name": "FlexContainer_1"
                },
                "position": {
                  "basis": "125px",
                  "shrink": 0
                },
                "props": {
                  "direction": "column"
                },
                "scripts": {
                  "customMethods": [],
                  "extensionFunctions": null,
                  "messageHandlers": [
                    {
                      "messageType": "deletetable-selection-update",
                      "pageScope": true,
                      "script": "\tif payload \u003d\u003d -1:\n\t\tself.custom.SelectedRow \u003d None\t\n\telse:\n\t\tself.custom.SelectedRow \u003d payload",
                      "sessionScope": false,
                      "viewScope": false
                    }
                  ]
                },
                "type": "ia.container.flex"
              },
              {
                "meta": {
                  "name": "Label_4"
                },
                "position": {
                  "basis": "10px",
                  "grow": 1
                },
                "type": "ia.display.label"
              }
            ],
            "meta": {
              "name": "FlexContainer"
            },
            "position": {
              "basis": "198px",
              "shrink": 0
            },
            "type": "ia.container.flex"
          }
        ],
        "meta": {
          "name": "FlexContainer"
        },
        "position": {
          "basis": "230px"
        },
        "props": {
          "direction": "column"
        },
        "type": "ia.container.flex"
      },
      {
        "children": [
          {
            "children": [
              {
                "meta": {
                  "name": "Label_4"
                },
                "position": {
                  "basis": "15px",
                  "shrink": 0
                },
                "props": {
                  "style": {
                    "classes": "Labels/Label",
                    "textAlign": "center"
                  },
                  "text": "\n"
                },
                "type": "ia.display.label"
              },
              {
                "meta": {
                  "name": "Label"
                },
                "position": {
                  "basis": "400px"
                },
                "props": {
                  "style": {
                    "classes": "Labels/Label_1",
                    "textAlign": "center"
                  },
                  "text": "Device Name"
                },
                "type": "ia.display.label"
              },
              {
                "meta": {
                  "name": "Label_0"
                },
                "position": {
                  "basis": "400px"
                },
                "props": {
                  "style": {
                    "classes": "Labels/Label_1",
                    "textAlign": "center"
                  },
                  "text": "Driver"
                },
                "type": "ia.display.label"
              },
              {
                "meta": {
                  "name": "Label_1"
                },
                "position": {
                  "basis": "200px"
                },
                "props": {
                  "style": {
                    "classes": "Labels/Label_1",
                    "textAlign": "center"
                  },
                  "text": "Enabled"
                },
                "type": "ia.display.label"
              },
              {
                "meta": {
                  "name": "Label_2"
                },
                "position": {
                  "basis": "564px"
                },
                "props": {
                  "style": {
                    "classes": "Labels/Label_1",
                    "textAlign": "center"
                  },
                  "text": "Connection Status"
                },
                "type": "ia.display.label"
              },
              {
                "meta": {
                  "name": "Label_3"
                },
                "position": {
                  "basis": "564px"
                },
                "props": {
                  "style": {
                    "classes": "Labels/Label_1",
                    "textAlign": "center"
                  },
                  "text": "Hostname"
                },
                "type": "ia.display.label"
              },
              {
                "meta": {
                  "name": "FlexContainer"
                },
                "position": {
                  "basis": "200px"
                },
                "props": {
                  "direction": "column",
                  "style": {
                    "overflow": "visible"
                  }
                },
                "type": "ia.container.flex"
              },
              {
                "meta": {
                  "name": "Label_5"
                },
                "position": {
                  "basis": "15px",
                  "shrink": 0
                },
                "props": {
                  "style": {
                    "classes": "Labels/Label",
                    "textAlign": "center"
                  },
                  "text": "\n"
                },
                "type": "ia.display.label"
              }
            ],
            "custom": {
              "update": "value",
              "update_enable": "value"
            },
            "meta": {
              "name": "FlexContainer"
            },
            "position": {
              "basis": "100px"
            },
            "type": "ia.container.flex"
          },
          {
            "children": [
              {
                "meta": {
                  "name": "Label_1"
                },
                "position": {
                  "basis": "10px"
                },
                "type": "ia.display.label"
              },
              {
                "meta": {
                  "name": "DeviceList"
                },
                "position": {
                  "grow": 1
                },
                "props": {
                  "direction": "column",
                  "path": "Main-Views/Device-Manager/Device",
                  "useDefaultViewWidth": false
                },
                "scripts": {
                  "customMethods": [],
                  "extensionFunctions": null,
                  "messageHandlers": [
                    {
                      "messageType": "update-devicelist-data",
                      "pageScope": false,
                      "script": "\tself.props.instances \u003d payload",
                      "sessionScope": false,
                      "viewScope": true
                    }
                  ]
                },
                "type": "ia.display.flex-repeater"
              },
              {
                "meta": {
                  "name": "Label_2"
                },
                "position": {
                  "basis": "10px"
                },
                "type": "ia.display.label"
              }
            ],
            "meta": {
              "name": "FlexContainer_1"
            },
            "position": {
              "basis": "784px"
            },
            "type": "ia.container.flex"
          }
        ],
        "meta": {
          "name": "FlexContainer_0"
        },
        "position": {
          "basis": "32px",
          "grow": 1
        },
        "props": {
          "direction": "column"
        },
        "type": "ia.container.flex"
      }
    ],
    "custom": {
      "delay": 4000,
      "run_update": true
    },
    "meta": {
      "name": "root"
    },
    "propConfig": {
      "custom.update": {
        "binding": {
          "config": {
            "expression": "now({this.custom.delay})"
          },
          "type": "expr"
        },
        "onChange": {
          "enabled": null,
          "script": "\tdef update():\n\t\tdevices \u003d system.tag.read(\"System/DeviceStatus\").value\n\t\tfc \u003d system.tag.read(\"Configuration/FC\").value\n\t\tdecode_devices \u003d system.util.jsonDecode(devices)\n\t\tdevice_status \u003d decode_devices.get(\"Devicestatus\",\"\")\n\t\tsystem.perspective.print(device_status)\n\t\tinstance_style \u003d {\"classes\":\"DeviceManager/DeviceManagerRows\"}\n\t\tinstance_position \u003d {}\n\t\ttable_data \u003d []\n\t\tif device_status:\n\t\t\tfor i in device_status:\n\t\t\t\tif i.startswith(fc):\n\t\t\t\t\trow\u003d{}\n\t\t\t\t\trow[\"device_name\"]\u003d i\n\t\t\t\t\tdevice_items \u003d device_status.get(i)\n\t\t\t\t\tsystem.perspective.print(type(device_items))\n\t\t\t\t\tenabled \u003d device_items[0]\n\t\t\t\t\tstatus \u003d device_items[1]\n\t\t\t\t\tdriver \u003d device_items[2]\n\t\t\t\t\thost_name \u003d  device_items[3]\n\t\t\t\t\t\n\t\t\t\t\trow[\"status\"] \u003d status\n\t\t\t\t\trow[\"enabled\"] \u003d enabled\n\t\t\t\t\trow[\"host_name\"] \u003d host_name\n\t\t\t\t\trow[\"driver\"] \u003d driver\n#\t\t\t\t\t\n\t\t\t\t\trow[\"instanceStyle\"]\u003d instance_style\n\t\t\t\t\trow[\"instancePosition\"]\u003d instance_position\n\t\t\t\t\ttable_data.append(row)\n#\t\t\t\n\t\t\t#self.getChild(\"FlexRepeater\").props.instances \u003d table_data\n\t\t\tsystem.perspective.sendMessage(\"update-devicelist-data\", payload \u003d table_data , scope\u003d\"view\")\n\t\telse:\n#\t\t\trow \u003d row_builder.build_row(status \u003d \"\", enabled \u003d \"\", host_name\u003d\"\", driver\u003d\"\",\n#\t\t\t \t\t\t\t\t\t\tinstanceStyle\u003d instance_style, instancePosition \u003d instance_position)\n#\t\t\ttable_data.append(row)\n\t\t\tsystem.perspective.sendMessage(\"update-devicelist-data\", payload \u003d [] , scope\u003d\"view\")\n\t\t\t\t\t\n\n\tif self.custom.run_update:\n\t\tif system.tag.exists(\"System/DeviceStatus\"):\n\t\t\tupdate()\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n#\t\theader\u003d [\"device_name\",\"enabled\",\"status\",\"driver\",\"hostname\"]\n#\t\tdevice_dataset \u003d system.dataset.toDataSet(header,table)\n#\t\tsorted \u003d system.dataset.sort(device_dataset,\"device_name\",True)\n#\t\tevent.source.parent.getComponent(\u0027DeviceTable\u0027).templateParams \u003d sorted\n#\t\n#\tdef errors():\n#\t\terrors \u003d system.tag.read(\"System/DeviceMgrErrors\").value\n#\t\tevent.source.parent.Errors \u003d errors\n#\ttry:\n#\t\tif event.source.parent.getComponent(\u0027DeviceTable\u0027).runscript:\n#\t\t\tif system.tag.exists(\"System/DeviceStatus\"):\n#\t\t\t\tsystem.util.invokeAsynchronous(update)\n#\t\t\tif system.tag.exists(\"System/DeviceMgrErrors\"):\n#\t\t\t\tsystem.util.invokeAsynchronous(errors)\n#\t\n#\texcept:\n#\t\texc_type, exc_obj, tb \u003d sys.exc_info()\n#\t\tlineno \u003d tb.tb_lineno\n#\t\terror_description\u003dstr(lineno)+\" , \"+str(exc_type)+\" , \"+str(exc_obj)\n#\t\tsystem.gui.messageBox(error_description)"
        }
      }
    },
    "props": {
      "direction": "column",
      "style": {
        "classes": "Background-Styles/Main-Background PopUp-Styles/Information-Device"
      }
    },
    "type": "ia.container.flex"
  }
}