6174 changed files with 49730 additions and 16385 deletions
File diff suppressed because it is too large
@ -1,3 +0,0 @@ |
|||
###### WARNING NOTE: 'localhost' can not be used as CLOUD_RPC_HOST |
|||
|
|||
Please note that your ThingsBoard base URL is **'localhost'** at the moment. **'localhost'** cannot be used for docker containers - please update **CLOUD_RPC_HOST** environment variable below to the IP address of your machine (*docker **host** machine*). IP address must be `192.168.1.XX` or similar format. In other case - ThingsBoard Edge service, that is running in docker container, will not be able to connect to the cloud. |
|||
@ -0,0 +1,15 @@ |
|||
#### Upgrading to ${TB_EDGE_VERSION}EDGE |
|||
|
|||
**ThingsBoard Edge package download:** |
|||
```bash |
|||
wget https://github.com/thingsboard/thingsboard-edge/releases/download/v${TB_EDGE_TAG}/tb-edge-${TB_EDGE_TAG}.rpm |
|||
{:copy-code} |
|||
``` |
|||
##### ThingsBoard Edge service upgrade |
|||
|
|||
Install package: |
|||
```bash |
|||
sudo rpm -Uvh tb-edge-${TB_EDGE_TAG}.rpm |
|||
{:copy-code} |
|||
``` |
|||
${UPGRADE_DB} |
|||
@ -0,0 +1,10 @@ |
|||
#### Upgrading to ${TB_EDGE_VERSION} |
|||
|
|||
Execute the following command to pull **${TB_EDGE_VERSION}** image: |
|||
|
|||
```bash |
|||
docker pull thingsboard/tb-edge:${TB_EDGE_VERSION} |
|||
{:copy-code} |
|||
``` |
|||
|
|||
${UPGRADE_DB} |
|||
@ -0,0 +1,23 @@ |
|||
Modify ‘main’ docker compose (`docker-compose.yml`) file for ThingsBoard Edge and update version of the image: |
|||
```bash |
|||
nano docker-compose.yml |
|||
{:copy-code} |
|||
``` |
|||
|
|||
```text |
|||
version: '3.8' |
|||
services: |
|||
mytbedge: |
|||
restart: always |
|||
image: "thingsboard/tb-edge:${TB_EDGE_VERSION}" |
|||
... |
|||
``` |
|||
|
|||
Make sure your image is the set to **tb-edge-${TB_EDGE_VERSION}**. |
|||
Execute the following commands to up this docker compose directly: |
|||
|
|||
```bash |
|||
docker compose up -d |
|||
docker compose logs -f mytbedge |
|||
{:copy-code} |
|||
``` |
|||
@ -0,0 +1,61 @@ |
|||
Create docker compose file for ThingsBoard Edge upgrade process: |
|||
|
|||
```bash |
|||
> docker-compose-upgrade.yml && nano docker-compose-upgrade.yml |
|||
{:copy-code} |
|||
``` |
|||
|
|||
Add the following lines to the yml file: |
|||
|
|||
```bash |
|||
version: '3.8' |
|||
services: |
|||
mytbedge: |
|||
restart: on-failure |
|||
image: "thingsboard/tb-edge:${TB_EDGE_VERSION}" |
|||
environment: |
|||
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/tb-edge |
|||
volumes: |
|||
- tb-edge-data:/data |
|||
- tb-edge-logs:/var/log/tb-edge |
|||
entrypoint: upgrade-tb-edge.sh |
|||
postgres: |
|||
restart: always |
|||
image: "postgres:15" |
|||
ports: |
|||
- "5432" |
|||
environment: |
|||
POSTGRES_DB: tb-edge |
|||
POSTGRES_PASSWORD: postgres |
|||
volumes: |
|||
- tb-edge-postgres-data:/var/lib/postgresql/data |
|||
|
|||
volumes: |
|||
tb-edge-data: |
|||
name: tb-edge-data |
|||
tb-edge-logs: |
|||
name: tb-edge-logs |
|||
tb-edge-postgres-data: |
|||
name: tb-edge-postgres-data |
|||
{:copy-code} |
|||
``` |
|||
|
|||
Execute the following command to start upgrade process: |
|||
|
|||
```bash |
|||
docker compose -f docker-compose-upgrade.yml up |
|||
{:copy-code} |
|||
``` |
|||
|
|||
Once upgrade process successfully completed, exit from the docker-compose shell by this combination: |
|||
|
|||
```text |
|||
Ctrl + C |
|||
``` |
|||
|
|||
Execute the following command to stop TB Edge upgrade container: |
|||
|
|||
```bash |
|||
docker compose -f docker-compose-upgrade.yml stop |
|||
{:copy-code} |
|||
``` |
|||
@ -0,0 +1,95 @@ |
|||
Here is the list of commands, that can be used to quickly upgrade ThingsBoard Edge on Docker (Linux or MacOS). |
|||
|
|||
#### Prepare for upgrading ThingsBoard Edge |
|||
Set the terminal in the directory which contains the `docker-compose.yml` file and execute the following command |
|||
to stop and remove currently running TB Edge container: |
|||
|
|||
```bash |
|||
docker compose stop |
|||
docker compose rm mytbedge |
|||
{:copy-code} |
|||
``` |
|||
|
|||
**OPTIONAL:** If you still rely on Docker Compose as docker-compose (with a hyphen) here is the list of the above commands: |
|||
```text |
|||
docker-compose stop |
|||
docker-compose rm mytbedge |
|||
``` |
|||
|
|||
##### Migrating Data from Docker Bind Mount Folders to Docker Volumes |
|||
Starting with the **3.6.2** release, the ThingsBoard team has transitioned from using Docker bind mount folders to Docker volumes. |
|||
This change aims to enhance security and efficiency in storing data for Docker containers and to mitigate permission issues across various environments. |
|||
|
|||
To migrate from Docker bind mounts to Docker volumes, please execute the following commands: |
|||
|
|||
```bash |
|||
docker run --rm -v tb-edge-data:/volume -v ~/.mytb-edge-data:/backup busybox sh -c "cp -a /backup/. /volume" |
|||
docker run --rm -v tb-edge-logs:/volume -v ~/.mytb-edge-logs:/backup busybox sh -c "cp -a /backup/. /volume" |
|||
docker run --rm -v tb-edge-postgres-data:/volume -v ~/.mytb-edge-data/db:/backup busybox sh -c "cp -a /backup/. /volume" |
|||
{:copy-code} |
|||
``` |
|||
|
|||
After completing the data migration to the newly created Docker volumes, you'll need to update the volume mounts in your Docker Compose configuration. |
|||
Modify the `docker-compose.yml` file for ThingsBoard Edge to update the volume settings. |
|||
|
|||
First, please update docker compose file version. Find next snippet: |
|||
```text |
|||
version: '3.0' |
|||
... |
|||
``` |
|||
|
|||
And replace it with: |
|||
```text |
|||
version: '3.8' |
|||
... |
|||
``` |
|||
|
|||
Then update volume mounts. Locate the following snippet: |
|||
```text |
|||
volumes: |
|||
- ~/.mytb-edge-data:/data |
|||
- ~/.mytb-edge-logs:/var/log/tb-edge |
|||
... |
|||
``` |
|||
|
|||
And replace it with: |
|||
```text |
|||
volumes: |
|||
- tb-edge-data:/data |
|||
- tb-edge-logs:/var/log/tb-edge |
|||
... |
|||
``` |
|||
|
|||
Apply a similar update for the PostgreSQL service. Find the section: |
|||
```text |
|||
volumes: |
|||
- ~/.mytb-edge-data/db:/var/lib/postgresql/data |
|||
... |
|||
``` |
|||
|
|||
And replace it with: |
|||
```text |
|||
volumes: |
|||
- tb-edge-postgres-data:/var/lib/postgresql/data |
|||
... |
|||
``` |
|||
|
|||
Finally, please add next volumes section at the end of the file: |
|||
```text |
|||
... |
|||
volumes: |
|||
tb-edge-data: |
|||
name: tb-edge-data |
|||
tb-edge-logs: |
|||
name: tb-edge-logs |
|||
tb-edge-postgres-data: |
|||
name: tb-edge-postgres-data |
|||
``` |
|||
|
|||
##### Backup Database |
|||
Make a copy of the database volume before upgrading: |
|||
|
|||
```bash |
|||
docker run --rm -v tb-edge-postgres-data:/source -v tb-edge-postgres-data-backup:/backup busybox sh -c "cp -a /source/. /backup" |
|||
{:copy-code} |
|||
``` |
|||
@ -0,0 +1,6 @@ |
|||
Start the service |
|||
|
|||
```bash |
|||
sudo systemctl tb-edge start |
|||
{:copy-code} |
|||
``` |
|||
@ -0,0 +1,15 @@ |
|||
#### Upgrading to ${TB_EDGE_VERSION}EDGE |
|||
|
|||
**ThingsBoard Edge package download:** |
|||
```bash |
|||
wget https://github.com/thingsboard/thingsboard-edge/releases/download/v${TB_EDGE_TAG}/tb-edge-${TB_EDGE_TAG}.deb |
|||
{:copy-code} |
|||
``` |
|||
##### ThingsBoard Edge service upgrade |
|||
|
|||
Install package: |
|||
```bash |
|||
sudo dpkg -i tb-edge-${TB_EDGE_TAG}.deb |
|||
{:copy-code} |
|||
``` |
|||
${UPGRADE_DB} |
|||
@ -0,0 +1,8 @@ |
|||
**NOTE**: Package installer may ask you to merge your tb-edge configuration. It is preferred to use **merge option** to make sure that all your previous parameters will not be overwritten. |
|||
|
|||
Execute regular upgrade script: |
|||
|
|||
```bash |
|||
sudo /usr/share/tb-edge/bin/install/upgrade.sh --fromVersion=${FROM_TB_EDGE_VERSION} |
|||
{:copy-code} |
|||
``` |
|||
@ -0,0 +1,36 @@ |
|||
Here is the list of commands, that can be used to quickly upgrade ThingsBoard Edge on ${OS} |
|||
|
|||
#### Prepare for upgrading ThingsBoard Edge |
|||
|
|||
Stop ThingsBoard Edge service: |
|||
|
|||
```bash |
|||
sudo systemctl stop tb-edge |
|||
{:copy-code} |
|||
``` |
|||
|
|||
##### Backup Database |
|||
Make a backup of the database before upgrading. **Make sure you have enough space to place a backup of the database.** |
|||
|
|||
Check database size: |
|||
|
|||
```bash |
|||
sudo -u postgres psql -c "SELECT pg_size_pretty( pg_database_size('tb_edge') );" |
|||
{:copy-code} |
|||
``` |
|||
|
|||
Check free space: |
|||
|
|||
```bash |
|||
df -h / |
|||
{:copy-code} |
|||
``` |
|||
|
|||
If there is enough free space - make a backup: |
|||
|
|||
```bash |
|||
sudo -Hiu postgres pg_dump tb_edge > tb_edge.sql.bak |
|||
{:copy-code} |
|||
``` |
|||
|
|||
Check backup file created successfully. |
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,32 @@ |
|||
{ |
|||
"fqn": "horizontal_individual_allergy_index_iai_card", |
|||
"name": "Horizontal individual allergy index (IAI) card", |
|||
"deprecated": false, |
|||
"image": "tb-image:SUFJLXZhbHVlLWNhcmQtaG9yaXpvbnRhbC5zdmc=:SUFJLXZhbHVlLWNhcmQtaG9yaXpvbnRhbC5zdmc=;data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIGhlaWdodD0iMTYwIiBmaWxsPSJub25lIj48cmVjdCB3aWR0aD0iMjAwIiBoZWlnaHQ9IjU2IiB5PSI1MiIgZmlsbD0iI2ZmZiIgcng9IjQiLz48cmVjdCB3aWR0aD0iMTk5IiBoZWlnaHQ9IjU1IiB4PSIuNSIgeT0iNTIuNSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iLjEyIiByeD0iMy41Ii8+PGcgZmlsdGVyPSJ1cmwoI2EpIj48cmVjdCB3aWR0aD0iMTg0IiBoZWlnaHQ9IjQwIiB4PSI4IiB5PSI2MCIgZmlsbD0iI2ZmZiIgZmlsbC1vcGFjaXR5PSIuNzYiIHJ4PSI0Ii8+PHBhdGggZmlsbD0iIzgwQzQyQyIgZD0iTTMwLjQgODAuNzVhMi41IDIuNSAwIDAgMC0yLjUtMi41Yy0uNTMgMC0xLjAyLjE2LTEuNC40NHYtLjE5YTIuNSAyLjUgMCAwIDAtNSAwdi4xOWMtLjM4LS4yOC0uODctLjQ0LTEuNC0uNDRhMi41IDIuNSAwIDAgMC0yLjUgMi41YzAgLjk5LjU5IDEuODUgMS40MyAyLjI1YTIuNDkxIDIuNDkxIDAgMCAwLS42OTggNC4wMTggMi41IDIuNSAwIDAgMCAxLjc2OC43MzJjLjUzIDAgMS4wMi0uMTcgMS40LS40NHYuMTlhMi41IDIuNSAwIDAgMCA1IDB2LS4xOWMuMzguMjcuODcuNDQgMS40LjQ0YTIuNSAyLjUgMCAwIDAgMi41LTIuNWMwLTEtLjU5LTEuODUtMS40My0yLjI1Ljg0LS40IDEuNDMtMS4yNiAxLjQzLTIuMjVaTTI0IDg1LjVhMi41IDIuNSAwIDEgMSAwLTUgMi41IDIuNSAwIDAgMSAwIDVaTTIzIDc0YzAtLjU1LjQ1LTEgMS0xczEgLjQ1IDEgMS0uNDUgMS0xIDEtMS0uNDUtMS0xWm0tNCAyYzAtLjU1LjQ1LTEgMS0xczEgLjQ1IDEgMS0uNDUgMS0xIDEtMS0uNDUtMS0xWm0tMi0yYy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDFabTMtM2MwLS41NS40NS0xIDEtMXMxIC40NSAxIDEtLjQ1IDEtMSAxLTEtLjQ1LTEtMVptNiAwYzAtLjU1LjQ1LTEgMS0xczEgLjQ1IDEgMS0uNDUgMS0xIDEtMS0uNDUtMS0xWm02IDJjMCAuNTUtLjQ1IDEtMSAxcy0xLS40NS0xLTEgLjQ1LTEgMS0xIDEgLjQ1IDEgMVptLTQgMmMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xWiIvPjxwYXRoIGZpbGw9IiMwMDAiIGZpbGwtb3BhY2l0eT0iLjg3IiBkPSJNNDEuODQ0IDc1LjA0N1Y4NWgtMS43MTZ2LTkuOTUzaDEuNzE2Wm02LjM4MiAxLjMyNkw0NS4yNTIgODVoLTEuNzk4bDMuNzQ2LTkuOTUzaDEuMTQ5bC0uMTIzIDEuMzI2Wk01MC43MTQgODVsLTIuOTgtOC42MjctLjEzLTEuMzI2aDEuMTU1TDUyLjUxOSA4NWgtMS44MDVabS0uMTQ0LTMuNjkxdjEuMzZoLTUuNDE0di0xLjM2aDUuNDE0Wm01LjE0NS02LjI2MlY4NWgtMS43MTZ2LTkuOTUzaDEuNzE2WiIvPjxwYXRoIGZpbGw9IiM4MEM0MkMiIGQ9Im0xNzUuNTQ1IDgwLjM4OS0xLjg3NS0uNDYuNzcxLTcuMTQ4aDcuNjY2djEuOTkyaC01LjcxMmwtLjM5MSAzLjQ4N2MuMjIxLS4xMy41MjctLjI1Ny45MTgtLjM4MWE0LjIyIDQuMjIgMCAwIDEgMS4zMzgtLjE5NWMuNjcgMCAxLjI2OS4xMSAxLjc5Ny4zMzIuNTMzLjIxNS45ODYuNTMgMS4zNTcuOTQ3LjM3MS40MS42NTQuOTExLjg1IDEuNTA0LjE5NS41ODYuMjkzIDEuMjQ2LjI5MyAxLjk4MmE1LjY5IDUuNjkgMCAwIDEtLjI5MyAxLjg0NiA0LjMwNiA0LjMwNiAwIDAgMS0uODYgMS41MTQgMy45NSAzLjk1IDAgMCAxLTEuNDU1IDEuMDI1Yy0uNTc5LjI0LTEuMjY2LjM2MS0yLjA2LjM2MWE1Ljc0NCA1Ljc0NCAwIDAgMS0xLjcwOS0uMjU0IDQuNjQyIDQuNjQyIDAgMCAxLTEuNDU1LS43NzEgMy45MzggMy45MzggMCAwIDEtMS4wMzYtMS4yN2MtLjI2LS41MDctLjQxLTEuMDktLjQ0OS0xLjc0OGgyLjMwNWMuMDU5LjQ2My4xODUuODU2LjM4MSAxLjE4Mi4yMDIuMzE5LjQ2OS41NjMuODAxLjczMi4zMzIuMTcuNzE2LjI1NCAxLjE1Mi4yNTQuMzk3IDAgLjczOS0uMDY4IDEuMDI1LS4yMDUuMjg3LS4xNDMuNTI0LS4zNDUuNzEzLS42MDVhMi43IDIuNyAwIDAgMCAuNDMtLjkzOCA0LjUxIDQuNTEgMCAwIDAgLjE0Ni0xLjE5MWMwLS40MTctLjA1NS0uNzk4LS4xNjYtMS4xNDNhMi40NzggMi40NzggMCAwIDAtLjQ3OC0uODk4IDIuMDUzIDIuMDUzIDAgMCAwLS43OTEtLjU4NiAyLjY3MiAyLjY3MiAwIDAgMC0xLjEwNC0uMjE1Yy0uNTYgMC0uOTg5LjA4MS0xLjI4OS4yNDRhNC4wNDMgNC4wNDMgMCAwIDAtLjgyLjYwNloiLz48L2c+PGRlZnM+PGZpbHRlciBpZD0iYSIgd2lkdGg9IjE5NiIgaGVpZ2h0PSI1MiIgeD0iMiIgeT0iNTQiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIj48ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPjxmZUdhdXNzaWFuQmx1ciBpbj0iQmFja2dyb3VuZEltYWdlRml4IiBzdGREZXZpYXRpb249IjMiLz48ZmVDb21wb3NpdGUgaW4yPSJTb3VyY2VBbHBoYSIgb3BlcmF0b3I9ImluIiByZXN1bHQ9ImVmZmVjdDFfYmFja2dyb3VuZEJsdXJfMTA0OV8zMjcxIi8+PGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iZWZmZWN0MV9iYWNrZ3JvdW5kQmx1cl8xMDQ5XzMyNzEiIHJlc3VsdD0ic2hhcGUiLz48L2ZpbHRlcj48L2RlZnM+PC9zdmc+", |
|||
"description": "Indicates the concentration of airborne allergens, including pollen and mold spores, which can trigger allergic reactions in sensitive individuals.", |
|||
"descriptor": { |
|||
"type": "latest", |
|||
"sizeX": 5, |
|||
"sizeY": 1, |
|||
"resources": [], |
|||
"templateHtml": "<tb-value-card-widget \n [ctx]=\"ctx\"\n [widgetTitlePanel]=\"widgetTitlePanel\">\n</tb-value-card-widget>", |
|||
"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: 'IAI_level', label: 'IAI', 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\":\"IAI\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.2392660816082064,\"funcBody\":\"var value = prevValue + Math.random() * 10 - 5;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 12) {\\n\\tvalue = 12;\\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\":\"mdi:flower-pollen\",\"iconColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":2,\"color\":\"#3FA71A\"},{\"from\":2,\"to\":6,\"color\":\"#80C32C\"},{\"from\":6,\"to\":9,\"color\":\"#F36900\"},{\"from\":9,\"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\":2,\"color\":\"#3FA71A\"},{\"from\":2,\"to\":6,\"color\":\"#80C32C\"},{\"from\":6,\"to\":9,\"color\":\"#F36900\"},{\"from\":9,\"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\":\"IAI\",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"units\":null,\"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": [ |
|||
"weather", |
|||
"environment", |
|||
"air", |
|||
"aqi", |
|||
"pollution", |
|||
"emission", |
|||
"smog" |
|||
] |
|||
} |
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue