Skip to content

Commit be7a4ac

Browse files
famascl3mXavierBerger
authored andcommitted
Create power_meter_shelly_em_pro_tri.yaml
1 parent 23bc1c4 commit be7a4ac

1 file changed

Lines changed: 63 additions & 0 deletions

File tree

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
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

0 commit comments

Comments
 (0)