Davon möchte ich "Power" haben: 1 {"StatusSNS":{"Time":"2022-10-30T22:15:02","ENERGY":{"TotalStartTime":"2022-06-17T08:03:04","Total":283.896,"Yesterday":1.467,"Today":0.467,"Power": 0,"ApparentPower": 0,"ReactivePower": 0,"Factor":0.00,"Voltage": 0,"Current":0.000}}}
Das problem ist das ist unter ["ENERGY"] verpackt. Das übliche 1 error = deserializeJson(doc, payload);
2 pwr = doc["Power"];
geht da nicht.
Wie komm ich da ran?
von
EAF (Gast)
30.10.2022 21:43
Meine Glaskugel sagt: 1 pwr = doc [ "ENERGY" ][ "Power" ];
Alles andere würde keinen Sinn machen.
1 pwr = doc["StatusSNS"]["ENERGY"]["Power"];
Ich danke für die hilfe !
Hier das nächste: 1 {"wifi_sta":{"connected":true,"ssid":"FSM","ip":"192.168.178.33","rssi":-55},"cloud":{"enabled":true,"connected":true},"mqtt":{"connected":false},"time":"22:23","unixtime":1667165039,"serial":194,"has_update":false,"mac":"E8DB84D32771","cfg_changed_cnt":0,"actions_stats":{"skipped":0},"relays":[{"ison":true,"has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"overpower":false,"source":"http"}],"meters":[{"power":0.68,"overpower":0.00,"is_valid":true,"timestamp":1667168639,"counters":[20.868, 0.369, 0.000],"total":46}],"inputs":[{"input":0,"event":"","event_cnt":0}],"temperature":26.73,"overtemperature":false,"tmp":{"tC":26.73,"tF":80.11, "is_valid":true},"temperature_status":"Normal","ext_sensors":{},"ext_temperature":{},"ext_humidity":{},"update":{"status":"idle","has_update":false,"new_version":"20220809-124723/v1.12-g99f7e0b","old_version":"20220809-124723/v1.12-g99f7e0b","beta_version":"20221014-091548/v1.12.1-rc1-gd2158aa"},"ram_total":51272,"ram_free":37456,"fs_size":233681,"fs_free":148592,"uptime":8531}
von
EAF (Gast)
30.10.2022 22:25
Alt G. schrieb:
> ["StatusSNS"]
Ja, den habe ich übersehen, mich nur auf deinen Text verlassen..
Den: 1 {
2 "wifi_sta":{"connected":true,"ssid":"FSM","ip":"192.168.178.33","rssi":-55},
3 "cloud":{"enabled":true,"connected":true},
4 "mqtt":{"connected":false},
5 "time":"22:08",
6 "unixtime":1667164089,
7 "serial":169,
8 "has_update":false,
9 "mac":"E8DB84D32771",
10 "cfg_changed_cnt":0,
11 "actions_stats":{"skipped":0},
12 "relays":[{"ison":false,"has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"overpower":false,"source":"http"}],
13 "meters":[{"power":0.00,"overpower":0.00,"is_valid":true,"timestamp":1667167689,"counters":[0.000, 0.000, 0.000],"total":25}],
14 "inputs":[{"input":0,"event":"","event_cnt":0}],
15 "temperature":25.89,
16 "overtemperature":false,
17 "tmp":{"tC":25.89,"tF":78.60, "is_valid":true},
18 "temperature_status":"Normal",
19 "ext_sensors":{},
20 "ext_temperature":{},
21 "ext_humidity":{},
22 "update":{"status":"idle","has_update":false,"new_version":"20220809-124723/v1.12-g99f7e0b","old_version":"20220809-124723/v1.12-g99f7e0b","beta_version":"20221014-091548/v1.12.1-rc1-gd2158aa"},
23 "ram_total":51272,
24 "ram_free":37264,
25 "fs_size":233681,
26 "fs_free":148592,
27 "uptime":7581
28 }
habe ich mit 1 pwr = doc["meters"]["power"];
geht aber nicht. Was bedeutet das [{ ?
1 pwr = doc["meters"][0]["power"];
Alles klar, Danke !
Ich wünschte mir der shelly 1PM hätte einen kürzeren http zugang zum
power wert. Der 2.5 kann das.
Funktioniert.
So lese ich mit einem esp8266 einen shelly 1PM, einen shelly 2.5, und
einen sonoff pow r2 aus:
1 enum devtype {Shelly1, Shelly251, Shelly252, SonoffPow};
2
3 String Shelly_1PM = "192.168.178.33";
4 String Shelly_2p5 = "192.168.178.52";
5 String SonoffPowR2 = "192.168.178.41";
6
7 int http_getpow(enum devtype dev)
8 {
9 StaticJsonDocument<2000> doc;
10 WiFiClient client;
11 HTTPClient http;
12 String getstr;
13 int pwr;
14
15 switch (dev)
16 {
17 case Shelly1: getstr = "http://" + Shelly_1PM + "/status"; break;
18 case Shelly251: getstr = "http://" + Shelly_2p5 + "/meter/0"; break;
19 case Shelly252: getstr = "http://" + Shelly_2p5 + "/meter/1"; break;
20 case SonoffPow: getstr = "http://" + SonoffPowR2 + "/cm?cmnd=status%2010"; break;
21 }
22 if (http.begin(client, getstr))
23 {
24 int httpCode = http.GET();
25 if (httpCode > 0)
26 {
27 if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY)
28 {
29 String payload = http.getString();
30 //Serial.println(payload);
31 DeserializationError error = deserializeJson(doc, payload);
32 if (error) Serial.print(F("deserializeJson() failed: "));
33 switch (dev)
34 {
35 case Shelly1 : pwr = doc["meters"][0]["power"]; break;
36 case Shelly251: pwr = doc["power"]; break;
37 case Shelly252: pwr = doc["power"]; break;
38 case SonoffPow: pwr = doc["StatusSNS"]["ENERGY"]["Power"]; break;
39 }
40 }
41 }
42 else Serial.printf("[HTTP] GET failed %s\n", http.errorToString(httpCode).c_str());
43 http.end();
44 }
45 else Serial.printf("[HTTP} Unable to connect\n");
46 return pwr;
47 }
Das ergibt dann sowas wie bild oben.
Das ist ertrag meiner micro-solar-WR.
Drei mal GDI und ein soyosorce (orange). Stark bewölkt.
Die spikes nach unten versteh ich nicht. Programmfehler?
Oder machen die WR zwischendurch mal pause?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.