English version:
Hello,
I have a String that contains the power consumption of my house it looks something like that:
{"ble":{},"cloud":{"connected":true},"em:0":{"id":0,"a_current":0.284,"a_voltage":231.3,"a_act_power":39.0,"a_aprt_power":65.6,"a_pf":0.71,"a_freq":50.0,"b_current":0.750,"b_voltage":228.1,"b_act_power":114.9,"b_aprt_power":171.0,"b_pf":0.67,"b_freq":50.0,"c_current":1.335,"c_voltage":225.7,"c_act_power":247.6,"c_aprt_power":300.7,"c_pf":0.82,"c_freq":50.0,"n_current":null,"total_current":2.368,"total_act_power":401.539,"total_aprt_power":537.280, "user_calibrated_phase":[]},"emdata:0":{"id":0,"a_total_act_energy":47449.04,"a_total_act_ret_energy":0.00,"b_total_act_energy":29757.56,"b_total_act_ret_energy":0.00,"c_total_act_energy":48733.79,"c_total_act_ret_energy":0.00,"total_act":125940.39, "total_act_ret":0.00},"eth":{"ip":null},"modbus":{},"mqtt":{"connected":false},"sys":{"mac":"34987A687370","restart_required":false,"time":"17:30","unixtime":1704385844,"uptime":1047885,"ram_size":241352,"ram_free":103720,"fs_size":524288,"fs_free":184320,"cfg_rev":20,"kvs_rev":0,"schedule_rev":0,"webhook_rev":0,"available_updates":{},"reset_reason":3},"temperature:0":{"id": 0,"tC":44.5, "tF":112.1},"wifi":{"sta_ip":"REMOVED","status":"got ip","ssid":"REMOVED","rssi":-77},"ws":{"connected":false}}
to get this string i coded this on my esp32:
#include <WiFi.h>
#include <HTTPClient.h>
const char* ssid = "REMOVED";
const char* password = "REMOVED";
void setup() {
Serial.begin(115200);
delay(4000);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the WiFi network");
}
void loop() {
if ((WiFi.status() == WL_CONNECTED)) { //Check the current connection status
HTTPClient http;
http.begin("http://192.168.178.85/rpc/Shelly.GetStatus"); //Specify the URL
int httpCode = http.GET(); //Make the request
if (httpCode > 0) { //Check for the returning code
String payload = http.getString();
Serial.println(httpCode);
Serial.println(payload);
}
else {
Serial.println("Error on HTTP request");
}
http.end(); //Free the resources
}
delay(1000);
}
It connects with my Wifi and does http.get to get that string. Now i want to store the values for every "power information" in its own variabel. Online i have read something about "strtok" but i dont really know/understand how to use it. Could somebody help me? Thanks infront.
German version:
Hallo,
ich habe einen String aus dem ich gerne daten herausnehmen möchte er enthält den verbrauch meines Hauses. (String von oben)
Als Gerät benutze ich den esp32 und habe im voraus um den String zu bekommen den code von oben programmiert.
Nun möchte ich aus dem String die Daten herausnehmen und in ihre eigen Variable speichern, sodass ich mit der Variable weiter Programmieren kann. Online habe ich was von "strtok" gelesen, habe das ganze aber nicht wirklich verstanden. Vielleicht gibt es einen einfacheren Weg die Variablennamen und die floats aus dem String herauszubekommen. Danke im Voraus.