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?
30.10.2022 21:20 :
Bearbeitet durch User
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}
30.10.2022 22:24 :
Bearbeitet durch User
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 [{ ?
30.10.2022 22:32 :
Bearbeitet durch User
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.
30.10.2022 22:42 :
Bearbeitet durch User
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?
31.10.2022 11:50 :
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.