Ciao,
sto costruendo a fatica (vista la mia scarsità nella programmazione) un pannello e-ink comandato da una scheda ESP32 per pubblicare i dati presi da Home Assistant.
Per intenderci questo: https://community.home-assistant.io/t/use-esphome-with-e-ink-displays-to-blend-in-with-your-home-decor/435428/11

Su ESP32 c'è un misto di yaml (e ok) e credo c++
Mi sto incasinando nel tirare fuori alcune informazioni per mappare il tempo in icona e ottengo questo errore
/config/eink-frame-1.yaml:308:133: error: request for member 'c_str' in 'weather_condition_now->esphome::homeassistant::HomeassistantSensor::<anonymous>.esphome::sensor::Sensor::state', which is of non-class type 'float'
it.printf(245, 335, id(font_mdi_large), color_black, TextAlign::TOP_CENTER, "%s", weather_icon_map[id(weather_condition_now).state.c_str()].c_str());
^~~~~

Eventualmente posso condividere il codice o altri particolari.
C'è qualcuno che se ne intende che può aiutarmi a capire il problema?

    "which is of non-class type 'float' "sembra un classico problema di tipo variabile non conforme. mi sembra di capire che fai la doppia conversione da variabile "tempo.now" da cui estrai il.state e lo converti in stringa col c_str.... insomma pubblica il pezzo di sorgente che già ci capisco poco. Io una cosa del genere preferisco farla coi componentiintegrati in esphome. Nel mio caso il display eink da 4,2 pollici della waveshare

      psf Nel mio caso il display eink da 4,2 pollici della waveshare

      si, io ho il 7.5" della waveshare e la relativa driver board per gestirlo. Come lo comandi tu?
      Questo è il sorgente, al momento ho messo solo un "punto di rottura" che è quando va a convertire il meteo in immagine (ma mi succede sempre quando ho costrutti tipo
      it.printf(245, 335, id(font_mdi_large), color_black, TextAlign::TOP_CENTER, "%s", weather_icon_map[id(weather_condition_now).state.c_str()].c_str());
      Cosa che apparentemente non succede a chi ha postato il codice nel sito sopra....

      La formattazione su questo forum esce male, anche provando a mettere codice, dimmi eventualmente dove ti posso passare il codice

      esphome:
        name: eink-frame-1
      
      esp32:
        board: esp32dev
        framework:
          type: arduino
      
      # Enable logging
      logger:
      
      # Enable Home Assistant API
      api:
      
      ota:
        password: "XXXXXXXXXXXXXXXXX"
      
      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: "XXXXXXXXXXXXX"
      
      # 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-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']
      
        # Include Material Design Icons font
        # Thanks to https://community.home-assistant.io/t/display-materialdesign-icons-on-esphome-attached-to-screen/199790/16
        - 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
                 
        - 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
      
      # Call Weather sensors from HA
      sensor:
        # 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
      
        # Moon phase
        - platform: homeassistant
          entity_id: sensor.moon_phase
          id: moon_phase
        - platform: homeassistant
          entity_id: sensor.moon_rise
          id: moon_rise
        - platform: homeassistant
          entity_id: sensor.moon_set
          id: moon_set
      
        # Wind Speed 
        - platform: homeassistant
          entity_id: weather.home
          attribute: wind_speed
          id: wind_speed
      
        # UV Index
        - platform: homeassistant
          entity_id: sensor.home_uv_index
          id: uv_index
      
        # Rain
        - platform: homeassistant
          entity_id: sensor.home_precipitation
          id: rain
      
        # # Weatherman entities
        - platform: homeassistant
          entity_id: sensor.weatherman_data
          attribute: weather_condition_now
          id: weather_condition_now
      
      text_sensor:
        - 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"
      
      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: 600s
          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"},
                {"waning_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 and month
            it.strftime(265, 70, id(font_weekday), TextAlign::TOP_CENTER, "%A %d %b", id(esptime).now());
      
            // Weather Section ------------------------------------------------------------------- PLACE NAME
              it.print(265, 280, id(font_weekday), color_black, TextAlign::TOP_CENTER, "Appiano Gentile");
      
            // ----------------------------------------------------------------------------------- WEATHER STATE ICON --------------- (110, 358)
                  it.printf(245, 335, 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, 352, id(font_mdi_medium), color_black, TextAlign::BASELINE_RIGHT, "\U000F058E");
                  it.printf(145, 350, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "%s", "%");
                  it.printf(140, 350, id(font_weekday), color_black, TextAlign::BASELINE_RIGHT, "%2.0f", id(weather_humidity).state);
              }   
      
            // ----------------------------------------------------------------------------------- TEMPERATURE
              if(id(weather_temperature).has_state ()) {
                  it.printf(100, 400, id(font_mdi_medium), color_black, TextAlign::BASELINE_RIGHT, "\U000F050F");
                  it.printf(145, 400, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "%s", "°C");
                  it.printf(140, 400, 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, 454, id(font_mdi_medium), color_black, TextAlign::BASELINE_RIGHT, "\U000F0F37");
                  it.printf(140, 450, id(font_weekday), color_black, TextAlign::BASELINE_RIGHT, "%2.0f", id(uv_index).state);
                  it.printf(145, 450, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "UVI");
              }
      
            // ----------------------------------------------------------------------------------- PRESSURE
              if(id(weather_pressure).has_state ()) {
                  it.printf(330, 352, id(font_mdi_medium), color_black, TextAlign::BASELINE_CENTER, "\U000F029A");
                  it.printf(410, 350, id(font_weekday), color_black, TextAlign::BASELINE_RIGHT, "%2.0f", id(weather_pressure).state);
                  it.printf(415, 350, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "hPa");
              }
      
            // ----------------------------------------------------------------------------------- WIND
              if(id(wind_speed).has_state ()) {
                  it.printf(330, 400, id(font_mdi_medium), color_black, TextAlign::BASELINE_CENTER, "\U000F15FA");
                  it.printf(410, 400, id(font_weekday), color_black, TextAlign::BASELINE_RIGHT, "%2.0f", id(wind_speed).state);
                  it.printf(415, 400, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "kmh");
              }
      
            // ----------------------------------------------------------------------------------- RAIN
              if(id(rain).has_state ()) {
                  it.printf(330, 454, id(font_mdi_medium), color_black, TextAlign::BASELINE_CENTER, "\U000F054A");
                  it.printf(410, 450, id(font_weekday), color_black, TextAlign::BASELINE_RIGHT, "%2.0f", id(rain).state);
                  it.printf(415, 450, id(font_small_bold), color_black, TextAlign::BASELINE_LEFT, "mm");
              }
      
            // ----------------------------------------------------------------------------------- Print sunrise
              if(id(sun_sunrise).has_state ()) {
                  it.printf(100, 235, id(font_mdi_medium), color_black, TextAlign::CENTER_RIGHT, "\U000F059C");
                  it.printf(105, 235, 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, 235, id(font_mdi_medium), color_black, TextAlign::CENTER_RIGHT, "\U000F059B");
                  it.printf(415, 235, id(font_small_bold), color_black, TextAlign::CENTER_RIGHT, "%s", id(sun_sunset).state.c_str());
              }
      
      
      
      captive_portal:

      EDIT:

      Il sensore creato su HA è questo:

      Templatizzato così nello yaml di HA

      template:
        - sensor:
            - name: "Weatherman Data"
              state: "OK"
              attributes:
                weather_condition_now: >
                  {% set cond_now = states('weather.home') %}
                  {% if states('sun.sun') == 'below_horizon' %}
                      {% if cond_now == 'sunny' %} night {% elif cond_now == 'partlycloudy' %} night-partly-cloudy {% else %} {{ cond_now }} {% endif %}
                  {% else %}
                      {{ cond_now }}
                  {% endif %}

      A parte le immagini del meteo (che sono statiche per prova) sono arrivato a questo punto

      Nel tuo template prova a cambiare/tradurre home>>casa perchè nel mio HA è tradotto così quella entità predefinita, forse non pescandola da errore "unknow"

      sensor:
          name: "Weatherman Data"
          state: "OK"
          attributes:
          weather_condition_now: >
          {% set cond_now = states('weather.HOME') %}
          {% set cond_now = states('weather.casa') %}

      Cmq io mi limito a delle normali stringhe, non mi azzardo in quelle assegnazioni , non sono un programmatore anche se mi piacerebbe e qualche sfizio me lo prendo.

      Per me è già tanto aver fatto:
      it.printf(250, 80, id(roboto), "%s", id(cancello_grande).state ? "APERTO" : "Chiuso");

        psf Nel tuo template prova a cambiare/tradurre home>>casa perchè nel mio HA è tradotto così quella entità predefinita, forse non pescandola da errore "unknow"

        Mmhhh no, quello mi sembra l'entity_id che dal suo screen è proprio weather.home.

        • psf ha risposto a questo messaggio

          edofullo ti sto dicendo che il nome dell'entità nel mio home assistant è weather.casa , prova a cercare sulla lista da strumenti sviluppatori

            Prova a stampare come debug
            id(weather_condition_now).state.c_str()

            c_str()) : https://cplusplus.com/reference/string/string/c_str/

            E vedere come viene rappresentato, se è come te lo aspetteresti, passa al costrutto più grande fino a trovare l'errore, sembra che la classe non sia quella che si aspetta la funzione

            Se dici che dove hai preso il codice a loro funziona, può essere che il sensore nel tuo caso fornisce dati in un formato differente (se ho capito bene la situazione, perché da telefono è un'impresa 😅)

            Aggiungo:
            Controlla che ti restituisca una stringa presente nella tua mappatura: weather_icon_map

              psf Non ho l'entità weather.casa su HomeAssistant, ma solo weather.home

              Lo strano è che il medesimo problema lo ho su altre entità utilizzando il medesimo costrutto come:

              `

                // ----------------------------------------------------------------------------------- MOON PHASE ICON ------------------
                  if(id(moon_phase).has_state ()) {
                      it.printf(265, 243, id(font_mdi_medlarge), color_black, TextAlign::CENTER, "%s", moon_icon_map[id(moon_phase).state.c_str()].c_str());
                  }     
              
                // ----------------------------------------------------------------------------------- Print moonrise
                  if(id(moon_rise).has_state ()) {
                      it.printf(155, 260, id(font_mdi_medium), color_black, TextAlign::CENTER_RIGHT, "\U000F1A0A");
                      it.printf(155, 260, 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, 260, id(font_mdi_medium), color_black, TextAlign::CENTER_RIGHT, "\U000F1A09");
                      it.printf(365, 260, id(font_small_bold), color_black, TextAlign::CENTER_RIGHT, "%s", id(moon_set).state.c_str());
                  }

              `

              anche se non capisco bene il c_str()
              Nel senso, %s non dovrebbe stampare la stringa dello stato?

              Che voi sappiate c'è un minimo di documentazione da qualche parte per non andare a tentoni?

                bortolotti80 ok, domattina ci provo e vedo cosa restituisce.
                Il fatto è che anche la sorgente dovrebbe essere la stessa (stesso plugin HomeAssistant)

                La funzione c_str dovrebbe convertire il dato in stringa da quel che ne so

                MaxBarbero anche se non capisco bene il c_str()
                Nel senso, %s non dovrebbe stampare la stringa dello stato?

                Serve per ottenere il puntatore alla stringa, altrimenti non stampa printf un oggetto

                Es:
                https://stackoverflow.com/questions/5322216/how-to-print-a-string-in-c

                %s dici che la classe che deve stampare è una stringa, in questo modo printf sa come stampare a schermo il dato (dal primo carattere puntato fino al terminatore di stringa)

                Aggiunto:

                Prova come ultimo test a cambiarlo così e riporta l'errore nel caso:

                weather_icon_map[id(weather_condition_now).state].c_str()

                  bortolotti80 Allora, nell'ultimo caso che hai indicato sembra non trovi corrispondenza nella mappa (non so però cosa tira fuori)

                  `
                  INFO Reading configuration /config/eink-frame-1.yaml...
                  WARNING GPIO15 is a Strapping PIN and should be avoided.
                  Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
                  See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
                  INFO Generating C++ source...
                  INFO Compiling app...

                  Processing eink-frame-1 (board: esp32dev; framework: arduino; platform: platformio/espressif32 @ 5.2.0)

                  HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash

                  • toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch3
                    LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
                    Dependency Graph
                    |-- AsyncTCP-esphome @ 1.2.2
                    |-- WiFi @ 2.0.0
                    |-- FS @ 2.0.0
                    |-- Update @ 2.0.0
                    |-- ESPAsyncWebServer-esphome @ 2.1.0
                    | |-- AsyncTCP-esphome @ 1.2.2
                    |-- DNSServer @ 2.0.0
                    |-- ESPmDNS @ 2.0.0
                    |-- SPI @ 2.0.0
                    Compiling .pioenvs/eink-frame-1/src/main.cpp.o
                    /config/eink-frame-1.yaml: In lambda function:
                    /config/eink-frame-1.yaml:308:107: error: no match for 'operator[]' (operand types are 'std::map<std::cxx11::basic_string<char>, std::cxx11::basic_string<char> >' and 'float')
                    it.printf(245, 335, id(font_mdi_large), color_black, TextAlign::TOP_CENTER, "%s", weather_icon_map[id(weather_condition_now).state].c_str());
                    ^
                    In file included from /config/.esphome/platformio/packages/toolchain-xtensa-esp32/xtensa-esp32-elf/include/c++/8.4.0/map:61,
                    from src/esphome/components/text_sensor/filter.h:7,
                    from src/esphome/components/text_sensor/text_sensor.h:6,
                    from src/esphome/core/controller.h:20,
                    from src/esphome/components/api/api_server.h:4,
                    from src/esphome/components/api/api_connection.h:6,
                    from src/esphome.h:3,
                    from src/main.cpp:3:
                    /config/.esphome/platformio/packages/toolchain-xtensa-esp32/xtensa-esp32-elf/include/c++/8.4.0/bits/stl_map.h:490:7: note: candidate: 'std::map<_Key, _Tp, _Compare, Alloc>::mapped_type& std::map<Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = std::cxx11::basic_string<char>; _Tp = std::cxx11::basic_string<char>; _Compare = std::less<std::cxx11::basic_string<char> >; Alloc = std::allocator<std::pair<const std::cxx11::basic_string<char>, std::cxx11::basic_string<char> > >; std::map<Key, _Tp, _Compare, Alloc>::mapped_type = std::cxx11::basic_string<char>; std::map<Key, _Tp, _Compare, Alloc>::key_type = std::__cxx11::basic_string<char>]'
                    operator[](const key_type& k)
                    ~~~~
                    /config/.esphome/platformio/packages/toolchain-xtensa-esp32/xtensa-esp32-elf/include/c++/8.4.0/bits/stl_map.h:490:7: note: no known conversion for argument 1 from 'float' to 'const key_type&' {aka 'const std::
                    cxx11::basic_string<char>&'}
                    /config/.esphome/platformio/packages/toolchain-xtensa-esp32/xtensa-esp32-elf/include/c++/8.4.0/bits/stl_map.h:510:7: note: candidate: 'std::map<
                    Key, _Tp, _Compare, Alloc>::mapped_type& std::map<Key, _Tp, _Compare, Alloc>::operator[](std::map<Key, _Tp, _Compare, _Alloc>::key_type&&) [with _Key = std::cxx11::basic_string<char>; _Tp = std::cxx11::basic_string<char>; _Compare = std::less<std::cxx11::basic_string<char> >; Alloc = std::allocator<std::pair<const std::cxx11::basic_string<char>, std::cxx11::basic_string<char> > >; std::map<Key, _Tp, _Compare, Alloc>::mapped_type = std::cxx11::basic_string<char>; std::map<Key, _Tp, _Compare, _Alloc>::key_type = std::__cxx11::basic_string<char>]'
                    operator[](key_type&& k)
                    ~~~~
                    /config/.esphome/platformio/packages/toolchain-xtensa-esp32/xtensa-esp32-elf/include/c++/8.4.0/bits/stl_map.h:510:7: note: no known conversion for argument 1 from 'float' to 'std::map<std::
                    cxx11::basic_string<char>, std::cxx11::basic_string<char> >::key_type&&' {aka 'std::cxx11::basic_string<char>&&'}
                    *** [.pioenvs/eink-frame-1/src/main.cpp.o] Error 1
                    ========================= [FAILED] Took 24.98 seconds =========================
                    `

                  Se provo a stampare solamente con questo comando, si rompe nello stesso punto:
                  it.printf(245, 335, id(font_mdi_large), color_black, TextAlign::TOP_CENTER, "%s", id(weather_condition_now).state.c_str());

                  /config/eink-frame-1.yaml:309:116: error: request for member 'c_str' in 'weather_condition_now->esphome::homeassistant::HomeassistantSensor::<anonymous>.esphome::sensor::Sensor::state', which is of non-class type 'float'
                  it.printf(245, 335, id(font_mdi_large), color_black, TextAlign::TOP_CENTER, "%s", id(weather_condition_now).state.c_str());
                  ^~~~~

                  Se provo invece a non mettere la conversion in stringa, viene compilato, ma si impalla in quanto dopo aver flashato il firmware nuovo non si muove nulla, come se non riuscisse più a connettersi per far vedere il log

                  `
                  ========================= [SUCCESS] Took 50.78 seconds =========================
                  INFO Successfully compiled program.
                  INFO Resolving IP address of eink-frame-1.local
                  INFO -> 192.168.100.219
                  INFO Uploading /config/.esphome/build/eink-frame-1/.pioenvs/eink-frame-1/firmware.bin (1034384 bytes)
                  Uploading: [============================================================] 100% Done...

                  INFO Waiting for result...
                  INFO OTA successful
                  INFO Successfully uploaded program.
                  INFO Starting log output from eink-frame-1.local using esphome API
                  WARNING Can't connect to ESPHome API for eink-frame-1.local: Error resolving IP address: [Errno -3] Temporary failure in name resolution
                  INFO Trying to reconnect to eink-frame-1.local in the background
                  `

                  Ho capito dove stava il problema.
                  Quando si dichiarano i sensori nello yaml, la sezione sensor: viene interpretata come float, mentre quei sensori vanno messi nella sezione text_sensor:
                  Il problema quindi era il fatto che tentava di convertire un valore dichiarato come (immagino) float in stringa e la compilazione andava in errore.

                    MaxBarbero pannello e-ink

                    Scusate l'OT, posso chiederti dove hai acquistato questo pannello?

                      paolone12 su Amazon. Ci sono di varie dimensioni
                      https://www.amazon.it/gp/product/B07Q5Q117G/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&th=1

                      Ti serve poi o il raspberry (dovrebbe andare con il materiale che c'è nella confezione) o come nel mio caso una schedina ESP32 per comandarlo
                      https://www.amazon.it/gp/product/B07RM1BBVF/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&th=1

                      La schedina l'ho però presa su ebay dalla Germania, quella linkata arriva dalla Cina con i tempi biblici soliti

                      MaxBarbero Il problema quindi era il fatto che tentava di convertire un valore dichiarato come (immagino) float in stringa e la compilazione andava in errore

                      Ottimo 👍, esatto non compilava nemmeno perché erano due tipi differenti, almeno mi aspetterei così

                      Ma le variabili non le dichiara nel codice che hai condiviso qui o sbaglio?

                        Ma perché non localizzi in italiano HA per avere giorno corretto? Forse basta reimpostare l'integrazione meteo.

                          bortolotti80 si era nel codice condiviso. Li avevo messi erroneamente nella sezione sbagliata.. Troppi taglia e cuci di codice 😊

                          psf Ma perché non localizzi in italiano HA per avere giorno corretto? Forse basta reimpostare l'integrazione meteo.

                          Preferisco avere tutto in inglese. Il giorno/data non viene però da home Assistant, ma dalla board esp32 sincronizzata via ntp pubblico

                            MaxBarbero
                            Ho visto non avevo fatto caso, certo che era difficile da capire 😅

                            Anche perché quello cosa sono classi?
                            Classe sensor e text_sensor?

                            Quindi la fonte da cui avevi preso il codice aveva sbagliato?

                              bortolotti80 La fonte era corretta (anche se c'erano dei typo in altre cose), il problema è che lo sto facendo simile ma non uguale, oltre a dover cambiare alcuni nomi di sensori per matchare i miei. Quindi tra copia ed incolla di pezzi l'ho messo erroneamente nella sezione sbagliata.
                              L'interfaccia dell'esphome dà qualche avvertimento su alcuni tipi di errori o suggerimenti, ma su quello non dava indicazioni se non in fase di compilazione.
                              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++ entra in gioco solo sotto a partire da lambda: |-

                                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