From a54654226bf34c99b9841bd5dcf247ebf444bfdf Mon Sep 17 00:00:00 2001 From: Commander1024 Date: Thu, 2 Dec 2021 15:23:28 +0100 Subject: [PATCH] Various changes to layout and sensors. --- esphome/epaperframe.yaml | 667 ++++++++++++++++++++------------------- 1 file changed, 347 insertions(+), 320 deletions(-) diff --git a/esphome/epaperframe.yaml b/esphome/epaperframe.yaml index 03c8d17..944c0a3 100644 --- a/esphome/epaperframe.yaml +++ b/esphome/epaperframe.yaml @@ -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));