Various changes to layout and sensors.
This commit is contained in:
		| @@ -50,6 +50,22 @@ binary_sensor: | ||||
|             format: 'Button pressed, refreshing screen!' | ||||
|         - component.update: epaper | ||||
|  | ||||
| # Switch to next page | ||||
|   - platform: gpio | ||||
|     pin: | ||||
|       number: GPIO13 | ||||
|       mode: INPUT_PULLUP | ||||
|       inverted: True | ||||
|     name: "Next page" | ||||
|     internal: True | ||||
|     on_click: | ||||
|       then: | ||||
|         - logger.log: | ||||
|             level: INFO | ||||
|             format: 'Button pressed, rendering next page!' | ||||
|         - display.page.show_next: epaper | ||||
|         - component.update: epaper | ||||
|  | ||||
| # DHT22 sensor | ||||
| sensor: | ||||
|   - platform: dht | ||||
| @@ -268,6 +284,11 @@ font: | ||||
|       '' # mdi-alert | ||||
|       ] | ||||
|  | ||||
| image: | ||||
|   - file: "epaperframe/C1024_logo_flat.png" | ||||
|     id: c1024_logo | ||||
|     type: binary | ||||
|  | ||||
| spi: | ||||
|   clk_pin: 23 | ||||
|   mosi_pin: 32 | ||||
| @@ -282,355 +303,361 @@ display: | ||||
|     model: 7.50in | ||||
|     # full_update_every: 30 # not supported on this display | ||||
|     update_interval: never | ||||
|     lambda: |- | ||||
|        | ||||
|       int pm25_danger_thres = 40; | ||||
|      | ||||
|       float outdoor_temp = id(temp_outdoor).state; | ||||
|       int outdoor_humid = int(id(humid_outdoor).state); | ||||
|       float air_pressure = id(airpressure).state; | ||||
|       float livingroom_temp = id(temp_livingroom).state; | ||||
|       int livingroom_humid = int(id(humid_livingroom).state); | ||||
|       int livingroom_pm25 = int(id(pm25_livingroom).state); | ||||
|       float livingroom_co2 = id(co2_livingroom).state; | ||||
|       float sleepingroom_temp = id(temp_sleepingroom).state; | ||||
|       int sleepingroom_humid = int(id(humid_sleepingroom).state); | ||||
|       int sleepingroom_pm25 = int(id(pm25_sleepingroom).state); | ||||
|       float sleepingroom_co2 = id(co2_sleepingroom).state; | ||||
|       float serverroom_temp = id(temp_serverroom).state; | ||||
|       int serverroom_humid = id(humid_serverroom).state; | ||||
|       char sunrise[5] = ""; | ||||
|       char sunset[5] = ""; | ||||
|       int offsetX = 0; | ||||
|       int offsetY = 0; | ||||
|     pages: | ||||
|       - id: environment | ||||
|         lambda: |- | ||||
|          | ||||
|           int pm25_danger_thres = 40; | ||||
|          | ||||
|           float outdoor_temp = id(temp_outdoor).state; | ||||
|           int outdoor_humid = int(id(humid_outdoor).state); | ||||
|           float air_pressure = id(airpressure).state; | ||||
|           float livingroom_temp = id(temp_livingroom).state; | ||||
|           int livingroom_humid = int(id(humid_livingroom).state); | ||||
|           int livingroom_pm25 = int(id(pm25_livingroom).state); | ||||
|           float livingroom_co2 = id(co2_livingroom).state; | ||||
|           float sleepingroom_temp = id(temp_sleepingroom).state; | ||||
|           int sleepingroom_humid = int(id(humid_sleepingroom).state); | ||||
|           int sleepingroom_pm25 = int(id(pm25_sleepingroom).state); | ||||
|           float sleepingroom_co2 = id(co2_sleepingroom).state; | ||||
|           float serverroom_temp = id(temp_serverroom).state; | ||||
|           int serverroom_humid = id(humid_serverroom).state; | ||||
|           char sunrise[5] = ""; | ||||
|           char sunset[5] = ""; | ||||
|           int offsetX = 0; | ||||
|           int offsetY = 0; | ||||
|  | ||||
|       /* | ||||
|       This is Commander1024 doing awful string / time fuckerey full of | ||||
|       desperation to format sunrise / sunset times. | ||||
|       Don't be like Commander1024 | ||||
|           /* | ||||
|           This is Commander1024 doing awful string / time fuckerey full of | ||||
|           desperation to format sunrise / sunset times. | ||||
|           Don't be like Commander1024 | ||||
|  | ||||
|       Format: 2021-10-08T05:40:47.467076+00:00 -> 7:40 (dst) | ||||
|       */ | ||||
|       int dst = id(homeassistant_time).now().is_dst; // returns 1 for dst, otherwise 0 | ||||
|       struct tm tm; | ||||
|       memset (&tm, 0, sizeof (tm)); | ||||
|       strptime(id(sun_rise).state.c_str(), "%Y-%m-%dT%H:%M:%S", &tm); | ||||
|       time_t rawtime = mktime(&tm); | ||||
|       struct tm* ltm = localtime(&rawtime); | ||||
|       sprintf(sunrise, "%d:%02d", ltm->tm_hour + dst, ltm->tm_min); | ||||
|           Format: 2021-10-08T05:40:47.467076+00:00 -> 7:40 (dst) | ||||
|           */ | ||||
|           int dst = id(homeassistant_time).now().is_dst; // returns 1 for dst, otherwise 0 | ||||
|           struct tm tm; | ||||
|           memset (&tm, 0, sizeof (tm)); | ||||
|           strptime(id(sun_rise).state.c_str(), "%Y-%m-%dT%H:%M:%S", &tm); | ||||
|           time_t rawtime = mktime(&tm); | ||||
|           struct tm* ltm = localtime(&rawtime); | ||||
|           sprintf(sunrise, "%d:%02d", ltm->tm_hour + dst, ltm->tm_min); | ||||
|  | ||||
|       memset (&tm, 0, sizeof (tm)); | ||||
|       strptime(id(sun_set).state.c_str(), "%Y-%m-%dT%H:%M:%S", &tm); | ||||
|       rawtime = mktime(&tm); | ||||
|       ltm = localtime(&rawtime); | ||||
|       sprintf(sunset, "%d:%02d", ltm->tm_hour + dst, ltm->tm_min); | ||||
|           memset (&tm, 0, sizeof (tm)); | ||||
|           strptime(id(sun_set).state.c_str(), "%Y-%m-%dT%H:%M:%S", &tm); | ||||
|           rawtime = mktime(&tm); | ||||
|           ltm = localtime(&rawtime); | ||||
|           sprintf(sunset, "%d:%02d", ltm->tm_hour + dst, ltm->tm_min); | ||||
|  | ||||
|  | ||||
|       /* OUTSIDE */ | ||||
|       it.print(10, 10, id(sensor_unit), "Umwelt"); | ||||
|       /* | ||||
|       Draw the outline of a rectangle with the top left at [78,21], | ||||
|       a width of 305 and a height of 3 | ||||
|       */ | ||||
|       it.filled_rectangle(86, 21, 297, 3); | ||||
|           /* OUTSIDE */ | ||||
|           it.print(10, 10, id(sensor_unit), "Umwelt"); | ||||
|           /* | ||||
|           Draw the outline of a rectangle with the top left at [78,21], | ||||
|           a width of 305 and a height of 3 | ||||
|           */ | ||||
|           it.filled_rectangle(86, 21, 297, 3); | ||||
|  | ||||
|       it.print(10, 115, id(mdi_small), TextAlign::BASELINE_LEFT, ""); // air pressure icon | ||||
|       it.print(375, 75,  id(mdi_small), TextAlign::BASELINE_CENTER, ""); // thermometer icon | ||||
|       it.print(375, 115, id(mdi_small), TextAlign::BASELINE_CENTER, ""); // water percent icon | ||||
|           it.print(10, 115, id(mdi_small), TextAlign::BASELINE_LEFT, ""); // air pressure icon | ||||
|           it.print(375, 75,  id(mdi_small), TextAlign::BASELINE_CENTER, ""); // thermometer icon | ||||
|           it.print(375, 115, id(mdi_small), TextAlign::BASELINE_CENTER, ""); // water percent icon | ||||
|  | ||||
|       if(outdoor_temp > -100 && outdoor_temp < 100) { | ||||
|         it.printf(357, 75, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, "%2.1fºC", outdoor_temp); | ||||
|       } | ||||
|       else { | ||||
|         it.print(357, 75, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, " - ºC"); | ||||
|       } | ||||
|           if(outdoor_temp > -100 && outdoor_temp < 100) { | ||||
|             it.printf(357, 75, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, "%2.1fºC", outdoor_temp); | ||||
|           } | ||||
|           else { | ||||
|             it.print(357, 75, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, " - ºC"); | ||||
|           } | ||||
|  | ||||
|       if(outdoor_humid >=0 && outdoor_humid <= 100) { | ||||
|         it.printf(357, 115, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, "%3d%%", outdoor_humid); | ||||
|       } | ||||
|       else { | ||||
|         it.print(357, 115, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, " -  %"); | ||||
|       } | ||||
|           if(outdoor_humid >=0 && outdoor_humid <= 100) { | ||||
|             it.printf(357, 115, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, "%3d%%", outdoor_humid); | ||||
|           } | ||||
|           else { | ||||
|             it.print(357, 115, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, " -  %"); | ||||
|           } | ||||
|  | ||||
|       if(air_pressure < 1200 && air_pressure >=800) { | ||||
|         it.printf(220, 114 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "%4.1f", air_pressure); | ||||
|         it.print(225, 114 + offsetY, id(sensor_unit), TextAlign::BASELINE_LEFT, "hPa"); | ||||
|       } | ||||
|       else { | ||||
|         it.print(220, 114 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "- "); | ||||
|         it.print(225, 114 + offsetY, id(sensor_unit), TextAlign::BASELINE_LEFT, "hPa"); | ||||
|       }  | ||||
|           if(air_pressure < 1200 && air_pressure >=800) { | ||||
|             it.printf(220, 114 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "%4.1f", air_pressure); | ||||
|             it.print(225, 114 + offsetY, id(sensor_unit), TextAlign::BASELINE_LEFT, "hPa"); | ||||
|           } | ||||
|           else { | ||||
|             it.print(220, 114 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "- "); | ||||
|             it.print(225, 114 + offsetY, id(sensor_unit), TextAlign::BASELINE_LEFT, "hPa"); | ||||
|           }  | ||||
|  | ||||
|  | ||||
|       /* Livingroom */ | ||||
|       offsetY = 127; | ||||
|       it.print(10, 10 + offsetY, id(sensor_unit), "Wohnzimmer"); | ||||
|       it.filled_rectangle(136, 21 + offsetY, 247, 3); | ||||
|       it.print(10, 114 + offsetY, id(mdi_small), TextAlign::BASELINE_LEFT, ""); // PM2.5 | ||||
|       it.print(375, 75 + offsetY,  id(mdi_small), TextAlign::BASELINE_CENTER, ""); // thermometer | ||||
|       it.print(375, 115 + offsetY, id(mdi_small), TextAlign::BASELINE_CENTER, ""); // water percent | ||||
|       it.print(10, 75 + offsetY, id(mdi_small), TextAlign::BASELINE_LEFT, ""); // CO2 | ||||
|        | ||||
|           /* Livingroom */ | ||||
|           offsetY = 127; | ||||
|           it.print(10, 10 + offsetY, id(sensor_unit), "Wohnzimmer"); | ||||
|           it.filled_rectangle(136, 21 + offsetY, 247, 3); | ||||
|           it.print(10, 114 + offsetY, id(mdi_small), TextAlign::BASELINE_LEFT, ""); // PM2.5 | ||||
|           it.print(375, 75 + offsetY,  id(mdi_small), TextAlign::BASELINE_CENTER, ""); // thermometer | ||||
|           it.print(375, 115 + offsetY, id(mdi_small), TextAlign::BASELINE_CENTER, ""); // water percent | ||||
|           it.print(10, 75 + offsetY, id(mdi_small), TextAlign::BASELINE_LEFT, ""); // CO2 | ||||
|            | ||||
|  | ||||
|       if(livingroom_temp > -100 && livingroom_temp < 100) { | ||||
|         it.printf(357, 75 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, "%2.1fºC", livingroom_temp); | ||||
|       } | ||||
|       else { | ||||
|         it.print(357, 75 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, " - ºC"); | ||||
|       } | ||||
|           if(livingroom_temp > -100 && livingroom_temp < 100) { | ||||
|             it.printf(357, 75 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, "%2.1fºC", livingroom_temp); | ||||
|           } | ||||
|           else { | ||||
|             it.print(357, 75 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, " - ºC"); | ||||
|           } | ||||
|  | ||||
|       if(livingroom_humid >=0 && livingroom_humid <= 100) { | ||||
|         it.printf(357, 115 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, "%3d%%", livingroom_humid); | ||||
|       } | ||||
|       else { | ||||
|         it.print(357, 115 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, " -  %"); | ||||
|       } | ||||
|           if(livingroom_humid >=0 && livingroom_humid <= 100) { | ||||
|             it.printf(357, 115 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, "%3d%%", livingroom_humid); | ||||
|           } | ||||
|           else { | ||||
|             it.print(357, 115 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, " -  %"); | ||||
|           } | ||||
|  | ||||
|       if(livingroom_co2 >=380 && livingroom_co2 <= 20000) { | ||||
|         it.printf(150, 75 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "%4.0f", livingroom_co2); | ||||
|         it.print(150, 50 + offsetY, id(sensor_unit), TextAlign::BASELINE_LEFT, "ppm"); | ||||
|       } | ||||
|       else { | ||||
|         it.print(150, 75 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "- "); | ||||
|         it.print(150, 50 + offsetY, id(sensor_unit), TextAlign::BASELINE_LEFT, "ppm³"); | ||||
|       } | ||||
|           if(livingroom_co2 >=380 && livingroom_co2 <= 20000) { | ||||
|             it.printf(150, 75 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "%4.0f", livingroom_co2); | ||||
|             it.print(150, 50 + offsetY, id(sensor_unit), TextAlign::BASELINE_LEFT, "ppm"); | ||||
|           } | ||||
|           else { | ||||
|             it.print(150, 75 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "- "); | ||||
|             it.print(150, 50 + offsetY, id(sensor_unit), TextAlign::BASELINE_LEFT, "ppm³"); | ||||
|           } | ||||
|  | ||||
|       if(livingroom_pm25 < 255 && livingroom_pm25 >=0) { | ||||
|         it.printf(200, 114 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "%3d", livingroom_pm25); | ||||
|         it.print(205, 114 + offsetY, id(sensor_unit), TextAlign::BASELINE_LEFT, "µg/m³"); | ||||
|         if(livingroom_pm25 >= pm25_danger_thres) { | ||||
|           it.print(37, 114 + offsetY, id(mdi_med), TextAlign::BASELINE_CENTER, ""); // warning | ||||
|         } | ||||
|       } | ||||
|       else { | ||||
|         it.print(200, 114 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "- "); | ||||
|         it.print(205, 114 + offsetY, id(sensor_unit), TextAlign::BASELINE_LEFT, "µg/m³"); | ||||
|       } | ||||
|           if(livingroom_pm25 < 255 && livingroom_pm25 >=0) { | ||||
|             it.printf(200, 114 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "%3d", livingroom_pm25); | ||||
|             it.print(205, 114 + offsetY, id(sensor_unit), TextAlign::BASELINE_LEFT, "µg/m³"); | ||||
|             if(livingroom_pm25 >= pm25_danger_thres) { | ||||
|               it.print(37, 114 + offsetY, id(mdi_med), TextAlign::BASELINE_CENTER, ""); // warning | ||||
|             } | ||||
|           } | ||||
|           else { | ||||
|             it.print(200, 114 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "- "); | ||||
|             it.print(205, 114 + offsetY, id(sensor_unit), TextAlign::BASELINE_LEFT, "µg/m³"); | ||||
|           } | ||||
|  | ||||
|  | ||||
|       /* Sleepingroom */ | ||||
|       offsetY = 247; | ||||
|       it.print(10, 10 + offsetY, id(sensor_unit), "Schlafzimmer"); | ||||
|       it.filled_rectangle(144, 21 + offsetY, 239, 3); | ||||
|       it.print(10, 114 + offsetY, id(mdi_small), TextAlign::BASELINE_LEFT, ""); // PM2.5 | ||||
|       it.print(375, 75 + offsetY,  id(mdi_small), TextAlign::BASELINE_CENTER, ""); // thermometer | ||||
|       it.print(375, 115 + offsetY, id(mdi_small), TextAlign::BASELINE_CENTER, ""); // water percent | ||||
|       it.print(10, 75 + offsetY, id(mdi_small), TextAlign::BASELINE_LEFT, ""); // CO2 | ||||
|        | ||||
|           /* Sleepingroom */ | ||||
|           offsetY = 247; | ||||
|           it.print(10, 10 + offsetY, id(sensor_unit), "Schlafzimmer"); | ||||
|           it.filled_rectangle(144, 21 + offsetY, 239, 3); | ||||
|           it.print(10, 114 + offsetY, id(mdi_small), TextAlign::BASELINE_LEFT, ""); // PM2.5 | ||||
|           it.print(375, 75 + offsetY,  id(mdi_small), TextAlign::BASELINE_CENTER, ""); // thermometer | ||||
|           it.print(375, 115 + offsetY, id(mdi_small), TextAlign::BASELINE_CENTER, ""); // water percent | ||||
|           it.print(10, 75 + offsetY, id(mdi_small), TextAlign::BASELINE_LEFT, ""); // CO2 | ||||
|            | ||||
|  | ||||
|       if(sleepingroom_temp > -100 && sleepingroom_temp < 100) { | ||||
|         it.printf(357, 75 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, "%2.1fºC", sleepingroom_temp); | ||||
|       } | ||||
|       else { | ||||
|         it.print(357, 75 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, " - ºC"); | ||||
|       } | ||||
|           if(sleepingroom_temp > -100 && sleepingroom_temp < 100) { | ||||
|             it.printf(357, 75 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, "%2.1fºC", sleepingroom_temp); | ||||
|           } | ||||
|           else { | ||||
|             it.print(357, 75 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, " - ºC"); | ||||
|           } | ||||
|  | ||||
|       if(sleepingroom_humid >=0 && sleepingroom_humid <= 100) { | ||||
|         it.printf(357, 115 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, "%3d%%", sleepingroom_humid); | ||||
|       } | ||||
|       else { | ||||
|         it.print(357, 115 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, " -  %"); | ||||
|       } | ||||
|           if(sleepingroom_humid >=0 && sleepingroom_humid <= 100) { | ||||
|             it.printf(357, 115 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, "%3d%%", sleepingroom_humid); | ||||
|           } | ||||
|           else { | ||||
|             it.print(357, 115 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, " -  %"); | ||||
|           } | ||||
|  | ||||
|       if(sleepingroom_co2 >=380 && sleepingroom_co2 <= 20000) { | ||||
|         it.printf(150, 75 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "%4.0f", sleepingroom_co2); | ||||
|         it.print(150, 50 + offsetY, id(sensor_unit), TextAlign::BASELINE_LEFT, "ppm"); | ||||
|       } | ||||
|       else { | ||||
|         it.print(150, 75 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "- "); | ||||
|         it.print(150, 50 + offsetY, id(sensor_unit), TextAlign::BASELINE_LEFT, "ppm³"); | ||||
|       } | ||||
|           if(sleepingroom_co2 >=380 && sleepingroom_co2 <= 20000) { | ||||
|             it.printf(150, 75 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "%4.0f", sleepingroom_co2); | ||||
|             it.print(150, 50 + offsetY, id(sensor_unit), TextAlign::BASELINE_LEFT, "ppm"); | ||||
|           } | ||||
|           else { | ||||
|             it.print(150, 75 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "- "); | ||||
|             it.print(150, 50 + offsetY, id(sensor_unit), TextAlign::BASELINE_LEFT, "ppm³"); | ||||
|           } | ||||
|  | ||||
|       if(sleepingroom_pm25 < 255 && sleepingroom_pm25 >=0) { | ||||
|         it.printf(200, 114 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "%3d", sleepingroom_pm25); | ||||
|         it.print(205, 114 + offsetY, id(sensor_unit), TextAlign::BASELINE_LEFT, "µg/m³"); | ||||
|         if(sleepingroom_pm25 >= pm25_danger_thres) { | ||||
|           it.print(37, 114 + offsetY, id(mdi_med), TextAlign::BASELINE_CENTER, ""); // warning | ||||
|         } | ||||
|       } | ||||
|       else { | ||||
|         it.print(200, 114 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "- "); | ||||
|         it.print(205, 114 + offsetY, id(sensor_unit), TextAlign::BASELINE_LEFT, "µg/m³"); | ||||
|       }  | ||||
|           if(sleepingroom_pm25 < 255 && sleepingroom_pm25 >=0) { | ||||
|             it.printf(200, 114 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "%3d", sleepingroom_pm25); | ||||
|             it.print(205, 114 + offsetY, id(sensor_unit), TextAlign::BASELINE_LEFT, "µg/m³"); | ||||
|             if(sleepingroom_pm25 >= pm25_danger_thres) { | ||||
|               it.print(37, 114 + offsetY, id(mdi_med), TextAlign::BASELINE_CENTER, ""); // warning | ||||
|             } | ||||
|           } | ||||
|           else { | ||||
|             it.print(200, 114 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "- "); | ||||
|             it.print(205, 114 + offsetY, id(sensor_unit), TextAlign::BASELINE_LEFT, "µg/m³"); | ||||
|           }  | ||||
|  | ||||
|       /* Weather */ | ||||
|       offsetX = 390; | ||||
|       it.print(10 + offsetX, 10, id(sensor_unit), "Wetter"); | ||||
|       it.filled_rectangle(80 + offsetX, 21, 155, 3); | ||||
|           /* Weather */ | ||||
|           offsetX = 390; | ||||
|           it.print(10 + offsetX, 10, id(sensor_unit), "Wetter"); | ||||
|           it.filled_rectangle(80 + offsetX, 21, 155, 3); | ||||
|  | ||||
|       /* Current weather */ | ||||
|       if(id(weather).has_state()) { | ||||
|         int x = 227 + offsetX; | ||||
|         int y = 116; | ||||
|         if (id(weather).state == "clear-night") { | ||||
|             // clear night | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|             ESP_LOGI("Weather", "clear night"); | ||||
|         } else if (id(weather).state  == "cloudy") { | ||||
|             // cloudy | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|             ESP_LOGI("Weather", "cloudy"); | ||||
|         } else if (id(weather).state  == "fog") { | ||||
|             // fog | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|             ESP_LOGI("Weather", "fog"); | ||||
|         } else if (id(weather).state  == "hail") { | ||||
|             // hail | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|             ESP_LOGI("Weather", "hail"); | ||||
|         } else if (id(weather).state  == "lightning") { | ||||
|             // lightning | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|             ESP_LOGI("Weather", "lightning"); | ||||
|         } else if (id(weather).state  == "lightning-rainy") { | ||||
|             // lightning-rainy | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|             ESP_LOGI("Weather", "lightning-rainy"); | ||||
|         } else if (id(weather).state  == "partlycloudy") { | ||||
|             // partly cloudy | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|             ESP_LOGI("Weather", "partlycloudy"); | ||||
|         } else if (id(weather).state  == "pouring") { | ||||
|             // pouring | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|             ESP_LOGI("Weather", "pouring"); | ||||
|         } else if (id(weather).state  == "rainy") { | ||||
|             // rainy | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|             ESP_LOGI("Weather", "rainy"); | ||||
|         } else if (id(weather).state  == "snowy") { | ||||
|             // snowy | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|             ESP_LOGI("Weather", "snowy"); | ||||
|         } else if (id(weather).state  == "snowy-rainy") { | ||||
|             // snowy-rainy | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|             ESP_LOGI("Weather", "snowy-rainy"); | ||||
|         } else if (id(weather).state  == "sunny") { | ||||
|             // sunny | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|             ESP_LOGI("Weather", "sunny"); | ||||
|         } else if (id(weather).state  == "windy") { | ||||
|             // windy | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|             ESP_LOGI("Weather", "windy"); | ||||
|         } else if (id(weather).state  == "windy-variant") { | ||||
|             // windy variant | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|             ESP_LOGI("Weather", "windy variant"); | ||||
|         } else if (id(weather).state  == "exceptional") { | ||||
|             // exceptional | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|             ESP_LOGI("Weather", "exceptional"); | ||||
|         } else { | ||||
|             // N/A | ||||
|             it.print(x, y, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "-"); | ||||
|             ESP_LOGE("Weather", "No data"); | ||||
|         } | ||||
|       } | ||||
|           /* Current weather */ | ||||
|           if(id(weather).has_state()) { | ||||
|             int x = 227 + offsetX; | ||||
|             int y = 116; | ||||
|             if (id(weather).state == "clear-night") { | ||||
|                 // clear night | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|                 ESP_LOGI("Weather", "clear night"); | ||||
|             } else if (id(weather).state  == "cloudy") { | ||||
|                 // cloudy | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|                 ESP_LOGI("Weather", "cloudy"); | ||||
|             } else if (id(weather).state  == "fog") { | ||||
|                 // fog | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|                 ESP_LOGI("Weather", "fog"); | ||||
|             } else if (id(weather).state  == "hail") { | ||||
|                 // hail | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|                 ESP_LOGI("Weather", "hail"); | ||||
|             } else if (id(weather).state  == "lightning") { | ||||
|                 // lightning | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|                 ESP_LOGI("Weather", "lightning"); | ||||
|             } else if (id(weather).state  == "lightning-rainy") { | ||||
|                 // lightning-rainy | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|                 ESP_LOGI("Weather", "lightning-rainy"); | ||||
|             } else if (id(weather).state  == "partlycloudy") { | ||||
|                 // partly cloudy | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|                 ESP_LOGI("Weather", "partlycloudy"); | ||||
|             } else if (id(weather).state  == "pouring") { | ||||
|                 // pouring | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|                 ESP_LOGI("Weather", "pouring"); | ||||
|             } else if (id(weather).state  == "rainy") { | ||||
|                 // rainy | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|                 ESP_LOGI("Weather", "rainy"); | ||||
|             } else if (id(weather).state  == "snowy") { | ||||
|                 // snowy | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|                 ESP_LOGI("Weather", "snowy"); | ||||
|             } else if (id(weather).state  == "snowy-rainy") { | ||||
|                 // snowy-rainy | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|                 ESP_LOGI("Weather", "snowy-rainy"); | ||||
|             } else if (id(weather).state  == "sunny") { | ||||
|                 // sunny | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|                 ESP_LOGI("Weather", "sunny"); | ||||
|             } else if (id(weather).state  == "windy") { | ||||
|                 // windy | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|                 ESP_LOGI("Weather", "windy"); | ||||
|             } else if (id(weather).state  == "windy-variant") { | ||||
|                 // windy variant | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|                 ESP_LOGI("Weather", "windy variant"); | ||||
|             } else if (id(weather).state  == "exceptional") { | ||||
|                 // exceptional | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_RIGHT, ""); | ||||
|                 ESP_LOGI("Weather", "exceptional"); | ||||
|             } else { | ||||
|                 // N/A | ||||
|                 it.print(x, y, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "-"); | ||||
|                 ESP_LOGE("Weather", "No data"); | ||||
|             } | ||||
|           } | ||||
|  | ||||
|       /* Moon phase display */ | ||||
|       if(id(moonphase).has_state()) { | ||||
|         int x = 10 + offsetX; | ||||
|         int y = 200; | ||||
|         if (id(moonphase).state == "new_moon") { | ||||
|             // new moon | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_LEFT, ""); | ||||
|             ESP_LOGI("Moonphase", "new moon"); | ||||
|         } else if (id(moonphase).state  == "waxing_crescent") { | ||||
|             // waxing crescent | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_LEFT, ""); | ||||
|             ESP_LOGI("Moonphase", "waxing crescent"); | ||||
|         } else if (id(moonphase).state  == "first_quarter") { | ||||
|             // first_quarter | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_LEFT, ""); | ||||
|             ESP_LOGI("Moonphase", "first quarter"); | ||||
|         } else if (id(moonphase).state  == "waxing_gibbous") { | ||||
|             // waxing gibbous | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_LEFT, ""); | ||||
|             ESP_LOGI("Moonphase", "waxing gibbous"); | ||||
|         } else if (id(moonphase).state  == "full_moon") { | ||||
|             // full moon | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_LEFT, ""); | ||||
|             ESP_LOGI("Moonphase", "full moon"); | ||||
|         } else if (id(moonphase).state  == "waning_gibbous") { | ||||
|             // waning gibbous | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_LEFT, ""); | ||||
|             ESP_LOGI("Moonphase", "waning gibbous"); | ||||
|         } else if (id(moonphase).state  == "last_quarter") { | ||||
|             // last quarter | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_LEFT, ""); | ||||
|             ESP_LOGI("Moonphase", "last quarter"); | ||||
|         } else if (id(moonphase).state  == "waning_crescent") { | ||||
|             // waning crescent | ||||
|             it.print(x, y, id(mdi_weather), TextAlign::BASELINE_LEFT, ""); | ||||
|             ESP_LOGI("Moonphase", "waning crescent"); | ||||
|         } else { | ||||
|             // N/A | ||||
|             it.print(x, y, id(big_sensor_font), TextAlign::BASELINE_LEFT, "-"); | ||||
|             ESP_LOGE("Moonphase", "No data"); | ||||
|         } | ||||
|       } | ||||
|           /* Moon phase display */ | ||||
|           if(id(moonphase).has_state()) { | ||||
|             int x = 10 + offsetX; | ||||
|             int y = 200; | ||||
|             if (id(moonphase).state == "new_moon") { | ||||
|                 // new moon | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_LEFT, ""); | ||||
|                 ESP_LOGI("Moonphase", "new moon"); | ||||
|             } else if (id(moonphase).state  == "waxing_crescent") { | ||||
|                 // waxing crescent | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_LEFT, ""); | ||||
|                 ESP_LOGI("Moonphase", "waxing crescent"); | ||||
|             } else if (id(moonphase).state  == "first_quarter") { | ||||
|                 // first_quarter | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_LEFT, ""); | ||||
|                 ESP_LOGI("Moonphase", "first quarter"); | ||||
|             } else if (id(moonphase).state  == "waxing_gibbous") { | ||||
|                 // waxing gibbous | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_LEFT, ""); | ||||
|                 ESP_LOGI("Moonphase", "waxing gibbous"); | ||||
|             } else if (id(moonphase).state  == "full_moon") { | ||||
|                 // full moon | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_LEFT, ""); | ||||
|                 ESP_LOGI("Moonphase", "full moon"); | ||||
|             } else if (id(moonphase).state  == "waning_gibbous") { | ||||
|                 // waning gibbous | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_LEFT, ""); | ||||
|                 ESP_LOGI("Moonphase", "waning gibbous"); | ||||
|             } else if (id(moonphase).state  == "last_quarter") { | ||||
|                 // last quarter | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_LEFT, ""); | ||||
|                 ESP_LOGI("Moonphase", "last quarter"); | ||||
|             } else if (id(moonphase).state  == "waning_crescent") { | ||||
|                 // waning crescent | ||||
|                 it.print(x, y, id(mdi_weather), TextAlign::BASELINE_LEFT, ""); | ||||
|                 ESP_LOGI("Moonphase", "waning crescent"); | ||||
|             } else { | ||||
|                 // N/A | ||||
|                 it.print(x, y, id(big_sensor_font), TextAlign::BASELINE_LEFT, "-"); | ||||
|                 ESP_LOGE("Moonphase", "No data"); | ||||
|             } | ||||
|           } | ||||
|  | ||||
|       if(id(sun_state).has_state()) { | ||||
|         ESP_LOGI("Sun", "State of the sun: %s, sunrise: %s, sunset: %s", | ||||
|                  id(sun_state).state.c_str(), sunrise, sunset); | ||||
|           if(id(sun_state).has_state()) { | ||||
|             ESP_LOGI("Sun", "State of the sun: %s, sunrise: %s, sunset: %s", | ||||
|                     id(sun_state).state.c_str(), sunrise, sunset); | ||||
|  | ||||
|         it.print(10 + offsetX, 250, id(mdi_small), TextAlign::BASELINE_LEFT, ""); // sun-up | ||||
|         it.printf(50 + offsetX, 250, id(sensor_unit), TextAlign::BASELINE_LEFT, "%s", sunrise); | ||||
|         it.print(135 + offsetX, 250, id(mdi_small), TextAlign::BASELINE_LEFT, ""); // sun-down | ||||
|         it.printf(175 + offsetX, 250, id(sensor_unit), TextAlign::BASELINE_LEFT, "%s", sunset); | ||||
|       } | ||||
|             it.print(10 + offsetX, 250, id(mdi_small), TextAlign::BASELINE_LEFT, ""); // sun-up | ||||
|             it.printf(50 + offsetX, 250, id(sensor_unit), TextAlign::BASELINE_LEFT, "%s", sunrise); | ||||
|             it.print(135 + offsetX, 250, id(mdi_small), TextAlign::BASELINE_LEFT, ""); // sun-down | ||||
|             it.printf(175 + offsetX, 250, id(sensor_unit), TextAlign::BASELINE_LEFT, "%s", sunset); | ||||
|           } | ||||
|  | ||||
|       /* Serverroom */ | ||||
|       offsetY = 247; | ||||
|       it.print(10 + offsetX, 10 + offsetY, id(sensor_unit), "Serverraum"); | ||||
|       it.filled_rectangle(125 + offsetX, 21 + offsetY, 110, 3); | ||||
|           /* Serverroom */ | ||||
|           offsetY = 247; | ||||
|           it.print(10 + offsetX, 10 + offsetY, id(sensor_unit), "Serverraum"); | ||||
|           it.filled_rectangle(125 + offsetX, 21 + offsetY, 110, 3); | ||||
|  | ||||
|       it.print(227 + offsetX, 75 + offsetY,  id(mdi_small), TextAlign::BASELINE_CENTER, ""); // thermometer | ||||
|       it.print(227+ offsetX, 115 + offsetY, id(mdi_small), TextAlign::BASELINE_CENTER, ""); // water percent | ||||
|           it.print(227 + offsetX, 75 + offsetY,  id(mdi_small), TextAlign::BASELINE_CENTER, ""); // thermometer | ||||
|           it.print(227+ offsetX, 115 + offsetY, id(mdi_small), TextAlign::BASELINE_CENTER, ""); // water percent | ||||
|  | ||||
|       if(serverroom_temp > -100 && serverroom_temp < 100) { | ||||
|         it.printf(207 + offsetX, 75 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, "%2.1fºC", serverroom_temp); | ||||
|       } | ||||
|       else { | ||||
|         it.print(207 + offsetX, 75 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, " - ºC"); | ||||
|       } | ||||
|           if(serverroom_temp > -100 && serverroom_temp < 100) { | ||||
|             it.printf(207 + offsetX, 75 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, "%2.1fºC", serverroom_temp); | ||||
|           } | ||||
|           else { | ||||
|             it.print(207 + offsetX, 75 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, " - ºC"); | ||||
|           } | ||||
|  | ||||
|       if(serverroom_humid >=0 && serverroom_humid <= 100) { | ||||
|         it.printf(207 + offsetX, 115 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, "%3d%%", serverroom_humid); | ||||
|       } | ||||
|       else { | ||||
|         it.print(207 + offsetX, 115 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, " -  %"); | ||||
|       } | ||||
|           if(serverroom_humid >=0 && serverroom_humid <= 100) { | ||||
|             it.printf(207 + offsetX, 115 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, "%3d%%", serverroom_humid); | ||||
|           } | ||||
|           else { | ||||
|             it.print(207 + offsetX, 115 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, " -  %"); | ||||
|           } | ||||
|  | ||||
|  | ||||
|       /* FOOTER */ | ||||
|       it.strftime(614, 380, id(footer_font), TextAlign::BASELINE_RIGHT , "Aktualisiert um %d.%m.%Y %H:%M", id(homeassistant_time).now()); | ||||
|        | ||||
|       /* WiFi Signal Strenght */ | ||||
|       if(id(wifisignal).has_state()) { | ||||
|         int x = 630; | ||||
|         int y = 384; | ||||
|         if (id(wifisignal).state >= -50) { | ||||
|             //Excellent | ||||
|             it.print(x, y, id(mdi_wifi), TextAlign::BASELINE_CENTER, ""); | ||||
|             ESP_LOGI("WiFi", "Excellent"); | ||||
|         } else if (id(wifisignal).state  >= -60) { | ||||
|             //Good | ||||
|             it.print(x, y, id(mdi_wifi), TextAlign::BASELINE_CENTER, ""); | ||||
|             ESP_LOGI("WiFi", "Good"); | ||||
|         } else if (id(wifisignal).state  >= -75) { | ||||
|             //Fair | ||||
|             it.print(x, y, id(mdi_wifi), TextAlign::BASELINE_CENTER, ""); | ||||
|             ESP_LOGI("WiFi", "Fair"); | ||||
|         } else if (id(wifisignal).state  >= -100) { | ||||
|             //Weak | ||||
|             it.print(x, y, id(mdi_wifi), TextAlign::BASELINE_CENTER, ""); | ||||
|             ESP_LOGI("WiFi", "Weak"); | ||||
|         } else { | ||||
|             //Unlikely working signal | ||||
|             it.print(x, y, id(mdi_wifi), TextAlign::BASELINE_CENTER, ""); | ||||
|             ESP_LOGI("WiFi", "Unlikely"); | ||||
|         } | ||||
|       } | ||||
|           /* FOOTER */ | ||||
|           it.strftime(614, 380, id(footer_font), TextAlign::BASELINE_RIGHT , "Aktualisiert um %d.%m.%Y %H:%M", id(homeassistant_time).now()); | ||||
|            | ||||
|           /* WiFi Signal Strenght */ | ||||
|           if(id(wifisignal).has_state()) { | ||||
|             int x = 630; | ||||
|             int y = 384; | ||||
|             if (id(wifisignal).state >= -50) { | ||||
|                 //Excellent | ||||
|                 it.print(x, y, id(mdi_wifi), TextAlign::BASELINE_CENTER, ""); | ||||
|                 ESP_LOGI("WiFi", "Excellent"); | ||||
|             } else if (id(wifisignal).state  >= -60) { | ||||
|                 //Good | ||||
|                 it.print(x, y, id(mdi_wifi), TextAlign::BASELINE_CENTER, ""); | ||||
|                 ESP_LOGI("WiFi", "Good"); | ||||
|             } else if (id(wifisignal).state  >= -75) { | ||||
|                 //Fair | ||||
|                 it.print(x, y, id(mdi_wifi), TextAlign::BASELINE_CENTER, ""); | ||||
|                 ESP_LOGI("WiFi", "Fair"); | ||||
|             } else if (id(wifisignal).state  >= -100) { | ||||
|                 //Weak | ||||
|                 it.print(x, y, id(mdi_wifi), TextAlign::BASELINE_CENTER, ""); | ||||
|                 ESP_LOGI("WiFi", "Weak"); | ||||
|             } else { | ||||
|                 //Unlikely working signal | ||||
|                 it.print(x, y, id(mdi_wifi), TextAlign::BASELINE_CENTER, ""); | ||||
|                 ESP_LOGI("WiFi", "Unlikely"); | ||||
|             } | ||||
|           } | ||||
|       - id: logo | ||||
|         lambda: |- | ||||
|  | ||||
|           it.image(1, 48, id(c1024_logo)); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user