esphome 2025.9.0b1__py3-none-any.whl → 2025.9.0b2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- esphome/__main__.py +146 -68
- esphome/components/adc/__init__.py +1 -26
- esphome/components/adc/sensor.py +20 -0
- esphome/components/api/api_connection.cpp +4 -11
- esphome/components/api/api_connection.h +0 -1
- esphome/components/api/api_pb2.cpp +0 -8
- esphome/components/api/api_pb2.h +0 -4
- esphome/components/api/api_pb2_dump.cpp +1 -7
- esphome/components/api/api_pb2_service.cpp +0 -14
- esphome/components/api/api_pb2_service.h +1 -3
- esphome/components/api/client.py +5 -3
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +3 -1
- esphome/components/captive_portal/captive_index.h +77 -97
- esphome/components/esp32_ble/ble_uuid.cpp +30 -9
- esphome/components/esp32_ble_beacon/esp32_ble_beacon.cpp +4 -3
- esphome/components/esp32_ble_client/ble_client_base.h +8 -5
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +2 -3
- esphome/components/ethernet/ethernet_component.cpp +48 -2
- esphome/components/ethernet/ethernet_component.h +2 -0
- esphome/components/factory_reset/button/factory_reset_button.cpp +18 -1
- esphome/components/factory_reset/button/factory_reset_button.h +6 -1
- esphome/components/factory_reset/switch/factory_reset_switch.cpp +18 -1
- esphome/components/factory_reset/switch/factory_reset_switch.h +5 -1
- esphome/components/ina2xx_base/__init__.py +4 -2
- esphome/components/md5/md5.cpp +3 -2
- esphome/components/openthread/openthread.cpp +41 -7
- esphome/components/openthread/openthread.h +11 -0
- esphome/components/web_server/server_index_v2.h +149 -149
- esphome/components/wifi/wifi_component.cpp +1 -1
- esphome/components/wifi_info/wifi_info_text_sensor.h +3 -2
- esphome/const.py +2 -1
- esphome/core/helpers.cpp +8 -7
- esphome/core/helpers.h +29 -0
- esphome/core/scheduler.cpp +4 -4
- esphome/core/scheduler.h +1 -1
- {esphome-2025.9.0b1.dist-info → esphome-2025.9.0b2.dist-info}/METADATA +2 -2
- {esphome-2025.9.0b1.dist-info → esphome-2025.9.0b2.dist-info}/RECORD +41 -41
- {esphome-2025.9.0b1.dist-info → esphome-2025.9.0b2.dist-info}/WHEEL +0 -0
- {esphome-2025.9.0b1.dist-info → esphome-2025.9.0b2.dist-info}/entry_points.txt +0 -0
- {esphome-2025.9.0b1.dist-info → esphome-2025.9.0b2.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.9.0b1.dist-info → esphome-2025.9.0b2.dist-info}/top_level.txt +0 -0
@@ -7,103 +7,83 @@ namespace esphome {
|
|
7
7
|
namespace captive_portal {
|
8
8
|
|
9
9
|
const uint8_t INDEX_GZ[] PROGMEM = {
|
10
|
-
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
0x3b, 0xdc, 0x28, 0x85, 0xe0, 0x77, 0x63, 0x16, 0xfe, 0x79, 0x31, 0xa3, 0x16, 0x01, 0x46, 0x06, 0xe1, 0x25, 0x0d,
|
88
|
-
0xc9, 0x08, 0xda, 0xa1, 0x3b, 0x9b, 0x32, 0x98, 0x5c, 0x5d, 0xc0, 0x04, 0x46, 0x64, 0x34, 0x81, 0x0b, 0x18, 0x5a,
|
89
|
-
0x74, 0x2f, 0xc8, 0x64, 0xd0, 0x09, 0x79, 0x8c, 0x7c, 0x2b, 0x8c, 0x83, 0x3f, 0x30, 0x8c, 0x4f, 0xf9, 0xf4, 0x07,
|
90
|
-
0x76, 0xe9, 0xff, 0x71, 0x05, 0x45, 0x7e, 0xd7, 0x86, 0x45, 0x7e, 0xf7, 0x3c, 0x60, 0xbb, 0xa8, 0x24, 0xb2, 0xdd,
|
91
|
-
0x48, 0x12, 0x15, 0x14, 0x44, 0x16, 0x57, 0x3c, 0x4d, 0x4e, 0x5a, 0xfd, 0xc8, 0x2f, 0xe8, 0x61, 0xab, 0xa0, 0xc9,
|
92
|
-
0xa3, 0xc6, 0xbd, 0xdb, 0x6b, 0x2b, 0x7d, 0x72, 0x53, 0x20, 0xbc, 0xbe, 0x7e, 0x07, 0x6b, 0x51, 0x96, 0x20, 0xd5,
|
93
|
-
0x1a, 0x4c, 0x73, 0x0f, 0x46, 0xd9, 0x57, 0x03, 0x89, 0xa9, 0xb1, 0xa4, 0x29, 0x10, 0xf6, 0x7d, 0x04, 0x21, 0x24,
|
94
|
-
0x9a, 0x37, 0xc9, 0xbb, 0x12, 0xb9, 0x46, 0x58, 0x88, 0x15, 0x82, 0x30, 0xa0, 0x55, 0x85, 0x60, 0x84, 0x1d, 0x8e,
|
95
|
-
0x82, 0x2d, 0x5f, 0xe4, 0x77, 0x87, 0x74, 0x8d, 0xb2, 0xc8, 0x62, 0x89, 0x26, 0xd9, 0x77, 0xc4, 0x51, 0x11, 0x76,
|
96
|
-
0x56, 0x5d, 0xa3, 0x31, 0x42, 0x2e, 0xac, 0x55, 0x61, 0x12, 0xd9, 0x5f, 0xb7, 0xc0, 0xdb, 0xdf, 0x0c, 0xb1, 0xbf,
|
97
|
-
0x16, 0xb9, 0xb0, 0x6f, 0x06, 0x49, 0xd4, 0x76, 0x91, 0x56, 0x83, 0x6d, 0x64, 0xba, 0x07, 0x8e, 0x96, 0x2a, 0x51,
|
98
|
-
0x2e, 0x4c, 0x11, 0x87, 0x0c, 0xea, 0x92, 0xa7, 0x58, 0xa8, 0x32, 0xc3, 0x26, 0xbe, 0xbe, 0xfe, 0xf9, 0xaf, 0xf6,
|
99
|
-
0x35, 0xc4, 0x9a, 0x70, 0x94, 0xac, 0xf5, 0x5d, 0x27, 0x68, 0x89, 0xbd, 0xdc, 0x68, 0xd0, 0xbd, 0x6b, 0xd4, 0x5c,
|
100
|
-
0xeb, 0xb5, 0x6a, 0xb2, 0x47, 0x5a, 0xde, 0x1d, 0x16, 0xf7, 0x9a, 0xda, 0xff, 0xb6, 0x1f, 0xed, 0x84, 0xf4, 0x72,
|
101
|
-
0x5e, 0x09, 0x93, 0x5c, 0xf3, 0x15, 0x46, 0x7e, 0xb7, 0x91, 0x44, 0xbe, 0x75, 0xa0, 0xe3, 0x2d, 0xf6, 0x32, 0x05,
|
102
|
-
0x4d, 0x7e, 0xbd, 0xb9, 0x84, 0xdf, 0xea, 0x8c, 0x1b, 0xec, 0xb0, 0x6f, 0xbd, 0xac, 0xd0, 0x14, 0x2a, 0x8b, 0xdf,
|
103
|
-
0xfd, 0x7a, 0x7d, 0x73, 0xf4, 0x78, 0xd9, 0x32, 0x01, 0xca, 0xb4, 0x7b, 0x6f, 0x59, 0x96, 0x46, 0xd4, 0xbc, 0x31,
|
104
|
-
0xad, 0x5a, 0xcf, 0x66, 0xc7, 0xc1, 0xa3, 0x76, 0x3f, 0x17, 0x25, 0x76, 0x4e, 0xed, 0x05, 0xfd, 0x04, 0xbe, 0x66,
|
105
|
-
0xe3, 0xe1, 0xec, 0x2f, 0xac, 0xf4, 0xbb, 0x00, 0xf2, 0xbb, 0x68, 0xf2, 0xdb, 0xd7, 0xa8, 0x7f, 0x02, 0x14, 0xee,
|
106
|
-
0xbc, 0x64, 0x9d, 0x12, 0x00, 0x00};
|
10
|
+
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x95, 0x16, 0x6b, 0x8f, 0xdb, 0x36, 0xf2, 0x7b, 0x7e,
|
11
|
+
0x05, 0x8f, 0x49, 0xbb, 0x52, 0xb3, 0x7a, 0x7a, 0xed, 0x6c, 0x24, 0x51, 0x45, 0x9a, 0xbb, 0xa2, 0x05, 0x9a, 0x36,
|
12
|
+
0xc0, 0x6e, 0x73, 0x1f, 0x82, 0x00, 0x4b, 0x53, 0x23, 0x8b, 0x31, 0x45, 0xea, 0x48, 0xca, 0x8f, 0x18, 0xbe, 0xdf,
|
13
|
+
0x7e, 0xa0, 0x24, 0x7b, 0x9d, 0x45, 0x73, 0xb8, 0xb3, 0x60, 0x61, 0x38, 0xef, 0x19, 0xcd, 0x83, 0xc5, 0xdf, 0x2a,
|
14
|
+
0xc5, 0xec, 0xbe, 0x03, 0xd4, 0xd8, 0x56, 0x94, 0x85, 0x7b, 0x23, 0x41, 0xe5, 0x8a, 0x80, 0x2c, 0x8b, 0x06, 0x68,
|
15
|
+
0x55, 0x16, 0x2d, 0x58, 0x8a, 0x58, 0x43, 0xb5, 0x01, 0x4b, 0xfe, 0xbc, 0xff, 0x39, 0xb8, 0x2d, 0x0b, 0xc1, 0xe5,
|
16
|
+
0x1a, 0x69, 0x10, 0x84, 0x33, 0x25, 0x51, 0xa3, 0xa1, 0x26, 0x15, 0xb5, 0x34, 0xe3, 0x2d, 0x5d, 0xc1, 0x24, 0x22,
|
17
|
+
0x69, 0x0b, 0x64, 0xc3, 0x61, 0xdb, 0x29, 0x6d, 0x11, 0x53, 0xd2, 0x82, 0xb4, 0x04, 0x6f, 0x79, 0x65, 0x1b, 0x52,
|
18
|
+
0xc1, 0x86, 0x33, 0x08, 0x86, 0xc3, 0x35, 0x97, 0xdc, 0x72, 0x2a, 0x02, 0xc3, 0xa8, 0x00, 0x92, 0x5c, 0xf7, 0x06,
|
19
|
+
0xf4, 0x70, 0xa0, 0x4b, 0x01, 0x44, 0x2a, 0x5c, 0x16, 0x86, 0x69, 0xde, 0x59, 0xe4, 0x5c, 0x25, 0xad, 0xaa, 0x7a,
|
20
|
+
0x01, 0x65, 0x14, 0x51, 0x63, 0xc0, 0x9a, 0x88, 0xcb, 0x0a, 0x76, 0xe1, 0x32, 0x66, 0x2c, 0x86, 0xdb, 0xdb, 0xf0,
|
21
|
+
0xb3, 0x79, 0x56, 0x29, 0xd6, 0xb7, 0x20, 0x6d, 0x28, 0x14, 0xa3, 0x96, 0x2b, 0x19, 0x1a, 0xa0, 0x9a, 0x35, 0x84,
|
22
|
+
0x10, 0xfc, 0xa3, 0xa1, 0x1b, 0xc0, 0xdf, 0x7f, 0xef, 0x9d, 0x99, 0x56, 0x60, 0xff, 0x21, 0xc0, 0x81, 0xe6, 0xa7,
|
23
|
+
0xfd, 0x3d, 0x5d, 0xfd, 0x4e, 0x5b, 0xf0, 0x30, 0x35, 0xbc, 0x02, 0xec, 0x7f, 0x8c, 0x3f, 0x85, 0xc6, 0xee, 0x05,
|
24
|
+
0x84, 0x15, 0x37, 0x9d, 0xa0, 0x7b, 0x82, 0x97, 0x42, 0xb1, 0x35, 0xf6, 0xf3, 0xba, 0x97, 0xcc, 0x29, 0x47, 0xc6,
|
25
|
+
0x03, 0xff, 0x20, 0xc0, 0x22, 0x4b, 0xde, 0x51, 0xdb, 0x84, 0x2d, 0xdd, 0x79, 0x23, 0xc0, 0xa5, 0x97, 0xfe, 0xe0,
|
26
|
+
0xc1, 0xcb, 0x24, 0x8e, 0xfd, 0xeb, 0xe1, 0x15, 0xfb, 0x51, 0x12, 0xc7, 0xb9, 0x06, 0xdb, 0x6b, 0x89, 0xa8, 0xf7,
|
27
|
+
0x50, 0x74, 0xd4, 0x36, 0xa8, 0x22, 0xf8, 0x5d, 0x92, 0xa2, 0xe4, 0x75, 0x98, 0xce, 0x7f, 0x0b, 0x5f, 0xa1, 0x9b,
|
28
|
+
0x30, 0x9d, 0xb3, 0x57, 0xc1, 0x1c, 0x25, 0x37, 0xc1, 0x1c, 0xa5, 0x69, 0x38, 0x47, 0xf1, 0x17, 0x8c, 0x6a, 0x2e,
|
29
|
+
0x04, 0xc1, 0x52, 0x49, 0xc0, 0xc8, 0x58, 0xad, 0xd6, 0x40, 0x30, 0xeb, 0xb5, 0x06, 0x69, 0xdf, 0x2a, 0xa1, 0x34,
|
30
|
+
0x8e, 0xca, 0x67, 0xff, 0x97, 0x42, 0xab, 0xa9, 0x34, 0xb5, 0xd2, 0x2d, 0xc1, 0x43, 0xf6, 0xbd, 0x17, 0x07, 0x7b,
|
31
|
+
0x44, 0xee, 0xe5, 0x5f, 0x10, 0x03, 0xa5, 0xf9, 0x8a, 0x4b, 0x82, 0x9d, 0xc6, 0x5b, 0x1c, 0x95, 0x0f, 0xfe, 0xf1,
|
32
|
+
0x1c, 0x3d, 0x75, 0xd1, 0x4f, 0xf1, 0x28, 0xef, 0xe3, 0x43, 0x61, 0x36, 0x2b, 0xb4, 0x6b, 0x85, 0x34, 0x04, 0x37,
|
33
|
+
0xd6, 0x76, 0x59, 0x14, 0x6d, 0xb7, 0xdb, 0x70, 0x3b, 0x0b, 0x95, 0x5e, 0x45, 0x69, 0x1c, 0xc7, 0x91, 0xd9, 0xac,
|
34
|
+
0x30, 0x1a, 0x0b, 0x01, 0xa7, 0x37, 0x18, 0x35, 0xc0, 0x57, 0x8d, 0x1d, 0xe0, 0xf2, 0xc5, 0x01, 0x8e, 0x85, 0xe3,
|
35
|
+
0x28, 0x1f, 0x3e, 0x5d, 0x58, 0xe1, 0x17, 0x56, 0xe0, 0x47, 0xea, 0xe1, 0x53, 0x98, 0x57, 0x43, 0x98, 0xaf, 0x68,
|
36
|
+
0x8a, 0x52, 0x14, 0x0f, 0x4f, 0x1a, 0x38, 0x78, 0x3a, 0x05, 0x4f, 0x4e, 0xe8, 0xe2, 0xe4, 0xa0, 0x76, 0x11, 0xbc,
|
37
|
+
0x3e, 0xcb, 0x26, 0x0e, 0xb3, 0x49, 0xe2, 0x47, 0x84, 0x13, 0xf8, 0x65, 0x71, 0x79, 0x0e, 0xd2, 0x0f, 0x97, 0x0c,
|
38
|
+
0xce, 0x5a, 0x93, 0x7c, 0x58, 0xd0, 0x39, 0x9a, 0x4f, 0x98, 0x79, 0xe0, 0xe0, 0xf3, 0x09, 0xcd, 0x37, 0x69, 0x93,
|
39
|
+
0xb4, 0xc1, 0x22, 0x98, 0xd3, 0x19, 0x9a, 0x4d, 0x8e, 0xcc, 0xd0, 0x6c, 0x93, 0x36, 0x8b, 0x0f, 0x8b, 0x4b, 0x5c,
|
40
|
+
0x30, 0xfb, 0x72, 0x15, 0x95, 0xd8, 0xcf, 0x30, 0x7e, 0x8c, 0x5c, 0x5d, 0x46, 0x1e, 0x7e, 0x56, 0x5c, 0x7a, 0x18,
|
41
|
+
0xfb, 0xc7, 0x1a, 0x2c, 0x6b, 0x3c, 0x1c, 0x31, 0x25, 0x6b, 0xbe, 0x0a, 0x3f, 0x1b, 0x25, 0xb1, 0x1f, 0xda, 0x06,
|
42
|
+
0xa4, 0x77, 0x12, 0x75, 0x82, 0x30, 0x50, 0xbc, 0xa7, 0x14, 0xeb, 0x1f, 0xce, 0xf5, 0x6f, 0xb9, 0x15, 0x40, 0x6c,
|
43
|
+
0xe8, 0x1a, 0xf6, 0xfa, 0x8c, 0x5d, 0xaa, 0x6a, 0xff, 0x8d, 0xd6, 0x68, 0x92, 0xb1, 0x2f, 0xb8, 0x94, 0xa0, 0xef,
|
44
|
+
0x61, 0x67, 0x09, 0x7e, 0xf7, 0xe6, 0x2d, 0x7a, 0x53, 0x55, 0x1a, 0x8c, 0xc9, 0x10, 0x7e, 0x69, 0xc3, 0x96, 0xb2,
|
45
|
+
0xff, 0x5d, 0x57, 0xf2, 0x95, 0xae, 0x7f, 0xf2, 0x9f, 0x39, 0xfa, 0x1d, 0xec, 0x56, 0xe9, 0xf5, 0xa4, 0xcd, 0xb9,
|
46
|
+
0x96, 0xbb, 0x0e, 0xd3, 0xc4, 0x86, 0xb4, 0x33, 0xa1, 0x11, 0x9c, 0x81, 0x97, 0xf8, 0x61, 0x4b, 0xbb, 0xc7, 0xa8,
|
47
|
+
0xe4, 0x29, 0x51, 0x0f, 0x45, 0xc5, 0x37, 0x88, 0x09, 0x6a, 0x0c, 0xc1, 0x72, 0x54, 0x85, 0xd1, 0x33, 0x34, 0xfc,
|
48
|
+
0x94, 0x64, 0x82, 0xb3, 0x35, 0xc1, 0x7f, 0x31, 0x01, 0x7e, 0xda, 0xff, 0x5a, 0x79, 0x57, 0xc6, 0xf0, 0xea, 0xca,
|
49
|
+
0x0f, 0x37, 0x54, 0xf4, 0x80, 0x08, 0xb2, 0x0d, 0x37, 0x8f, 0x0e, 0xe6, 0xdf, 0x14, 0xeb, 0xcc, 0xfa, 0xca, 0x0f,
|
50
|
+
0x6b, 0xc5, 0x7a, 0xe3, 0xf9, 0xb8, 0x9c, 0xcc, 0x15, 0x74, 0x1c, 0x90, 0xf8, 0x39, 0x7e, 0xe2, 0x51, 0x20, 0xa0,
|
51
|
+
0xb6, 0x67, 0x3e, 0x84, 0x5e, 0x1c, 0x8c, 0x27, 0x43, 0x6d, 0x0c, 0xf7, 0x8f, 0x67, 0x64, 0x61, 0x3a, 0x2a, 0x9f,
|
52
|
+
0x0a, 0x3a, 0x07, 0x5d, 0xab, 0xc8, 0xd0, 0x41, 0xae, 0x5f, 0x3a, 0x2a, 0xcf, 0x06, 0x23, 0x7a, 0x02, 0x5f, 0x1c,
|
53
|
+
0xb8, 0x27, 0xdd, 0x14, 0x5c, 0x9f, 0x35, 0x16, 0x51, 0xc5, 0x37, 0xe5, 0xc3, 0xd1, 0x7f, 0x8c, 0xe3, 0x5f, 0x3d,
|
54
|
+
0xe8, 0xfd, 0x1d, 0x08, 0x60, 0x56, 0x69, 0x0f, 0x3f, 0x97, 0x60, 0xb1, 0x3f, 0x06, 0xfc, 0xcb, 0xfd, 0xbb, 0xdf,
|
55
|
+
0x88, 0xf2, 0xb4, 0x7f, 0xfd, 0x2d, 0x6e, 0xb7, 0x0a, 0x3e, 0x6a, 0x10, 0xff, 0x26, 0x57, 0x6e, 0x19, 0x5c, 0x7d,
|
56
|
+
0xc2, 0x7e, 0x38, 0xc4, 0xfb, 0xf0, 0xb8, 0x11, 0x5c, 0x3b, 0xbf, 0xdc, 0xb5, 0xe2, 0xda, 0x45, 0x18, 0x2c, 0xe6,
|
57
|
+
0xfe, 0xf1, 0xe1, 0xe8, 0x1f, 0xfd, 0xbc, 0x88, 0xc6, 0xb9, 0x5e, 0x16, 0xc3, 0x88, 0x2d, 0x7f, 0x38, 0x2c, 0xd5,
|
58
|
+
0x2e, 0x30, 0xfc, 0x0b, 0x97, 0xab, 0x8c, 0xcb, 0x06, 0x34, 0xb7, 0xc7, 0x8a, 0x6f, 0xae, 0xb9, 0xec, 0x7a, 0x7b,
|
59
|
+
0xe8, 0x68, 0x55, 0x39, 0xca, 0xbc, 0xdb, 0xe5, 0xb5, 0x92, 0xd6, 0x71, 0x42, 0x96, 0x40, 0x7b, 0x1c, 0xe9, 0xc3,
|
60
|
+
0x44, 0xc9, 0x5e, 0xcf, 0xbf, 0x3b, 0xba, 0x82, 0x3b, 0x58, 0xd8, 0xd9, 0x80, 0x0a, 0xbe, 0x92, 0x19, 0x03, 0x69,
|
61
|
+
0x41, 0x8f, 0x42, 0x35, 0x6d, 0xb9, 0xd8, 0x67, 0x86, 0x4a, 0x13, 0x18, 0xd0, 0xbc, 0x3e, 0x2e, 0x7b, 0x6b, 0x95,
|
62
|
+
0x3c, 0x2c, 0x95, 0xae, 0x40, 0x67, 0x71, 0x3e, 0x02, 0x81, 0xa6, 0x15, 0xef, 0x4d, 0x16, 0xce, 0x34, 0xb4, 0xf9,
|
63
|
+
0x92, 0xb2, 0xf5, 0x4a, 0xab, 0x5e, 0x56, 0x01, 0x73, 0x93, 0x36, 0x7b, 0x9e, 0xd4, 0x74, 0x06, 0x2c, 0x9f, 0x4e,
|
64
|
+
0x75, 0x5d, 0xe7, 0x82, 0x4b, 0x08, 0xc6, 0x59, 0x96, 0xa5, 0xe1, 0x8d, 0x13, 0xbb, 0x70, 0x33, 0x4c, 0x1d, 0x62,
|
65
|
+
0xf4, 0x31, 0x89, 0xe3, 0xef, 0xf2, 0x53, 0x38, 0x71, 0xce, 0x7a, 0x6d, 0x94, 0xce, 0x3a, 0xc5, 0x9d, 0x9b, 0xc7,
|
66
|
+
0x96, 0x72, 0x79, 0xe9, 0xbd, 0x2b, 0x93, 0x7c, 0x5a, 0x3f, 0x19, 0x97, 0x83, 0x99, 0x61, 0x09, 0xe5, 0x2d, 0x97,
|
67
|
+
0xe3, 0x0e, 0xcd, 0xd2, 0x45, 0xdc, 0xed, 0x8e, 0xe1, 0x54, 0x20, 0x87, 0x13, 0x77, 0x2d, 0x60, 0x97, 0x7f, 0xee,
|
68
|
+
0x8d, 0xe5, 0xf5, 0x3e, 0x98, 0x76, 0x70, 0x66, 0x3a, 0xca, 0x20, 0x58, 0x82, 0xdd, 0x02, 0xc8, 0x7c, 0xb0, 0x11,
|
69
|
+
0x70, 0x0b, 0xad, 0x99, 0xf2, 0x74, 0x56, 0x33, 0x14, 0xe8, 0xd7, 0xba, 0xfe, 0x1b, 0xb7, 0xab, 0xc5, 0x43, 0x4b,
|
70
|
+
0xf5, 0x8a, 0xcb, 0x60, 0xa9, 0xac, 0x55, 0x6d, 0x16, 0xbc, 0xea, 0x76, 0xf9, 0x84, 0x72, 0xca, 0xb2, 0xc4, 0xb9,
|
71
|
+
0x39, 0xec, 0xd6, 0x53, 0xbe, 0x93, 0x6e, 0x87, 0x8c, 0x12, 0xbc, 0x9a, 0xf8, 0x06, 0x16, 0x14, 0x9f, 0xd3, 0x93,
|
72
|
+
0xcc, 0xbb, 0x1d, 0x72, 0xb8, 0x53, 0xaa, 0x6f, 0xea, 0x5b, 0x9a, 0xc4, 0x7f, 0xf1, 0x45, 0xaa, 0xba, 0x4e, 0x97,
|
73
|
+
0xf5, 0x39, 0x53, 0x6e, 0x4d, 0xba, 0xd6, 0x18, 0x4a, 0xab, 0x88, 0xc6, 0xdb, 0x8c, 0xab, 0x8c, 0xb2, 0x70, 0x19,
|
74
|
+
0x2e, 0x8b, 0x26, 0x41, 0xbc, 0x22, 0x2d, 0x65, 0xe5, 0xc5, 0xf8, 0x2a, 0xa2, 0x26, 0x39, 0x91, 0x9a, 0xa4, 0xfc,
|
75
|
+
0x6a, 0x18, 0x8d, 0xb4, 0xc1, 0xfb, 0xf2, 0xad, 0x92, 0x12, 0x98, 0xe5, 0x72, 0x85, 0xac, 0x42, 0x53, 0x0a, 0xc2,
|
76
|
+
0x30, 0x2c, 0x96, 0xba, 0x7c, 0x2f, 0x80, 0x1a, 0x40, 0x5b, 0xca, 0x6d, 0x58, 0x44, 0x23, 0xff, 0xd8, 0xc7, 0xbc,
|
77
|
+
0x22, 0x12, 0x6c, 0x39, 0x35, 0x6c, 0xd1, 0xcc, 0x46, 0x03, 0x77, 0x60, 0x9d, 0x26, 0x67, 0x60, 0x56, 0x16, 0x6e,
|
78
|
+
0xe5, 0x22, 0x3a, 0x8c, 0x34, 0x12, 0x6d, 0x79, 0xcd, 0xdd, 0x95, 0xa5, 0x2c, 0x86, 0x22, 0x77, 0x1a, 0x5c, 0x9e,
|
79
|
+
0xc7, 0xeb, 0xd5, 0x00, 0x09, 0x90, 0x2b, 0xdb, 0x90, 0x59, 0x8a, 0x3a, 0x41, 0x19, 0x34, 0x4a, 0x54, 0xa0, 0xc9,
|
80
|
+
0xdd, 0xdd, 0xaf, 0x7f, 0x2f, 0x9d, 0x33, 0x8f, 0x72, 0x9d, 0x59, 0x8f, 0x62, 0x0e, 0x98, 0xa4, 0x16, 0x37, 0xe3,
|
81
|
+
0xa5, 0xaa, 0xa3, 0xc6, 0x6c, 0x95, 0xae, 0xbe, 0xd2, 0xf1, 0x7e, 0x42, 0x8e, 0x7a, 0x86, 0xff, 0xd0, 0x2a, 0xe5,
|
82
|
+
0x1d, 0xdd, 0x40, 0x11, 0x4d, 0x87, 0x22, 0x72, 0x0e, 0x8f, 0xf4, 0x66, 0xe2, 0x6b, 0x92, 0xf2, 0x8f, 0xfb, 0x37,
|
83
|
+
0xe8, 0xcf, 0xae, 0xa2, 0x16, 0xc6, 0xb4, 0x0d, 0x51, 0xb5, 0x60, 0x1b, 0x55, 0x91, 0xf7, 0x7f, 0xdc, 0xdd, 0x9f,
|
84
|
+
0x23, 0xec, 0x07, 0x26, 0x04, 0x92, 0x8d, 0xd7, 0xbb, 0x5e, 0x58, 0xde, 0x51, 0x6d, 0x07, 0xb5, 0x81, 0x9b, 0x22,
|
85
|
+
0xa7, 0x18, 0x06, 0x7a, 0xcd, 0x05, 0x8c, 0x61, 0x8c, 0x82, 0x25, 0x3a, 0x79, 0x75, 0xb2, 0xf6, 0xc4, 0xaf, 0x68,
|
86
|
+
0xfc, 0xda, 0xd1, 0xf8, 0xe9, 0xa3, 0xe1, 0xa6, 0xfb, 0x1f, 0x53, 0x58, 0x46, 0xb2, 0xf9, 0x0a, 0x00, 0x00};
|
107
87
|
|
108
88
|
} // namespace captive_portal
|
109
89
|
} // namespace esphome
|
@@ -7,6 +7,7 @@
|
|
7
7
|
#include <cstdio>
|
8
8
|
#include <cinttypes>
|
9
9
|
#include "esphome/core/log.h"
|
10
|
+
#include "esphome/core/helpers.h"
|
10
11
|
|
11
12
|
namespace esphome::esp32_ble {
|
12
13
|
|
@@ -169,22 +170,42 @@ bool ESPBTUUID::operator==(const ESPBTUUID &uuid) const {
|
|
169
170
|
}
|
170
171
|
esp_bt_uuid_t ESPBTUUID::get_uuid() const { return this->uuid_; }
|
171
172
|
std::string ESPBTUUID::to_string() const {
|
173
|
+
char buf[40]; // Enough for 128-bit UUID with dashes
|
174
|
+
char *pos = buf;
|
175
|
+
|
172
176
|
switch (this->uuid_.len) {
|
173
177
|
case ESP_UUID_LEN_16:
|
174
|
-
|
178
|
+
*pos++ = '0';
|
179
|
+
*pos++ = 'x';
|
180
|
+
*pos++ = format_hex_pretty_char(this->uuid_.uuid.uuid16 >> 12);
|
181
|
+
*pos++ = format_hex_pretty_char((this->uuid_.uuid.uuid16 >> 8) & 0x0F);
|
182
|
+
*pos++ = format_hex_pretty_char((this->uuid_.uuid.uuid16 >> 4) & 0x0F);
|
183
|
+
*pos++ = format_hex_pretty_char(this->uuid_.uuid.uuid16 & 0x0F);
|
184
|
+
*pos = '\0';
|
185
|
+
return std::string(buf);
|
186
|
+
|
175
187
|
case ESP_UUID_LEN_32:
|
176
|
-
|
177
|
-
|
178
|
-
|
188
|
+
*pos++ = '0';
|
189
|
+
*pos++ = 'x';
|
190
|
+
for (int shift = 28; shift >= 0; shift -= 4) {
|
191
|
+
*pos++ = format_hex_pretty_char((this->uuid_.uuid.uuid32 >> shift) & 0x0F);
|
192
|
+
}
|
193
|
+
*pos = '\0';
|
194
|
+
return std::string(buf);
|
195
|
+
|
179
196
|
default:
|
180
197
|
case ESP_UUID_LEN_128:
|
181
|
-
|
198
|
+
// Format: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
|
182
199
|
for (int8_t i = 15; i >= 0; i--) {
|
183
|
-
|
184
|
-
|
185
|
-
|
200
|
+
uint8_t byte = this->uuid_.uuid.uuid128[i];
|
201
|
+
*pos++ = format_hex_pretty_char(byte >> 4);
|
202
|
+
*pos++ = format_hex_pretty_char(byte & 0x0F);
|
203
|
+
if (i == 12 || i == 10 || i == 8 || i == 6) {
|
204
|
+
*pos++ = '-';
|
205
|
+
}
|
186
206
|
}
|
187
|
-
|
207
|
+
*pos = '\0';
|
208
|
+
return std::string(buf);
|
188
209
|
}
|
189
210
|
return "";
|
190
211
|
}
|
@@ -31,12 +31,13 @@ void ESP32BLEBeacon::dump_config() {
|
|
31
31
|
char uuid[37];
|
32
32
|
char *bpos = uuid;
|
33
33
|
for (int8_t ii = 0; ii < 16; ++ii) {
|
34
|
-
bpos
|
34
|
+
*bpos++ = format_hex_pretty_char(this->uuid_[ii] >> 4);
|
35
|
+
*bpos++ = format_hex_pretty_char(this->uuid_[ii] & 0x0F);
|
35
36
|
if (ii == 3 || ii == 5 || ii == 7 || ii == 9) {
|
36
|
-
bpos
|
37
|
+
*bpos++ = '-';
|
37
38
|
}
|
38
39
|
}
|
39
|
-
|
40
|
+
*bpos = '\0';
|
40
41
|
ESP_LOGCONFIG(TAG,
|
41
42
|
" UUID: %s, Major: %u, Minor: %u, Min Interval: %ums, Max Interval: %ums, Measured Power: %d"
|
42
43
|
", TX Power: %ddBm",
|
@@ -60,11 +60,14 @@ class BLEClientBase : public espbt::ESPBTClient, public Component {
|
|
60
60
|
if (address == 0) {
|
61
61
|
this->address_str_ = "";
|
62
62
|
} else {
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
63
|
+
char buf[18];
|
64
|
+
uint8_t mac[6] = {
|
65
|
+
(uint8_t) ((this->address_ >> 40) & 0xff), (uint8_t) ((this->address_ >> 32) & 0xff),
|
66
|
+
(uint8_t) ((this->address_ >> 24) & 0xff), (uint8_t) ((this->address_ >> 16) & 0xff),
|
67
|
+
(uint8_t) ((this->address_ >> 8) & 0xff), (uint8_t) ((this->address_ >> 0) & 0xff),
|
68
|
+
};
|
69
|
+
format_mac_addr_upper(mac, buf);
|
70
|
+
this->address_str_ = buf;
|
68
71
|
}
|
69
72
|
}
|
70
73
|
const std::string &address_str() const { return this->address_str_; }
|
@@ -607,9 +607,8 @@ void ESPBTDevice::parse_adv_(const uint8_t *payload, uint8_t len) {
|
|
607
607
|
}
|
608
608
|
|
609
609
|
std::string ESPBTDevice::address_str() const {
|
610
|
-
char mac[
|
611
|
-
|
612
|
-
this->address_[3], this->address_[4], this->address_[5]);
|
610
|
+
char mac[18];
|
611
|
+
format_mac_addr_upper(this->address_, mac);
|
613
612
|
return mac;
|
614
613
|
}
|
615
614
|
|
@@ -300,6 +300,7 @@ void EthernetComponent::loop() {
|
|
300
300
|
this->state_ = EthernetComponentState::CONNECTING;
|
301
301
|
this->start_connect_();
|
302
302
|
} else {
|
303
|
+
this->finish_connect_();
|
303
304
|
// When connected and stable, disable the loop to save CPU cycles
|
304
305
|
this->disable_loop();
|
305
306
|
}
|
@@ -486,10 +487,35 @@ void EthernetComponent::got_ip6_event_handler(void *arg, esp_event_base_t event_
|
|
486
487
|
}
|
487
488
|
#endif /* USE_NETWORK_IPV6 */
|
488
489
|
|
490
|
+
void EthernetComponent::finish_connect_() {
|
491
|
+
#if USE_NETWORK_IPV6
|
492
|
+
// Retry IPv6 link-local setup if it failed during initial connect
|
493
|
+
// This handles the case where min_ipv6_addr_count is NOT set (or is 0),
|
494
|
+
// allowing us to reach CONNECTED state with just IPv4.
|
495
|
+
// If IPv6 setup failed in start_connect_() because the interface wasn't ready:
|
496
|
+
// - Bootup timing issues (#10281)
|
497
|
+
// - Cable unplugged/network interruption (#10705)
|
498
|
+
// We can now retry since we're in CONNECTED state and the interface is definitely up.
|
499
|
+
if (!this->ipv6_setup_done_) {
|
500
|
+
esp_err_t err = esp_netif_create_ip6_linklocal(this->eth_netif_);
|
501
|
+
if (err == ESP_OK) {
|
502
|
+
ESP_LOGD(TAG, "IPv6 link-local address created (retry succeeded)");
|
503
|
+
}
|
504
|
+
// Always set the flag to prevent continuous retries
|
505
|
+
// If IPv6 setup fails here with the interface up and stable, it's
|
506
|
+
// likely a persistent issue (IPv6 disabled at router, hardware
|
507
|
+
// limitation, etc.) that won't be resolved by further retries.
|
508
|
+
// The device continues to work with IPv4.
|
509
|
+
this->ipv6_setup_done_ = true;
|
510
|
+
}
|
511
|
+
#endif /* USE_NETWORK_IPV6 */
|
512
|
+
}
|
513
|
+
|
489
514
|
void EthernetComponent::start_connect_() {
|
490
515
|
global_eth_component->got_ipv4_address_ = false;
|
491
516
|
#if USE_NETWORK_IPV6
|
492
517
|
global_eth_component->ipv6_count_ = 0;
|
518
|
+
this->ipv6_setup_done_ = false;
|
493
519
|
#endif /* USE_NETWORK_IPV6 */
|
494
520
|
this->connect_begin_ = millis();
|
495
521
|
this->status_set_warning(LOG_STR("waiting for IP configuration"));
|
@@ -545,9 +571,27 @@ void EthernetComponent::start_connect_() {
|
|
545
571
|
}
|
546
572
|
}
|
547
573
|
#if USE_NETWORK_IPV6
|
574
|
+
// Attempt to create IPv6 link-local address
|
575
|
+
// We MUST attempt this here, not just in finish_connect_(), because with
|
576
|
+
// min_ipv6_addr_count set, the component won't reach CONNECTED state without IPv6.
|
577
|
+
// However, this may fail with ESP_FAIL if the interface is not up yet:
|
578
|
+
// - At bootup when link isn't ready (#10281)
|
579
|
+
// - After disconnection/cable unplugged (#10705)
|
580
|
+
// We'll retry in finish_connect_() if it fails here.
|
548
581
|
err = esp_netif_create_ip6_linklocal(this->eth_netif_);
|
549
582
|
if (err != ESP_OK) {
|
550
|
-
|
583
|
+
if (err == ESP_ERR_ESP_NETIF_INVALID_PARAMS) {
|
584
|
+
// This is a programming error, not a transient failure
|
585
|
+
ESPHL_ERROR_CHECK(err, "esp_netif_create_ip6_linklocal invalid parameters");
|
586
|
+
} else {
|
587
|
+
// ESP_FAIL means the interface isn't up yet
|
588
|
+
// This is expected and non-fatal, happens in multiple scenarios:
|
589
|
+
// - During reconnection after network interruptions (#10705)
|
590
|
+
// - At bootup when the link isn't ready yet (#10281)
|
591
|
+
// We'll retry once we reach CONNECTED state and the interface is up
|
592
|
+
ESP_LOGW(TAG, "esp_netif_create_ip6_linklocal failed: %s", esp_err_to_name(err));
|
593
|
+
// Don't mark component as failed - this is a transient error
|
594
|
+
}
|
551
595
|
}
|
552
596
|
#endif /* USE_NETWORK_IPV6 */
|
553
597
|
|
@@ -638,7 +682,9 @@ void EthernetComponent::get_eth_mac_address_raw(uint8_t *mac) {
|
|
638
682
|
std::string EthernetComponent::get_eth_mac_address_pretty() {
|
639
683
|
uint8_t mac[6];
|
640
684
|
get_eth_mac_address_raw(mac);
|
641
|
-
|
685
|
+
char buf[18];
|
686
|
+
format_mac_addr_upper(mac, buf);
|
687
|
+
return std::string(buf);
|
642
688
|
}
|
643
689
|
|
644
690
|
eth_duplex_t EthernetComponent::get_duplex_mode() {
|
@@ -102,6 +102,7 @@ class EthernetComponent : public Component {
|
|
102
102
|
#endif /* LWIP_IPV6 */
|
103
103
|
|
104
104
|
void start_connect_();
|
105
|
+
void finish_connect_();
|
105
106
|
void dump_connect_params_();
|
106
107
|
/// @brief Set `RMII Reference Clock Select` bit for KSZ8081.
|
107
108
|
void ksz8081_set_clock_reference_(esp_eth_mac_t *mac);
|
@@ -144,6 +145,7 @@ class EthernetComponent : public Component {
|
|
144
145
|
bool got_ipv4_address_{false};
|
145
146
|
#if LWIP_IPV6
|
146
147
|
uint8_t ipv6_count_{0};
|
148
|
+
bool ipv6_setup_done_{false};
|
147
149
|
#endif /* LWIP_IPV6 */
|
148
150
|
|
149
151
|
// Pointers at the end (naturally aligned)
|
@@ -1,7 +1,13 @@
|
|
1
1
|
#include "factory_reset_button.h"
|
2
|
+
|
3
|
+
#include "esphome/core/defines.h"
|
4
|
+
|
5
|
+
#ifdef USE_OPENTHREAD
|
6
|
+
#include "esphome/components/openthread/openthread.h"
|
7
|
+
#endif
|
8
|
+
#include "esphome/core/application.h"
|
2
9
|
#include "esphome/core/hal.h"
|
3
10
|
#include "esphome/core/log.h"
|
4
|
-
#include "esphome/core/application.h"
|
5
11
|
|
6
12
|
namespace esphome {
|
7
13
|
namespace factory_reset {
|
@@ -13,9 +19,20 @@ void FactoryResetButton::press_action() {
|
|
13
19
|
ESP_LOGI(TAG, "Resetting");
|
14
20
|
// Let MQTT settle a bit
|
15
21
|
delay(100); // NOLINT
|
22
|
+
#ifdef USE_OPENTHREAD
|
23
|
+
openthread::global_openthread_component->on_factory_reset(FactoryResetButton::factory_reset_callback);
|
24
|
+
#else
|
25
|
+
global_preferences->reset();
|
26
|
+
App.safe_reboot();
|
27
|
+
#endif
|
28
|
+
}
|
29
|
+
|
30
|
+
#ifdef USE_OPENTHREAD
|
31
|
+
void FactoryResetButton::factory_reset_callback() {
|
16
32
|
global_preferences->reset();
|
17
33
|
App.safe_reboot();
|
18
34
|
}
|
35
|
+
#endif
|
19
36
|
|
20
37
|
} // namespace factory_reset
|
21
38
|
} // namespace esphome
|
@@ -1,7 +1,9 @@
|
|
1
1
|
#pragma once
|
2
2
|
|
3
|
-
#include "esphome/core/
|
3
|
+
#include "esphome/core/defines.h"
|
4
|
+
|
4
5
|
#include "esphome/components/button/button.h"
|
6
|
+
#include "esphome/core/component.h"
|
5
7
|
|
6
8
|
namespace esphome {
|
7
9
|
namespace factory_reset {
|
@@ -9,6 +11,9 @@ namespace factory_reset {
|
|
9
11
|
class FactoryResetButton : public button::Button, public Component {
|
10
12
|
public:
|
11
13
|
void dump_config() override;
|
14
|
+
#ifdef USE_OPENTHREAD
|
15
|
+
static void factory_reset_callback();
|
16
|
+
#endif
|
12
17
|
|
13
18
|
protected:
|
14
19
|
void press_action() override;
|
@@ -1,7 +1,13 @@
|
|
1
1
|
#include "factory_reset_switch.h"
|
2
|
+
|
3
|
+
#include "esphome/core/defines.h"
|
4
|
+
|
5
|
+
#ifdef USE_OPENTHREAD
|
6
|
+
#include "esphome/components/openthread/openthread.h"
|
7
|
+
#endif
|
8
|
+
#include "esphome/core/application.h"
|
2
9
|
#include "esphome/core/hal.h"
|
3
10
|
#include "esphome/core/log.h"
|
4
|
-
#include "esphome/core/application.h"
|
5
11
|
|
6
12
|
namespace esphome {
|
7
13
|
namespace factory_reset {
|
@@ -17,10 +23,21 @@ void FactoryResetSwitch::write_state(bool state) {
|
|
17
23
|
ESP_LOGI(TAG, "Resetting");
|
18
24
|
// Let MQTT settle a bit
|
19
25
|
delay(100); // NOLINT
|
26
|
+
#ifdef USE_OPENTHREAD
|
27
|
+
openthread::global_openthread_component->on_factory_reset(FactoryResetSwitch::factory_reset_callback);
|
28
|
+
#else
|
20
29
|
global_preferences->reset();
|
21
30
|
App.safe_reboot();
|
31
|
+
#endif
|
22
32
|
}
|
23
33
|
}
|
24
34
|
|
35
|
+
#ifdef USE_OPENTHREAD
|
36
|
+
void FactoryResetSwitch::factory_reset_callback() {
|
37
|
+
global_preferences->reset();
|
38
|
+
App.safe_reboot();
|
39
|
+
}
|
40
|
+
#endif
|
41
|
+
|
25
42
|
} // namespace factory_reset
|
26
43
|
} // namespace esphome
|
@@ -1,7 +1,8 @@
|
|
1
1
|
#pragma once
|
2
2
|
|
3
|
-
#include "esphome/core/component.h"
|
4
3
|
#include "esphome/components/switch/switch.h"
|
4
|
+
#include "esphome/core/component.h"
|
5
|
+
#include "esphome/core/defines.h"
|
5
6
|
|
6
7
|
namespace esphome {
|
7
8
|
namespace factory_reset {
|
@@ -9,6 +10,9 @@ namespace factory_reset {
|
|
9
10
|
class FactoryResetSwitch : public switch_::Switch, public Component {
|
10
11
|
public:
|
11
12
|
void dump_config() override;
|
13
|
+
#ifdef USE_OPENTHREAD
|
14
|
+
static void factory_reset_callback();
|
15
|
+
#endif
|
12
16
|
|
13
17
|
protected:
|
14
18
|
void write_state(bool state) override;
|
@@ -18,6 +18,7 @@ from esphome.const import (
|
|
18
18
|
DEVICE_CLASS_TEMPERATURE,
|
19
19
|
DEVICE_CLASS_VOLTAGE,
|
20
20
|
STATE_CLASS_MEASUREMENT,
|
21
|
+
STATE_CLASS_TOTAL_INCREASING,
|
21
22
|
UNIT_AMPERE,
|
22
23
|
UNIT_CELSIUS,
|
23
24
|
UNIT_VOLT,
|
@@ -162,7 +163,7 @@ INA2XX_SCHEMA = cv.Schema(
|
|
162
163
|
unit_of_measurement=UNIT_WATT_HOURS,
|
163
164
|
accuracy_decimals=8,
|
164
165
|
device_class=DEVICE_CLASS_ENERGY,
|
165
|
-
state_class=
|
166
|
+
state_class=STATE_CLASS_TOTAL_INCREASING,
|
166
167
|
),
|
167
168
|
key=CONF_NAME,
|
168
169
|
),
|
@@ -170,7 +171,8 @@ INA2XX_SCHEMA = cv.Schema(
|
|
170
171
|
sensor.sensor_schema(
|
171
172
|
unit_of_measurement=UNIT_JOULE,
|
172
173
|
accuracy_decimals=8,
|
173
|
-
|
174
|
+
device_class=DEVICE_CLASS_ENERGY,
|
175
|
+
state_class=STATE_CLASS_TOTAL_INCREASING,
|
174
176
|
),
|
175
177
|
key=CONF_NAME,
|
176
178
|
),
|
esphome/components/md5/md5.cpp
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
#include <cstdio>
|
2
1
|
#include <cstring>
|
3
2
|
#include "md5.h"
|
4
3
|
#ifdef USE_MD5
|
@@ -44,7 +43,9 @@ void MD5Digest::get_bytes(uint8_t *output) { memcpy(output, this->digest_, 16);
|
|
44
43
|
|
45
44
|
void MD5Digest::get_hex(char *output) {
|
46
45
|
for (size_t i = 0; i < 16; i++) {
|
47
|
-
|
46
|
+
uint8_t byte = this->digest_[i];
|
47
|
+
output[i * 2] = format_hex_char(byte >> 4);
|
48
|
+
output[i * 2 + 1] = format_hex_char(byte & 0x0F);
|
48
49
|
}
|
49
50
|
}
|
50
51
|
|