Const char nach String

Hi,

um Weatherapi zu nutzen, bediene ich mich ArduinoJason. Jetzt stehe ich bei dem Problem, das ich z.B. die Wetter Kondition auslese, aber ich für LVGL einen String
benötige:

    const char text1 = doc["current"]["condition"]["text"];
    lv_label_set_text(ui_kondition, text1);

Da der Text nur von ArduinoJson als const char übergeben wird, komme
ich da nicht weiter.

void loop(void)
{
  if ((millis() - lastTime) > timerDelay1) {
    lv_timer_handler(); /* let the GUI do its work */
    lastTime1 = millis();
    }
  if ((millis() - lastTime) > timerDelay) {
    // Check WiFi connection status
    if(WiFi.status()== WL_CONNECTED){
      HTTPClient http;  //Declare an object of class HTTPClient
    http.begin("http://api.weatherapi.com/v1/forecast.json?key=xxxxxxx&q=Gelsenkirchen&days=3&aqi=yes&alerts=yes&lang=de");
 
    int httpCode = http.GET();  // send the request
 
    if (httpCode > 0) { // check the returning code
 
      String payload = http.getString();   //Get the request response payload
      Serial.println(payload);
      DynamicJsonDocument doc(32768);
      DeserializationError error = deserializeJson(doc, payload);
      if (error) {
        Serial.print("Error parsing JSON: ");
        Serial.println(error.c_str());
      } else {
        // Access individual items
        Serial.println("Parsed Data:");
        temp_f =doc["current"]["temp_c"];
        sprintf(lvglstring,"%3.2f°C",temp_f);
        lv_label_set_text(ui_tempc, lvglstring);

        temp_f =doc["current"]["feelslike_c"];
        sprintf(lvglstring,"%3.2f°C",temp_f);
        lv_label_set_text(ui_tempfeelslike, lvglstring);

        const char text1 = doc["current"]["condition"]["text"];
        lv_label_set_text(ui_kondition, text1);
      }

    } 
    }
    lastTime = millis();
  }
}

Gruß Sascha

doch, dafür gibt es eben den .as<String>() Helper.

hier hab ich ein komplettes Beispiel für OpenWeatherMap mit der aktuellen API 3.0:

https://werner.rothschopf.net/microcontroller/202409_esp_weather_en.htm

@sascha_st75
Ist das der Gültiger OW Key?
Wen ja ändere den.

vieleicht kann @uwefed das als Moderator ändern ... wenn er es ändert - bleibt es erhalten.

Aber eigentlich sollte der Key als kompromittiert eingestuft werden und @sascha_st75 soll sich einen neuen besorgen.

Wenn es so geht dann ist ja kein Problem.

Hi,

hab den Key geändert. Wäre aber auch nicht schlimm gewesen da eh nur der kostenlose.. Der Tip mit ".as......" ist sehr gut. Jedoch erwartet lv_label_set_text den Typ const char:

void lv_label_set_text(lv_obj_t * obj, const char * text);

Gruß Sascha

Die nutze auch.
Problem ist, wenn jemand mit dem Key bombardiert den Server wird der geblockt für 24Std, un du suchst wie Bekloppter nach Fehler.
Mir ist so was Passiert, zufällig die Abfrage Zeit kommentierte, dann ging nichts mehr, es wahr gar nicht eine Stunde am Laufen

tja wenn man nur Codeschnipsel postet die niemand ausprobieren kann, dann sucht man halt Stunden.

wennst einen char pointer brauchst vieleicht geht so was:

  const char *text1 = current_weather_0["icon"];

zumindest kompiliert das bei mir.

post modifiziert.
Grüße Uwe

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.