smi
Published

Hand Tools Only: The Community Health Monitor

The solution provides a heatmap view of households displaying COVID-19 related self-assessments and objective measures of household members.

AdvancedFull instructions provided521
Hand Tools Only: The Community Health Monitor

Things used in this project

Hardware components

ESP WROOM 32 Dev Kit
×1
5 mm LED: Red
5 mm LED: Red
×7
5 mm LED: Green
5 mm LED: Green
×5
Male/Female Jumper Wires
Male/Female Jumper Wires
×29
Female/Female Jumper Wires
Female/Female Jumper Wires
×4
Ring Tongue Terminal, M4
Ring Tongue Terminal, M4
×4
Solid Single Core Copper Wire 24 AWG
×1
Banana Jack/Plug
×4
Thermistor 1 kOhm
×2
Resistor 330 ohm
Resistor 330 ohm
×14
Capacitor 10 nF
Capacitor 10 nF
×4
Aluminum Tape
×1
Copper Pins
×5
Heat Shrink Tubing (3mm)
×1
Breadboard (generic)
Breadboard (generic)
×2
Bolt M5 (6 cm long)
×4
Nut M5
×4
Wooden Stripes (2x1 cm) - 16 cm long
×4
Wooden Stripes (2x1 cm) - 25 cm long
×6

Software apps and online services

Arduino IDE
Arduino IDE
Thingsboard IoT Platform

Hand tools and fabrication machines

Crimp Tool, Heavy-Duty
Crimp Tool, Heavy-Duty
Wire Stripper & Cutter, 18-10 AWG / 0.75-4mm² Capacity Wires
Wire Stripper & Cutter, 18-10 AWG / 0.75-4mm² Capacity Wires
Hot glue gun (generic)
Hot glue gun (generic)
Utility Knife
Hand Saw
Drilling Machine
Drill (6mm)

Story

Read more

Custom parts and enclosures

Community Health Monitor Instructions

The instructions consists detailed information about the enclosure build, the set up of a AWS EC2 instance and some necessary steps before you can upload the dashboard on your ThingsBoard platform

Schematics

Community Health Monitor Schematic

Code

Community Health Monitor Arduino Code

Arduino
//The Code for uploading data to thingsboard is based on the following ressource
//https://thingsboard.io/docs/samples/esp32/gpio-control-pico-kit-dht22-sensor/

#include <WiFi.h>           // WiFi control for ESP32
#include <ThingsBoard.h>    // ThingsBoard SDK



// WiFi access point
#define WIFI_AP_NAME        "WIFI_AP_NAME" // Put in your WIFI name
// WiFi password
#define WIFI_PASSWORD       "WIFI_PASSWORD" // Put in your WIFI password

// See https://thingsboard.io/docs/getting-started-guides/helloworld/ 
// to understand how to obtain an access token
#define TOKEN               "VPS2jRtlzFDLz3RFGUN7" // Put in your Access token



// ThingsBoard server instance.
#define THINGSBOARD_SERVER  "ec2-3-121-239-3.eu-central-1.compute.amazonaws.com" // Put in the public DNS of your AWS EC2 instance



// Initialize ThingsBoard client
WiFiClient espClient;
// Initialize ThingsBoard instance
ThingsBoard tb(espClient);
// the Wifi radio's status
int status = WL_IDLE_STATUS;

// Array with LEDs that should be lit up one by one
uint8_t leds_cycling[] = { 15, 2, 4, 16, 17, 5, 18, 19, 21, 3, 22, 23 };
int current_cycle = 0;
int max_cycle = 5; // You can change the duration of the measurement phases by increasing/decreasing the number of cycles 


// Main application loop delay
int quant = 20;

// Initial period of LED cycling.
int led_delay = 2000;
// Period of sending data.
int send_delay = 500;

// Time passed after LED was turned ON, milliseconds.
int led_passed = 0;
// Time passed after temperature/humidity data was sent, milliseconds.
int send_passed = 0;


// LED number that is currenlty ON during data upload.
int current_led = -1;


//The code for reading resistive sensors is based on the following ressource
//https://www.arduino.cc/en/Tutorial/RCtime

// Variablen fr Average
float AverageTemperature = 0;
int MeasurementsToAverage = 10;

float Measurement_Nose = 0;
int sensorPin_nose = 25;
 
float Measurement_Finger = 0;
int sensorPin_finger = 26;              

long result = 0;


// The code for driving LEDs is based on the following ressource
//http://www.martyncurrey.com/switching-things-on-and-off-with-an-arduino/
//LEDs used: 15, 2, 4, 16, 17, 5, 18, 19, 21, 3, 22, 23

int Measure_Start = 0;
int Measure_Phase = 0;
int Symptom_Upload = 0;

float House_Latitude = 48.1477608;
float House_Longitude = 11.5731407;

int User1_LED = 15;
int User2_LED = 2;
int User3_LED = 4;
int User4_LED = 16;
int User_squenceLength = 4;

String User_Name = "";
String User_1 = "U1"; // Leave it as is. If you want to put in your own names, you should use short names because they will be uploaded.
String User_2 = "U2";
String User_3 = "U3";
String User_4 = "U4";

int S1_LED_y = 5; 
int S1_LED_n = 17; 
int S1_squenceLength = 2;
String S1_Name = "Cough"; //Put in the name for first symptom, e.g. cough
String S1_eval = "";

int S2_LED_y = 19;
int S2_LED_n = 18;
int S2_squenceLength = 2;
String S2_Name = "Fever"; //Put in the name for second symptom, e.g. fever
String S2_eval = "";

int S3_LED_y = 3;
int S3_LED_n = 21;
int S3_squenceLength = 2;
String S3_Name = "Fatigue"; //Put in the name for second symptom, e.g. fever
String S3_eval = "";

int M1_LED = 22;
int M2_LED = 23;

int M1_squenceLength = 3;
 
int User_Switch = 13;
int S1_Switch = 12;
int S2_Switch = 14;
int S3_Switch = 27;
int M1_Switch = 32;

 
// variables to hold the new and old switch states
boolean User_oldSwitchState = LOW;
boolean User_newSwitchState1 = LOW;
boolean User_newSwitchState2 = LOW;
boolean User_newSwitchState3 = LOW;

boolean S1_oldSwitchState = LOW;
boolean S1_newSwitchState1 = LOW;
boolean S1_newSwitchState2 = LOW;
boolean S1_newSwitchState3 = LOW;

boolean S2_oldSwitchState = LOW;
boolean S2_newSwitchState1 = LOW;
boolean S2_newSwitchState2 = LOW;
boolean S2_newSwitchState3 = LOW;

boolean S3_oldSwitchState = LOW;
boolean S3_newSwitchState1 = LOW;
boolean S3_newSwitchState2 = LOW;
boolean S3_newSwitchState3 = LOW;

boolean M1_oldSwitchState = LOW;
boolean M1_newSwitchState1 = LOW;
boolean M1_newSwitchState2 = LOW;
boolean M1_newSwitchState3 = LOW;

// variables for reading touch values. These will be used to sense if the touch panels are touched
float User_touchstate1 = 0;
float User_touchstate2 = 0;
float User_touchstate3 = 0;

float S1_touchstate1 = 0;
float S1_touchstate2 = 0;
float S1_touchstate3 = 0;

float S2_touchstate1 = 0;
float S2_touchstate2 = 0;
float S2_touchstate3 = 0;

float S3_touchstate1 = 0;
float S3_touchstate2 = 0;
float S3_touchstate3 = 0;

float M1_touchstate1 = 0;
float M1_touchstate2 = 0;
float M1_touchstate3 = 0;

// variables to keep track of led states
byte User_state = 0;
byte S1_state = 0;
byte S2_state = 0;
byte S3_state = 0;
byte M1_state = 0;

 
void setup() 
{
    Serial.begin(115200);

    WiFi.begin(WIFI_AP_NAME, WIFI_PASSWORD);
    InitWiFi();
     
    pinMode(User1_LED, OUTPUT ); digitalWrite(User1_LED, LOW);
    pinMode(User2_LED, OUTPUT ); digitalWrite(User2_LED, LOW);
    pinMode(User3_LED, OUTPUT ); digitalWrite(User3_LED, LOW);
    pinMode(User4_LED, OUTPUT ); digitalWrite(User4_LED, LOW);
    
    pinMode(S1_LED_y, OUTPUT ); digitalWrite(S1_LED_y, LOW);
    pinMode(S1_LED_n, OUTPUT ); digitalWrite(S1_LED_n, LOW);
    
    pinMode(S2_LED_y, OUTPUT ); digitalWrite(S2_LED_y, LOW);
    pinMode(S2_LED_n, OUTPUT ); digitalWrite(S2_LED_n, LOW);

    pinMode(S3_LED_y, OUTPUT ); digitalWrite(S3_LED_y, LOW);
    pinMode(S3_LED_n, OUTPUT ); digitalWrite(S3_LED_n, LOW);

    pinMode(M1_LED, OUTPUT ); digitalWrite(M1_LED, LOW);
    pinMode(M2_LED, OUTPUT ); digitalWrite(M2_LED, LOW);
    
    
    
    pinMode(User_Switch, INPUT); 
    pinMode(S1_Switch, INPUT); 
    pinMode(S2_Switch, INPUT); 
    pinMode(S3_Switch, INPUT); 
    pinMode(M1_Switch, INPUT);


}
 
void loop()
{
    
//Section to select user and tun on respective LED
    User_touchstate1 = touchRead(User_Switch);
    if (User_touchstate1<45){ 
      
      //If the value of the touch pins are lower the 45, it will be processed as a touched evet. 
      //You might adjust this value if you run into the problem that the touch switch is not detecting a touched event. 
      //You might have to adjust each touch switch separately.
      
      User_newSwitchState1 = HIGH;
    }
    else {
     User_newSwitchState1 = LOW; 
    }
      delay(1);
    
     
    User_touchstate2 = touchRead(User_Switch);
    if (User_touchstate2<45){
      User_newSwitchState2 = HIGH;
    }
    else {
     User_newSwitchState2 = LOW; 
    }
      delay(1);


     User_touchstate3 = touchRead(User_Switch);
    if (User_touchstate3<45){
      User_newSwitchState3 = HIGH;
    }
    else {
     User_newSwitchState3 = LOW; 
    }
      delay(1);

    //Serial.print(User_touchstate3); Serial.println(User_newSwitchState3);
 
    // if all 3 values are the same we can continue. This is done to prevent rebounding of the switch
    if (  (User_newSwitchState1==User_newSwitchState2) && (User_newSwitchState1==User_newSwitchState3) )
    {
        if ( User_newSwitchState1 != User_oldSwitchState ) 
        {
 
           // has the touch switch been touched?
           if ( User_newSwitchState1 == HIGH )
           {
 
                User_state++;
                if (User_state > (User_squenceLength) ) { User_state = 1; }
 
                // turn all LEDs off. Doing it this way means we do not need to care about the individual LEDs
                // simply turn them all off and then turn on the correct one. 
                digitalWrite(User1_LED, LOW);
                digitalWrite(User2_LED, LOW);
                digitalWrite(User3_LED, LOW);
                digitalWrite(User4_LED, LOW);
 
                // Turn on the next LED
                if (User_state==1) { digitalWrite(User1_LED, HIGH);  User_Name = User_1;}
                if (User_state==2) { digitalWrite(User2_LED, HIGH);  User_Name = User_2;}
                if (User_state==3) { digitalWrite(User3_LED, HIGH);  User_Name = User_3;}
                if (User_state==4) { digitalWrite(User4_LED, HIGH);  User_Name = User_4;}
           }
           User_oldSwitchState = User_newSwitchState1;
        }  
    }


//Section to select first symptom evaluation and tun on respective LED
    S1_touchstate1 = touchRead(S1_Switch);
    if (S1_touchstate1<45){
      S1_newSwitchState1 = HIGH;
    }
    else {
     S1_newSwitchState1 = LOW; 
    }
      delay(1);
    
     
    S1_touchstate2 = touchRead(S1_Switch);
    if (S1_touchstate2<45){
      S1_newSwitchState2 = HIGH;
    }
    else {
     S1_newSwitchState2 = LOW; 
    }
      delay(1);


     S1_touchstate3 = touchRead(S1_Switch);
    if (S1_touchstate3<45){
      S1_newSwitchState3 = HIGH;
    }
    else {
     S1_newSwitchState3 = LOW; 
    }
      delay(1);

    //Serial.print(S1_touchstate3); Serial.println(S1_newSwitchState3);
 
    // if all 3 values are the same we can continue
    if (  (S1_newSwitchState1==S1_newSwitchState2) && (S1_newSwitchState1==S1_newSwitchState3) )
    {
        if ( S1_newSwitchState1 != S1_oldSwitchState ) 
        {
 
           // has the touch switch been touched?
           if ( S1_newSwitchState1 == HIGH )
           {
 
                S1_state++;
                if (S1_state > (S1_squenceLength) ) { S1_state = 1; }
 
                // turn all LEDs off. Doing it this way means we do not need to care about the individual LEDs
                // simply turn them all off and then turn on the correct one. 
                digitalWrite(S1_LED_y, LOW);
                digitalWrite(S1_LED_n, LOW);
               
 
                // Turn on the next LED
                if (S1_state==1) { digitalWrite(S1_LED_n, HIGH);  S1_eval = "0";}
                if (S1_state==2) { digitalWrite(S1_LED_y, HIGH);  S1_eval = "1";}
               
           }
           S1_oldSwitchState = S1_newSwitchState1;
        }  
    }




//Section to select second symptom evaluation and tun on respective LED
    S2_touchstate1 = touchRead(S2_Switch);
    if (S2_touchstate1<45){
      S2_newSwitchState1 = HIGH;
    }
    else {
     S2_newSwitchState1 = LOW; 
    }
      delay(1);
    
     
    S2_touchstate2 = touchRead(S2_Switch);
    if (S2_touchstate2<45){
      S2_newSwitchState2 = HIGH;
    }
    else {
     S2_newSwitchState2 = LOW; 
    }
      delay(1);


     S2_touchstate3 = touchRead(S2_Switch);
    if (S2_touchstate3<45){
      S2_newSwitchState3 = HIGH;
    }
    else {
     S2_newSwitchState3 = LOW; 
    }
      delay(1);

    //Serial.print(S2_touchstate3); Serial.println(S2_newSwitchState3);
 
    // if all 3 values are the same we can continue
    if (  (S2_newSwitchState1==S2_newSwitchState2) && (S2_newSwitchState1==S2_newSwitchState3) )
    {
        if ( S2_newSwitchState1 != S2_oldSwitchState ) 
        {
 
           // has the touch switch been touched?
           if ( S2_newSwitchState1 == HIGH )
           {
 
                S2_state++;
                if (S2_state > (S2_squenceLength) ) { S2_state = 1; }
 
                // turn all LEDs off. Doing it this way means we do not need to care about the individual LEDs
                // simply turn them all off and then turn on the correct one. 
                digitalWrite(S2_LED_y, LOW);
                digitalWrite(S2_LED_n, LOW);
               
 
                // Turn on the next LED
                if (S2_state==1) { digitalWrite(S2_LED_n, HIGH);  S2_eval = "0";} //green
                if (S2_state==2) { digitalWrite(S2_LED_y, HIGH);  S2_eval = "1";} //red
               
           }
           S2_oldSwitchState = S2_newSwitchState1;
        }  
    }


//Section to select third symptom evaluation and tun on respective LED
    S3_touchstate1 = touchRead(S3_Switch);
    //Serial.println(S3_touchstate1);
    if (S3_touchstate1<45){
      S3_newSwitchState1 = HIGH;
    }
    else {
     S3_newSwitchState1 = LOW; 
    }
      delay(1);
    
     
    S3_touchstate2 = touchRead(S3_Switch);
    if (S3_touchstate2<45){
      S3_newSwitchState2 = HIGH;
    }
    else {
     S3_newSwitchState2 = LOW; 
    }
      delay(1);


     S3_touchstate3 = touchRead(S3_Switch);
    if (S3_touchstate3<45){
      S3_newSwitchState3 = HIGH;
    }
    else {
     S3_newSwitchState3 = LOW; 
    }
      delay(1);

    //Serial.print(S3_touchstate3); Serial.println(S3_newSwitchState3);
 
    // if all 3 values are the same we can continue
    if (  (S3_newSwitchState1==S3_newSwitchState2) && (S3_newSwitchState1==S3_newSwitchState3) )
    {
        if ( S3_newSwitchState1 != S3_oldSwitchState ) 
        {
 
           // has the touch switch been touched?
           if ( S3_newSwitchState1 == HIGH )
           {
 
                S3_state++;
                if (S3_state > (S3_squenceLength) ) { S3_state = 1; }
 
                // turn all LEDs off. Doing it this way means we do not need to care about the individual LEDs
                // simply turn them all off and then turn on the correct one. 
                digitalWrite(S3_LED_y, LOW);
                digitalWrite(S3_LED_n, LOW);
               
 
                // Turn on the next LED
                if (S3_state==1) { digitalWrite(S3_LED_n, HIGH);  S3_eval = "0";}
                if (S3_state==2) { digitalWrite(S3_LED_y, HIGH);  S3_eval = "1";}
               
           }
           S3_oldSwitchState = S3_newSwitchState1;
        }  
    }




//Section to start measurments
    M1_touchstate1 = touchRead(M1_Switch);
    //Serial.println(M1_touchstate1);
    if (M1_touchstate1<25){
      M1_newSwitchState1 = HIGH;
    }
    else {
     M1_newSwitchState1 = LOW; 
    }
      delay(1);
    
     
    M1_touchstate2 = touchRead(M1_Switch);
    if (M1_touchstate2<25){
      M1_newSwitchState2 = HIGH;
    }
    else {
     M1_newSwitchState2 = LOW; 
    }
      delay(1);


     M1_touchstate3 = touchRead(M1_Switch);
    if (M1_touchstate3<25){
      M1_newSwitchState3 = HIGH;
    }
    else {
     M1_newSwitchState3 = LOW; 
    }
      delay(1);

    //Serial.print(M1_touchstate3); Serial.println(M1_newSwitchState3);
 
    // if all 3 values are the same we can continue
    if (  (M1_newSwitchState1==M1_newSwitchState2) && (M1_newSwitchState1==M1_newSwitchState3) )
    {
        if ( M1_newSwitchState1 != M1_oldSwitchState ) 
        {
 
           // has the touch switch been touched?
           if ( M1_newSwitchState1 == HIGH )
           {
 
                M1_state++;
                if (M1_state > (M1_squenceLength) ) { M1_state = 1; }
 
                // turn all LEDs off. Doing it this way means we do not need to care about the individual LEDs
                // simply turn them all off and then turn on the correct one. 
                digitalWrite(User1_LED, LOW);
                digitalWrite(User2_LED, LOW);
                digitalWrite(User3_LED, LOW);
                digitalWrite(User4_LED, LOW);
                digitalWrite(S1_LED_y, LOW);
                digitalWrite(S1_LED_n, LOW);
                digitalWrite(S2_LED_y, LOW);
                digitalWrite(S2_LED_n, LOW);
                digitalWrite(S3_LED_y, LOW);
                digitalWrite(S3_LED_n, LOW);
                digitalWrite(M1_LED, LOW);
                digitalWrite(M2_LED, LOW);
                
                
               
               
 
                
                if (M1_state==1) {
                  if (Measure_Start == 0){
                    
                    //The first time you touch the touch switch to start the measurement, all LEDs will turn on and turn off after 2 second. 
                    //The first measurement phase starts.
                    // You have to touch the measurement touch switch again to start the next phase.
                    digitalWrite(User1_LED, HIGH);
                    digitalWrite(User2_LED, HIGH);
                    digitalWrite(User3_LED, HIGH);
                    digitalWrite(User4_LED, HIGH);
                    digitalWrite(S1_LED_y, HIGH);
                    digitalWrite(S1_LED_n, HIGH);
                    digitalWrite(S2_LED_y, HIGH);
                    digitalWrite(S2_LED_n, HIGH);
                    digitalWrite(S3_LED_y, HIGH);
                    digitalWrite(S3_LED_n, HIGH);
                    digitalWrite(M1_LED, HIGH);
                    digitalWrite(M2_LED, HIGH);
                    delay(2000);
                    digitalWrite(User1_LED, LOW);
                    digitalWrite(User2_LED, LOW);
                    digitalWrite(User3_LED, LOW);
                    digitalWrite(User4_LED, LOW);
                    digitalWrite(S1_LED_y, LOW);
                    digitalWrite(S1_LED_n, LOW);
                    digitalWrite(S2_LED_y, LOW);
                    digitalWrite(S2_LED_n, LOW);
                    digitalWrite(S3_LED_y, LOW);
                    digitalWrite(S3_LED_n, LOW);
                    digitalWrite(M1_LED, HIGH); // Only the first LED is permanently on.
                    digitalWrite(M2_LED, LOW);
                    Measure_Start = 1; //This variable turn on and off the measurement and uploading porcess. The LED cycle starts while the LED M1_LED is permanently on.
                  }

                  Measure_Phase = 1; // This variable sets the measurement phase. This is important when you upload the data to ThingsBoard IoT platform                       
                  
                  }
                
                
                
                if (M1_state==2) {

                  if (Measure_Start == 2){
                    
                    digitalWrite(User1_LED, LOW);
                    digitalWrite(User2_LED, LOW);
                    digitalWrite(User3_LED, LOW);
                    digitalWrite(User4_LED, LOW);
                    digitalWrite(S1_LED_y, LOW);
                    digitalWrite(S1_LED_n, LOW);
                    digitalWrite(S2_LED_y, LOW);
                    digitalWrite(S2_LED_n, LOW);
                    digitalWrite(S3_LED_y, LOW);
                    digitalWrite(S3_LED_n, LOW);
                    digitalWrite(M1_LED, LOW);
                    digitalWrite(M2_LED, HIGH); //The LED M2_LED is permanently on. 
                    delay(2000);
                    Measure_Start = 1;
                  }
                  
                  
                  Measure_Phase = 2;
                  
                  
                  }

                if (M1_state==3) {
                  if (Measure_Start == 2){
                    
                    digitalWrite(User1_LED, LOW);
                    digitalWrite(User2_LED, LOW);
                    digitalWrite(User3_LED, LOW);
                    digitalWrite(User4_LED, LOW);
                    digitalWrite(S1_LED_y, LOW);
                    digitalWrite(S1_LED_n, LOW);
                    digitalWrite(S2_LED_y, LOW);
                    digitalWrite(S2_LED_n, LOW);
                    digitalWrite(S3_LED_y, LOW);
                    digitalWrite(S3_LED_n, LOW);
                    digitalWrite(M1_LED, HIGH); // The LEDs M1_LED and M2_LED are permanently on.
                    digitalWrite(M2_LED, HIGH);
                    delay(2000);
                    Measure_Start = 1;
                  }
                  Measure_Phase = 3;
                }
               
           }
           M1_oldSwitchState = M1_newSwitchState1;
        }  
    }

    

    

   

    

    if (Measure_Start == 1){ // The measuremet and uploading process starts


      if (Measure_Phase == 1){
        digitalWrite(M1_LED, HIGH);
        
      }

      if (Measure_Phase == 2){
        digitalWrite(M2_LED, HIGH);
      }

      if (Measure_Phase == 3){
        digitalWrite(M1_LED, HIGH);
        digitalWrite(M2_LED, HIGH);
      }

      
      delay(quant);

      led_passed += quant;
      send_passed += quant;
    
      // Check if next LED should be lit up
      if (led_passed > led_delay) {
        // Turn off current LED
        digitalWrite(leds_cycling[current_led], LOW);
        led_passed = 0;
        current_led = current_led >= 11 ? 0 : (current_led + 1);
        // Turn on next LED in a row
        digitalWrite(leds_cycling[current_led], HIGH);
        if (current_led == 11){
          current_cycle++;
          if (current_cycle == max_cycle && Measure_Phase <3){
            
            //The measurement takes a few minutes (depending on the number you set in the max_cycle variable) in each phase. When one phase is completed, all LEDs are turned on.
            // You have to touch the measurement touch switch again to start the next phase.
            
            digitalWrite(User1_LED, HIGH);
            digitalWrite(User2_LED, HIGH);
            digitalWrite(User3_LED, HIGH);
            digitalWrite(User4_LED, HIGH);
            digitalWrite(S1_LED_y, HIGH);
            digitalWrite(S1_LED_n, HIGH);
            digitalWrite(S2_LED_y, HIGH);
            digitalWrite(S2_LED_n, HIGH);
            digitalWrite(S3_LED_y, HIGH);
            digitalWrite(S3_LED_n, HIGH);
            digitalWrite(M1_LED, HIGH);
            digitalWrite(M2_LED, HIGH);
            current_cycle = 0;
            Measure_Start = 2; 
                               
          
          
          } else if (current_cycle == max_cycle && Measure_Phase == 3){

            // After the last measruement phase is completed, all LEDs are turned off. Another user can then use the device.
            Measure_Start = 0; 
            digitalWrite(User1_LED, HIGH);
            digitalWrite(User2_LED, HIGH);
            digitalWrite(User3_LED, HIGH);
            digitalWrite(User4_LED, HIGH);
            digitalWrite(S1_LED_y, HIGH);
            digitalWrite(S1_LED_n, HIGH);
            digitalWrite(S2_LED_y, HIGH);
            digitalWrite(S2_LED_n, HIGH);
            digitalWrite(S3_LED_y, HIGH);
            digitalWrite(S3_LED_n, HIGH);
            digitalWrite(M1_LED, HIGH);
            digitalWrite(M2_LED, HIGH);
            delay(5000);
            digitalWrite(User1_LED, LOW);
            digitalWrite(User2_LED, LOW);
            digitalWrite(User3_LED, LOW);
            digitalWrite(User4_LED, LOW);
            digitalWrite(S1_LED_y, LOW);
            digitalWrite(S1_LED_n, LOW);
            digitalWrite(S2_LED_y, LOW);
            digitalWrite(S2_LED_n, LOW);
            digitalWrite(S3_LED_y, LOW);
            digitalWrite(S3_LED_n, LOW); 
            digitalWrite(M1_LED, LOW);
            digitalWrite(M2_LED, LOW);
     
          }
        }

        //Serial.println(Measure_Start);
        //Serial.println(Measure_Phase);

    
      }
      
    
      // Reconnect to WiFi, if needed
      if (WiFi.status() != WL_CONNECTED) {
        reconnect();
        return;
      }
    
      // Reconnect to ThingsBoard, if needed
      if (!tb.connected()) {
        
    
        // Connect to the ThingsBoard
        Serial.print("Connecting to: ");
        Serial.print(THINGSBOARD_SERVER);
        Serial.print(" with token ");
        Serial.println(TOKEN);
        if (!tb.connect(THINGSBOARD_SERVER, TOKEN)) {
          Serial.println("Failed to connect");
          return;
        }
      }
    
     
    
    
      // Check if it is a time to send sensor data
      if (send_passed > send_delay) {
        //Read data from sensors 

        for(int i = 0; i < MeasurementsToAverage; ++i)
          {
            Measurement_Finger += RCtime(sensorPin_finger); 
            Measurement_Nose += RCtime(sensorPin_nose); 
            delay(1);
          }
        Measurement_Finger /= MeasurementsToAverage;
        Measurement_Nose /= MeasurementsToAverage;
        
        //Thingsboard accepts data in the key:value format. The SDK transforms the input to a json payload.
        //In order to concatenating a key, we can concatenate a string and transform it then to a char.  
        //If you get errors with char length, then maybe your user names are too long. Just increase the char length.       
        if (Symptom_Upload == 0){ //Send symptom data only once 
            
            String payload_KEY_S1 = User_Name +"_"+ S1_Name;
            char KEY_S1[25];
            payload_KEY_S1.toCharArray( KEY_S1, 25 );

            String payload_VALUE_S1 = S1_eval;
            char VALUE_S1[5];
            payload_VALUE_S1.toCharArray( VALUE_S1, 5 );
            
            tb.sendAttributeString(KEY_S1, VALUE_S1);


            String payload_KEY_S2 = User_Name +"_"+ S2_Name;
            char KEY_S2[25];
            payload_KEY_S2.toCharArray( KEY_S2, 25 );

            String payload_VALUE_S2 = S2_eval;
            char VALUE_S2[5];
            payload_VALUE_S2.toCharArray( VALUE_S2, 5 );
            
            tb.sendAttributeString(KEY_S2, VALUE_S2);


            String payload_KEY_S3 = User_Name +"_"+ S3_Name;
            char KEY_S3[25];
            payload_KEY_S3.toCharArray( KEY_S3, 25 );

            String payload_VALUE_S3 = S3_eval;
            char VALUE_S3[5];
            payload_VALUE_S3.toCharArray( VALUE_S3, 5 );
            
            tb.sendAttributeString(KEY_S3, VALUE_S3);
            
            tb.sendAttributeFloat("latitude", House_Latitude );
            tb.sendAttributeFloat("longitude", House_Longitude );
            
            Symptom_Upload = 1;

            Serial.print(KEY_S1); Serial.print("_"); Serial.println(VALUE_S1);
            Serial.print(KEY_S2); Serial.print("_"); Serial.println(VALUE_S2);
            Serial.print(KEY_S3); Serial.print("_"); Serial.println(VALUE_S3);

          
          
            
          }

           
          String payload_finger = User_Name + "_Finger";
          char KEY_Finger[10];
          payload_finger.toCharArray( KEY_Finger, 10 );

          String payload_nose = User_Name + "_Nose";
          char KEY_Nose[10];
          payload_nose.toCharArray( KEY_Nose, 10 );


          String payload_phase = User_Name + "_Phase";
          char KEY_Phase[10];
          payload_phase.toCharArray( KEY_Phase, 10 ); 
          


          tb.sendTelemetryFloat(KEY_Nose, Measurement_Nose);
          tb.sendTelemetryFloat(KEY_Finger, Measurement_Finger);
          tb.sendTelemetryInt(KEY_Phase, Measure_Phase);

               

          Serial.print(User_Name + "_Finger: "); Serial.println(Measurement_Finger);
          Serial.print(User_Name + "_Nose: "); Serial.println(Measurement_Nose); 
          Serial.print(User_Name + "_Phase: "); Serial.println(Measure_Phase); 

          
       
    
        send_passed = 0;
      }

      
      
  }

    

}



void InitWiFi()
{
  Serial.println("Connecting to AP ...");
  // attempt to connect to WiFi network

  WiFi.begin(WIFI_AP_NAME, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("Connected to AP");
}

void reconnect() {
  // Loop until we're reconnected
  status = WiFi.status();
  if ( status != WL_CONNECTED) {
    WiFi.begin(WIFI_AP_NAME, WIFI_PASSWORD);
    while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
    }
    Serial.println("Connected to AP");
  }
}




long RCtime(int sensPin){
   long result = 0;
   pinMode(sensPin, OUTPUT);       // make pin OUTPUT
   digitalWrite(sensPin, HIGH);    // make pin HIGH to discharge capacitor - study the schematic
   delay(1);                       // wait a  ms to make sure cap is discharged

   pinMode(sensPin, INPUT);        // turn pin into an input and time till pin goes low
   digitalWrite(sensPin, LOW);     // turn pullups off - or it won't work
   while(digitalRead(sensPin)){    // wait for pin to go low
      result++;
   }

   return result;                   // report results  
}

Community Health Monitor ThingsBoard Dashboard

JSON
{
  "title": "Health_Monitor",
  "configuration": {
    "widgets": {
      "03fc7acd-a282-c549-1c0f-c846209aa04c": {
        "isSystemType": true,
        "bundleAlias": "maps_v2",
        "typeAlias": "openstreetmap",
        "type": "latest",
        "title": "New widget",
        "sizeX": 16,
        "sizeY": 9,
        "config": {
          "datasources": [
            {
              "type": "entity",
              "dataKeys": [
                {
                  "name": "U1_Cough",
                  "type": "attribute",
                  "label": "U1_Cough",
                  "color": "#f44336",
                  "settings": {},
                  "_hash": 0.9483047289752751
                },
                {
                  "name": "latitude",
                  "type": "attribute",
                  "label": "latitude",
                  "color": "#4caf50",
                  "settings": {},
                  "_hash": 0.6336059629177917
                },
                {
                  "name": "longitude",
                  "type": "attribute",
                  "label": "longitude",
                  "color": "#f44336",
                  "settings": {},
                  "_hash": 0.26130980460545916
                },
                {
                  "name": "U1_Fever",
                  "type": "attribute",
                  "label": "U1_Fever",
                  "color": "#ffc107",
                  "settings": {},
                  "_hash": 0.7883786482037389
                },
                {
                  "name": "U1_Fatigue",
                  "type": "attribute",
                  "label": "U1_Fatigue",
                  "color": "#607d8b",
                  "settings": {},
                  "_hash": 0.4548511186595847
                },
                {
                  "name": "U2_Fever",
                  "type": "attribute",
                  "label": "U2_Fever",
                  "color": "#8bc34a",
                  "settings": {},
                  "_hash": 0.3726623945015146
                },
                {
                  "name": "U2_Fatigue",
                  "type": "attribute",
                  "label": "U2_Fatigue",
                  "color": "#3f51b5",
                  "settings": {},
                  "_hash": 0.7234108375227497
                },
                {
                  "name": "U3_Cough",
                  "type": "attribute",
                  "label": "U3_Cough",
                  "color": "#e91e63",
                  "settings": {},
                  "_hash": 0.9265306049034161
                },
                {
                  "name": "U3_Fever",
                  "type": "attribute",
                  "label": "U3_Fever",
                  "color": "#ffeb3b",
                  "settings": {},
                  "_hash": 0.10952738301734644
                },
                {
                  "name": "U3_Fatigue",
                  "type": "attribute",
                  "label": "U3_Fatigue",
                  "color": "#03a9f4",
                  "settings": {},
                  "_hash": 0.9292721882744681
                },
                {
                  "name": "U4_Cough",
                  "type": "attribute",
                  "label": "U4_Cough",
                  "color": "#ff9800",
                  "settings": {},
                  "_hash": 0.44640189579906586
                },
                {
                  "name": "U4_Fever",
                  "type": "attribute",
                  "label": "U4_Fever",
                  "color": "#673ab7",
                  "settings": {},
                  "_hash": 0.3910911063383722
                },
                {
                  "name": "U4_Fatigue",
                  "type": "attribute",
                  "label": "U4_Fatigue",
                  "color": "#cddc39",
                  "settings": {},
                  "_hash": 0.7629474201410205
                },
                {
                  "name": "U2_Cough",
                  "type": "attribute",
                  "label": "U2_Cough",
                  "color": "#cddc39",
                  "settings": {},
                  "_hash": 0.5605604798221353
                }
              ],
              "entityAliasId": "65ec6bdc-4dd8-5874-c7a0-fd5ea96dbe93"
            }
          ],
          "timewindow": {
            "realtime": {
              "timewindowMs": 60000
            }
          },
          "showTitle": true,
          "backgroundColor": "rgb(238, 238, 238)",
          "color": "rgba(0, 0, 0, 0.87)",
          "padding": "8px",
          "settings": {
            "fitMapBounds": true,
            "latKeyName": "latitude",
            "lngKeyName": "longitude",
            "showLabel": false,
            "label": "${entityName}",
            "tooltipPattern": "<b>Latitude:</b> ${latitude:7}<br/><b>Longitude:</b> ${longitude:7}<br/>",
            "markerImageSize": 75,
            "useColorFunction": false,
            "markerImages": [
              "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPkAAAD5CAMAAAGlllM0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAIiUExURQAAAAAAAAAAAACAgACqVQC/QAC2SQCiRgCqVQCxTgC7VQAAAAC0SwC4VQCuUQCzTQC2VQCqSgCtUgCxTgCzVQCzTQCzVQAAAACvUACyTQCvUACxTgCsUwCzUwCuUQCxTgC0UQCwTwCuUQCxTgCxUwCzUQAAAACsTgCtUgCzUgCvUACxTgCyUgCvUACzUACwTwCxTgCuUQCxUgAAAACvUACxTgCvUACwTwCuUQCwTwCuTgCwTwCxTgAAAACwTwCuUQCxUQCwTwCxUQCvUACwTwAAAACwTwCvUACwTwCxUQCvUACwTwCxUACwTwCwTwCwUQCvUACyUACwTwCwUQAAAACvUACuUQCwTwCuUQCxUQCvUACxUACwTwCwUQCxUACwUQCwUQAAAACwTwCxUACxUACwUQCvUACwTwCwUQCwTwCwUQCvUACvUACwTwAAAACvUACwUQCvUACwUACwUQCwTwCwUQAAAACwUACwUACxUACwTwCwUACvUACwUACxUACwUACxUACwUQAAAACwUACwUACxUACwUACxUACwTwCvUACwUACwUAAAAACwUACvUACxUACwTwCwUACvUACvUACvUAAAAACxUACwTwCwUQCwUACwUACvUACwUACwUACxUAAAAACwUACwUACwUACwTwCxUQCwUACwUACvUACwUACwUAAAAACwUACwUACwUACwUACwUACwUACwTwCwUACwUAAAAACwUPM/HAQAAAC0dFJOUwABAgIDBAcLDA0PEBESExQVGBkaGx4eICAhIyQlJSYnKSosLi4vMDEyMjM0NTY2Nzs8PkBAQUNERUdITU5QUVJSVFhZWmBhY2RlZmdpamtrbG1ubnBwcnR1dXZ2d3h5e36AgYKDhYaHiIqLjI2Oj5CRk5WYmpufoqWmp6ipqqqsra6vr7Kztba3ubm7v7/AwMTIycrMz9DR0dPY2tvc3d/i5ebn5+jr7Ozt7+/x8vP09vf5/jfWgXIAAAAJcEhZcwAAFxEAABcRAcom8z8AABV0SURBVHhe5Z2JvxW1FcdvXcGn4oa41qX6rAtqBVxal7pQRdzBraUVl7bWIopWcMOFotha3CquKKLFBdxh/r8m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",
              "data:image/png;base64,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",
              "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAB/CAYAAAD4mHJdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACWAAAAlgB7MGOJQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAyUSURBVGiB7Zp7kFRVesB/5/S9PdMz/ZoHMwo4MICDuoGVIYICIuzGcn0vC+oWGuNjs8mua9ySP4wpgyaiVVupbHYTsLJmNT7WNXExwqqzrq8g4oNxdXUgyEMQARmZd3fPTE/3vfd8+ePenhlgBsFlrFSqb9Wpvn3vd77f+b7zne87ffsqjv+wE4nYDQqWl5aWfDUcLqkAyOUHunID+Q8EnkilMo8C7gnoPPaRTCYnVyQT71+1bKl80PK+HGw9KPv27ZPde3bLjp075NVXX5FLL7lYKpLx9yoqKuqOR6f6PIFYLFZtW7r54YcfqV+4aBEdHe3ywm+e39eb6etzPZfS0kj5woUX1EUipWrj6xtZedddu11P5mYymc5j6Q19HrgsUrL67r/7+8VLly7j8cce3d3X29vZ0DB9yplnfWXcrFmzxjU2NiaBXevWrUsv/trXKmzbqnz/9+9VDuTyz35hi2OxWHV1ZbJ1245d1ltvvpFtb293Kyoq7LKystKysnLKy8soKyujtDTCxx/vSW3fsT3c0NAQWbpkiZvp7a9Np9Ndo+nWxwJrLYvmzV9gAaxbt/75urrxd592Wp0Oh0tWHSkbiUQSv3unuQlgxoyZltZm0TF1H+umUnrC1KlTAaipqUpESmMzFIRjsVj3SPJTpkyJA0ycOBGMnviFwSISLolEAAiHbftYsgAlJREbwA6HESUlXxg8lkcRXAQXwUVwEVwEF8FFcBH8/xhsnZC0ksw49eQPI5mmNtP54ccAIvqgqbz4aYn8zYoTUXXcFnueyZ8eXtleZt75iQnpU0VUvYiqB5mvu5p+XH9w8RtgnJMOLut/7rd4+fpRBcS52hz65csnHdxQ8clZnyuT3NV40sHRUnfq58mUWFJ70sEn+yiCi+AiuAgugovgIrgILoKL4CK4CC6Ci+D/Q+Djf/higk8Jzs0IMjIGYDGAp0AUeBbiHf3Xs/HGAHyYlYaRX0EYC4txNeIFugvWHyXzua8cnDjYGMBoQIFhRFfLmLjaCxqAw8iuHing/nCwGlLuMrKrveNfnccPFnyLtQ8c0a1jElye8sGFAYwUSCN54Q8GB4ljKKpHkBmLOZbB4FLgjhLVYxNcDFnkMXJUj03m0kOKR0sgYzLHRvlwpcDYI7oaGYvl5HB4ZRrJ1cf9fP5E/5NwQUKM7uoTOI4/ql38kmgUOCMnEHMCL819sag2jJJAxgIs+HNY6PGlpUxXDQWXw5dXjxH8SFZBPf7SyqKrMQLKG7b/OkpmTBJI0BSjbwTGYo6Ni5+ZjMJDj1wkxmQ5iV+VsBh9BzImKbNQFhWjp8wx21c7dKIV9A94IxaJsdplZt9574JQVcUdpr3rzlEHdzLASslpg19EofLMMa3dc0Z9c9YMXT+s7/GCo9FojWWph87+6tmX3XTTzT7XA/F4xutXr4fyOuQZVQUQ0tLphY1nlcn5YqgAuOyyy3inefOtH+36aLJr5Obe3t72o4w68kIsFptuW7pp5d33TPne928hm83yLz+6b9PVb/4niRK9QNfUoquqUaUREEEG+jGd7Zi2Dnpy3qYHGr7OFdcsX2BZFs899ywP/fznu11PLslkMjtHBScSiXrL0m+uXr3mlEWLFrN58+auxD+u2HZWhb0gcvkyShZ/Ax2N+70KPcVvJpMm999NZJ99mi1dzsb3rviLGbNmz6rY0rKFVavubTWG83p6ej4psAbfr66trS03xtlw98p76s+bN5+nnvzFtouevK/s1AnJM+I/vB37j6aDziJeCtxhzUkhTgoYwJpchz3zbJI7fj/pzA829f6iR/bPPW9e9aS6utjbb715YWVl1SOZTMY5DGzb6scXf+OSS6+48kqanntu55+99shkOyLx8uuvIjSuDEzq6Ob5TdzgPJ9GhT2sCbV4W1vK57R+FP9lOrT33PnzKjOZTM2OD7dFB3L5FwaDq6KifGYiXvn95ddey4fbtmWv2fhIiVUqpbpMEao2SH4fiKCMgAbRggSuVkKwEQz22q4iVKtQEYUtJvzdlvX6+bq67PJrr41sbm6+VVv8W1dX7/9oADH6b//0+us1QO/jD6xPhGWSCgsqLJj8PsTdjzj7Ma7fxDkAzn5wjry+H3H2YfL7UGGDCguJEqnPPf3YOoDrrrtOe56+C8CKRqPjotHoN+fMmcObb7zRelsk9W1lC4QFCRlM9yfoKnsoEgOLVWCxDLfYBRwwnXmwDIQVyoMbo6lrfrq5+dCsxsbaaHlkqTFSpUMhvjV79mwLwHvjldewBGxQlqBswXn3Y6T/EDhtiNOGuG2I2444QXPb/WtOGzhtmL7PcN7di7IFFegiJDq3+ZVXAWbMmGlrzRJLKc6/4IJFGGO4MdQ+gxAQEn/2LcH0u+Sa27HO0IRq/V+MSqnBOUZARMAD75DB2w4mq8AKWkggpPiOtJ3dYgznzTuPt996+3xLoc8+vaGBlpaWzFybrygtqCPgeODtcTFtBl1hUBHfGgl+wNGv8FIayWjE6KCfD1UhBVqotPWZO3Zs7506dVpUaT1Lh21rPED7oUNtKH8OUYLSoHTwWRiEAsmBDIA4gCPIAJh8YL3lyw7vi5JAJ7QdamvXWmPbofGW0qEYQL4/0zeYjdTRTQ0Oxp9/Svx9jvKAkBocsCh1dP9AZ76vNwOglI5bnuflAaukPBo9bM8UpMIjvxeiWAUbATHK3/yNJM/h30vKozEAz/Ny2nXddoCKyqrKwc5GDYFMUJmM8peLqyCvkH6FZP1zXP+eGBXIFvQcrquyqroyALdrxGzv7u5i6rTTE3lX0gUL/DIYPPfwFDh+k5xCBhSS1Ui/9s9zQ/cLz0rEGxqEGMWAK92T6yfHu7q6MCLbtSj1UtPzTcTjcfW0E3t5EBSkv0FgPgAMQgtWa/9azpcZHICrhvR48B+52CvRaFS9/PJLKKVe1Mao9e+++zsAtk9rnIwbLBFHIQ5IACWvkJxGBjSSDeDZ4HxAIznty+SV38chGIA/PXumzZoK0PJBCyLq1zqdTn/U2dHxbmtrKxddfmXj1r7QRr9jMH/5Ye4d8OdV+odZ3F+AqyG3F/oFelr62PQnl14667PWVrq6ut5JpVJ7giLBygfWrMYOh3ll/pLx4iojR7p3QMGgpQX4kPUE8OFuF0chrjIvzL78VDsc5sEHH0SLWkmQLuhOp5v27t376tatW7nk8iun/UN8VhM5BblASS5w53BowdXD4L7Lg8EG7Z6SM36z+MILp25p2cqBA/s3dKXTLxRSBeDvtUpL7M0PPfRwYtLken791z9Y++fevmWE/WJBIelbgJbDtz4mePblBksrcPU/ubVrF65Yuayzs50Vt6/ozuXduel0etdhYIB4PH5RVWXy+WeeWR8aV1PDz+6/56W//PDFxbpELGULgwVEcwSYoWXkKExOuatqGl9b8p3vfb2vt5/b/uoWtyfVe0kqlXqpwDpql1lVlbwhUhr52VNPrQ3PPuccNm16PbXrR3f+9pvm0NV+pWEwhQKIqKHnm57iV9nydc6Smxc1zm5MHvj0AHfecUeuv7f/u509PY8N5wyCReRcYCEw6YknHi9bcfvtl9276r7qG2+6Gdd12bhhQ/rghhe3TdmywT4l2zkhEeIUgJTLZ62RygPbT5/rlv/xvLOmnzE9ns/lWb9uPY8++u9tP/3JPzd9e/nyLLAXeE0ptRlAicgk4BZgfDAGc/DgQb1790fWrT+45Zz58xdMue+++0kkk/5N8RO2iPiZ0BiMCMbz8FyXzq4u7l91L5ub3969Zs2/Np/eMM2rrT21YKQBPgPWKBFZAyQA093drTzPobu7uyPV3XNbR2enam5uZu3atdTW1LDsqqtYeMEipk2b5m8GANd12bVzJ69vfI2n1/6Kjo5OvrVsKefOPZeqqkpJJCtXJ5OJinBpRJLxeOF3bI8FZIAYoEN2SHmeJ6GQ2CiMUipUP2UK199wI59+2sp/rVvP6tVryKRTOE4eAcJ2mFg8wfgJE5nZeA4TJ4yntmYcSimUUsaydMi2wxIKKTXM6n4lIuMCV08m2O52dHSQzfbpvkxvZSqTbkinUnWpVDqUzvTS29dHNpvFcfy6aNsWkUgp0fJyYrEYiUTcSybin8RjiZ2lZeXd0WjUra6uDg2L/z3A6uHBNQNYAEwHqvAXTTl4Kp3O9HhOvk+FGMhmHXHdHGLEE8CytNY6rCKRsPY8VRoOh8tisfIkhFxgIAB2AtuA15VS20ZcTsEgEsBM4DTgFKASiAClQAnBig7EC8/8BoAc0AekgE+B/cAWpVTqSMb/AlY1WXIncMcxAAAAAElFTkSuQmCC",
              "data:image/png;base64,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"
            ],
            "useMarkerImageFunction": true,
            "colorFunction": "var type = dsData[dsIndex]['type'];\nif (type == 'colorpin') {\n\tvar temperature = dsData[dsIndex]['temperature'];\n\tif (typeof temperature !== undefined) {\n\t    var percent = (temperature + 60)/120 * 100;\n\t    return tinycolor.mix('blue', 'red', amount = percent).toHexString();\n\t}\n\treturn 'blue';\n}\n",
            "color": "#fe7569",
            "mapProvider": "OpenStreetMap.Mapnik",
            "showTooltip": true,
            "autocloseTooltip": true,
            "tooltipFunction": "var deviceType = dsData[dsIndex]['deviceType'];\r\nif (typeof deviceType !== undefined) {\r\n    if (deviceType == \"energy meter\") {\r\n        return '<b>${entityName}</b><br/><b>Energy:</b> ${energy:2} kWt<br/>';\r\n    } else if (deviceType == \"thermometer\") {\r\n        return '<b>${entityName}</b><br/><b>Temperature:</b> ${temperature:2} C<br/>';\r\n    }\r\n}",
            "labelFunction": "var deviceType = dsData[dsIndex]['deviceType'];\r\nif (typeof deviceType !== undefined) {\r\n    if (deviceType == \"energy meter\") {\r\n        return '<span style=\"color:orange;\">${entityName}, ${energy:2} kWt</span>';\r\n    } else if (deviceType == \"thermometer\") {\r\n        return '<span style=\"color:blue;\">${entityName}, ${temperature:2} C</span>';\r\n    }\r\n}",
            "customProviderTileUrl": "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
            "defaultCenterPosition": [
              0,
              0
            ],
            "showTooltipAction": "click",
            "polygonKeyName": "coordinates",
            "polygonOpacity": 0.5,
            "polygonStrokeOpacity": 1,
            "polygonStrokeWeight": 1,
            "zoomOnClick": true,
            "showCoverageOnHover": true,
            "animate": true,
            "maxClusterRadius": 80,
            "removeOutsideVisibleBounds": true,
            "markerImage": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPkAAAD5CAMAAAGlllM0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAIiUExURQAAAAAAAAAAAACAgACqVQC/QAC2SQCiRgCqVQCxTgC7VQAAAAC0SwC4VQCuUQCzTQC2VQCqSgCtUgCxTgCzVQCzTQCzVQAAAACvUACyTQCvUACxTgCsUwCzUwCuUQCxTgC0UQCwTwCuUQCxTgCxUwCzUQAAAACsTgCtUgCzUgCvUACxTgCyUgCvUACzUACwTwCxTgCuUQCxUgAAAACvUACxTgCvUACwTwCuUQCwTwCuTgCwTwCxTgAAAACwTwCuUQCxUQCwTwCxUQCvUACwTwAAAACwTwCvUACwTwCxUQCvUACwTwCxUACwTwCwTwCwUQCvUACyUACwTwCwUQAAAACvUACuUQCwTwCuUQCxUQCvUACxUACwTwCwUQCxUACwUQCwUQAAAACwTwCxUACxUACwUQCvUACwTwCwUQCwTwCwUQCvUACvUACwTwAAAACvUACwUQCvUACwUACwUQCwTwCwUQAAAACwUACwUACxUACwTwCwUACvUACwUACxUACwUACxUACwUQAAAACwUACwUACxUACwUACxUACwTwCvUACwUACwUAAAAACwUACvUACxUACwTwCwUACvUACvUACvUAAAAACxUACwTwCwUQCwUACwUACvUACwUACwUACxUAAAAACwUACwUACwUACwTwCxUQCwUACwUACvUACwUACwUAAAAACwUACwUACwUACwUACwUACwUACwTwCwUACwUAAAAACwUPM/HAQAAAC0dFJOUwABAgIDBAcLDA0PEBESExQVGBkaGx4eICAhIyQlJSYnKSosLi4vMDEyMjM0NTY2Nzs8PkBAQUNERUdITU5QUVJSVFhZWmBhY2RlZmdpamtrbG1ubnBwcnR1dXZ2d3h5e36AgYKDhYaHiIqLjI2Oj5CRk5WYmpufoqWmp6ipqqqsra6vr7Kztba3ubm7v7/AwMTIycrMz9DR0dPY2tvc3d/i5ebn5+jr7Ozt7+/x8vP09vf5/jfWgXIAAAAJcEhZcwAAFxEAABcRAcom8z8AABV0SURBVHhe5Z2JvxW1FcdvXcGn4oa41qX6rAtqBVxal7pQRdzBraUVl7bWIopWcMOFotha3CquKKLFBdxh/r8m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",
            "useDefaultCenterPosition": false,
            "markerImageFunction": "var u1_cough = dsData[dsIndex]['U1_Cough'];\nvar u1_fever = dsData[dsIndex]['U1_Fever'];\nvar u1_fatigue = dsData[dsIndex]['U1_Fatigue'];\nvar u1 = u1_cough + u1_fever + u1_fatigue;\n\nvar u2_cough = dsData[dsIndex]['U2_Cough'];\nvar u2_fever = dsData[dsIndex]['U2_Fever'];\nvar u2_fatigue = dsData[dsIndex]['U2_Fatigue'];\nvar u2 = u2_cough + u2_fever + u2_fatigue;\n\nvar u3_cough = dsData[dsIndex]['U3_Cough'];\nvar u3_fever = dsData[dsIndex]['U3_Fever'];\nvar u3_fatigue = dsData[dsIndex]['U3_Fatigue'];\nvar u3 = u3_cough + u3_fever + u3_fatigue;\n\nvar u4_cough = dsData[dsIndex]['U4_Cough'];\nvar u4_fever = dsData[dsIndex]['U4_Fever'];\nvar u4_fatigue = dsData[dsIndex]['U4_Fatigue'];\nvar u4 = u4_cough + u4_fever + u4_fatigue;\n\n\nvar res = {\n    size: 75\n};\n\n\n    if (u1>2 || u2>2 || u3>2 || u4>2 ) {\n        res.url = images[1];\n        res.size = 75;\n\n    } else {\n     res.url = images[0];\n     res.size = 75;\n    }\n    \n\nreturn res;"
          },
          "title": "Houses in District 1",
          "dropShadow": false,
          "enableFullscreen": false,
          "titleStyle": {
            "fontSize": "16px",
            "fontWeight": 400
          },
          "useDashboardTimewindow": true,
          "showLegend": false,
          "widgetStyle": {},
          "actions": {
            "tooltipAction": [
              {
                "id": "6886ee99-bbf0-1e98-3ede-2c998990910a",
                "name": "house_details",
                "icon": "more_horiz",
                "type": "openDashboardState",
                "targetDashboardStateId": "house_state",
                "setEntityId": true
              }
            ]
          },
          "showTitleIcon": false,
          "titleIcon": null,
          "iconColor": "rgba(0, 0, 0, 0.87)",
          "iconSize": "24px",
          "titleTooltip": "",
          "displayTimewindow": true
        },
        "id": "03fc7acd-a282-c549-1c0f-c846209aa04c"
      },
      "408b3c79-6666-2f1f-f0be-ebbb17e140f6": {
        "isSystemType": true,
        "bundleAlias": "cards",
        "typeAlias": "html_card",
        "type": "static",
        "title": "New widget",
        "sizeX": 5,
        "sizeY": 2,
        "config": {
          "datasources": [],
          "timewindow": {
            "realtime": {
              "timewindowMs": 60000
            }
          },
          "showTitle": false,
          "backgroundColor": "rgb(238, 238, 238)",
          "color": "rgb(0, 0, 0)",
          "padding": "8px",
          "settings": {
            "cardHtml": "<div class='card'>User 1</div>",
            "cardCss": ".card {\n    font-weight: bold;\n    font-size: 32px;\n    color: #10000;\n    width: 100%;\n    height: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}"
          },
          "title": "New HTML Card",
          "dropShadow": false,
          "showTitleIcon": false,
          "titleIcon": null,
          "iconColor": "rgb(0, 0, 0)",
          "iconSize": "24px",
          "titleTooltip": "",
          "enableFullscreen": false,
          "widgetStyle": {},
          "titleStyle": {
            "fontSize": "16px",
            "fontWeight": 400
          },
          "useDashboardTimewindow": true,
          "displayTimewindow": true,
          "showLegend": false,
          "actions": {
            "elementClick": [],
            "headerButton": [
              {
                "id": "004b004e-4e0d-a10b-4573-21edc42d818f",
                "name": "user_click",
                "icon": "insert_chart",
                "type": "openDashboardState",
                "targetDashboardStateId": "User1_state",
                "setEntityId": false
              }
            ]
          }
        },
        "id": "408b3c79-6666-2f1f-f0be-ebbb17e140f6"
      },
      "ecaa4db1-a940-d94b-abd5-679c1e8ea684": {
        "isSystemType": true,
        "bundleAlias": "cards",
        "typeAlias": "simple_card",
        "type": "latest",
        "title": "New widget",
        "sizeX": 5,
        "sizeY": 2,
        "config": {
          "datasources": [
            {
              "type": "entity",
              "dataKeys": [
                {
                  "name": "U1_Cough",
                  "type": "attribute",
                  "label": "Cough",
                  "color": "#2196f3",
                  "settings": {},
                  "_hash": 0.32292288520882684,
                  "postFuncBody": "if (value >0){\n    value = \"yes\";\n} else {\n    value = \"no\";   \n}\n\nreturn value;"
                }
              ],
              "entityAliasId": "584ea633-d792-36e0-0aa7-6395b1136977"
            }
          ],
          "timewindow": {
            "realtime": {
              "timewindowMs": 60000
            }
          },
          "showTitle": false,
          "backgroundColor": "rgb(48, 86, 128)",
          "color": "rgba(255, 255, 255, 0.87)",
          "padding": "16px",
          "settings": {
            "labelPosition": "top"
          },
          "title": "Cough",
          "dropShadow": true,
          "enableFullscreen": true,
          "titleStyle": {
            "fontSize": "16px",
            "fontWeight": 400
          },
          "units": "C",
          "decimals": 0,
          "useDashboardTimewindow": true,
          "showLegend": false,
          "widgetStyle": {},
          "actions": {},
          "showTitleIcon": false,
          "titleIcon": null,
          "iconColor": "rgba(0, 0, 0, 0.87)",
          "iconSize": "24px",
          "titleTooltip": "",
          "displayTimewindow": true
        },
        "id": "ecaa4db1-a940-d94b-abd5-679c1e8ea684"
      },
      "7c9d5366-62e3-af17-4bb6-126bc3506a6e": {
        "isSystemType": true,
        "bundleAlias": "cards",
        "typeAlias": "simple_card",
        "type": "latest",
        "title": "New widget",
        "sizeX": 5,
        "sizeY": 2,
        "config": {
          "datasources": [
            {
              "type": "entity",
              "dataKeys": [
                {
                  "name": "U1_Fatigue",
                  "type": "attribute",
                  "label": "Fatigue",
                  "color": "#2196f3",
                  "settings": {},
                  "_hash": 0.8742970103951766,
                  "postFuncBody": "if (value >0){\n    value = \"yes\";\n} else {\n    value = \"no\";   \n}\n\nreturn value;"
                }
              ],
              "entityAliasId": "584ea633-d792-36e0-0aa7-6395b1136977"
            }
          ],
          "timewindow": {
            "realtime": {
              "timewindowMs": 60000
            }
          },
          "showTitle": false,
          "backgroundColor": "rgb(48, 86, 128)",
          "color": "rgba(255, 255, 255, 0.87)",
          "padding": "16px",
          "settings": {
            "labelPosition": "top"
          },
          "title": "Cough",
          "dropShadow": true,
          "enableFullscreen": true,
          "titleStyle": {
            "fontSize": "16px",
            "fontWeight": 400
          },
          "units": "C",
          "decimals": 0,
          "useDashboardTimewindow": true,
          "showLegend": false,
          "widgetStyle": {},
          "actions": {},
          "showTitleIcon": false,
          "titleIcon": null,
          "iconColor": "rgba(0, 0, 0, 0.87)",
          "iconSize": "24px",
          "titleTooltip": "",
          "displayTimewindow": true
        },
        "id": "7c9d5366-62e3-af17-4bb6-126bc3506a6e"
      },
      "ea48368d-6f98-8552-0c50-55e0c514d12a": {
        "isSystemType": true,
        "bundleAlias": "cards",
        "typeAlias": "simple_card",
        "type": "latest",
        "title": "New widget",
        "sizeX": 5,
        "sizeY": 2,
        "config": {
          "datasources": [
            {
              "type": "entity",
              "dataKeys": [
                {
                  "name": "U1_Fever",
                  "type": "attribute",
                  "label": "Fever",
                  "color": "#2196f3",
                  "settings": {},
                  "_hash": 0.4437451754756796,
                  "postFuncBody": "if (value >0){\n    value = \"yes\";\n} else {\n    value = \"no\";   \n}\n\nreturn value;"
                }
              ],
              "entityAliasId": "584ea633-d792-36e0-0aa7-6395b1136977"
            }
          ],
          "timewindow": {
            "realtime": {
              "timewindowMs": 60000
            }
          },
          "showTitle": false,
          "backgroundColor": "#305680",
          "color": "rgba(255, 255, 255, 0.87)",
          "padding": "16px",
          "settings": {
            "labelPosition": "top"
          },
          "title": "Cough",
          "dropShadow": true,
          "enableFullscreen": true,
          "titleStyle": {
            "fontSize": "16px",
            "fontWeight": 400
          },
          "units": "C",
          "decimals": 0,
          "useDashboardTimewindow": true,
          "showLegend": false,
          "widgetStyle": {},
          "actions": {},
          "showTitleIcon": false,
          "titleIcon": null,
          "iconColor": "rgba(0, 0, 0, 0.87)",
          "iconSize": "24px",
          "titleTooltip": "",
          "displayTimewindow": true
        },
        "id": "ea48368d-6f98-8552-0c50-55e0c514d12a"
      },
      "d0bdb411-afa4-e946-ba35-f902e2a708e3": {
        "isSystemType": true,
        "bundleAlias": "cards",
        "typeAlias": "simple_card",
        "type": "latest",
        "title": "New widget",
        "sizeX": 5,
        "sizeY": 2,
        "config": {
          "datasources": [
            {
              "type": "entity",
              "dataKeys": [
                {
                  "name": "U2_Cough",
                  "type": "attribute",
                  "label": "Cough",
                  "color": "#2196f3",
                  "settings": {},
                  "_hash": 0.3697783918499469,
                  "postFuncBody": "if (value >0){\n    value = \"yes\";\n} else {\n    value = \"no\";   \n}\n\nreturn value;"
                }
              ],
              "entityAliasId": "584ea633-d792-36e0-0aa7-6395b1136977"
            }
          ],
          "timewindow": {
            "realtime": {
              "timewindowMs": 60000
            }
          },
          "showTitle": false,
          "backgroundColor": "#305680",
          "color": "rgba(255, 255, 255, 0.87)",
          "padding": "16px",
          "settings": {
            "labelPosition": "top"
          },
          "title": "Cough",
          "dropShadow": true,
          "enableFullscreen": true,
          "titleStyle": {
            "fontSize": "16px",
            "fontWeight": 400
          },
          "units": "C",
          "decimals": 0,
          "useDashboardTimewindow": true,
          "showLegend": false,
          "widgetStyle": {},
          "actions": {},
          "showTitleIcon": false,
          "titleIcon": null,
          "iconColor": "rgba(0, 0, 0, 0.87)",
          "iconSize": "24px",
          "titleTooltip": "",
          "displayTimewindow": true
        },
        "id": "d0bdb411-afa4-e946-ba35-f902e2a708e3"
      },
      "a78e001a-769a-793b-d306-e91c711233f4": {
        "isSystemType": true,
        "bundleAlias": "cards",
        "typeAlias": "simple_card",
        "type": "latest",
        "title": "New widget",
        "sizeX": 5,
        "sizeY": 2,
        "config": {
          "datasources": [
            {
              "type": "entity",
              "dataKeys": [
                {
                  "name": "U3_Cough",
                  "type": "attribute",
                  "label": "Cough",
                  "color": "#2196f3",
                  "settings": {},
                  "_hash": 0.4964469306249202,
                  "postFuncBody": "if (value >0){\n    value = \"yes\";\n} else {\n    value = \"no\";   \n}\n\nreturn value;"
                }
              ],
              "entityAliasId": "584ea633-d792-36e0-0aa7-6395b1136977"
            }
          ],
          "timewindow": {
            "realtime": {
              "timewindowMs": 60000
            }
          },
          "showTitle": false,
          "backgroundColor": "#305680",
          "color": "rgba(255, 255, 255, 0.87)",
          "padding": "16px",
          "settings": {
            "labelPosition": "top"
          },
          "title": "Cough",
          "dropShadow": true,
          "enableFullscreen": true,
          "titleStyle": {
            "fontSize": "16px",
            "fontWeight": 400
          },
          "units": "C",
          "decimals": 0,
          "useDashboardTimewindow": true,
          "showLegend": false,
          "widgetStyle": {},
          "actions": {},
          "showTitleIcon": false,
          "titleIcon": null,
          "iconColor": "rgba(0, 0, 0, 0.87)",
          "iconSize": "24px",
          "titleTooltip": "",
          "displayTimewindow": true
        },
        "id": "a78e001a-769a-793b-d306-e91c711233f4"
      },
      "97591354-ef39-d93b-2512-eb5e8bf282f8": {
        "isSystemType": true,
        "bundleAlias": "cards",
        "typeAlias": "simple_card",
        "type": "latest",
        "title": "New widget",
        "sizeX": 5,
        "sizeY": 2,
        "config": {
          "datasources": [
            {
              "type": "entity",
              "dataKeys": [
                {
                  "name": "U4_Cough",
                  "type": "attribute",
                  "label": "Cough",
                  "color": "#2196f3",
                  "settings": {},
                  "_hash": 0.17122962244620488,
                  "postFuncBody": "if (value >0){\n    value = \"yes\";\n} else {\n    value = \"no\";   \n}\n\nreturn value;"
                }
              ],
              "entityAliasId": "584ea633-d792-36e0-0aa7-6395b1136977"
            }
          ],
          "timewindow": {
            "realtime": {
              "timewindowMs": 60000
            }
          },
          "showTitle": false,
          "backgroundColor": "#305680",
          "color": "rgba(255, 255, 255, 0.87)",
          "padding": "16px",
          "settings": {
            "labelPosition": "top"
          },
          "title": "Cough",
          "dropShadow": true,
          "enableFullscreen": true,
          "titleStyle": {
            "fontSize": "16px",
            "fontWeight": 400
          },
          "units": "C",
          "decimals": 0,
          "useDashboardTimewindow": true,
          "showLegend": false,
          "widgetStyle": {},
          "actions": {},
          "showTitleIcon": false,
          "titleIcon": null,
          "iconColor": "rgba(0, 0, 0, 0.87)",
          "iconSize": "24px",
          "titleTooltip": "",
          "displayTimewindow": true
        },
        "id": "97591354-ef39-d93b-2512-eb5e8bf282f8"
      },
      "2fd678f0-ec37-0814-f525-26730486dda6": {
        "isSystemType": true,
        "bundleAlias": "cards",
        "typeAlias": "simple_card",
        "type": "latest",
        "title": "New widget",
        "sizeX": 5,
        "sizeY": 2,
        "config": {
          "datasources": [
            {
              "type": "entity",
              "dataKeys": [
                {
                  "name": "U2_Fatigue",
                  "type": "attribute",
                  "label": "Fatigue",
                  "color": "#2196f3",
                  "settings": {},
                  "_hash": 0.39873536454127456,
                  "postFuncBody": "if (value >0){\n    value = \"yes\";\n} else {\n    value = \"no\";   \n}\n\nreturn value;"
                }
              ],
              "entityAliasId": "584ea633-d792-36e0-0aa7-6395b1136977"
            }
          ],
          "timewindow": {
            "realtime": {
              "timewindowMs": 60000
            }
          },
          "showTitle": false,
          "backgroundColor": "rgb(48, 86, 128)",
          "color": "rgba(255, 255, 255, 0.87)",
          "padding": "16px",
          "settings": {
            "labelPosition": "top"
          },
          "title": "Cough",
          "dropShadow": true,
          "enableFullscreen": true,
          "titleStyle": {
            "fontSize": "16px",
            "fontWeight": 400
          },
          "units": "C",
          "decimals": 0,
          "useDashboardTimewindow": true,
          "showLegend": false,
          "widgetStyle": {},
          "actions": {},
          "showTitleIcon": false,
          "titleIcon": null,
          "iconColor": "rgba(0, 0, 0, 0.87)",
          "iconSize": "24px",
          "titleTooltip": "",
          "displayTimewindow": true
        },
        "id": "2fd678f0-ec37-0814-f525-26730486dda6"
      },
      "74e47249-94e1-cd13-a1fa-75ba92f57066": {
        "isSystemType": true,
        "bundleAlias": "cards",
        "typeAlias": "simple_card",
        "type": "latest",
        "title": "New widget",
        "sizeX": 5,
        "sizeY": 2,
        "config": {
          "datasources": [
            {
              "type": "entity",
              "dataKeys": [
                {
                  "name": "U3_Fatigue",
                  "type": "attribute",
                  "label": "Fatigue",
                  "color": "#2196f3",
                  "settings": {},
                  "_hash": 0.9772867633044222,
                  "postFuncBody": "if (value >0){\n    value = \"yes\";\n} else {\n    value = \"no\";   \n}\n\nreturn value;"
                }
              ],
              "entityAliasId": "584ea633-d792-36e0-0aa7-6395b1136977"
            }
          ],
          "timewindow": {
            "realtime": {
              "timewindowMs": 60000
            }
          },
          "showTitle": false,
          "backgroundColor": "rgb(48, 86, 128)",
          "color": "rgba(255, 255, 255, 0.87)",
          "padding": "16px",
          "settings": {
            "labelPosition": "top"
          },
          "title": "Cough",
          "dropShadow": true,
          "enableFullscreen": true,
          "titleStyle": {
            "fontSize": "16px",
            "fontWeight": 400
          },
          "units": "C",
          "decimals": 0,
          "useDashboardTimewindow": true,
          "showLegend": false,
          "widgetStyle": {},
          "actions": {},
          "showTitleIcon": false,
          "titleIcon": null,
          "iconColor": "rgba(0, 0, 0, 0.87)",
          "iconSize": "24px",
          "titleTooltip": "",
          "displayTimewindow": true
        },
        "id": "74e47249-94e1-cd13-a1fa-75ba92f57066"
      },
      "8eb47682-1d31-f9e2-a5f9-11560f8302be": {
        "isSystemType": true,
        "bundleAlias": "cards",
        "typeAlias": "simple_card",
        "type": "latest",
        "title": "New widget",
        "sizeX": 5,
        "sizeY": 2,
        "config": {
          "datasources": [
            {
              "type": "entity",
              "dataKeys": [
                {
                  "name": "U4_Fatigue",
                  "type": "attribute",
                  "label": "Fatigue",
                  "color": "#2196f3",
                  "settings": {},
                  "_hash": 0.6923412693680284,
                  "postFuncBody": "if (value >0){\n    value = \"yes\";\n} else {\n    value = \"no\";   \n}\n\nreturn value;"
                }
              ],
              "entityAliasId": "584ea633-d792-36e0-0aa7-6395b1136977"
            }
          ],
          "timewindow": {
            "realtime": {
              "timewindowMs": 60000
            }
          },
          "showTitle": false,
          "backgroundColor": "rgb(48, 86, 128)",
          "color": "rgba(255, 255, 255, 0.87)",
          "padding": "16px",
          "settings": {
            "labelPosition": "top"
          },
          "title": "Cough",
          "dropShadow": true,
          "enableFullscreen": true,
          "titleStyle": {
            "fontSize": "16px",
            "fontWeight": 400
          },
          "units": "C",
          "decimals": 0,
          "useDashboardTimewindow": true,
          "showLegend": false,
          "widgetStyle": {},
          "actions": {},
          "showTitleIcon": false,
          "titleIcon": null,
          "iconColor": "rgba(0, 0, 0, 0.87)",
          "iconSize": "24px",
          "titleTooltip": "",
          "displayTimewindow": true
        },
        "id": "8eb47682-1d31-f9e2-a5f9-11560f8302be"
      },
      "cb68aafd-c4ef-b410-4287-e68f86c3b7a2": {
        "isSystemType": true,
        "bundleAlias": "cards",
        "typeAlias": "simple_card",
        "type": "latest",
        "title": "New widget",
        "sizeX": 5,
        "sizeY": 2,
        "config": {
          "datasources": [
            {
              "type": "entity",
              "dataKeys": [
                {
                  "name": "U2_Fever",
                  "type": "attribute",
                  "label": "Fever",
                  "color": "#2196f3",
                  "settings": {},
                  "_hash": 0.7707424406067658,
                  "postFuncBody": "if (value >0){\n    value = \"yes\";\n} else {\n    value = \"no\";   \n}\n\nreturn value;"
                }
              ],
              "entityAliasId": "584ea633-d792-36e0-0aa7-6395b1136977"
            }
          ],
          "timewindow": {
            "realtime": {
              "timewindowMs": 60000
            }
          },
          "showTitle": false,
          "backgroundColor": "rgb(48, 86, 128)",
          "color": "rgba(255, 255, 255, 0.87)",
          "padding": "16px",
          "settings": {
            "labelPosition": "top"
          },
          "title": "Cough",
          "dropShadow": true,
          "enableFullscreen": true,
          "titleStyle": {
            "fontSize": "16px",
            "fontWeight": 400
          },
          "units": "C",
          "decimals": 0,
          "useDashboardTimewindow": true,
          "showLegend": false,
          "widgetStyle": {},
          "actions": {},
          "showTitleIcon": false,
          "titleIcon": null,
          "iconColor": "rgba(0, 0, 0, 0.87)",
          "iconSize": "24px",
          "titleTooltip": "",
          "displayTimewindow": true
        },
        "id": "cb68aafd-c4ef-b410-4287-e68f86c3b7a2"
      },
      "60d75735-d971-95cb-247d-25c4769eee8b": {
        "isSystemType": true,
        "bundleAlias": "cards",
        "typeAlias": "simple_card",
        "type": "latest",
        "title": "New widget",
        "sizeX": 5,
        "sizeY": 2,
        "config": {
          "datasources": [
            {
              "type": "entity",
              "dataKeys": [
                {
                  "name": "U3_Fever",
                  "type": "attribute",
                  "label": "Fever",
                  "color": "#2196f3",
                  "settings": {},
                  "_hash": 0.2179165364650948,
                  "postFuncBody": "if (value >0){\n    value = \"yes\";\n} else {\n    value = \"no\";   \n}\n\nreturn value;"
                }
              ],
              "entityAliasId": "584ea633-d792-36e0-0aa7-6395b1136977"
            }
          ],
          "timewindow": {
            "realtime": {
              "timewindowMs": 60000
            }
          },
          "showTitle": false,
          "backgroundColor": "rgb(48, 86, 128)",
          "color": "rgba(255, 255, 255, 0.87)",
          "padding": "16px",
          "settings": {
            "labelPosition": "top"
          },
          "title": "Cough",
          "dropShadow": true,
          "enableFullscreen": true,
          "titleStyle": {
            "fontSize": "16px",
            "fontWeight": 400
          },
          "units": "C",
          "decimals": 0,
          "useDashboardTimewindow": true,
          "showLegend": false,
          "widgetStyle": {},
          "actions": {},
          "showTitleIcon": false,
          "titleIcon": null,
          "iconColor": "rgba(0, 0, 0, 0.87)",
          "iconSize": "24px",
          "titleTooltip": "",
          "displayTimewindow": true
        },
        "id": "60d75735-d971-95cb-247d-25c4769eee8b"
      },
      "762669d3-78ce-b246-f979-5d2602f520de": {
        "isSystemType": true,
        "bundleAlias": "cards",
        "typeAlias": "simple_card",
        "type": "latest",
        "title": "New widget",
        "sizeX": 5,
        "sizeY": 2,
        "config": {
          "datasources": [
            {
              "type": "entity",
              "dataKeys": [
                {
                  "name": "U4_Fever",
                  "type": "attribute",
                  "label": "Fever",
                  "color": "#2196f3",
                  "settings": {},
                  "_hash": 0.23583162832990245,
                  "postFuncBody": "if (value >0){\n    value = \"yes\";\n} else {\n    value = \"no\";   \n}\n\nreturn value;"
                }
              ],
              "entityAliasId": "584ea633-d792-36e0-0aa7-6395b1136977"
            }
          ],
          "timewindow": {
            "realtime": {
              "timewindowMs": 60000
            }
          },
          "showTitle": false,
          "backgroundColor": "rgb(48, 86, 128)",
          "color": "rgba(255, 255, 255, 0.87)",
          "padding": "16px",
          "settings": {
            "labelPosition": "top"
          },
          "title": "Cough",
          "dropShadow": true,
          "enableFullscreen": true,
          "titleStyle": {
            "fontSize": "16px",
            "fontWeight": 400
          },
          "units": "C",
          "decimals": 0,
          "useDashboardTimewindow": true,
          "showLegend": false,
          "widgetStyle": {},
          "actions": {},
          "showTitleIcon": false,
          "titleIcon": null,
          "iconColor": "rgba(0, 0, 0, 0.87)",
          "iconSize": "24px",
          "titleTooltip": "",
          "displayTimewindow": true
        },
        "id": "762669d3-78ce-b246-f979-5d2602f520de"
      },
      "243a52d0-6ffe-46a8-da9d-d979a2784b04": {
        "isSystemType": true,
        "bundleAlias": "charts",
        "typeAlias": "basic_timeseries",
        "type": "timeseries",
        "title": "New widget",
        "sizeX": 11,
        "sizeY": 10,
        "config": {
          "datasources": [
...

This file has been truncated, please download it to see its full contents.

Credits

smi

smi

1 project • 1 follower

Comments