MaxBarbero Il problema poi è che servirebbe un emulatore per fare prima (non so se esiste). Così per ogni modifica devo compilare, flashare etc, e ora che vedo il risultato passano minuti.

Non saprei se sono classi, non credo... quella sezione di codice è yaml, il c++

Non so nemmeno io se esista, anche perchè dovresti simulare il sensore immagino

Probabilmente hai ragione non sono classi ma dichiara delle entità, generate dal sensore?
Anche perchè lo stato arriverà dal sensore

Buon lavoro 👍🏻

    bortolotti80 Probabilmente hai ragione non sono classi ma dichiara delle entità, generate dal sensore?

    sono generate dai sensori su homeassistant (nativamente o da integrazioni installate) o da te nel caso metti insieme più sensori e tiri fuori il risultato (es. somma del carico dell'impianto elettrico derivante da più sensori). In questo ultimo caso li definisci nel configuration.yaml di homeassistant

    Alla fine sono arrivato a questo punto. Più o meno ci ho fatto stare tutto quel che mi interessava in attesa del fotovoltaico da aggiungere in basso

      8 giorni dopo

      MaxBarbero potresti postare il codice finale in modo da prendere spunto, grazie

        Nik97teck Questo è il codice che ho flashato sul ESP32. Servono ovviamente un po' di sensori/entità/template da creare lato configuration.yaml di Home Assistant. Eventualmente se serve qualcosa recupero anche quelli.
        Per i font/plugin/sorgenti: https://github.com/Madelena/esphome-weatherman-dashboard

        esphome:
          name: eink-frame-1
        
        esp32:
          board: esp32dev
          framework:
            type: arduino
        
        # Enable logging
        logger:
        
        # Enable Home Assistant API
        api:
        
        ota:
          password: "XXXX"
        
        wifi:
          ssid: !secret wifi_ssid
          password: !secret wifi_password
        
          # Enable fallback hotspot (captive portal) in case wifi connection fails
          ap:
            ssid: "Eink-Frame-1 Fallback Hotspot"
            password: "XXXX"
        
        # Include time
        time:
          - platform: sntp
            timezone: Europe/Rome
            id: esptime
        
        #Include sun
        sun:
          latitude: 45.738760
          longitude: 8.977543
        
        font:
          - file: 'fonts/GothamRnd-Book.ttf'
            id: font_small_book
            size: 18
          - file: 'fonts/GothamRnd-Bold.ttf'
            id: font_large_bold
            size: 108
            glyphs: [' ', '°', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'C',]
          - file: 'fonts/GothamRnd-Bold.ttf'
            id: font_time
            size: 90
            glyphs: [' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':']
          - file: 'fonts/GothamRnd-Book.ttf'
            id: font_weekday
            size: 30
          - file: 'fonts/GothamRnd-Bold.ttf'
            id: font_weekday_bold
            size: 30
          - file: 'fonts/GothamRnd-Book.ttf'
            id: font_day
            size: 65
            glyphs: [' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
          - file: 'fonts/GothamRnd-Bold.ttf'
            id: font_month
            size: 40
          - file: 'fonts/GothamRnd-Bold.ttf'
            id: font_medium_bold
            size: 40
            #glyphs: [' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'M', 'I', 'N']
          - file: 'fonts/GothamRnd-Bold.ttf'
            id: font_small_bold
            size: 18
            # glyphs: ['°', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'C', 'M', 'I', 'N']
        
          - file: 'fonts/materialdesignicons-webfont.ttf'
            id: font_mdi_large
            size: 96
            glyphs: &mdi-weather-glyphs
              - "\U000F029A" # mdi-gauge
              - "\U000F0590" # mdi-weather-cloudy
              - "\U000F0F2F" # mdi-weather-cloudy-alert
              - "\U000F0E6E" # mdi-weather-cloudy-arrow-right
              - "\U000F0591" # mdi-weather-fog
              - "\U000F0592" # mdi-weather-hail
              - "\U000F0F30" # mdi-weather-hazy
              - "\U000F0898" # mdi-weather-hurricane
              - "\U000F0593" # mdi-weather-lightning
              - "\U000F067E" # mdi-weather-lightning-rainy
              - "\U000F0594" # mdi-weather-night
              - "\U000F0F31" # mdi-weather-night-partly-cloudy
              - "\U000F0595" # mdi-weather-partly-cloudy
              - "\U000F0F32" # mdi-weather-partly-lightning
              - "\U000F0F33" # mdi-weather-partly-rainy
              - "\U000F0F34" # mdi-weather-partly-snowy
              - "\U000F0F35" # mdi-weather-partly-snowy-rainy
              - "\U000F0596" # mdi-weather-pouring
              - "\U000F0597" # mdi-weather-rainy
              - "\U000F0598" # mdi-weather-snowy
              - "\U000F0F36" # mdi-weather-snowy-heavy
              - "\U000F067F" # mdi-weather-snowy-rainy
              - "\U000F0599" # mdi-weather-sunny
              - "\U000F0F37" # mdi-weather-sunny-alert
              - "\U000F14E4" # mdi-weather-sunny-off
              - "\U000F059A" # mdi-weather-sunset
              - "\U000F059B" # mdi-weather-sunset-down
              - "\U000F059C" # mdi-weather-sunset-up
              - "\U000F0F38" # mdi-weather-tornado
              - "\U000F059D" # mdi-weather-windy
              - "\U000F059E" # mdi-weather-windy-variant
              - "\U000F058E" # mdi-water-percent
              - "\U000F04C5" # mdi-spedometer
              - "\U000F0F29" # mdi-snowflake-alert
              - "\U000F15FA" # mdi-windsock
              - "\U000F19B3" # mdi-arrow-down-thin
              - "\U000F19B2" # mdi-arrow-up-thin
              - "\U000F19B4" # mdi-arrow-top-right-thin
              - "\U000F19B7" # mdi-arrow-bottom-right-thin
              - "\U000F018C" # mdi-compass-outline
              - "\U000F05A9" # mdi-wifi
              - "\U000F0928" # mdi-wifi-strength-4
              - "\U000F0925" # mdi-wifi-strength-3 
              - "\U000F0922" # mdi-wifi-strength-2
              - "\U000F091F" # mdi-wifi-strength-1
              - "\U000F092B" # mdi-wifi-strength-alert-outline
              - "\U000F0079" # mdi-battery
              - "\U000F0082" # mdi-battery-90
              - "\U000F0081" # mdi-battery-80
              - "\U000F0080" # mdi-battery-70
              - "\U000F007F" # mdi-battery-60
              - "\U000F007E" # mdi-battery-50
              - "\U000F007D" # mdi-battery-40
              - "\U000F007C" # mdi-battery-30
              - "\U000F007B" # mdi-battery-20
              - "\U000F007A" # mdi-battery-10
              - "\U000F10CD" # mdi-battery-alert-variant-outline
              - "\U000F0E03" # mdi-thermometer-chevron-up
              - "\U000F0E02" # mdi-thermometer-chevron-down
              - "\U000F1A09" # mdi-triangle-small-down
              - "\U000F1A0A" # mdi-triangle-small-up
              - "\U000F050F" # mdi-thermometer
              - "\U000F054A" # mdi-umbrella
              - "\U000F0510" # mdi-thermometer-lines
              - "\U000F024A" # mdi-flower
              - "\U000F0199" # mdi-counter
              - "\U000F140B" # mdi-lightning-bolt
              - "\U000F008B" # mdi-battery-charging-high   
              - "\U000F12A5" # mdi-battery-charging-medium
              - "\U000F12A4" # mdi-battery-charging-low
              - "\U000F089F" # mdi-battery-charging-outline
        
          - file: 'fonts/materialdesignicons-webfont.ttf'
            id: font_mdi_medlarge
            size: 60
            glyphs:
              - "\U000F058E" # mdi-water-percent
              - "\U000F04C5" # mdi-spedometer
              - "\U000F0F29" # mdi-snowflake-alert
              - "\U000F15FA" # mdi-windsock
              - "\U000F0F61" # mdi-moon-first-quarter
              - "\U000F0F62" # mdi-moon-full
              - "\U000F0F63" # mdi-moon-last-quarter
              - "\U000F0F64" # mdi-moon-new
              - "\U000F0F65" # mdi-moon-waning-crescent
              - "\U000F0F66" # mdi-moon-waning-gibbous
              - "\U000F0F67" # mdi-moon-waxing-crescent
              - "\U000F0F68" # mdi-moon-waxing-gibbous
          - file: 'fonts/materialdesignicons-webfont.ttf'
            id: font_mdi_medium
            size: 36
            glyphs: *mdi-weather-glyphs
        
        # Include Custom Titles
        image:
          - file: "images/line.png"
            id: line
            type: BINARY
        
        # Call Weather sensors from HA
        sensor:
          # Plants
          - platform: homeassistant
            name: "Nandina"
            entity_id: sensor.nandina_domestica_moisture
            id: nandina_humidity
        
          - platform: homeassistant
            name: "Aloe 1"
            entity_id: sensor.aloe_vera_1_moisture
            id: aloe_humidity_1
        
          - platform: homeassistant
            name: "Aloe 2"
            entity_id: sensor.aloe_vera_2_moisture
            id: aloe_humidity_2
        
          # Temperature
          - platform: homeassistant
            name: "Temperature"
            entity_id: sensor.temperature_3
            id: weather_temperature
        
          # Humidity
          - platform: homeassistant
            name: "Humidity"
            entity_id: sensor.humidity_2
            id: weather_humidity
        
          # Air Pressure
          - platform: homeassistant
            name: "Air Pressure"
            entity_id: sensor.pressure_4
            id: weather_pressure
        
          # Wind Speed 
          - platform: homeassistant
            entity_id: weather.home
            attribute: wind_speed
            id: wind_speed
        
          # Wind Bearing - from Yr.no (built-in HA weather privider)
          - platform: homeassistant
            entity_id: weather.home
            attribute: wind_bearing
            id: wind_bearing
        
          # UV Index
          - platform: homeassistant
            entity_id: sensor.home_uv_index
            id: uv_index
        
          # Rain
          - platform: homeassistant
            entity_id: sensor.bulgarograsso_daily_precipitation
            id: rain
        
          # WiFi Signal     
          - platform: wifi_signal
            name: "WiFi Signal Sensor"
            id: wifisignal
            update_interval: 60s
        
          # Weatherman entities
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_temperature_0
            id: weather_temperature_0
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_temperature_1
            id: weather_temperature_1
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_temperature_2
            id: weather_temperature_2
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_temperature_3
            id: weather_temperature_3
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_temperature_0
            id: weather_templow_0
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_temperature_1
            id: weather_templow_1
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_temperature_2
            id: weather_templow_2
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_temperature_3
            id: weather_templow_3
        
        text_sensor:
          # Pressure Trend
          - platform: homeassistant
            entity_id: binary_sensor.atmospheric_pressure
            id: pressure_trend
          # Temp Trend
          - platform: homeassistant
            entity_id: binary_sensor.outside_temperature
            id: temp_trend
        
          # Daily Power Trend
          - platform: homeassistant
            entity_id: sensor.daily_energy
            id: dailyenergy
          
          # Monthly Power Trend
          - platform: homeassistant
            entity_id: sensor.monthly_energy
            id: monthlyenergy
        
          # Sun
          - platform: sun
            name: Sun Next Sunrise
            type: sunrise
            id: sun_sunrise
            format: "%H:%M"
        
          - platform: sun
            name: Sun Next Sunset
            type: sunset
            id: sun_sunset
            format: "%H:%M"
        
          # Moon phase
          - platform: homeassistant
            entity_id: sensor.moon_phase
            id: moon_phase
        
          - platform: homeassistant
            entity_id: sensor.moon_set
            id: moon_set
        
          - platform: homeassistant
            entity_id: sensor.moon_rise
            id: moon_rise
        
          # Weatherman entities
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_condition_now
            id: weather_condition_now
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_condition_0
            id: weather_condition_0
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_timestamp_0
            id: weather_timestamp_0
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_condition_1
            id: weather_condition_1
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_timestamp_1
            id: weather_timestamp_1
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_condition_2
            id: weather_condition_2
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_timestamp_2
            id: weather_timestamp_2
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_condition_3
            id: weather_condition_3
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_timestamp_3
            id: weather_timestamp_3
        
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_maxlow_0
            id: weather_maxlow_0
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_maxlow_1
            id: weather_maxlow_1
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_maxlow_2
            id: weather_maxlow_2
          - platform: homeassistant
            entity_id: sensor.weatherman_data
            attribute: weather_maxlow_3
            id: weather_maxlow_3
        
        color:
          - id: color_black
            red: 0%
            green: 0%
            blue: 0%
            white: 50%
          - id: color_white
            red: 0%
            green: 0%
            blue: 0%
            white: 0%
        
        # Pins for Waveshare ePaper ESP Board
        spi:
          clk_pin: GPIO13
          mosi_pin: GPIO14
          
         # Now render everything on the ePaper screen.
        display:
          - platform: waveshare_epaper
            cs_pin: GPIO15
            dc_pin: GPIO27
            busy_pin: GPIO25
            reset_pin: GPIO26
            model: 7.50inV2
            update_interval: 1200s
            rotation: 90°
            auto_clear_enabled: True
            lambda: |-
              // Map weather states to MDI characters.
              std::map<std::string, std::string> moon_icon_map
                {
                  {"first_quarter", "\U000F0F61"},
                  {"full_moon", "\U000F0F62"},
                  {"last_quarter", "\U000F0F63"},
                  {"new_moon", "\U000F0F64"},
                  {"waning_crescent", "\U000F0F65"},
                  {"waning_gibbous", "\U000F0F66"},
                  {"waxing_crescent", "\U000F0F67"},
                  {"waxing_gibbous", "\U000F0F68"},
                };
              std::map<std::string, std::string> weather_icon_map
                {
                  {"cloudy", "\U000F0590"},
                  {"cloudy-alert", "\U000F0F2F"},
                  {"cloudy-arrow-right", "\U000F0E6E"},
                  {"fog", "\U000F0591"},
                  {"hail", "\U000F0592"},
                  {"hazy", "\U000F0F30"},
                  {"hurricane", "\U000F0898"},
                  {"lightning", "\U000F0593"},
                  {"lightning-rainy", "\U000F067E"},
                  {"night", "\U000F0594"},
                  {"night-partly-cloudy", "\U000F0F31"},
                  {"partlycloudy", "\U000F0595"},
                  {"partly-lightning", "\U000F0F32"},
                  {"partly-rainy", "\U000F0F33"},
                  {"partly-snowy", "\U000F0F34"},
                  {"partly-snowy-rainy", "\U000F0F35"},
                  {"pouring", "\U000F0596"},
                  {"rainy", "\U000F0597"},
                  {"snowy", "\U000F0598"},
                  {"snowy-heavy", "\U000F0F36"},
                  {"snowy-rainy", "\U000F067F"},
                  {"sunny", "\U000F0599"},
                  {"sunny-alert", "\U000F0F37"},
                  {"sunny-off", "\U000F14E4"},
                  {"sunset", "\U000F059A"},
                  {"sunset-down", "\U000F059B"},
                  {"sunset-up", "\U000F059C"},
                  {"tornado", "\U000F0F38"},
                  {"windy", "\U000F059D"},
                  {"windy-variant", "\U000F059E"},
                };
        
              // ----------------------------------------------------------------------------------- PRINT DAY, DATE, MONTH
              it.strftime(265, 70, id(font_weekday_bold), TextAlign::TOP_CENTER, "%A %d %b", id(esptime).now());
        
              // Weather Section ------------------------------------------------------------------- PLACE NAME
              //  it.print(265, 200, id(font_weekday_bold), color_black, TextAlign::TOP_CENTER, "Appiano Gentile");
        
              // ----------------------------------------------------------------------------------- WEATHER STATE ICON --------------- (110, 358)
                it.printf(245, 205, id(font_mdi_large), color_black, TextAlign::TOP_CENTER, "%s", weather_icon_map[id(weather_condition_now).state.c_str()].c_str());
        
              // ----------------------------------------------------------------------------------- HUMIDITY
                if(id(weather_humidity).has_state ()) {
                    it.printf(100, 222, id(font_mdi_medium), color_black, TextAlign::BASELINE_RIGHT, "\U000F058E");
                    it.printf(145, 220, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "%s", "%");
                    it.printf(140, 220, id(font_weekday), color_black, TextAlign::BASELINE_RIGHT, "%2.0f", id(weather_humidity).state);
                }   
        
              // ----------------------------------------------------------------------------------- TEMPERATURE
                if(id(temp_trend).has_state ()) {
                    if(id(temp_trend).state == "on") {
                        it.printf(100, 270, id(font_mdi_medium), color_black, TextAlign::BASELINE_RIGHT, "\U000F0E03");
                    } else if(id(temp_trend).state == "off") {
                        it.printf(100, 270, id(font_mdi_medium), color_black, TextAlign::BASELINE_RIGHT, "\U000F0E02");
                    } else {
                        it.printf(100, 270, id(font_mdi_medium), color_black, TextAlign::BASELINE_RIGHT, "\U000F0510");
                    }          
                }
                if(id(weather_temperature).has_state ()) {
                    it.printf(145, 270, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "%s", "°C");
                    it.printf(140, 270, id(font_weekday), color_black, TextAlign::BASELINE_RIGHT, "%2.0f", id(weather_temperature).state);
                }
        
              // ----------------------------------------------------------------------------------- UV INDEX
                if(id(uv_index).has_state ()) {
                    it.printf(100, 324, id(font_mdi_medium), color_black, TextAlign::BASELINE_RIGHT, "\U000F0F37");
                    it.printf(140, 320, id(font_weekday), color_black, TextAlign::BASELINE_RIGHT, "%2.0f", id(uv_index).state);
                    it.printf(145, 320, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "UVI");
                }
        
              // ----------------------------------------------------------------------------------- PRESSURE
                if(id(weather_pressure).has_state ()) {
                    // pressure trend
                    if(id(pressure_trend).state == "on") {
                        it.printf(325, 220, id(font_mdi_medium), color_black, TextAlign::BASELINE_CENTER, "\U000F19B4");
                    } else if(id(pressure_trend).state == "off") {
                        it.printf(325, 222, id(font_mdi_medium), color_black, TextAlign::BASELINE_CENTER, "\U000F19B7");
                    } else {
                        it.printf(325, 222, id(font_mdi_medium), color_black, TextAlign::BASELINE_CENTER, "\U000F029A");
                    }
                    it.printf(410, 220, id(font_weekday), color_black, TextAlign::BASELINE_RIGHT, "%2.0f", id(weather_pressure).state);
                    it.printf(415, 220, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "hPa");
                }
        
              // ----------------------------------------------------------------------------------- WIND
                if(id(wind_speed).has_state ()) {
                    it.printf(330, 270, id(font_mdi_medium), color_black, TextAlign::BASELINE_CENTER, "\U000F15FA");
                    it.printf(410, 270, id(font_weekday), color_black, TextAlign::BASELINE_RIGHT, "%2.0f", id(wind_speed).state);
                    it.printf(415, 270, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "kmh");
                }
        
              // ----------------------------------------------------------------------------------- WIND DIRECTION & BEARING
                if(id(wind_bearing).has_state ()) {
                    if (id(wind_bearing).state > 337.5) {
                        it.printf(415, 253, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "N");
                    } else if(id(wind_bearing). state > 292.5) {
                        it.printf(415, 253, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "NW");
                    } else if(id(wind_bearing). state > 247.5) {
                        it.printf(415, 253, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "W");
                    } else if(id(wind_bearing). state > 202.5) {
                        it.printf(415, 253, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "SW");
                    } else if(id(wind_bearing). state > 157.5) {
                        it.printf(415, 253, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "S");
                    } else if(id(wind_bearing). state > 112.5) {
                        it.printf(415, 253, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "SE");
                    } else if(id(wind_bearing). state > 67.5) {
                        it.printf(415, 253, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "E");
                    } else if(id(wind_bearing). state > 22.5) {
                        it.printf(415, 253, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "NE");
                    } else if(id(wind_bearing). state >= 0) {
                        it.printf(415, 253, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "N");
                    }
                }
        
              // ----------------------------------------------------------------------------------- RAIN
                if(id(rain).has_state ()) {
                    it.printf(330, 324, id(font_mdi_medium), color_black, TextAlign::BASELINE_CENTER, "\U000F054A");
                    it.printf(410, 320, id(font_weekday), color_black, TextAlign::BASELINE_RIGHT, "%2.0f", id(rain).state);
                    it.printf(415, 320, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "mm");
                }
        
              // ----------------------------------------------------------------------------------- Print sunrise
                if(id(sun_sunrise).has_state ()) {
                    it.printf(100, 145, id(font_mdi_medium), color_black, TextAlign::CENTER_RIGHT, "\U000F059C");
                    it.printf(105, 145, id(font_small_bold), color_black, TextAlign::CENTER_LEFT, "%s", id(sun_sunrise).state.c_str());
                }      
              // ----------------------------------------------------------------------------------- Print sunset
                if(id(sun_sunset).has_state ()) {
                    it.printf(455, 145, id(font_mdi_medium), color_black, TextAlign::CENTER_RIGHT, "\U000F059B");
                    it.printf(415, 145, id(font_small_bold), color_black, TextAlign::CENTER_RIGHT, "%s", id(sun_sunset).state.c_str());
                }
        
              // ----------------------------------------------------------------------------------- Print moonrise
                if(id(moon_rise).has_state ()) {
                    it.printf(155, 170, id(font_mdi_medium), color_black, TextAlign::CENTER_RIGHT, "\U000F1A0A");
                    it.printf(155, 170, id(font_small_bold), color_black, TextAlign::CENTER_LEFT, "%s", id(moon_rise).state.c_str());
                }      
              // ----------------------------------------------------------------------------------- Print moonset
                if(id(moon_set).has_state ()) {
                    it.printf(400, 170, id(font_mdi_medium), color_black, TextAlign::CENTER_RIGHT, "\U000F1A09");
                    it.printf(365, 170, id(font_small_bold), color_black, TextAlign::CENTER_RIGHT, "%s", id(moon_set).state.c_str());
                }
              // ----------------------------------------------------------------------------------- MOON PHASE ICON ------------------
                if(id(moon_phase).has_state ()) {
                    it.printf(265, 153, id(font_mdi_medlarge), color_black, TextAlign::CENTER, "%s", moon_icon_map[id(moon_phase).state.c_str()].c_str());
                }    
        
              // ----------------------------------------------------------------------------------- WEATHER FORECAST ------------------ 
                if(id(weather_temperature_0).has_state ()) {
                    it.printf(90, 362, id(font_small_bold), color_black, TextAlign::TOP_CENTER, "%s", id(weather_timestamp_0).state.c_str());
                    it.printf(90, 386, id(font_mdi_medium), color_black, TextAlign::TOP_CENTER, "%s", weather_icon_map[id(weather_condition_0).state.c_str()].c_str());
                    it.printf(90, 434, id(font_small_bold), color_black, TextAlign::TOP_CENTER, "%s", id(weather_maxlow_0).state.c_str());
                }
                
                if(id(weather_temperature_1).has_state ()) {
                    it.printf(200, 362, id(font_small_bold), color_black, TextAlign::TOP_CENTER, "%s", id(weather_timestamp_1).state.c_str());
                    it.printf(200, 386, id(font_mdi_medium), color_black, TextAlign::TOP_CENTER, "%s", weather_icon_map[id(weather_condition_1).state.c_str()].c_str());
                    it.printf(200, 434, id(font_small_bold), color_black, TextAlign::TOP_CENTER, "%s", id(weather_maxlow_1).state.c_str());
                }
                
                if(id(weather_temperature_2).has_state ()) {
                    it.printf(315, 362, id(font_small_bold), color_black, TextAlign::TOP_CENTER, "%s", id(weather_timestamp_2).state.c_str());
                    it.printf(315, 386, id(font_mdi_medium), color_black, TextAlign::TOP_CENTER, "%s", weather_icon_map[id(weather_condition_2).state.c_str()].c_str());
                    it.printf(315, 434, id(font_small_bold), color_black, TextAlign::TOP_CENTER, "%s", id(weather_maxlow_2).state.c_str());
                }
                
                if(id(weather_temperature_3).has_state ()) {
                    it.printf(425, 362, id(font_small_bold), color_black, TextAlign::TOP_CENTER, "%s", id(weather_timestamp_3).state.c_str());
                    it.printf(425, 386, id(font_mdi_medium), color_black, TextAlign::TOP_CENTER, "%s", weather_icon_map[id(weather_condition_3).state.c_str()].c_str());
                    it.printf(425, 434, id(font_small_bold), color_black, TextAlign::TOP_CENTER, "%s", id(weather_maxlow_3).state.c_str());
                }
                    
              // ------------------------------------------------------------------- DIVIDER
                it.image(0, 465, id(line));
        
              // ----------------------------------------------------------------------------------- PLANTS ------------------ 
                if(id(nandina_humidity).has_state ()) {
                    it.print(145, 485, id(font_small_bold), color_black, TextAlign::TOP_CENTER, "Nandina");
                    it.printf(145, 510, id(font_mdi_medium), color_black, TextAlign::TOP_CENTER, "\U000F024A");
                    it.printf(140, 565, id(font_small_bold), color_black, TextAlign::BASELINE_RIGHT, "%2.0f", id(nandina_humidity).state);
                    it.print(145, 565, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "%");
        
                }
                if(id(aloe_humidity_1).has_state ()) {
                    it.print(255, 485, id(font_small_bold), color_black, TextAlign::TOP_CENTER, "Aloe 1");
                    it.printf(255, 510, id(font_mdi_medium), color_black, TextAlign::TOP_CENTER, "\U000F024A");
                    it.printf(255, 565, id(font_small_bold), color_black, TextAlign::BASELINE_RIGHT, "%2.0f", id(aloe_humidity_1).state);
                    it.print(260, 565, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "%");
                }
                if(id(aloe_humidity_2).has_state ()) {
                    it.print(365, 485, id(font_small_bold), color_black, TextAlign::TOP_CENTER, "Aloe 2");
                    it.printf(365, 510, id(font_mdi_medium), color_black, TextAlign::TOP_CENTER, "\U000F024A");
                    it.printf(365, 565, id(font_small_bold), color_black, TextAlign::BASELINE_RIGHT, "%2.0f", id(aloe_humidity_2).state);
                    it.print(370, 565, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "%");
                }
        
              // ------------------------------------------------------------------- DIVIDER
                it.image(0, 585, id(line));
        
              // ----------------------------------------------------------------------------------- ENERGY
                if(id(dailyenergy).has_state ()) {
                    it.printf(100, 622, id(font_mdi_medium), color_black, TextAlign::BASELINE_RIGHT, "\U000F0199");
                    it.printf(165, 620, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "%s", "KWh/d");
                    it.printf(160, 620, id(font_small_bold), color_black, TextAlign::BASELINE_RIGHT, "%s", id(dailyenergy).state.c_str());
                }   
                if(id(monthlyenergy).has_state ()) {
                  //  it.printf(500, 622, id(font_mdi_medium), color_black, TextAlign::BASELINE_RIGHT, "\U000F0199");
                    it.printf(345, 620, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "%s", "KWh/mo");
                    it.printf(340, 620, id(font_small_bold), color_black, TextAlign::BASELINE_RIGHT, "%s", id(monthlyenergy).state.c_str());
                }   
        
              // ----------------------------------------------------------------------------------- LAST UPDATE
              it.printf(395, 730, id(font_small_book), color_black, TextAlign::BASELINE_RIGHT, "%s", "Last update");      
              it.strftime(400, 730, id(font_small_book), TextAlign::BASELINE_LEFT, "%H:%M", id(esptime).now());
        
              // ----------------------------------------------------------------------------------- WiFi
              if(id(wifisignal).has_state ()) {
                if (id(wifisignal).state >= -50) {
                    // Excellent # mdi-wifi-strength-4 "\U000F0928" 255, 230
                    it.printf(85, 700, id(font_mdi_medium), color_black, TextAlign::TOP_CENTER, "\U000F0928");
                } else if (id(wifisignal).state  >= -60) {
                    //Good # mdi-wifi-strength-3 "\U000F0925"
                    it.printf(85, 700, id(font_mdi_medium), color_black, TextAlign::TOP_CENTER, "\U000F0925");
                } else if (id(wifisignal).state  >= -67) {
                    //Fair # mdi-wifi-strength-2 "\U000F0922"
                    it.printf(85, 700, id(font_mdi_medium), color_black, TextAlign::TOP_CENTER, "\U000F0922");
                } else if (id(wifisignal).state  >= -70) {
                    //Weak # mdi-wifi-strength-1 "\U000F091F"
                    it.printf(85, 700, id(font_mdi_medium), color_black, TextAlign::TOP_CENTER, "\U000F091F");
                } else {
                    //Unlikely working signal # mdi-wifi-strength-alert-outline "\U000F092B"
                    it.printf(85, 700, id(font_mdi_medium), color_black, TextAlign::TOP_CENTER, "\U000F092B");
                }
              }
        
        captive_portal:

          MaxBarbero grazie mille, si hai usato praticamente il file postato nel link originale adattandolo alle tue esigenze, grazie, prendo spunto anche dal tuo appena mi arriva la roba

          Informativa privacy - Informativa cookie - Termini e condizioni - Regolamento - Disclaimer - 🏳️‍🌈
          P.I. IT16712091004 - info@fibraclick.it

          ♻️ Il server di questo sito è alimentato al 100% con energia rinnovabile