File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ << : !include power_meter_common.yaml
2+
3+ esphome :
4+ min_version : 2025.5.0
5+
6+ http_request :
7+ id : http_request_data
8+ useragent : esphome/device
9+ timeout : 10s
10+ verify_ssl : false
11+
12+ script :
13+ - id : power_meter_source
14+ mode : single
15+ then :
16+ - if :
17+ condition :
18+ lambda : return network::is_connected();
19+ then :
20+ - http_request.get :
21+ url : http://${power_meter_ip_address}/rpc/Shelly.GetStatus
22+ request_headers :
23+ Content-Type : application/json
24+ Authorization : ${power_meter_auth_header}
25+ capture_response : true
26+ max_response_buffer_size : 4096
27+ on_response :
28+ then :
29+ - lambda : |-
30+ if (response->status_code != 200) {
31+ ESP_LOGW("shelly", "HTTP error %d", response->status_code);
32+ id(real_power).publish_state(NAN);
33+ return;
34+ }
35+ bool ok = json::parse_json(body, [](JsonObject root) -> bool {
36+ // Pour Shelly EM Pro tri, la clé est "em:0" au lieu de "em1:X"
37+ if (!root["em:0"]["total_act_power"].is<float>()) {
38+ ESP_LOGW("shelly", "total_act_power missing for em:0");
39+ return false;
40+ }
41+ float power = root["em:0"]["total_act_power"].as<float>();
42+ id(real_power).publish_state(power);
43+ return true;
44+ });
45+ if (!ok) {
46+ id(real_power).publish_state(NAN);
47+ }
48+ on_error :
49+ then :
50+ - lambda : |-
51+ ESP_LOGW("shelly", "HTTP request failed");
52+ id(real_power).publish_state(NAN);
53+
54+ time :
55+ - platform : sntp
56+ on_time :
57+ - seconds : /1
58+ then :
59+ - if :
60+ condition :
61+ lambda : return id(power_meter_activated) != 0;
62+ then :
63+ - script.execute : power_meter_source
You can’t perform that action at this time.
0 commit comments