Added weather panel, icons, rearranged widgets.

This commit is contained in:
Marcus Scholz 2021-10-09 22:10:56 +02:00
parent 632a4d6a6f
commit aca118beba
1 changed files with 161 additions and 59 deletions

View File

@ -135,6 +135,10 @@ text_sensor:
entity_id: sensor.moon
id: moonphase
- platform: homeassistant
entity_id: weather.zuhause
id: weather
# Webserver configuration
web_server:
port: 80
@ -213,7 +217,13 @@ font:
'󰊚', # mdi-gauge (air pressure)
'󰖙', # mdi-weather-sunny
'󰖛', # mdi-weather-sunset-down
'󰖜', # mdi-weather-sunset-up
'󰖜' # mdi-weather-sunset-up
]
- file: 'fonts/materialdesignicons-webfont.ttf'
id: mdi_weather
size: 80
glyphs: [
'󰽡', # mdi-moon-first-quarter
'󰽢', # mdi-moon-full
'󰽣', # mdi-moon-last-quarter
@ -221,7 +231,22 @@ font:
'󰽥', # mdi-moon-waning-crescent
'󰽦', # mdi-moon-waning-gibbous
'󰽧', # mdi-moon-waxing-crescent
'󰽨' # mdi-moon-waxing-gibbous
'󰽨', # mdi-moon-waxing-gibbous
'󰖔', # mdi-weather-night
'󰖐', # mdi-weather-cloudy
'󰖑', # mdi-weather-fog
'󰖒', # mdi-weather-hail
'󰖓', # mdi-weather-lightning
'󰙾', # mdi-weather-lightning-rainy
'󰖕', # mdi-weather-partly-cloudy
'󰖖', # mdi-weather-pouring
'󰖗', # mdi-weather-rainy
'󰖘', # mdi-weather-snowy
'󰙿', # mdi-weather-snowy-rainy
'󰖙', # mdi-weather-sunny
'󰖝', # mdi-weather-windy
'󰖞', # mdi-weather-windy-variant
'󰳥' # mdi-weather-exceptional
]
- file: 'fonts/materialdesignicons-webfont.ttf'
@ -308,16 +333,8 @@ display:
a width of 305 and a height of 3
*/
it.filled_rectangle(86, 21, 297, 3);
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, 75, id(mdi_small), TextAlign::BASELINE_LEFT, "󰖜"); // sun-up
it.printf(50, 75, id(sensor_unit), TextAlign::BASELINE_LEFT, "%s", sunrise);
it.print(135, 75, id(mdi_small), TextAlign::BASELINE_LEFT, "󰖛"); // sun-down
it.printf(175, 75, id(sensor_unit), TextAlign::BASELINE_LEFT, "%s", sunset);
}
it.print(250, 115, id(mdi_small), TextAlign::BASELINE_CENTER, "󰊚"); // air pressure 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
@ -335,55 +352,15 @@ display:
it.print(357, 115, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, " - %");
}
if(air_pressure < 1200 && air_pressure >=800) { // Has valid value
it.printf(228, 115, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, "%4.1fhPa", air_pressure);
}
else { // Invalid or error value
it.print(228, 115, id(sub_sensor_font), TextAlign::BASELINE_RIGHT, "- 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");
}
/* Moon phase display */
if(id(moonphase).has_state()) {
int x = 10;
int y = 116;
if (id(moonphase).state == "new_moon") {
// new moon
it.print(x, y, id(mdi_small), TextAlign::BASELINE_LEFT, "󰽤");
ESP_LOGI("Moonphase", "new moon");
} else if (id(moonphase).state == "waxing_crescent") {
// waxing crescent
it.print(x, y, id(mdi_small), TextAlign::BASELINE_LEFT, "󰽧");
ESP_LOGI("Moonphase", "waxing crescent");
} else if (id(moonphase).state == "first_quarter") {
// first_quarter
it.print(x, y, id(mdi_small), TextAlign::BASELINE_LEFT, "󰽡");
ESP_LOGI("Moonphase", "first quarter");
} else if (id(moonphase).state == "waxing_gibbous") {
// waxing gibbous
it.print(x, y, id(mdi_small), TextAlign::BASELINE_LEFT, "󰽨");
ESP_LOGI("Moonphase", "waxing gibbous");
} else if (id(moonphase).state == "full_moon") {
// full moon
it.print(x, y, id(mdi_small), TextAlign::BASELINE_LEFT, "󰽢");
ESP_LOGI("Moonphase", "full moon");
} else if (id(moonphase).state == "waning_gibbous") {
// waning gibbous
it.print(x, y, id(mdi_small), TextAlign::BASELINE_LEFT, "󰽦");
ESP_LOGI("Moonphase", "waning gibbous");
} else if (id(moonphase).state == "last_quarter") {
// last quarter
it.print(x, y, id(mdi_small), TextAlign::BASELINE_LEFT, "󰽣");
ESP_LOGI("Moonphase", "last quarter");
} else if (id(moonphase).state == "waning_crescent") {
// waning crescent
it.print(x, y, id(mdi_small), TextAlign::BASELINE_LEFT, "󰽥");
ESP_LOGI("Moonphase", "waning crescent");
} else {
// N/A
it.print(x, y, id(sub_sensor_font), TextAlign::BASELINE_LEFT, "-");
ESP_LOGE("Moonphase", "No data");
}
}
/* Livingroom */
offsetY = 127;
@ -428,7 +405,8 @@ display:
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;
@ -480,6 +458,129 @@ display:
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");
}
}
/* 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);
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;
@ -503,6 +604,7 @@ display:
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());