ESPhome lambda: Problem with string conversion

May I please ask to explain why I am getting error in lambda? I try to update text sensor. if I put string as parameter then it compiles fine:

        String url = "http://api.openweathermap.org/data/2.5/onecall?lat="+String(id(latitude).state)+"&lon="+String(id(latitude).state)+"&appid=9744aad7b7----d8c0d&exclude=minutely,daily,alerts";
        id(last_url).publish_state("test");

but when I put url instead of test I get error:

        String url = "http://api.openweathermap.org/data/2.5/onecall?lat="+String(id(latitude).state)+"&lon="+String(id(latitude).state)+"&appid=9744aad7b7----d8c0d&exclude=minutely,daily,alerts";
        id(last_url).publish_state(url);

the error:

Documents/blinds-brain-gps.yaml: In lambda function:
Documents/blinds-brain-gps.yaml:271:36: error: no matching function for call to 'esphome::template_::TemplateTextSensor::publish_state(String&)'
In file included from src/esphome/components/mqtt/mqtt_text_sensor.h:7:0,
                 from src/esphome.h:24,
                 from src/main.cpp:3:
src/esphome/components/text_sensor/text_sensor.h:25:8: note: candidate: void esphome::text_sensor::TextSensor::publish_state(std::__cxx11::string)
   void publish_state(std::string state);
        ^
src/esphome/components/text_sensor/text_sensor.h:25:8: note:   no known conversion for argument 1 from 'String' to 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}'
*** [.pioenvs/blinds-brain-gps/src/main.cpp.o] Error 1

Banging my head to resolve it…

solved it with this:

      char urlch[200];
      url.toCharArray(urlch,200);
      id(last_url).publish_state(urlch);
1 Like