From c761fe32853b8f73439207a4061538c5d6a6b654 Mon Sep 17 00:00:00 2001 From: Commander1024 Date: Sun, 20 Feb 2022 23:54:28 +0100 Subject: [PATCH] Added power dashboard based on environment template. Added total and serverroom meter. --- esphome/epaperframe.yaml | 188 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 181 insertions(+), 7 deletions(-) diff --git a/esphome/epaperframe.yaml b/esphome/epaperframe.yaml index 8b0e293..e738d31 100644 --- a/esphome/epaperframe.yaml +++ b/esphome/epaperframe.yaml @@ -6,6 +6,7 @@ esphome: priority: -10 then: - delay: 10s + - display.page.show: power # temporary for power page dev - component.update: epaper wifi: @@ -28,8 +29,8 @@ logger: # Enable Home Assistant API api: password: !secret api -# encryption: -# key: !secret apikey + encryption: + key: !secret apikey ota: password: !secret ota @@ -118,6 +119,14 @@ sensor: - platform: homeassistant entity_id: sensor.serveraum_temperatur id: temp_serverroom + + - platform: homeassistant + entity_id: sensor.line_power_total + id: power_total + + - platform: homeassistant + entity_id: sensor.serverraum_power + id: power_serverroom text_sensor: - platform: homeassistant @@ -234,7 +243,9 @@ font: '󰊚', # mdi-gauge (air pressure) '󰖙', # mdi-weather-sunny '󰖛', # mdi-weather-sunset-down - '󰖜' # mdi-weather-sunset-up + '󰖜', # mdi-weather-sunset-up + '󱐋', # mdi-lightning-bolt + '󰴾' # mdi-transmission-tower ] - file: 'fonts/materialdesignicons-webfont.ttf' @@ -327,8 +338,8 @@ display: /* 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 + Draw the outline of a rectangle with the top left at [86,21], + a width of 297 and a height of 3 */ it.filled_rectangle(86, 21, 297, 3); @@ -628,7 +639,170 @@ display: ESP_LOGI("WiFi", "Unlikely"); } } - - id: logo + - id: power lambda: |- - it.image(1, 48, id(c1024_logo)); + float total_power = id(power_total).state; + float serverroom_power = id(power_serverroom).state; + int offsetX = 0; + int offsetY = 0; + + /* BASEMENT */ + it.print(10, 10, id(sensor_unit), "Keller"); + /* + Draw the outline of a rectangle with the top left at [86,21], + a width of 297 and a height of 3 + */ + it.filled_rectangle(76, 21, 317, 3); + + /* C1024 logo */ + it.image(10 , 37, id(c1024_logo)); + + /* 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_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_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³"); + } + 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 + + + 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_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³"); + } + 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³"); + } + */ + + /* LINEPOWER */ + offsetX = 390; + offsetY = 65; + it.print(10 + offsetX, 10, id(sensor_unit), "Gesamt"); + it.filled_rectangle(90 + offsetX, 21, 155, 3); + + it.print(227 + offsetX, 20 + offsetY, id(mdi_small), TextAlign::BASELINE_CENTER, "󰴾"); // transmission-tower + + if(total_power > 0 && total_power < 19999) { + it.printf(207 + offsetX, 20 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, "W"); + it.printf(170 + offsetX, 20 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "%2.1f", total_power); + } + else { + it.print(207 + offsetX, 20 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, " - W"); + } + + /* 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, 110 + offsetY, id(mdi_small), TextAlign::BASELINE_CENTER, "󱐋"); // lightning-bolt + + if(serverroom_power > 0 && serverroom_power < 999) { + it.printf(207 + offsetX, 110 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, "W"); + it.printf(170 + offsetX, 110 + offsetY, id(big_sensor_font), TextAlign::BASELINE_RIGHT, "%2.1f", serverroom_power); + } + else { + it.print(207 + offsetX, 110 + offsetY, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, " - W"); + } + + /* 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"); + } + } \ No newline at end of file