diff --git a/application/src/main/data/json/system/widget_bundles/air_quality.json b/application/src/main/data/json/system/widget_bundles/air_quality.json index addd1a5423..3d46fab972 100644 --- a/application/src/main/data/json/system/widget_bundles/air_quality.json +++ b/application/src/main/data/json/system/widget_bundles/air_quality.json @@ -74,6 +74,14 @@ "individual_allergy_index_iai_chart_card", "individual_allergy_index_iai_chart_card_with_background", "simple_individual_allergy_index_iai_chart_card", - "simple_individual_allergy_index_iai_chart_card_with_background2" + "simple_individual_allergy_index_iai_chart_card_with_background2", + "ozone_o3_card", + "ozone_o3_card_with_background", + "horizontal_ozone_o3_card", + "horizontal_ozone_o3_card_with_background", + "ozone_o3_chart_card_with_background", + "ozone_o3_chart_card_with_background2", + "simple_ozone_o3_chart_card", + "simple_ozone_o3_chart_card_with_background" ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/horizontal_ozone__o3__card.json b/application/src/main/data/json/system/widget_types/horizontal_ozone__o3__card.json new file mode 100644 index 0000000000..d4e9559d04 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/horizontal_ozone__o3__card.json @@ -0,0 +1,37 @@ +{ + "fqn": "horizontal_ozone_o3_card", + "name": "Horizontal ozone (O3) card", + "deprecated": false, + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAYAAABJ/yOpAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAnnSURBVHgB7d1PbBTXHcDxZ5RwKQK7UpMDSOAcQkBpC+kBeqhCVYFaCTVEnMqlwIkTfw7cQBDBiUsCJ07YudBLUSFCagWqSumh+JDgigiaSsVGhUMTKbbByYFIdva7sz/veOOdXa8HWMffj7RZMzsz6515v/f7vTezTkqSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEl63nr4z8jIyLqenp6Byo+bKo/eJC1tl6enp4/09/eP9tSC4/aqVat6V65cmZYtW5akpWpqaipNTk6msbGx8UqQbH6pEhzv9/X1VYNDWupIEMRCJVB6JyYmBkgXu1asWJEk1dUSxqZqPWVZJc1Wi4leI0MqYIBIBQwQqYABIhUwQKQCBohUwACRChggUgEDRCpggEgFDBCpgAEiFTBApAIvpTJ9M57Sfz9M6YsbKY0Np/TVaLa8b1NKP1iX0updKb32+yQtFj2jo6PTa9euTQv28HJKt/ZlQVKEQHnzpIGirvfgwYOSMsgnR1L67IPW6xEcZJWhvdnzj0+kJYuO5Ol4dkzaMV7JyL2bivf3/xvZPpf31rN2t+G88+D3e7nEP38Qn5/Pzucu6bMvPEA+fa/94PjtSEr/qaz7cSWgPj2ZncyfvZ+WlM9vpHT/wyzjrj9c3Elw0v99NtuGx++m515vpLK/jw9/N3uTqbutE6LK4LPQFsoKkM8qx+iTw7OXbR1MqX/hVcrCAuT+YEp3TrZejwMRgfB65YP8aFtKf/1lFiyvvp3Sml2pXQ8fPqx+HXJRfYeeHpOgoCNpVYKC40qjpyG1s+9be7OfX9mWPVg2Mph1QnRM3VLO8nvxmTjfZWY3PisZaetASvQhtC3a5QsPELJHkWY9Hh/mJyeyTDJU6VFe3dayN7lw4UI6d+5cevz4cfXfW7duTWfOnElr1qxJXY/UT2MFDZgJjKJA4bjSmF6ulUpFgXKndg5ocL/62+zXaDg8uiVACHqseSeV6te36z/HsaVNlaDzAKGXi1mqTpBJ/nelXnKsP9R01UuXLqXTp09Xg2L37t1pYmIiDQ4Opj179qSrV692fzZZsS6ltyoZ9LW9WaP/qL84QPr3ZpmVYOI4FwUIYxOsbygxCIqR2ra8V7MOiDKXMSQox/I9O2XgwyuzK4AQ5402QN3Ptl9WfpfP/5793nMFJZ+Fdfl8gZIr3pt9US7F2Cx+n8b3ajYb+oee7Dm2LUHnAfLoSvHr7aRQUm3U1wUBcvbs2WqmuHjx4syyjRs3VgNkYGAgHTp0KN29ezfdu3fvO9tu2bJlJsvcunUrDQ0NzSwn4MK1a9dmAo11+Hn79u2zMhTZi2Dlmffn9bZE6dOu+ZzcsVqANAZA/vjTsJoN8AkeAgk0uvx2Y//KXmNZPkDmqvkJppiEiX3lcY55LR8ciPcm0OOzhEeXs3HUXO/F793YZhjX8B43303pn5XA+83ttFCdB0gcCOq8SJ1oVlbNhVTLh288MDk0asYd+/btm7Wcxk3jpcESIKxHVglsg/Pnz1fXI8h4xPiFn9mOB8hQUb7R+NkfwXfz5s2Z/e3cuXPm9cbtX7gVBVP1T9sY97SL8x4NlvKPzEhw0pjvFJTc92ttpFm5x+9IiRgZg8xSzW6Hs0AgQ1bf+0jWXhjPsZx1/vFuth1jEJ7JMuPN29R8dH4lPRo1swWdprPordoo1WiUjWj40aj3799fbcw8ItNQju3YsaPauGnQ9PjDw8PVdQg4lhEIgcCJ7Xmd7chMOHDgQPV1Srp4ne0jEJcMxlPhF3/KMiOBQk/ft6n5djR6znezTEoA8BrrkGViPZ7f+qC+7eu1DinazPJa5iQT/bEve/Da+nI6rnKug3BwQA8SdWCjmOYtWQRIoMFSehE8x48fry6L0ouACQQLGYLXotRimyizIiDZPw8ChWWUX1GCgZ8XxURBWaK0jsac12ycwzhmrvKqaNv5zHKReQgQSkJQmcynpC3QeYBEvckjro6jWZqdK0tEGiy4ABYNkQaab+AgGBozC6USy8kEsW0EUX4w3/hakVgnxiCBwFq9enXqCpMPKo0iPXtRrs2nATNmwBvPsBwl+PpT6ToPENIpjZ7eIdJZqyBp9GUtQJjlaYIAoDHH4DoQBDzyQUPJw2CbzJHv1aMR57PFo0ePqs8bNmxIrcS4pXGioCvQ87ZzbaUsy3vnt/7T8fpAv+hOgC7V+RgkUlj0DiGCpB1xHaXFvPjBgwerGYRxAGMGenHKKBptDJJ5nQCJgGIdHiyPAT0lFdvzOHXqVHXZXGObRuyPQGQ73oN9si8G7e1koGcqOpfGQWk+Y/e12TDJQq1E5mjnIiaifTROQy8SnWcQZq+4WsmBYtovPyhq1qsxPuEAM/Px1YN6eVZUm6ZsAI649gEa/bFjx2YyxfXr16vPNN6jR4/ObEsAEQT0/Gwb27NsPhca2Q/BkJ8NY9kLvwbDVDkTJvTSnINowNyiAjqydm/p4FzGLFN++nfW+72TzSBx7qgUYoImyu1Gz+ri4HOysLt56R2YYiPtMlCKFMqBvfNe89kp1o9alqm5FgEy6y0XeKtJDLo7HVjH9gu63YULhRybdu6V4uLaUG2Ke64pdI7jXzbXOxuyRf6rBkyMFI0XWO+jXPFOQHF+mK36JjfeyE+wcCtHZBDWZ73J0fr6nE/Oa+ybdRqv8oeY1NkyOHsKmGle2lHjtq2OR4m4m3dhX5ii9yJ1cpL+vDnLJOAAFc1YRXC8eWJewVF9y9xMUydiLLHQ7bvm6n10TnEPFp1W3C0b1xXaRaah4UdZ1OxeJqZ347yxPgFJhmgs5WJKeBF/taGc74Nwn1H+niB6xh/+NAuaZigHmN9WeejBaazzud07n0EIqCjHGNu0Ks0ic8S6ZDLen06TMjr+3SqLdanyvg9CQHAAoqzi+x7NcCB/PpDdT6NycWwXOv/fzoA+7peiPIz1WRYXj195O3uOq+yLMDhCeV+5rc5D783qRm5C/Hq0fsBiio8b8OKGPS1eMUiP28wJlhiT0PHF1xdKulj3IpX7nXREoOj7i1KMaoEAickAOr03Di3a6dxmyvtOupamCJBFXEY1U94YREvX9zAw8vy7WFIBA0QqYIBIBQwQqYABIhUwQKQCBohUwACRChggUgEDRCpggEgFCJDxqampJKkuYoIAGX7y5EmSVDc5OZmmp6evLKv8Z994BX+IwEyipY4Y4P8eMDY2xh9OOFz9kxIjIyPrenp6+PPdfg9WSx2BMUzi6O/vH02SJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEl67r4FVyMO7/vFO0gAAAAASUVORK5CYII=", + "description": "A beneficial layer in the upper atmosphere, but harmful when present near ground level. Results mainly from vehicle exhaust and industrial emissions.", + "descriptor": { + "type": "latest", + "sizeX": 5, + "sizeY": 1, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.valueCardWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.valueCardWidget.onDataUpdated();\n};\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n horizontal: true,\n previewWidth: '420px',\n previewHeight: '90px',\n embedTitlePanel: true,\n defaultDataKeysFunction: function() {\n return [{ name: 'ozone', label: 'Ozone', type: 'timeseries' }];\n }\n };\n};\n\nself.onDestroy = function() {\n};\n", + "settingsSchema": "", + "dataKeySettingsSchema": "", + "settingsDirective": "tb-value-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-value-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Ozone\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.2392660816082064,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 250) {\\n\\tvalue = 250;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"labelPosition\":\"top\",\"layout\":\"horizontal\",\"showLabel\":true,\"labelFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\"},\"labelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showIcon\":true,\"iconSize\":40,\"iconSizeUnit\":\"px\",\"icon\":\"public\",\"iconColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":50,\"color\":\"#3FA71A\"},{\"from\":50,\"to\":100,\"color\":\"#80C32C\"},{\"from\":100,\"to\":130,\"color\":\"#FFA600\"},{\"from\":130,\"to\":240,\"color\":\"#F36900\"},{\"from\":240,\"to\":null,\"color\":\"#D81838\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"valueFont\":{\"size\":36,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\"},\"valueColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":50,\"color\":\"#3FA71A\"},{\"from\":50,\"to\":100,\"color\":\"#80C32C\"},{\"from\":100,\"to\":130,\"color\":\"#FFA600\"},{\"from\":130,\"to\":240,\"color\":\"#F36900\"},{\"from\":240,\"to\":null,\"color\":\"#D81838\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showDate\":true,\"dateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"dateFont\":{\"family\":\"Roboto\",\"size\":12,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\"},\"dateColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.38)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}},\"autoScale\":true},\"title\":\"Ozone\",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"units\":\"µg/m³\",\"decimals\":0,\"useDashboardTimewindow\":true,\"showLegend\":false,\"widgetStyle\":{},\"actions\":{},\"configMode\":\"basic\",\"displayTimewindow\":true,\"margin\":\"0px\",\"borderRadius\":\"0px\",\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"titleFont\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1.6\"},\"titleIcon\":\"\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"14px\",\"timewindowStyle\":{\"showIcon\":true,\"iconSize\":\"14px\",\"icon\":\"query_builder\",\"iconPosition\":\"left\",\"font\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1\"},\"color\":null}}" + }, + "externalId": null, + "tags": [ + "environment", + "particulate", + "matter", + "air", + "coarse particulates", + "coarse particles", + "inhalable particles", + "larger particulates", + "dust", + "airborne coarse particles", + "O3", + "ozone" + ] +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/horizontal_ozone__o3__card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_ozone__o3__card_with_background.json new file mode 100644 index 0000000000..2154a5dcc2 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/horizontal_ozone__o3__card_with_background.json @@ -0,0 +1,37 @@ +{ + "fqn": "horizontal_ozone_o3_card_with_background", + "name": "Horizontal ozone (O3) card with background", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "A beneficial layer in the upper atmosphere, but harmful when present near ground level. Results mainly from vehicle exhaust and industrial emissions.", + "descriptor": { + "type": "latest", + "sizeX": 5, + "sizeY": 1, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.valueCardWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.valueCardWidget.onDataUpdated();\n};\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n horizontal: true,\n previewWidth: '420px',\n previewHeight: '90px',\n embedTitlePanel: true,\n defaultDataKeysFunction: function() {\n return [{ name: 'ozone', label: 'Ozone', type: 'timeseries' }];\n }\n };\n};\n\nself.onDestroy = function() {\n};\n", + "settingsSchema": "", + "dataKeySettingsSchema": "", + "settingsDirective": "tb-value-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-value-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Ozone\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.2392660816082064,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 250) {\\n\\tvalue = 250;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"labelPosition\":\"top\",\"layout\":\"horizontal\",\"showLabel\":true,\"labelFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\"},\"labelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showIcon\":true,\"iconSize\":40,\"iconSizeUnit\":\"px\",\"icon\":\"public\",\"iconColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":50,\"color\":\"#3B911C\"},{\"from\":50,\"to\":100,\"color\":\"#7CC322\"},{\"from\":100,\"to\":130,\"color\":\"#F89E0D\"},{\"from\":130,\"to\":240,\"color\":\"#F77410\"},{\"from\":240,\"to\":null,\"color\":\"#DE2343\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"valueFont\":{\"size\":36,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\"},\"valueColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":50,\"color\":\"#3B911C\"},{\"from\":50,\"to\":100,\"color\":\"#7CC322\"},{\"from\":100,\"to\":130,\"color\":\"#F89E0D\"},{\"from\":130,\"to\":240,\"color\":\"#F77410\"},{\"from\":240,\"to\":null,\"color\":\"#DE2343\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showDate\":true,\"dateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"dateFont\":{\"family\":\"Roboto\",\"size\":12,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\"},\"dateColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.38)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"background\":{\"type\":\"image\",\"imageUrl\":\"tb-image;/api/images/tenant/noise-level-horizontal-value-card-min.png\",\"color\":\"#fff\",\"overlay\":{\"enabled\":true,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}},\"autoScale\":true},\"title\":\"Ozone\",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"units\":\"µg/m³\",\"decimals\":0,\"useDashboardTimewindow\":true,\"showLegend\":false,\"widgetStyle\":{},\"actions\":{},\"configMode\":\"basic\",\"displayTimewindow\":true,\"margin\":\"0px\",\"borderRadius\":\"0px\",\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"titleFont\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1.6\"},\"titleIcon\":\"\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"14px\",\"timewindowStyle\":{\"showIcon\":true,\"iconSize\":\"14px\",\"icon\":\"query_builder\",\"iconPosition\":\"left\",\"font\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1\"},\"color\":null}}" + }, + "externalId": null, + "tags": [ + "environment", + "particulate", + "matter", + "air", + "coarse particulates", + "coarse particles", + "inhalable particles", + "larger particulates", + "dust", + "airborne coarse particles", + "O3", + "ozone" + ] +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/ozone__o3__card.json b/application/src/main/data/json/system/widget_types/ozone__o3__card.json new file mode 100644 index 0000000000..de2c3358e0 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/ozone__o3__card.json @@ -0,0 +1,37 @@ +{ + "fqn": "ozone_o3_card", + "name": "Ozone (O3) card", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "A beneficial layer in the upper atmosphere, but harmful when present near ground level. Results mainly from vehicle exhaust and industrial emissions.", + "descriptor": { + "type": "latest", + "sizeX": 3, + "sizeY": 3, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.valueCardWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.valueCardWidget.onDataUpdated();\n};\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '250px',\n previewHeight: '250px',\n embedTitlePanel: true,\n defaultDataKeysFunction: function() {\n return [{ name: 'ozone', label: 'Ozone', type: 'timeseries' }];\n }\n };\n};\n\nself.onDestroy = function() {\n};\n", + "settingsSchema": "", + "dataKeySettingsSchema": "", + "settingsDirective": "tb-value-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-value-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Ozone\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.2392660816082064,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 250) {\\n\\tvalue = 250;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"labelPosition\":\"top\",\"layout\":\"square\",\"showLabel\":true,\"labelFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\"},\"labelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showIcon\":true,\"iconSize\":40,\"iconSizeUnit\":\"px\",\"icon\":\"public\",\"iconColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":50,\"color\":\"#3FA71A\"},{\"from\":50,\"to\":100,\"color\":\"#80C32C\"},{\"from\":100,\"to\":130,\"color\":\"#FFA600\"},{\"from\":130,\"to\":240,\"color\":\"#F36900\"},{\"from\":240,\"to\":null,\"color\":\"#D81838\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"valueFont\":{\"size\":28,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\"},\"valueColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":50,\"color\":\"#3FA71A\"},{\"from\":50,\"to\":100,\"color\":\"#80C32C\"},{\"from\":100,\"to\":130,\"color\":\"#FFA600\"},{\"from\":130,\"to\":240,\"color\":\"#F36900\"},{\"from\":240,\"to\":null,\"color\":\"#D81838\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showDate\":true,\"dateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"dateFont\":{\"family\":\"Roboto\",\"size\":12,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\"},\"dateColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.38)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}},\"autoScale\":true},\"title\":\"Ozone \",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"units\":\"µg/m³\",\"decimals\":0,\"useDashboardTimewindow\":true,\"showLegend\":false,\"widgetStyle\":{},\"actions\":{},\"configMode\":\"basic\",\"displayTimewindow\":true,\"margin\":\"0px\",\"borderRadius\":\"0px\",\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"titleFont\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1.6\"},\"titleIcon\":\"\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"14px\",\"timewindowStyle\":{\"showIcon\":true,\"iconSize\":\"14px\",\"icon\":\"query_builder\",\"iconPosition\":\"left\",\"font\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1\"},\"color\":null}}" + }, + "externalId": null, + "tags": [ + "enviroment", + "particulate", + "matter", + "air", + "coarse particulates", + "coarse particles", + "inhalable particles", + "larger particulates", + "dust", + "airborne coarse particles", + "O3", + "ozone" + ] +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/ozone__o3__card_with_background.json b/application/src/main/data/json/system/widget_types/ozone__o3__card_with_background.json new file mode 100644 index 0000000000..75897eb7af --- /dev/null +++ b/application/src/main/data/json/system/widget_types/ozone__o3__card_with_background.json @@ -0,0 +1,37 @@ +{ + "fqn": "ozone_o3_card_with_background", + "name": "Ozone (O3) card with background", + "deprecated": false, + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAACxMAAAsTAQCanBgAAAL0UExURUdwTKypvKyovCMkKK2ou/z8+vn7+8vS4qyutsXX5SYkJvieDe3s7+7t8u7t8O3u8+rr8Ojr8uvs8f79+szP1v368/Dw9Ozt8v789+rr8+zr7+zt8e7w9+nq8Pn5+OLh5P338bKuvSglJu/v89HW4dbb5P38+O/w9fv08f347v758f7+++jp8LSvvv327szO1P308M3Q2Orq7yMkKfrz8fj49dzc4MvKy/r39Pfy8tXa4/779Pz8+uPl7CUjJf768f369tPY4uLk69/e4v758tjb4/v59vf19NbZ4fv79+rv9uDf4+Pp9N7g5/b29s/T2vf5+O7v9Ofo7s/R1/Lx9M/U3e3v9unt9uPi5uXn7d3d4ebs9eXo7yUmLdvf5rCsu9LU2vT399nZ393m8s3MzPXx89vb3tXW3PHy9tzg6Ofl6eDi6eft9tHT1yEhJtvd4+Dk6+Tr9e/y96Gpxvj089/n8/n69djX3ejn6v318fr289HV3yYsRszN0uXk59XY38vY4uHo9MfY5urp7Njc5vX38d7i6rSxwaCoxa+rva2putXV1tDe5djRzcvd6ert9DA5V+zw8o2Mjd/p66SryCYuS+bw89Dh6tvl6PGuQ+Lm7icxT/D09O62XtnFx/z48/jguLCuwNLR0ikwRM/Oz+Ls7tfl7ezw79rLyevz9dbh5p6ry/fXtem9eePEkyw3U9jX2Pvy2PDz7i0pKrO0yNbj6uHc2fz2497r8fz08Nvp7/D29/nnw+fu8C83SXBpeZWpzrzB1sbG1pqw1+DMrfejGu7o5qW11bC61SotN8fCwSAgH5mXl+js69HCy+ri4FVTXPa0TPrtzUdIVfbt6LCsuGBcbfSlJzY+UtjT0p6nxKetxvXGe725uKijofnp1zs6OXt1gaKgouu5a6qxy/eoKY2Rnqmmp/bTnLOtrKqqr5KXpufBhfWrNp2fqeTZzLizso6TooyizNrPwPm+Y21rap+cnPbMjb69wGR1moeKlEdwTMwmghgAAAD8dFJOUwCvv7/vv6//ILew////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AJcCNhQAACo3SURBVHjarJdNSFtrGsezmbEXNxec3AkMhEBpSCLILSRgGi85HZwcsjmGS10IQ6lwCzKD4C0hmLM6CFkZhShoGEIjpX40zEbFpK1mqQvTMH50I4imi3LdDNxFQ7fzPM/7vue8J56od7i/5/04J908v/zfk2Ndrnvf9Mx0Mj8/PzOPq8UyDiiJNRhrMDp4/x4G8fYtjLew40Ys/by65MgbB17svtm1GJdISXhh/PGey3WvUwMVZjo8UAFWm8cO1NraDpQlgwprQuO9qYOsUv0MIrzqpgNboHNJZ/cF1oTsYblYDt7kECxDQ9o91zczTiIYiuWCaXDmrTSWd8BkmanIedgE/vX27eIqDIulen2p3hHHkuTwYrf0ogRhlBgkURIGlkcmk8p4k8lkJpmCNfkH14wTBjgYYGDM56mW88h8Pr+c52mAxQ5O1GALSBRx0MFaxOO0uLjI5uoqN6Ek6nC66uiDQoWlpcKbNzDeFAq4lkpsMMZLu6Xd8d3ceA7618a1CJFBCZikQVvSq9pFDByGYcwbRt5ADZN54bCc38nTuaosVyo7JswCDRaLUAAtwKrlwWVW66tkUf9zvbBUsFgvFLZK66VSQXiUcjAAXEAAZwYKTWygisvomcEymAGRxwGVz6MKs2GZVPLQvWCHeRSLa0U7lgQ3WbRM6iaFOrQO8KWwvlXC4gs2vwXFNXKRHFsjXCaTyUkafr/fZcz0YPMzpgRq5I28cHksMqnggP7zTALjKIIFLaYCS6MoSUDzi6Tx9+aP4PFjEyVgWW+u4+Bsba1TEaiQo11ooEeEFkojkjNTSSbQAxOZ+ZPRY/QYEnlDqDCNR/lHlfyD/AOKwVQBnuJShKqYHnxyxrDGVseQ5mpTYr0pW5gKpMFXXnIcJKNCJro+CCqDpIIm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", + "description": "A beneficial layer in the upper atmosphere, but harmful when present near ground level. Results mainly from vehicle exhaust and industrial emissions.", + "descriptor": { + "type": "latest", + "sizeX": 3, + "sizeY": 3, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.valueCardWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.valueCardWidget.onDataUpdated();\n};\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '250px',\n previewHeight: '250px',\n embedTitlePanel: true,\n defaultDataKeysFunction: function() {\n return [{ name: 'ozone', label: 'Ozone', type: 'timeseries' }];\n }\n };\n};\n\nself.onDestroy = function() {\n};\n", + "settingsSchema": "", + "dataKeySettingsSchema": "", + "settingsDirective": "tb-value-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-value-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Ozone\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.2392660816082064,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 250) {\\n\\tvalue = 250;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"labelPosition\":\"top\",\"layout\":\"square\",\"showLabel\":true,\"labelFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\"},\"labelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showIcon\":true,\"iconSize\":40,\"iconSizeUnit\":\"px\",\"icon\":\"public\",\"iconColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":50,\"color\":\"#3B911C\"},{\"from\":50,\"to\":100,\"color\":\"#7CC322\"},{\"from\":100,\"to\":130,\"color\":\"#F89E0D\"},{\"from\":130,\"to\":240,\"color\":\"#F77410\"},{\"from\":240,\"to\":null,\"color\":\"#DE2343\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"valueFont\":{\"size\":28,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\"},\"valueColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":50,\"color\":\"#3B911C\"},{\"from\":50,\"to\":100,\"color\":\"#7CC322\"},{\"from\":100,\"to\":130,\"color\":\"#F89E0D\"},{\"from\":130,\"to\":240,\"color\":\"#F77410\"},{\"from\":240,\"to\":null,\"color\":\"#DE2343\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showDate\":true,\"dateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"dateFont\":{\"family\":\"Roboto\",\"size\":12,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\"},\"dateColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.38)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"background\":{\"type\":\"image\",\"imageUrl\":\"tb-image;/api/images/tenant/noise-level-value-card-min.png\",\"color\":\"#fff\",\"overlay\":{\"enabled\":true,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}},\"autoScale\":true},\"title\":\"Ozone\",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"units\":\"µg/m³\",\"decimals\":0,\"useDashboardTimewindow\":true,\"showLegend\":false,\"widgetStyle\":{},\"actions\":{},\"configMode\":\"basic\",\"displayTimewindow\":true,\"margin\":\"0px\",\"borderRadius\":\"0px\",\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"titleFont\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1.6\"},\"titleIcon\":\"\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"14px\",\"timewindowStyle\":{\"showIcon\":true,\"iconSize\":\"14px\",\"icon\":\"query_builder\",\"iconPosition\":\"left\",\"font\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1\"},\"color\":null}}" + }, + "externalId": null, + "tags": [ + "environment", + "particulate", + "matter", + "air", + "coarse particulates", + "coarse particles", + "inhalable particles", + "larger particulates", + "dust", + "airborne coarse particles", + "O3", + "ozone" + ] +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/ozone__o3__chart_card.json b/application/src/main/data/json/system/widget_types/ozone__o3__chart_card.json new file mode 100644 index 0000000000..6b6a63cb69 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/ozone__o3__chart_card.json @@ -0,0 +1,40 @@ +{ + "fqn": "ozone_o3_chart_card_with_background", + "name": "Ozone (O3) chart card", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "A beneficial layer in the upper atmosphere, but harmful when present near ground level. Results displays mainly from vehicle exhaust and industrial emissions by combining the latest and aggregated values and optional simplified chart. ", + "descriptor": { + "type": "timeseries", + "sizeX": 4.5, + "sizeY": 3.5, + "resources": [], + "templateHtml": "\n\n", + "templateCss": ".legend {\n font-size: 13px;\n line-height: 10px;\n}\n\n.legend table { \n border-spacing: 0px;\n border-collapse: separate;\n}\n\n.mouse-events .flot-overlay {\n cursor: crosshair; \n}\n\n", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onDataUpdated();\n};\n\nself.onLatestDataUpdated = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onLatestDataUpdated();\n}\n\nself.onResize = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onResize();\n}\n\nself.onEditModeChanged = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onEditModeChanged();\n}\n\nself.onDestroy = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onDestroy();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '400px',\n previewHeight: '300px',\n embedTitlePanel: true,\n hasAdditionalLatestDataKeys: true,\n defaultDataKeysFunction: function() {\n return [\n { name: 'ozone', label: 'Ozone', type: 'timeseries', color: 'rgba(0, 0, 0, 0.87)', units: 'µg/m³', decimals: 0 }\n ];\n },\n defaultLatestDataKeysFunction: function(configComponent, configData) {\n return configComponent.createDefaultAggregatedValueLatestDataKeys(configData, 'ozone', 'µg/m³', 0);\n }\n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}", + "latestDataKeySettingsSchema": "{}", + "settingsDirective": "tb-aggregated-value-card-widget-settings", + "dataKeySettingsDirective": "", + "latestDataKeySettingsDirective": "tb-aggregated-value-card-key-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-aggregated-value-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"Main building\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Ozone\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"settings\":{\"showLines\":true,\"fillLines\":true,\"showPoints\":false},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 500) {\\n\\tvalue = 500;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":\"µg/m³\",\"decimals\":0,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]},\"latestDataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Latest\",\"color\":\"#4caf50\",\"settings\":{\"position\":\"center\",\"font\":{\"size\":52,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\",\"lineHeight\":\"1\"},\"color\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":50,\"color\":\"#3FA71A\"},{\"from\":50,\"to\":100,\"color\":\"#80C32C\"},{\"from\":100,\"to\":130,\"color\":\"#FFA600\"},{\"from\":130,\"to\":240,\"color\":\"#F36900\"},{\"from\":240,\"to\":null,\"color\":\"#D81838\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showArrow\":false},\"_hash\":0.9408410830697858,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 250) {\\n\\tvalue = 250;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":\"µg/m³\",\"decimals\":0,\"usePostProcessing\":null,\"postFuncBody\":null},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Delta percent\",\"color\":\"#f44336\",\"settings\":{\"position\":\"rightTop\",\"font\":{\"size\":14,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\",\"lineHeight\":\"20px\"},\"color\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.38)\",\"rangeList\":[{\"from\":null,\"to\":0,\"color\":\"#198038\"},{\"from\":0,\"to\":0,\"color\":\"rgba(0, 0, 0, 0.87)\"},{\"from\":0,\"to\":null,\"color\":\"#D12730\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showArrow\":true},\"_hash\":0.06392321853157967,\"funcBody\":\"var value = prevValue + Math.random() * 6 - 3;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -25) {\\n\\tvalue = -25;\\n} else if (value > 25) {\\n\\tvalue = 25;\\n} \\nreturn value;\",\"aggregationType\":null,\"units\":\"%\",\"decimals\":0,\"usePostProcessing\":null,\"postFuncBody\":null},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Delta absolute\",\"color\":\"#607d8b\",\"settings\":{\"position\":\"rightBottom\",\"font\":{\"size\":11,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"400\",\"style\":\"normal\",\"lineHeight\":\"16px\"},\"color\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.38)\",\"rangeList\":[],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showArrow\":false},\"_hash\":0.44695098620509865,\"funcBody\":\"var value = prevValue + Math.random() * 6 - 3;\\nif (value < -10) {\\n\\tvalue = -10;\\n} else if (value > 10) {\\n\\tvalue = 10;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":\"µg/m³\",\"decimals\":0,\"usePostProcessing\":null,\"postFuncBody\":null}]}],\"timewindow\":{\"hideInterval\":false,\"hideLastInterval\":false,\"hideQuickInterval\":false,\"hideAggregation\":false,\"hideAggInterval\":false,\"hideTimezone\":false,\"selectedTab\":1,\"history\":{\"historyType\":2,\"timewindowMs\":60000,\"interval\":43200000,\"fixedTimewindow\":{\"startTimeMs\":1691927717318,\"endTimeMs\":1692014117318},\"quickInterval\":\"CURRENT_MONTH_SO_FAR\"},\"aggregation\":{\"type\":\"AVG\",\"limit\":25000}},\"showTitle\":true,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":null,\"padding\":\"0\",\"settings\":{\"stack\":false,\"fontSize\":10,\"fontColor\":\"#545454\",\"showTooltip\":true,\"tooltipIndividual\":false,\"tooltipCumulative\":false,\"hideZeros\":false,\"grid\":{\"verticalLines\":true,\"horizontalLines\":true,\"outlineWidth\":1,\"color\":\"#545454\",\"backgroundColor\":null,\"tickColor\":\"#DDDDDD\"},\"xaxis\":{\"title\":null,\"showLabels\":true,\"color\":\"#545454\"},\"yaxis\":{\"min\":null,\"max\":null,\"title\":null,\"showLabels\":true,\"color\":\"#545454\",\"tickSize\":null,\"tickDecimals\":0,\"ticksFormatter\":\"\"},\"shadowSize\":4,\"smoothLines\":false,\"comparisonEnabled\":false,\"xaxisSecond\":{\"axisPosition\":\"top\",\"title\":null,\"showLabels\":true},\"showLegend\":true,\"legendConfig\":{\"direction\":\"column\",\"position\":\"bottom\",\"sortDataKeys\":false,\"showMin\":false,\"showMax\":false,\"showAvg\":true,\"showTotal\":false,\"showLatest\":false},\"customLegendEnabled\":false,\"showSubtitle\":true,\"subtitle\":\"${entityName}\",\"subtitleFont\":{\"family\":\"Roboto\",\"size\":12,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"400\",\"lineHeight\":\"16px\"},\"subtitleColor\":\"rgba(0, 0, 0, 0.38)\",\"showDate\":true,\"dateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"dateFont\":{\"family\":\"Roboto\",\"size\":12,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"400\",\"lineHeight\":\"16px\"},\"dateColor\":\"rgba(0, 0, 0, 0.38)\",\"showChart\":true,\"chartColor\":\"rgba(0, 0, 0, 0.87)\",\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}},\"autoScale\":true},\"title\":\"Ozone\",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"mobileHeight\":null,\"configMode\":\"basic\",\"actions\":{},\"showTitleIcon\":true,\"titleIcon\":\"public\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"titleFont\":{\"size\":16,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\",\"lineHeight\":\"24px\"},\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"useDashboardTimewindow\":false,\"displayTimewindow\":true,\"decimals\":0,\"timewindowStyle\":{\"showIcon\":true,\"iconSize\":\"24px\",\"icon\":null,\"iconPosition\":\"left\",\"font\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"400\",\"style\":\"normal\",\"lineHeight\":\"16px\"},\"color\":\"rgba(0, 0, 0, 0.38)\",\"displayTypePrefix\":false},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"borderRadius\":null}" + }, + "externalId": null, + "tags": [ + "environment", + "particulate", + "matter", + "air", + "coarse particulates", + "coarse particles", + "inhalable particles", + "larger particulates", + "dust", + "airborne coarse particles", + "O3", + "ozone" + ] +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/ozone__o3__chart_card_with_background.json b/application/src/main/data/json/system/widget_types/ozone__o3__chart_card_with_background.json new file mode 100644 index 0000000000..d7663177a4 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/ozone__o3__chart_card_with_background.json @@ -0,0 +1,40 @@ +{ + "fqn": "ozone_o3_chart_card_with_background2", + "name": "Ozone (O3) chart card with background", + "deprecated": false, + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAACxMAAAsTAQCanBgAAAL6UExURUdwTMXW5fz8+vn7+yQkJywoKMTX5NHV4MTW5aypvO3r8e3t8u3s8e3s7+jq8e7u88vKy//+/O7t8err8Ovs8szLzfn6+czO1Pf09Pf4+O/w9efo7/338f779PieDfzz8Nba4ubo7uHk69jb5PHx9uzq7f308Ozs8f39+97d4u7v9e3r7v78+Ozr79bb5OHg5NLX4f347v768szP1vv7+fjy8v/89uTm7NHV39zb4Pnz8fT3+P327vr18tzc4+Hi6fv8+szQ2PDv88/U3O/x9u3w9+fq8PHw9CYjJf358vPx8+vq7t3f5iklJ/779vby8unt9Ojt9vn59/v49ODo8/z59eDf4/Dw9N/g5v328eLp9NjZ3vz69+/y97Ovvs/Q1iMkKePi5d3m8tXY4Ozv9czN0vn39P38+ff29OTk5//9+t3h6bCsu+Xr9Obt9tPY4tva3dLU2ebl6evu9P768KKqx+rr8s7R2SYsRv358LKuvNnc5Nna4ejq79DS2NjX2+rv9ujn6urp7CEhJdve5uTs9vv28vj49dXV2CUmLePm7tXa4/X29/Hz9vv79/3076CoxMfZ5i85VtTW3CcwTtfl7c3d57CtvtDP0a2puv328OLs7tTh6NPT1d3q8M/NzOXv8cTEy7+/w9fRzs/h67S0t+jy866rvfP28iwqK7WxwB4eHt7o69nPyu309svZ47+7uO3y8drl6svGw9nKxjk5OlJSVOqzXCwzRtfEx8TG1+Pd28vX3/Tu7K2usvbWtp6ry5ydomxtb/jft/vz2LO1yTI6Trm6vtnd5jMzNbGywvz240NERaa11Kmux/OlJyktOem7c9vHqO7o5sXBvouMjpux19jU06+61Xx8gaSkppmoy3FoeZOoz3ZzfFtZY7m1s6eoreLBjfnqx0tLXe6sQfjlvmVhbNDDzPruz7rA15SVmPCvR4OEh7KvrTpBV+ji3+Ha05WYn/Hr5/eiGuvm4u7Nm/KpNGV2nICUvtvfALQAqACdxUdwTFTyjiUAAAD+dFJOUwCvv6+4IL8g77f///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AvfUI3AAAKstJREFUeNqkl09oGn0ax91d2O6lh/AWGcEQeik5yELEZGGMIAReyEXLiIcs9rbEwcPW8ArFQ8Nml3UKHQd6MIfE1BDToBitiVEo6iWbW3uLEpqTUOhLKYSGkvv7PM9v/joT05f9PL8/M7aH59Pvb0brct37819e2dikuYkD2Ge1T9NEYb+Aw8brwmtHtv+7i/XPXTMHGo3GAVSjwRaDJ8FgMB9sBE14CLfOn+65XPecNTaZxz4WqWzaLYqax75ZgTTUzVCA2oX6++421LgC8i9dRuu/8SSfb6BAvpIPWgEJKMEtuN0KeITDlXuuPzhrvEIJlgfT2KdBMkVUKBaLhUIRajyS1xaDQ9ViW8WkoQ4jEFMUTxoNsMg3KnlyqOgGwaAc9AgQhyB4JEFwKyCiKErgj65XzrBEMBPVZLOIc7+4WSySCRgU0aeAOrQVCseHhePXx4VD6v+Q1eE2DJPG9q71YO0ePD44+OUfB42jg6MGVf7o6KiRr4BEBTwqWMEKDLkiVSRCkBRYUUBQBEEAmUAFRXpG/2+x3m5ibWpPCFHEQR7Qv06heAzrcQGKgL6PaRhso4ahYs7k8YPdXyAKmEdm8kfYfh5VDLB/bREE2BWaCi1A2NXrvVX7773qvTVgKroG9MtWE8dYdg4NlW3yMEWyvfszKvwE88HjgwfQ9n0aGhWoo0qFDZMGFFslM4JqoSSTSRe23wMbXA2Lzaek8nTz5UscJPNXqJe0qg5kUTw2bKxhbNMCJn+D5eH2w+cPweP58+c0f7p//wgHla5SYYPRN4mIFVEaszDSUHwwIRHS6G0+Nr0aZLbK2q1H9njMLw0sIujRrjwSPoPC+IvRQgDfMIFAOByGidf0xnGHFfiQ/lnhT8K4BpIBJUzMAqnZ5Ow4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", + "description": "A beneficial layer in the upper atmosphere, but harmful when present near ground level. Results displays mainly from vehicle exhaust and industrial emissions by combining the latest and aggregated values and optional simplified chart. ", + "descriptor": { + "type": "timeseries", + "sizeX": 4.5, + "sizeY": 3.5, + "resources": [], + "templateHtml": "\n\n", + "templateCss": ".legend {\n font-size: 13px;\n line-height: 10px;\n}\n\n.legend table { \n border-spacing: 0px;\n border-collapse: separate;\n}\n\n.mouse-events .flot-overlay {\n cursor: crosshair; \n}\n\n", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onDataUpdated();\n};\n\nself.onLatestDataUpdated = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onLatestDataUpdated();\n}\n\nself.onResize = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onResize();\n}\n\nself.onEditModeChanged = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onEditModeChanged();\n}\n\nself.onDestroy = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onDestroy();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '400px',\n previewHeight: '300px',\n embedTitlePanel: true,\n hasAdditionalLatestDataKeys: true,\n defaultDataKeysFunction: function() {\n return [\n { name: 'ozone', label: 'Ozone', type: 'timeseries', color: 'rgba(0, 0, 0, 0.87)', units: 'µg/m³', decimals: 0 }\n ];\n },\n defaultLatestDataKeysFunction: function(configComponent, configData) {\n return configComponent.createDefaultAggregatedValueLatestDataKeys(configData, 'ozone', 'µg/m³', 0);\n }\n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}", + "latestDataKeySettingsSchema": "{}", + "settingsDirective": "tb-aggregated-value-card-widget-settings", + "dataKeySettingsDirective": "", + "latestDataKeySettingsDirective": "tb-aggregated-value-card-key-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-aggregated-value-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"Main building\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Ozone\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"settings\":{\"showLines\":true,\"fillLines\":true,\"showPoints\":false},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 500) {\\n\\tvalue = 500;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":\"µg/m³\",\"decimals\":0,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]},\"latestDataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Latest\",\"color\":\"#4caf50\",\"settings\":{\"position\":\"center\",\"font\":{\"size\":52,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\",\"lineHeight\":\"1\"},\"color\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":50,\"color\":\"#3B911C\"},{\"from\":50,\"to\":100,\"color\":\"#7CC322\"},{\"from\":100,\"to\":130,\"color\":\"#F89E0D\"},{\"from\":130,\"to\":240,\"color\":\"#F77410\"},{\"from\":240,\"to\":null,\"color\":\"#DE2343\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showArrow\":false},\"_hash\":0.9408410830697858,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 250) {\\n\\tvalue = 250;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":\"µg/m³\",\"decimals\":0,\"usePostProcessing\":null,\"postFuncBody\":null},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Delta percent\",\"color\":\"#f44336\",\"settings\":{\"position\":\"rightTop\",\"font\":{\"size\":14,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\",\"lineHeight\":\"20px\"},\"color\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.38)\",\"rangeList\":[{\"from\":null,\"to\":0,\"color\":\"#198038\"},{\"from\":0,\"to\":0,\"color\":\"rgba(0, 0, 0, 0.87)\"},{\"from\":0,\"to\":null,\"color\":\"#D12730\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showArrow\":true},\"_hash\":0.06392321853157967,\"funcBody\":\"var value = prevValue + Math.random() * 6 - 3;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -25) {\\n\\tvalue = -25;\\n} else if (value > 25) {\\n\\tvalue = 25;\\n} \\nreturn value;\",\"aggregationType\":null,\"units\":\"%\",\"decimals\":0,\"usePostProcessing\":null,\"postFuncBody\":null},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Delta absolute\",\"color\":\"#607d8b\",\"settings\":{\"position\":\"rightBottom\",\"font\":{\"size\":11,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"400\",\"style\":\"normal\",\"lineHeight\":\"16px\"},\"color\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.38)\",\"rangeList\":[],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showArrow\":false},\"_hash\":0.44695098620509865,\"funcBody\":\"var value = prevValue + Math.random() * 6 - 3;\\nif (value < -10) {\\n\\tvalue = -10;\\n} else if (value > 10) {\\n\\tvalue = 10;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":\"µg/m³\",\"decimals\":0,\"usePostProcessing\":null,\"postFuncBody\":null}]}],\"timewindow\":{\"hideInterval\":false,\"hideLastInterval\":false,\"hideQuickInterval\":false,\"hideAggregation\":false,\"hideAggInterval\":false,\"hideTimezone\":false,\"selectedTab\":1,\"history\":{\"historyType\":2,\"timewindowMs\":60000,\"interval\":43200000,\"fixedTimewindow\":{\"startTimeMs\":1691927717318,\"endTimeMs\":1692014117318},\"quickInterval\":\"CURRENT_MONTH_SO_FAR\"},\"aggregation\":{\"type\":\"AVG\",\"limit\":25000}},\"showTitle\":true,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":null,\"padding\":\"0\",\"settings\":{\"stack\":false,\"fontSize\":10,\"fontColor\":\"#545454\",\"showTooltip\":true,\"tooltipIndividual\":false,\"tooltipCumulative\":false,\"hideZeros\":false,\"grid\":{\"verticalLines\":true,\"horizontalLines\":true,\"outlineWidth\":1,\"color\":\"#545454\",\"backgroundColor\":null,\"tickColor\":\"#DDDDDD\"},\"xaxis\":{\"title\":null,\"showLabels\":true,\"color\":\"#545454\"},\"yaxis\":{\"min\":null,\"max\":null,\"title\":null,\"showLabels\":true,\"color\":\"#545454\",\"tickSize\":null,\"tickDecimals\":0,\"ticksFormatter\":\"\"},\"shadowSize\":4,\"smoothLines\":false,\"comparisonEnabled\":false,\"xaxisSecond\":{\"axisPosition\":\"top\",\"title\":null,\"showLabels\":true},\"showLegend\":true,\"legendConfig\":{\"direction\":\"column\",\"position\":\"bottom\",\"sortDataKeys\":false,\"showMin\":false,\"showMax\":false,\"showAvg\":true,\"showTotal\":false,\"showLatest\":false},\"customLegendEnabled\":false,\"showSubtitle\":true,\"subtitle\":\"${entityName}\",\"subtitleFont\":{\"family\":\"Roboto\",\"size\":12,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"400\",\"lineHeight\":\"16px\"},\"subtitleColor\":\"rgba(0, 0, 0, 0.38)\",\"showDate\":true,\"dateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"dateFont\":{\"family\":\"Roboto\",\"size\":12,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"400\",\"lineHeight\":\"16px\"},\"dateColor\":\"rgba(0, 0, 0, 0.38)\",\"showChart\":true,\"chartColor\":\"rgba(0, 0, 0, 0.87)\",\"background\":{\"type\":\"image\",\"imageUrl\":\"tb-image;/api/images/tenant/noise-level-value-and-chart-card-min.png\",\"color\":\"#fff\",\"overlay\":{\"enabled\":true,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}},\"autoScale\":true},\"title\":\"Ozone\",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"mobileHeight\":null,\"configMode\":\"basic\",\"actions\":{},\"showTitleIcon\":true,\"titleIcon\":\"public\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"titleFont\":{\"size\":16,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\",\"lineHeight\":\"24px\"},\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"useDashboardTimewindow\":false,\"displayTimewindow\":true,\"decimals\":0,\"timewindowStyle\":{\"showIcon\":true,\"iconSize\":\"24px\",\"icon\":null,\"iconPosition\":\"left\",\"font\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"400\",\"style\":\"normal\",\"lineHeight\":\"16px\"},\"color\":\"rgba(0, 0, 0, 0.38)\",\"displayTypePrefix\":false},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"borderRadius\":null}" + }, + "externalId": null, + "tags": [ + "environment", + "particulate", + "matter", + "air", + "coarse particulates", + "coarse particles", + "inhalable particles", + "larger particulates", + "dust", + "airborne coarse particles", + "O3", + "ozone" + ] +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/simple_ozone__o3__chart_card.json b/application/src/main/data/json/system/widget_types/simple_ozone__o3__chart_card.json new file mode 100644 index 0000000000..c806463ea7 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/simple_ozone__o3__chart_card.json @@ -0,0 +1,40 @@ +{ + "fqn": "simple_ozone_o3_chart_card", + "name": "Simple ozone (O3) chart card", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "A beneficial layer in the upper atmosphere, but harmful when present near ground level. Results displays mainly from vehicle exhaust and industrial emissions by combining the latest and aggregated values and optional simplified chart. ", + "descriptor": { + "type": "timeseries", + "sizeX": 4.5, + "sizeY": 2, + "resources": [], + "templateHtml": "\n\n", + "templateCss": ".legend {\n font-size: 13px;\n line-height: 10px;\n}\n\n.legend table { \n border-spacing: 0px;\n border-collapse: separate;\n}\n\n.mouse-events .flot-overlay {\n cursor: crosshair; \n}\n\n", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.valueChartCardWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.valueChartCardWidget.onDataUpdated();\n};\n\nself.onLatestDataUpdated = function() {\n self.ctx.$scope.valueChartCardWidget.onLatestDataUpdated();\n}\n\nself.onEditModeChanged = function() {\n self.ctx.$scope.valueChartCardWidget.onEditModeChanged();\n}\n\nself.onDestroy = function() {\n self.ctx.$scope.valueChartCardWidget.onDestroy();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '300px',\n previewHeight: '150px',\n embedTitlePanel: true,\n hasAdditionalLatestDataKeys: true,\n defaultDataKeysFunction: function() {\n return [\n { name: 'ozone', label: 'Ozone', type: 'timeseries', color: 'rgba(0, 0, 0, 0.87)'}\n ];\n },\n defaultLatestDataKeysFunction: function(configComponent) {\n return [{ name: 'ozone', label: 'Latest', type: 'timeseries'}];\n }\n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}", + "latestDataKeySettingsSchema": "{}", + "settingsDirective": "tb-value-chart-card-widget-settings", + "dataKeySettingsDirective": "", + "latestDataKeySettingsDirective": "", + "hasBasicMode": true, + "basicModeDirective": "tb-value-chart-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Ozone\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"settings\":{},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 250) {\\n\\tvalue = 250;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]},\"latestDataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Latest\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"settings\":{},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 250) {\\n\\tvalue = 250;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}]}],\"showTitle\":true,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":null,\"padding\":\"0\",\"settings\":{\"layout\":\"left\",\"autoScale\":true,\"showValue\":true,\"valueFont\":{\"family\":\"Roboto\",\"size\":28,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"32px\"},\"valueColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":50,\"color\":\"#3FA71A\"},{\"from\":50,\"to\":100,\"color\":\"#80C32C\"},{\"from\":100,\"to\":130,\"color\":\"#FFA600\"},{\"from\":130,\"to\":240,\"color\":\"#F36900\"},{\"from\":240,\"to\":null,\"color\":\"#D81838\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}}},\"title\":\"Ozone\",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":null,\"mobileHeight\":null,\"configMode\":\"basic\",\"actions\":{},\"showTitleIcon\":true,\"titleIcon\":\"public\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"titleFont\":{\"size\":16,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\",\"lineHeight\":\"24px\"},\"iconSize\":\"18px\",\"titleTooltip\":\"\",\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"useDashboardTimewindow\":true,\"decimals\":0,\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"borderRadius\":null,\"units\":\"µg/m³\",\"displayTimewindow\":true,\"timewindow\":{\"hideInterval\":false,\"hideLastInterval\":false,\"hideQuickInterval\":false,\"hideAggregation\":false,\"hideAggInterval\":false,\"hideTimezone\":false,\"selectedTab\":1,\"history\":{\"historyType\":2,\"timewindowMs\":60000,\"interval\":43200000,\"fixedTimewindow\":{\"startTimeMs\":1697382151041,\"endTimeMs\":1697468551041},\"quickInterval\":\"CURRENT_MONTH_SO_FAR\"},\"aggregation\":{\"type\":\"AVG\",\"limit\":25000}},\"timewindowStyle\":{\"showIcon\":false,\"iconSize\":\"24px\",\"icon\":\"query_builder\",\"iconPosition\":\"left\",\"font\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"400\",\"style\":\"normal\",\"lineHeight\":\"16px\"},\"color\":\"rgba(0, 0, 0, 0.38)\",\"displayTypePrefix\":true}}" + }, + "externalId": null, + "tags": [ + "environment", + "particulate", + "matter", + "air", + "coarse particulates", + "coarse particles", + "inhalable particles", + "larger particulates", + "dust", + "airborne coarse particles", + "O3", + "ozone" + ] +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/simple_ozone__o3__chart_card_with_background.json b/application/src/main/data/json/system/widget_types/simple_ozone__o3__chart_card_with_background.json new file mode 100644 index 0000000000..24f26e62df --- /dev/null +++ b/application/src/main/data/json/system/widget_types/simple_ozone__o3__chart_card_with_background.json @@ -0,0 +1,40 @@ +{ + "fqn": "simple_ozone_o3_chart_card_with_background", + "name": "Simple ozone (O3) chart card with background", + "deprecated": false, + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAACxMAAAsTAQCanBgAAAL3UExURUdwTPz24lNTXHRtftTR0Pv13vv039HMzMK8vq+svfj09urr8vieDf308O7x9+/w9MzP1u7v8+3t8uvv9szN0/338f337v758Pvz8P3479bb4+3v9ens9Pfy8vrz8cvO1NHV3/Dy987Q2N7n89LW4O/w9eru9tbb5Ozs8Ozs8tTZ4+Xn7ejq8eLp9OHg5PLx9Obs9d/e4uLk6/328Nvc4NPY4t/i6czP1eXr9Ovt89DU3ufp8Ojt9vv18tXY4dbZ4ffz8s/S2eHo8+vs8dvf5+zu9Pbx8ubo7tzg6fDx9djb4urq7+3t8OTm7N3d4q6svrGvv+bl6Nnd5bCtvdLV256mw9va3uLh5t/g5+Tj5uLj6s7Q1KCoxRsbHNfZ3t3e5P768R8eHtbW2+jo7fjy8auqvPHw9M/T3LOtvPrw1e7t8uTs9vjky9DR1tvc4yUqR/rszbKsuictRPnoz/nqyeXo8Oro67u7y6Kqx/317icyUPvz3Pvy2P307/Px89TX3unm5zI6V9/k7OPm7aSpwbe3ydPU2Pr08t7c4PjnyKSluf348Prs0vnq1aOov/nv0fThzOLYz6arwCYvTKiou66qu+Tb0bSuvpqqzPrt2dnU0KyouO7dzYN9i9bRzt7UzubXy3pxgKCit+LUy9fIyNbEyLK0ye7j1Kmsvzk4ONfNyyopKvanKfXm097Z1tvQzaWsx+rbziw2VG5mdtnY2/KvRPfWt7ewvuzg0n95htzX00lISvjftvjlvfHdybSzw1RSVHNre6y51uvYyufHldzSyvHh0Z+ryvK7ZNfT06a11JOoz8TG2HBucOfd0+3Xt66xx2hicqyuw8G9vq+quJ+w0bzB14qJik5MYHp5ej1BWu7NmvHEfe61XOm/e1xZYuLOsLO92Kijovz24c/CzKinsJuz2piWlzU6T6uotZqWopGNmLSxs8TFy4aClaCdp+/IjPejG2BabqShrfby8ra4vtzKyd7Qu+vQpvKpNa6vs8S/zoidyWQwknEAAAAKdFJOUwCvv7C377/9ILfy2RH/AAAfaElEQVR42u3ce1yUdb4H8Dnn7B7bF2MKkqJcJPIK6IoKXnBBBcHk4g0FwYEdRTRTsvWSlhdKRcyyvGAXXbX1OoJ4SUqljFJSS6KiJEzELGMrKd3V1ez8cb6X3+/3/J6ZwTqvPX/O53nmwjDg857v7/bMUBaLJ5544oknnnjiiSeeeOKJJ5544oknnnjiyb+f+37X6qwpr559FXPcJWVlZXgp26TykZ6jHx1V2bMHLyr798Ou8jzkledfaSlP4f7U4sWLn7pHvv4adpX/uA8crc7OPjt769atjJA5TpfjklNG2/F169Zt2gS7snxkYNBhogDm/T17YN9vSJ4nhbjmvPLK868o12LFeUQEQKh6avFTLKNbAykkv7/P8rutKq/iZoQErx7fdvz4tnXbtq2jKIpek0O44cGD49DRQwx5/+j7MvtxU+XYbygQgHkOdj3Pv/Dccy+wQ4GItPiRxXTDYQrdfP3flq2ttpooeo5vk1m3bhttwJAbZzs4Nh1S2XJ0C+5bthiKF99/ERgv7p8FirnPz53LBdn/HB7+XAbM5cN/zpwXYHvkkefQ8Pwjj5hA8rKYSoX5vWWrybH1AAm2HTiwzYhCqGzftG779k0nN53Eg98uDIe2UN7HHTYAiMzCff/+WXNBsn+ukVlz3eW5OaiYMwccWBi6QPiaJC8okgaytNq6Dwj78PoAhxSwV8GmsmPbDgTABgTYt28/RBfB2HJIMCgnToBjC2wCg5JZs/bPgiOfhZL9s1wYc2CbO2/OHLw3dw7emYfXFDboIcsLhgZuLPtaIWLfvn0HDuw7QJZXYavCEGUHILQgQToOnTx5CGsCN5rhxJYTL554EXdVENhwNzJXXFavnrUar1fPmwX7vNVzV8+D+6vn4TXezCMLwegChjlmEXuwIvs4UsGpwg0LsmNHlYmBOzJO4g4bZQvvyEAIRlIkwcQQWS1vaFu9mq+0zHMOYtBGPDPpEQNC1wA4wOXA7JCbqSI7dITKCd60gOTErBOzZkmKO8ws54NvIVgfs2yOESTNkZB9+6p6J9zEDNUSmIsZCtuqoatWrQoKCvLL9YPk5gYFrRL5E6Rf69Z/6ufXT88D8k7r1q3hCu/0W9LvgTUPrBFRd/r1W7Omw5qOa0zp0LFDhw5rnMOP/Fmm49eiTBDLvp0CMgkILhIj4rBzxUUxCCLSjzdiPNAaLi1lDV+3lA5u77o89uc1f35KVciyEyVwtVPUowXHUKhB0KqhQauC4KJL/HQJafohoDXteI9ULXPWuAF1uMdX+HUHRFA6ahDOv3beFBmq1wQaFTQtvAmiMAXbmFETPwPRGjZqRMTAomht7R4VMmTyaDt2hLbWUd7Hux06YoPTH0fT6tVvv/326re5IhC4uummIsLBt0FBubQNBYXh8PNDCVz/qfUSYIgm1ro1KFr3cx88Zg3VHjZ5F+63X9O+PRwuXn49HYiBkRXZ+S9RkNrqiorqWs0BKShAACaXr4b6GSXxk4FeDRXBQElaI0WkHz/kRtSejvzeuTfpbRnLzl1CQozAajukxF4fKCiQphK7vbIslyVDg6RJZFWQ5jAOnUYr1yzCdrfIldSerzH9aG9J5cRqb0B27dy1izCBCKlHh72+zFEdCMmFPfeKvfJKk6NESqhp6RRTRVrOIgxfU/q1lEX9jCfdu1SYtyBv4wUqsosku2DUSqhFRlNZYGBZSW0gJTfX4YCq1Nrrc1tdwZQFBdXW1dUC4Fptq7om+NKvoKnuGkJaoCyBLFoCh7VkkWvMBvhadygNXrtldRSMt96ySMfOBAg0rBJHbUJCYGB9NUMCWwEhlzhNDofDbr+WWwfPsdcFBTlKSirtjqCgMryt8/NzV5olAiKy6N8JeMTWvr1CvSVDEApCKuoc1XibEHilQkBq7U0IqbTjdZm9Gi6Nubn19togh6MsqM7eKqjSUeZXby/zc0dZYnJoov8jqj2XZVF7baP9jRYgV47Ai25vTEjQIFcUpAyOPfcaFCUXeY7KoKAr9toCe8WVK3X2K37m6C3LPebfqBHXBXlvvSE2M6S6PqEMxyi4pzUtXHFVVMBVtb0MO/81LE2dhJTZHZWQWj/3EqfGdS+SLNSS38xZtOgNCkK+2fWNAaktKUtohH5SX2uvTeA2FljiAA60qUDoHE25XAwoyxWA5FJFSgDkF+Tnmtai+7sriR/slHvaFLFF3Bsyll3ffIP7rl1LMdWO40cqaAROkGmyN9ZegeEXMNCGrrSCfl9bi20MIFCeWugvda2aKgpyafIHkDvTb4jw+Qmg3yLTdxf5uXX4GZBvZAiytN5eXQmO6qUiKIFuU9kqIaGO5pi6wDKQOloFBjoqAwlSgGNdU645Qc4xH7VaJGjPFN+Q3w/KlXf4oVz953PhTAJ3DfILBSB5eXlw4Hm8RCFEntQcOZJgyiSnrwuOFKj7PPnocfMQhDrgTfiBm4Hy+0KWGyi+nTuUZ2XxE3z0QXwrf8sbNRLy+ecfvPfE+SeeeKLNzDYcEOW1UfeXOiePr/Ly3HxPVVHP0gR4yPlBeFiLWOfB4sL0jZs3l4ovEQzfh0O/CftN2BNuJiyFZ2Nb2vUviOXDlz//APL5594qbWAT9ySMj5mAM/PaeM/Uvo9sfMzpufTP08/ktcmbmZeX5yQXj/CPmF8p1yebyWzzxqs/Nn/jC9nXqpXlPchuvPL39x8B8RcXir+wGPH29hdPHDFiED7D39+bdpE2Ri3/CGG6t/Yiqd/jbXqUnq63hTYPk+Zh8cskGJ6EbcJ7qTe/dufPn//l/C/nzvlaznO+eo8PZITuoOMEjLd/m64K4e/fjTIEQ/dGjGg3Am7aKU1XzsNwGF27ttGY9Mu44PLFgOALRoeOoX8Jflama1dll0B8lnzsww8//B/aLefPiQiIpjAsetq1E4w+ffooi0w7nSKPhKJZUOPNr1lAQMCgAKCAhH6ALg8bDPnTXY3XqE1XI/5dz/2y8uODC0+fXggVERDjyWaMbgBFu27tZDmc041RThDnQzKODOoRwMF/hX6iq7PC+Me7mYou/o28cyEhIbN9fc+ds3z1FbYsVREtzpIRRFDNqk+fRx99tA/FpFESPJQH//jggy4cetHxILkkkG4jjAbZ9X5VSvUvtzOV3b+bcZDnzolCYGf/CnNeb8YcwphfEtU5iGGKBMkXTlVENG3M/WaT8Uvb+buJasSYAHzFArSXi18wPHIqheUDGn2BM0IbqsQorJP4H2WEOwdbpKSd8aL4xEF88Peh7MGH779feu7vSk2Vnu8UoxtyBmpRjQCfJMrw1VcwIVI++GAQDyAYOZs4D7ry1+M/wIfeizaNQswhPJYNGtQzLjw6cWpY2NSpSUmAwSrdr8VfQphivP7mw+9lisHB+mAJyGL58MOXIadPn4bxQ8TH23mUxxjNy6VpGRj5CgYMDAgHQ1hK38zMDEh6ZkpYYlLcIPgViqFe/CGqyRqAXk4ZPnx4r+Fwg1eKA0/FEnzwHnAsL8NITJYALy8vRfHx0R3e7uqiMKoi8gWcD1m+fHnfvlEZGTn5+aNGZY/qn5+Tkdk3LNprkL9L++G2OsQsGK7lIRHjEVWYIXDs3KAsaCALDB7haPFylXjDGkNw9DlRtgIqBf7aR+kAnsGMHBkfP27cqNjsZVPSIMuWZY9CS2I4DFFaFzZ1Akl46F5xklARkEKQlyfAFk4BilfPnj4U75kYvAbNzDay23SVY4poGHw8eBzDhy+XhE6xsTHLlgFh2LBhISFwBZjs/JyolPnhAwNc+7Aqw0O/HhPkZXKclpCXwTVfQUAiKD7o8J6ZR5481WOMOU1QAgIGYmsiRfdOMZHLgtOkISSkLSQEMWnLRuVn9F0+fz43cGMc6oX7b3SIggzkXzKQ+ghGQF4+LSqiJJIiPCKq2xjTM8zO0K/Dlj8TNTJ+XPfQmODB06cP0wwiSElbFpsfD30FLPN5GB2o18ToDyON/RnYHqKLgmhj10CaOmjUAgJssBMjgCF6UXySk5PxIq5JxUMArpcGefHgFJURDz0CGtP0YWaASUKUnIyMvilh86PDA2T4mOZzSZ75tYKQo5cYV7799oNvcQR+z3KaGHAJ10tCkkHkiNPSg4ITHAWmicQwGmBz8kdlL+PG1LbtgM6UAQMGmBgsSRPdPiUxOhzGFVr+0pJrYDg0z+H3tgwfrsbj+cNhW778WxmAQCafVhAvXQJTWk8SeCVhwpNk4F50dDQq0ICDUxo1prYDhIIkuqKtkEhKemZYdBIMKDT/ssYL2ihZ7tHJxfi7HDvkM89ERZkgC/GyMNyIQemJEC8vfDAak5iYGMZJSekLivh8bE9UixCuRFvJMNciRJYEJVOWZfdPzZiUMjUpzjjp8iEL1GWg+/HLYKAhigfHcRcufPIjnI18+yFBMJPD9ai6YASDEctR0DczKgr79rhRMYCYjsVoKwVtaVMQTcApHIbzCkh6Txo7NSl55kxx1oQYamVyOFaz4XDYeg0XYwHPUePkAP/0009f+AIploUik00MHSMdqIDpGibsKOja/LuWwRg1THVvJLj0cJMC6oEVSZuSjZL0sQsW9JAUWjrwKYqi0MH3egg2TTGueyck4CSVNh0hsF/4h2XyZCEJd4kXYxiC5aB1BzRMKmv3TqExXXCspXHKzUhlqsV0SpoItK3sif0jQDJ2QRJT+Gwdz4BB0kdfLMpaAIMHeJqlpvMI/zTnwtMAQclkV4iXKEy4GSKbZ/fuoaGRAEHJdDFr4N42RO8Vw6YrhFDAS5kNjOyJE4uKQDJJUHCeNVE0iypGPCi6DJYGeu0MyIQJTHFTkXAzZL4BGSkhXYKBwpjpw6aHiE2L+gKeRYplqIBVZP/+qUUREb17T9IoeW14lh3RLWCIZgEHN6nQLoMZYZT9aSkBCEomQx/xuickOnH+fOeSRIIEKNISMt2MwMNHACYYg4yY2NhYyQBHb0GZSpQ8daKuFnEDe+EyFF+5GGI4NWGnimDuXZDo6PkMWS5LwhKkyLoM1gB08IMHGwx82rKYGHKMys9PlQyM1sD41PF+sSbtNqQPzJLgGNcpZtng6VyLATrksHBQRdjicux0LeYPalp0lsEliZeQLjJGYaarEhjfFLcGJB8Y6emTJkkKdftkHyURZ15DAubDIi6+e6xiOAUghw/DqKUgE5wgKJAG5cDu/oxTd++iHa2sQTAw4DuRtHURz4HqRTKEJBE5UAiKtIzFaQUlD0IYEoCOkeN0RmfnpnVY6yO4T3bfoJwdOP4SRK9IMG18J1hVI5KO3RwhiR2Vn5pDLWrsWJREYIACU723NxTkQWIM8ooO6xsFk27a9Oa7d5vxuAdQtNaFBYGSIASrAfsENw5BmZ8oJnXpMHo7tymKQRGNiiGhIpGhOoQkCCkoIEoEU2Cu7+EDb1FAH/FnRjwsgdL+WWGDVNySEG05iggqikV0dTcQwUicj+UICxP14AlRVkT1c9Whg+UWSa0p1ByUEAZaF82HBRAhoXklZWr4IHync1A4MnKgVaUNa7TZShwOoNTDktRJQg0LNQoyObxFiWpWwiEWbAIiBitBCY4M7iK6RaQB6Y5hSaSU5OdjSQoKFhAFm1cRUGBRPDU8Lo4ZWI20kHpbST20q1v1NlsTEjrzhatzWORpWmv9KiTMvUOHCAo2MMCIXi4g3bsbEohsXDm0RIGA5NonFY13i4pSsUzwzhGeH8ApDqyqQ27ZbHfxqNsOqLc5yCDPdvDy5JOHDz+JEoAcpBXKwpbmDwXpa3KMQ0cktSxj9hC9nJpVsNFHunc3UQQE3iKCTlGAkgV/5c8niyb2T424W1lScQxPc+gcJ+uYrVE2pxLbT8iQpzz40JOHn4SAxXKQ4hYieruAiHWvcnRygeA0zs2LGUZndyfBIRgHLpRkwcfI147ZS2YXTZz4E5Jsn+T3z54CkNlZFdygsALV0Es6a4EvmAGxHFx48DRRWp7TW4JECshg84qEO4kafE2QThgBkUMwSK7aKxcUjK20N0UUTXTYqrN+KrFdzca3xEDigJYlUmer6OyUJ2UsCw+KeHm5WW0ZbUus4KMy+LQGDik0xrxoJAcWZbDsJuQw14QkqBiFsyJNimOxZdVDT4GPxntHNNtKYFFZbavLJknhsBJbc5aA3LKVDNCq4QShEMTLGRKtJKIkoiIEiQ2NidGWWbgJyeDgYDVoqfFXh3TqJCE8Ky5otF+FBnbNXnKtudpekX1kyg+2imyWAGz27CxBcdhuOVVkw4YnN1DzskxeKJbxBHGxGDVZLiSiaWELiTHWWIaG1yhdgoPdS6SFIPB2Ckkq7Lewy1fSn+81T8ye4msr8c0myjWbA3sKSyptdXz8t24ZEGTgqEVjr4C4rYouycS2FS/Oc0ESI2b2webw5BgZaZoRWaHVJJ9KghK7feKCBUkLiv5a4aisjUgFicN2dQqduVy1VaQpyTHuJMdKYIr8xIDgCMwVQYp0eLntKdxPRE3EGfsoOP1XFPYEq0VjsFgoOkHAoZckJycnIz291l6yQATmxnSUVNuqp0wByrI6WzW+R4PNq+2AZofNUddUiTO9zeZoRojoIoeNmd144yTctTBi7Fqewm89cFHgUARFrdQNk1zwhpoknbRwTVKhKHftlTwzGhIsRGEaWGDInULvI88OyYLpHVcqtpK6zr5wr5E7O1t49Stmdi9+S8sskiR6O4g6SiZ87kFFyZcUkS56IiNdHd3NDpJAVers1XiaWKBJfEtsvoWFhWlplbbvGQISWFvdqqusrIdS+PreKrF9QhXBfcMGCy7i6cxKe2+uwEtPgRiWo6M/qqk5ie9rZWJXAUsOfIzDGE0jSDExZ6vOOjtCQzuFIqLq9lkcgmNFURrtdem0pifJWJJU2OoAUjjMYbtG7+yniTedcGLs7Au18L1aYnuXKrIBO4o4sZpgnI8U1JRbNcXF8jOiLkfLrZDSGmxfmZlUFrTQZ1J8UEQSiYltsDYYjE5IgQ0hVfiLfq4S0yIsVSrsd3vTjEKL4QKSNNkctYWFzdUwaBVSQeTb+wDx5RHrJ5vtGA6/JLFM4JJMEMv4mos34F+Rii/xnzxD75x67Sm1cmrg7dIUoqSjhShcGQo0GpzyYmNvWG+HxlINiEESJHUqtZZfgosQg6TEPhvPq4hCmZTeOwLOQSoqS2wld2fPpnfGZs8myAD57jJo6hCCEigLV0RBbvCxcgur4a/O0BvvPc9YrRcLwq9DTRLDJCU9Kj2dLYwZBzsGOaespbI7cEnETWjkqVNVobetVlU8mDRgrRhBRWHKJJAUVtPZFDgoWThstdUgaPHtvEFGnOpKiNVafrFUQr603ii/LiA+BSCISwoPB08NS1JSkJKuKJBxHNKUWy9pXdt8elV16oz1DHUmfJsLRqj+QiJO4wGSHhGRdfWHa4U47sqJXZyDaBBfNDwmIfzuA0EuHg0PL5VNq+bLgkF7AEKfk9RAQXrCxwt3rNbrifDZecrJM2fugCTzckPDZaSUnSktLT+1A74iTJXVWjVu3G348nYDfiP07KWfS39uqCJJA7wqVbHIQAlMFaOEBCjpAtKbJsa0QoJw5OJRti2APEaRkMnGW6ZeAhLnFUefv+2RFYHSfIkfMRyFB6JRgjKsyZdW6ykoynbuQj/DV/E5MDafspYD5zI9gjnFt6VnEXL78iVraSwVBAIrRISwBCkYPGXsD5JCluCfl/kSRVtoIWSD2PidRn7LNA42oHBF6POdnnEKchEg8BFVHEGmwpRCEGheBElPh5/6+fr1BjzkeMzP1lMMsZafukSIhlPQxa2XoDSXwAIFk5AKWLMLiaDQ+0MRqakkgcblyxBf386qo/tSQaAiG7goFlEPXv1SZEUoLhB4oDwpCSQCknKKIHDEpWUZORlnBGSH1bojniCluFS+gYLQUPiyIfTsDTA1QG1kSWDug08Z+htFIUZERGp/hEzhbuLrPo+JtvWYhZbwB9ebIZLhDPGhEpWHw+duCoIVyYxCAA7GyIKWFX/G2oDLGDjyS7joh2G8Cj7VgI5THhp6Clvhjds028TELvOlMxD4mEG8IRwh3udKJQh1k9lmSGexmSpy8FPYDsKlZ1xP/sAQIXEtQHxERaAmCMHRiyFwpLclBCtSyjcCMo4hnRgClbl8W566x8aIcw/4oKE/dXkRdBBEdBM+cF2jVQQguz8WkZ8YukLikhWEHmigz0MRAn/4w5BMONLtWkUuW2/EO0NgoSUhkTHKERvrsP2QrUlSDcdEcAAkTTSuLDPDqSK7MR/DJj777OkKoY/XcdSKA8gJeEBB8E+YAPIlQdZpFWmglmWG8Jhc3ilWTem4sImFN3ngDhxzf5aghaJBXBqX0uiQ98iyW/2ZA0B8kuPwrwPikpMlZCYeN37AjvOIhJyZChKGwHB1WUEyoGVdVhC8Bcg2AaHlfye5oBnVbLM14y22IwFhSn+GHBEQrcM3a23LaFofk2Ll7pVmiIyEJBfcgJkdgjN7DwEpnwqjF5YqpS9wGnAZeYkqcsdaGu8C4bEMZxdYmI0TjiyHrT6fj35Uf+cYEG3kasab5s7mUQshENeK+CTzblQkGddaewpwrdVDQqzXCwru3EBISgQOsOuKLuE8kqFaFkPgrWJseSNHZqwDSDydlPHCLD8fVre4kE9Nzc8vcoFAY8OmNaXQqSRa/vIXHUIU+lsT3AEi6+FjVCS5QKx+b+zpQZIaq8qXMHjdUV+dyiiDIcyAjBQQOLVECK3+48UyE96Na2aI6hgtlkR1E2paoiZ/wRDkUwhS3lGtSYNwRWZCPWDfcwYPs/wE/T0KQWg+wKaFw/Ad/KocmxZ0lFI82PiMDIJkZERpEDqPEevMZof9WE4qbMaYa9Y4S7KcRl+GIMXy6V6kjBkzJi7ZNQiYKa7gUlBTUwBDAP9tDfb+gpqT8n0vmBpP1kRkAuRORrn1eoaeKJHMqExKlMR8YncAJ8IpRWgpEhCgHNFbV5Zz0xKx7GXIp2Pg8Nxb5N9qMQcfIwpCsK/wH3ckfnQdz1H6luJLf+kSDsUjGSEZbKCTy0xxgtkEb2LBsiaHMDk4o4tPfIrQUmSSCIqzxYBM27t39KejR48eA8eWnNwj2V2UhB1MERDxIXxig/XMnZo70IQa5GGqYmSq9JWhr3zhP2eEp/TWAusTgQFLUZGQuKFkuanI3mmj94KE/xarh3uLgvAdDEJo+OI3iy6Krl66qW8mnQdHmQ26I6UvnfbX2hsz5ZqdFJqHPvaBMIR7ClGUJSurc5apIhADkkx1cYdBhGplaDlRWnodChOHFJR8dKYUzigv9k7hPx+SLSgzyuxI0ZKN5zOZk3SMYBiUiUUTheWIshQqS9YGBdm4kSiqIr9eGKPPUBuL6yGKov6Yazlb+rqphiSIP/oKG5sCZ+iZmXiSrltkr+cIycQjGqVQnMr/HbLBBZLUw11apsyciXMmWGT7Skx0xmhxRkwVSUkZK99xkBjVT8wSpADmiFEXgqBlg4UcxQRRjiSjLNLSo8W6KEqSohh/ZcfR25OTQiVFvA9ElAi9JBPdWGRdCuFvHv5+ASnUR6Ai08ZPRQBveG9BMl4Rih/SNS5l4QaWpCTuOIZjqrssmCrLog/DijLRhTKlcEqh7xdfXEALQYpHTysuHl3sKwS4L8DjXtBDfW3UqAUK9xXZU5wxKWHmeujHnwSblEiKSy/RqnLERPn+C8wF0FigURVzQqbqx6zu/iaKj2heLUioLnxhRyJshgXON4mzgKrCNVGtS2GMshwREt/vGxu/+KKSKAwZP7p4fPGM8ePHz5gx/nHIDNrG06X48c+KP4MdNpnR48fDmuYdzMqVK5+Qgfu7P16/Yq1873LthLUrVqxYK/Ls31zz7N+epeCIg5MyHMHo4s3fXf3nT9//8OOPf4UcwwvntWOvQd5993XIJ5B/YBqB0ohVQQgcF+zCAdvjM0TgDrIeB8hnn23e/JlBAfpopqx8R6M8gZRP0fI3ckxYQVmLG1DcYARFSIAyBjWfseWHHwVFgRBCEqIQpvEfWBaEEIMgM2a89JJBoFsRJIBk82a4xns0zmFd3JRl9+5P965fwUVZMXnFioMr1q+Hfb0ozFo4bifMsxuVBEtNluLNaPmeLDIEEYzXX5ceqouoyGhGcGZoBZlB7YwoWBNO8TTYi3n2EU3MpYVBWaAIK0xZv2IjaDZuJIsepAjJ+DFMQQu3Md0iSyIc777L9UGLhV5ZeG0NiNmiasLN6zvkTCMNS2QT0y1YFaCs52ZFLUu0sfWUjRvXKsxGeYsUWRFZlc82f/dPtvxoSF4zJEyhry3Qc4kyZgxK3oQd8tKbwvG40brI8h1QZGGmbeYpaPR4VRVJWcmdBS1rjWCJkLF+PaxU924Ez7S9G6cB4DvaN8uaGBZs0FAWsiCG+vxrsn0h4bV3eQR41/IH0dW5FG+Sg/LSjDdn6AwuCgq++w4xYJCS0aYxbKVoX4JCAOj4TFlPRdnLFlh4Y7BVbWSIlLwDG1cFW4GyQEle4xBCy39Z7isezZ1dSLTMcIIwxU1RphFFlWUlWYgiLdCURE244+9VmUZtahov+aZh1yvGkcvcwoAiLD8qCuWYDP6vM/9AjvEzxjhDoCovuaFsVpJpmwXE3O3ZwtktLOvXqka23gSBNsaZplIs2rrWxKCzEOUn6vrHXm+srKyoqMD/+0fFF3D/P+/z/K9cPfHEE0888cQTTzzxxBNPPPHEE0888cST/4f8L6TvO1uzNY+xAAAAAElFTkSuQmCC", + "description": "A beneficial layer in the upper atmosphere, but harmful when present near ground level. Results displays mainly from vehicle exhaust and industrial emissions by combining the latest and aggregated values and optional simplified chart.", + "descriptor": { + "type": "timeseries", + "sizeX": 4.5, + "sizeY": 2, + "resources": [], + "templateHtml": "\n\n", + "templateCss": ".legend {\n font-size: 13px;\n line-height: 10px;\n}\n\n.legend table { \n border-spacing: 0px;\n border-collapse: separate;\n}\n\n.mouse-events .flot-overlay {\n cursor: crosshair; \n}\n\n", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.valueChartCardWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.valueChartCardWidget.onDataUpdated();\n};\n\nself.onLatestDataUpdated = function() {\n self.ctx.$scope.valueChartCardWidget.onLatestDataUpdated();\n}\n\nself.onEditModeChanged = function() {\n self.ctx.$scope.valueChartCardWidget.onEditModeChanged();\n}\n\nself.onDestroy = function() {\n self.ctx.$scope.valueChartCardWidget.onDestroy();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '300px',\n previewHeight: '150px',\n embedTitlePanel: true,\n hasAdditionalLatestDataKeys: true,\n defaultDataKeysFunction: function() {\n return [\n { name: 'ozone', label: 'Ozone', type: 'timeseries', color: 'rgba(0, 0, 0, 0.87)'}\n ];\n },\n defaultLatestDataKeysFunction: function(configComponent) {\n return [{ name: 'ozone', label: 'Latest', type: 'timeseries'}];\n }\n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}", + "latestDataKeySettingsSchema": "{}", + "settingsDirective": "tb-value-chart-card-widget-settings", + "dataKeySettingsDirective": "", + "latestDataKeySettingsDirective": "", + "hasBasicMode": true, + "basicModeDirective": "tb-value-chart-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Ozone\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"settings\":{},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 250) {\\n\\tvalue = 250;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]},\"latestDataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Latest\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"settings\":{},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 250) {\\n\\tvalue = 250;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}]}],\"showTitle\":true,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":null,\"padding\":\"0\",\"settings\":{\"layout\":\"left\",\"autoScale\":true,\"showValue\":true,\"valueFont\":{\"family\":\"Roboto\",\"size\":28,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"32px\"},\"valueColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":50,\"color\":\"#3B911C\"},{\"from\":50,\"to\":100,\"color\":\"#7CC322\"},{\"from\":100,\"to\":130,\"color\":\"#F89E0D\"},{\"from\":130,\"to\":240,\"color\":\"#F77410\"},{\"from\":240,\"to\":null,\"color\":\"#DE2343\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"background\":{\"type\":\"image\",\"imageUrl\":\"tb-image;/api/images/tenant/noise-level-simple-value-and-chart-card-min.png\",\"color\":\"#fff\",\"overlay\":{\"enabled\":true,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}}},\"title\":\"Ozone\",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":null,\"mobileHeight\":null,\"configMode\":\"basic\",\"actions\":{},\"showTitleIcon\":true,\"titleIcon\":\"public\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"titleFont\":{\"size\":16,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\",\"lineHeight\":\"24px\"},\"iconSize\":\"18px\",\"titleTooltip\":\"\",\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"useDashboardTimewindow\":true,\"decimals\":0,\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"borderRadius\":null,\"units\":\"µg/m³\",\"displayTimewindow\":true,\"timewindow\":{\"hideInterval\":false,\"hideLastInterval\":false,\"hideQuickInterval\":false,\"hideAggregation\":false,\"hideAggInterval\":false,\"hideTimezone\":false,\"selectedTab\":1,\"history\":{\"historyType\":2,\"timewindowMs\":60000,\"interval\":43200000,\"fixedTimewindow\":{\"startTimeMs\":1697382151041,\"endTimeMs\":1697468551041},\"quickInterval\":\"CURRENT_MONTH_SO_FAR\"},\"aggregation\":{\"type\":\"AVG\",\"limit\":25000}},\"timewindowStyle\":{\"showIcon\":false,\"iconSize\":\"24px\",\"icon\":\"query_builder\",\"iconPosition\":\"left\",\"font\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"400\",\"style\":\"normal\",\"lineHeight\":\"16px\"},\"color\":\"rgba(0, 0, 0, 0.38)\",\"displayTypePrefix\":true}}" + }, + "externalId": null, + "tags": [ + "environment", + "particulate", + "matter", + "air", + "coarse particulates", + "coarse particles", + "inhalable particles", + "larger particulates", + "dust", + "airborne coarse particles", + "O3", + "ozone" + ] +} \ No newline at end of file