esphome 2024.7.1__py3-none-any.whl → 2024.7.3__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.
@@ -1,17 +1,17 @@
1
+ from esphome import automation
1
2
  import esphome.codegen as cg
3
+ from esphome.components import esp32
2
4
  import esphome.config_validation as cv
3
- from esphome import automation
4
5
  from esphome.const import (
5
- __version__,
6
+ CONF_ESP8266_DISABLE_SSL_SUPPORT,
6
7
  CONF_ID,
7
- CONF_TIMEOUT,
8
8
  CONF_METHOD,
9
+ CONF_TIMEOUT,
9
10
  CONF_TRIGGER_ID,
10
11
  CONF_URL,
11
- CONF_ESP8266_DISABLE_SSL_SUPPORT,
12
+ __version__,
12
13
  )
13
- from esphome.core import Lambda, CORE
14
- from esphome.components import esp32
14
+ from esphome.core import CORE, Lambda
15
15
 
16
16
  DEPENDENCIES = ["network"]
17
17
  AUTO_LOAD = ["json"]
@@ -99,7 +99,7 @@ CONFIG_SCHEMA = cv.All(
99
99
  cv.Optional(CONF_FOLLOW_REDIRECTS, True): cv.boolean,
100
100
  cv.Optional(CONF_REDIRECT_LIMIT, 3): cv.int_,
101
101
  cv.Optional(
102
- CONF_TIMEOUT, default="5s"
102
+ CONF_TIMEOUT, default="4.5s"
103
103
  ): cv.positive_time_period_milliseconds,
104
104
  cv.SplitDefault(CONF_ESP8266_DISABLE_SSL_SUPPORT, esp8266=False): cv.All(
105
105
  cv.only_on_esp8266, cv.boolean
@@ -80,7 +80,7 @@ class HttpRequestComponent : public Component {
80
80
  const char *useragent_{nullptr};
81
81
  bool follow_redirects_;
82
82
  uint16_t redirect_limit_;
83
- uint16_t timeout_{5000};
83
+ uint16_t timeout_{4500};
84
84
  uint32_t watchdog_timeout_{0};
85
85
  };
86
86
 
@@ -77,7 +77,7 @@ std::shared_ptr<HttpContainer> HttpRequestIDF::start(std::string url, std::strin
77
77
  esp_http_client_set_header(client, header.name, header.value);
78
78
  }
79
79
 
80
- int body_len = body.length();
80
+ const int body_len = body.length();
81
81
 
82
82
  esp_err_t err = esp_http_client_open(client, body_len);
83
83
  if (err != ESP_OK) {
@@ -109,18 +109,62 @@ std::shared_ptr<HttpContainer> HttpRequestIDF::start(std::string url, std::strin
109
109
  return nullptr;
110
110
  }
111
111
 
112
+ auto is_ok = [](int code) { return code >= HttpStatus_Ok && code < HttpStatus_MultipleChoices; };
113
+
112
114
  container->content_length = esp_http_client_fetch_headers(client);
113
- const auto status_code = esp_http_client_get_status_code(client);
114
- container->status_code = status_code;
115
+ container->status_code = esp_http_client_get_status_code(client);
116
+ if (is_ok(container->status_code)) {
117
+ container->duration_ms = millis() - start;
118
+ return container;
119
+ }
115
120
 
116
- if (status_code < 200 || status_code >= 300) {
117
- ESP_LOGE(TAG, "HTTP Request failed; URL: %s; Code: %d", url.c_str(), status_code);
118
- this->status_momentary_error("failed", 1000);
119
- esp_http_client_cleanup(client);
120
- return nullptr;
121
+ if (this->follow_redirects_) {
122
+ auto is_redirect = [](int code) {
123
+ return code == HttpStatus_MovedPermanently || code == HttpStatus_Found || code == HttpStatus_SeeOther ||
124
+ code == HttpStatus_TemporaryRedirect || code == HttpStatus_PermanentRedirect;
125
+ };
126
+ auto num_redirects = this->redirect_limit_;
127
+ while (is_redirect(container->status_code) && num_redirects > 0) {
128
+ err = esp_http_client_set_redirection(client);
129
+ if (err != ESP_OK) {
130
+ ESP_LOGE(TAG, "esp_http_client_set_redirection failed: %s", esp_err_to_name(err));
131
+ this->status_momentary_error("failed", 1000);
132
+ esp_http_client_cleanup(client);
133
+ return nullptr;
134
+ }
135
+ #if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE
136
+ char url[256]{};
137
+ if (esp_http_client_get_url(client, url, sizeof(url) - 1) == ESP_OK) {
138
+ ESP_LOGV(TAG, "redirecting to url: %s", url);
139
+ }
140
+ #endif
141
+ err = esp_http_client_open(client, 0);
142
+ if (err != ESP_OK) {
143
+ ESP_LOGE(TAG, "esp_http_client_open failed: %s", esp_err_to_name(err));
144
+ this->status_momentary_error("failed", 1000);
145
+ esp_http_client_cleanup(client);
146
+ return nullptr;
147
+ }
148
+
149
+ container->content_length = esp_http_client_fetch_headers(client);
150
+ container->status_code = esp_http_client_get_status_code(client);
151
+ if (is_ok(container->status_code)) {
152
+ container->duration_ms = millis() - start;
153
+ return container;
154
+ }
155
+
156
+ num_redirects--;
157
+ }
158
+
159
+ if (num_redirects == 0) {
160
+ ESP_LOGW(TAG, "Reach redirect limit count=%d", this->redirect_limit_);
161
+ }
121
162
  }
122
- container->duration_ms = millis() - start;
123
- return container;
163
+
164
+ ESP_LOGE(TAG, "HTTP Request failed; URL: %s; Code: %d", url.c_str(), container->status_code);
165
+ this->status_momentary_error("failed", 1000);
166
+ esp_http_client_cleanup(client);
167
+ return nullptr;
124
168
  }
125
169
 
126
170
  int HttpContainerIDF::read(uint8_t *buf, size_t max_len) {
@@ -148,7 +148,7 @@ WakeWordModel::WakeWordModel(const uint8_t *model_start, float probability_cutof
148
148
  };
149
149
 
150
150
  bool WakeWordModel::determine_detected() {
151
- int32_t sum = 0;
151
+ uint32_t sum = 0;
152
152
  for (auto &prob : this->recent_streaming_probabilities_) {
153
153
  sum += prob;
154
154
  }
@@ -175,12 +175,14 @@ VADModel::VADModel(const uint8_t *model_start, float probability_cutoff, size_t
175
175
  };
176
176
 
177
177
  bool VADModel::determine_detected() {
178
- uint8_t max = 0;
178
+ uint32_t sum = 0;
179
179
  for (auto &prob : this->recent_streaming_probabilities_) {
180
- max = std::max(prob, max);
180
+ sum += prob;
181
181
  }
182
182
 
183
- return max > this->probability_cutoff_;
183
+ float sliding_window_average = static_cast<float>(sum) / static_cast<float>(255 * this->sliding_window_size_);
184
+
185
+ return sliding_window_average > this->probability_cutoff_;
184
186
  }
185
187
 
186
188
  } // namespace micro_wake_word
@@ -110,7 +110,7 @@ void MitsubishiClimate::transmit_state() {
110
110
  // Byte 15: HVAC specfic, i.e. POWERFUL, SMART SET, PLASMA, always 0x00
111
111
  // Byte 16: Constant 0x00
112
112
  // Byte 17: Checksum: SUM[Byte0...Byte16]
113
- uint8_t remote_state[18] = {0x23, 0xCB, 0x26, 0x01, 0x00, 0x20, 0x08, 0x00, 0x00,
113
+ uint8_t remote_state[18] = {0x23, 0xCB, 0x26, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00,
114
114
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
115
115
 
116
116
  switch (this->mode) {
@@ -136,6 +136,12 @@ void MitsubishiClimate::transmit_state() {
136
136
  break;
137
137
  case climate::CLIMATE_MODE_OFF:
138
138
  default:
139
+ remote_state[6] = MITSUBISHI_MODE_COOL;
140
+ remote_state[8] = MITSUBISHI_MODE_A_COOL;
141
+ if (this->supports_heat_) {
142
+ remote_state[6] = MITSUBISHI_MODE_HEAT;
143
+ remote_state[8] = MITSUBISHI_MODE_A_HEAT;
144
+ }
139
145
  remote_state[5] = MITSUBISHI_OFF;
140
146
  break;
141
147
  }
@@ -72,43 +72,44 @@ void PMWCS3Component::dump_config() {
72
72
  LOG_SENSOR(" ", "vwc", this->vwc_sensor_);
73
73
  }
74
74
  void PMWCS3Component::read_data_() {
75
- uint8_t data[8];
76
- float e25, ec, temperature, vwc;
77
-
78
75
  /////// Super important !!!! first activate reading PMWCS3_REG_READ_START (if not, return always the same values) ////
79
-
80
76
  if (!this->write_bytes(PMWCS3_REG_READ_START, nullptr, 0)) {
81
77
  this->status_set_warning();
82
78
  ESP_LOGVV(TAG, "Failed to write into REG_READ_START register !!!");
83
79
  return;
84
80
  }
85
- // NOLINT delay(100);
86
81
 
87
- if (!this->read_bytes(PMWCS3_REG_GET_DATA, (uint8_t *) &data, 8)) {
88
- ESP_LOGVV(TAG, "Error reading PMWCS3_REG_GET_DATA registers");
89
- this->mark_failed();
90
- return;
91
- }
92
- if (this->e25_sensor_ != nullptr) {
93
- e25 = ((data[1] << 8) | data[0]) / 100.0;
94
- this->e25_sensor_->publish_state(e25);
95
- ESP_LOGVV(TAG, "e25: data[0]=%d, data[1]=%d, result=%f", data[0], data[1], e25);
96
- }
97
- if (this->ec_sensor_ != nullptr) {
98
- ec = ((data[3] << 8) | data[2]) / 10.0;
99
- this->ec_sensor_->publish_state(ec);
100
- ESP_LOGVV(TAG, "ec: data[2]=%d, data[3]=%d, result=%f", data[2], data[3], ec);
101
- }
102
- if (this->temperature_sensor_ != nullptr) {
103
- temperature = ((data[5] << 8) | data[4]) / 100.0;
104
- this->temperature_sensor_->publish_state(temperature);
105
- ESP_LOGVV(TAG, "temp: data[4]=%d, data[5]=%d, result=%f", data[4], data[5], temperature);
106
- }
107
- if (this->vwc_sensor_ != nullptr) {
108
- vwc = ((data[7] << 8) | data[6]) / 10.0;
109
- this->vwc_sensor_->publish_state(vwc);
110
- ESP_LOGVV(TAG, "vwc: data[6]=%d, data[7]=%d, result=%f", data[6], data[7], vwc);
111
- }
82
+ // Wait for the sensor to be ready.
83
+ // 80ms empirically determined (conservative).
84
+ this->set_timeout(80, [this] {
85
+ uint8_t data[8];
86
+ float e25, ec, temperature, vwc;
87
+ if (!this->read_bytes(PMWCS3_REG_GET_DATA, (uint8_t *) &data, 8)) {
88
+ ESP_LOGVV(TAG, "Error reading PMWCS3_REG_GET_DATA registers");
89
+ this->mark_failed();
90
+ return;
91
+ }
92
+ if (this->e25_sensor_ != nullptr) {
93
+ e25 = ((data[1] << 8) | data[0]) / 100.0;
94
+ this->e25_sensor_->publish_state(e25);
95
+ ESP_LOGVV(TAG, "e25: data[0]=%d, data[1]=%d, result=%f", data[0], data[1], e25);
96
+ }
97
+ if (this->ec_sensor_ != nullptr) {
98
+ ec = ((data[3] << 8) | data[2]) / 10.0;
99
+ this->ec_sensor_->publish_state(ec);
100
+ ESP_LOGVV(TAG, "ec: data[2]=%d, data[3]=%d, result=%f", data[2], data[3], ec);
101
+ }
102
+ if (this->temperature_sensor_ != nullptr) {
103
+ temperature = ((data[5] << 8) | data[4]) / 100.0;
104
+ this->temperature_sensor_->publish_state(temperature);
105
+ ESP_LOGVV(TAG, "temp: data[4]=%d, data[5]=%d, result=%f", data[4], data[5], temperature);
106
+ }
107
+ if (this->vwc_sensor_ != nullptr) {
108
+ vwc = ((data[7] << 8) | data[6]) / 10.0;
109
+ this->vwc_sensor_->publish_state(vwc);
110
+ ESP_LOGVV(TAG, "vwc: data[6]=%d, data[7]=%d, result=%f", data[6], data[7], vwc);
111
+ }
112
+ });
112
113
  }
113
114
 
114
115
  } // namespace pmwcs3
esphome/const.py CHANGED
@@ -1,6 +1,6 @@
1
1
  """Constants used by esphome."""
2
2
 
3
- __version__ = "2024.7.1"
3
+ __version__ = "2024.7.3"
4
4
 
5
5
  ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
6
6
  VALID_SUBSTITUTIONS_CHARACTERS = (
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: esphome
3
- Version: 2024.7.1
3
+ Version: 2024.7.3
4
4
  Summary: Make creating custom firmwares for ESP32/ESP8266 super easy.
5
5
  Author-email: The ESPHome Authors <esphome@nabucasa.com>
6
6
  License: MIT
@@ -5,7 +5,7 @@ esphome/codegen.py,sha256=LCJVpAwy1L9DTBsIvbgAbHj1TOXUSPgBoN--aio0gBk,1855
5
5
  esphome/config.py,sha256=wztK2UmO7-hc6HFDAi6YWtrPVy5mH0diKuqpsWp4-XA,39616
6
6
  esphome/config_helpers.py,sha256=MKf_wzO35nn41FvigXE0iYKDslPgL2ruf8R-EPtTT2I,3256
7
7
  esphome/config_validation.py,sha256=G79LGVIh5BdpGkzuehkm7Db_llpbC2of4dKqZEpHc3A,64838
8
- esphome/const.py,sha256=k4OE5Ih6zGTEbXW-8Yjs0TIgZ9NkZcfzahJA0NsH448,38952
8
+ esphome/const.py,sha256=1PQbwSwz4Bnz6ui99tW_E1dqnesos5OVohXk2Vy3Yyg,38952
9
9
  esphome/coroutine.py,sha256=IG2kC92OrenyiRm7Qo9uC-4qU4b4-Lmj0TkMIjRG2RY,9344
10
10
  esphome/cpp_generator.py,sha256=hW2EfubUiildhKXZIdV8Dr3Q9TM5oHybFwiTo5-vEUE,31203
11
11
  esphome/cpp_helpers.py,sha256=KadRBBoo4QRT-VwdWFtvxv_FYjqhZTkBhfMX-JhEMwg,4803
@@ -1065,12 +1065,12 @@ esphome/components/hte501/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
1065
1065
  esphome/components/hte501/hte501.cpp,sha256=PZjDGzy2AAZ6tz4xvrlAD0GGcFmV-HjSnsZ5lIptkNM,2789
1066
1066
  esphome/components/hte501/hte501.h,sha256=EY-aX8KwudhZPQ3tyRzSU2hPFUzFkmAhrGdhAXR-8rA,998
1067
1067
  esphome/components/hte501/sensor.py,sha256=H7cfhfjQ0lyUgHABpoyiKOaj_f2qhN7nDW-tTj2sttQ,1723
1068
- esphome/components/http_request/__init__.py,sha256=iEloLmhwKBRUHqIVjYN0LmxzrIUAMlttDrU7qPP55IU,9336
1068
+ esphome/components/http_request/__init__.py,sha256=VrQgzo1UIKfaTLjvz2j2z-CUXm2WF32IR1rC16234Pw,9338
1069
1069
  esphome/components/http_request/http_request.cpp,sha256=UFpMPffAuE2enh8iBvZzV3EDr7lS-MoLaquDoi5FGEw,705
1070
- esphome/components/http_request/http_request.h,sha256=-QVBxaH5iOFuzuvdmBDrjL81YM63mv3zILS4m8E4Oa4,6758
1070
+ esphome/components/http_request/http_request.h,sha256=HjVTuX_TtonLmNNajf_W-Q-zwsXsbiUMpI0EV3xinCI,6758
1071
1071
  esphome/components/http_request/http_request_arduino.cpp,sha256=HyePONw2B2095vN-f9WOFkuWkhZSYLYrcwYI5tfzakk,5362
1072
1072
  esphome/components/http_request/http_request_arduino.h,sha256=iaOY5aKpQJREygOoyBB8Nsozp4cfETDt-G6Hgu_pkm0,871
1073
- esphome/components/http_request/http_request_idf.cpp,sha256=k9lTzJh2X7DoP2OOyTvtQTyIwJT780sXVck-0u9rvLE,4425
1073
+ esphome/components/http_request/http_request_idf.cpp,sha256=BW2i4wHlQedmtiUh0Escvwyby8nSwFg5vILRCEfQltI,6108
1074
1074
  esphome/components/http_request/http_request_idf.h,sha256=RmtzXsXsi8M66Lnf6eHbdEK5PIwALlvHyNXVz4skeGQ,774
1075
1075
  esphome/components/http_request/watchdog.cpp,sha256=vrRWycQv1a4iOxYaR2Ld4UJdnYgp-s2E1V6kLjqoK_w,1687
1076
1076
  esphome/components/http_request/watchdog.h,sha256=45UrEdgj6KmB7lLPIK4-_BdpwZy-aDki3tMWrQn-hF8,454
@@ -1499,7 +1499,7 @@ esphome/components/micro_wake_word/__init__.py,sha256=WLqfgLyGTF7S6kwvvOoiyHaxxV
1499
1499
  esphome/components/micro_wake_word/micro_wake_word.cpp,sha256=qj_wsPQY23sg12Wr2nIvitFSvghzfXkBamak7ZPNeAI,15280
1500
1500
  esphome/components/micro_wake_word/micro_wake_word.h,sha256=3Ge-mL0fVeM-s6XdmeoPGATLZ7x8tr73iXEkO9nqLJ4,6091
1501
1501
  esphome/components/micro_wake_word/preprocessor_settings.h,sha256=fz5-wfah78sWnY-iNXuGu6K5TpbGfeQCcgPIdPBNPg4,488
1502
- esphome/components/micro_wake_word/streaming_model.cpp,sha256=XkUsB0e8J_Lnf5zq4UQYeq-zmPI3h_pabQ380dYLD3I,6845
1502
+ esphome/components/micro_wake_word/streaming_model.cpp,sha256=c2dqFd7LU2yDghhbQlkeOZhrpCIzZxNTyD65REGZJOU,6966
1503
1503
  esphome/components/micro_wake_word/streaming_model.h,sha256=f_Wu2-GqyjPvDqSCAEWuGioq-bySlOu0cOkJ0PzuipA,2658
1504
1504
  esphome/components/micronova/__init__.py,sha256=6VoJfNv9YbawzAh8zrXzDkdOQwyX0bg-cZpxI_HwqVo,2677
1505
1505
  esphome/components/micronova/micronova.cpp,sha256=gc0xDasM0sBvU6BNnT24ArBJ1bgrnoPcq9dWLuFbTD8,5297
@@ -1544,7 +1544,7 @@ esphome/components/midea_ir/midea_ir.cpp,sha256=Ry2O2HU9NlVSiaqZHybujJUqoky4rk2K
1544
1544
  esphome/components/midea_ir/midea_ir.h,sha256=BNVdX5xjpFy-q0OTgBubUpFA_GQgUeK3Vx7rahOT-nM,1518
1545
1545
  esphome/components/mitsubishi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1546
1546
  esphome/components/mitsubishi/climate.py,sha256=EEQ54_K8833gtQP90yySmX8kMCnXxsYPk0UazUMMZsI,2791
1547
- esphome/components/mitsubishi/mitsubishi.cpp,sha256=8UgrQVVVAXyzefHfjrOPBV3HfED4WbbHbN10s_VJ4cM,13994
1547
+ esphome/components/mitsubishi/mitsubishi.cpp,sha256=ItAO65EyN-kiijdLRk71oIEyjMW5VG5NCdW6PotWJPY,14228
1548
1548
  esphome/components/mitsubishi/mitsubishi.h,sha256=DDSRb5mYr2RsocbBTQahdGJaHtH-k6oHIsBIDSHuopk,3047
1549
1549
  esphome/components/mlx90393/__init__.py,sha256=Ao5t2TsBxYT6KIJJ4Nnbg5_drJijuBxe7SIdBe31Fjs,34
1550
1550
  esphome/components/mlx90393/sensor.py,sha256=wpYFYEHIxu7HP0E40Fc15uUzgCBT-nszvjf0FdlyGwQ,4183
@@ -1867,7 +1867,7 @@ esphome/components/pmsx003/pmsx003.cpp,sha256=CuW4H-i8AGkH-kwRuGJ9cWzSAonWvau-Vm
1867
1867
  esphome/components/pmsx003/pmsx003.h,sha256=kfpbz3CJxYeKKtMi5-dYSO5d3LCbQAXxMpu_VcAOI1Q,3554
1868
1868
  esphome/components/pmsx003/sensor.py,sha256=gKXskfE46TeQR29R3SCcOAVs91rqBnWe-D1MS0NqUXc,9889
1869
1869
  esphome/components/pmwcs3/__init__.py,sha256=zezs6ulxMCdOcTvftGJFBZCt1AKLqAHqesJSfecUlO0,28
1870
- esphome/components/pmwcs3/pmwcs3.cpp,sha256=jDXWYK7EDIaop8kP4thOdVxO_e06gcijxHvayUhIEuk,4137
1870
+ esphome/components/pmwcs3/pmwcs3.cpp,sha256=UNpLRfxVsRUjQYH9wdLonyXXd_zynZredkOIW__HE-c,4290
1871
1871
  esphome/components/pmwcs3/pmwcs3.h,sha256=AqspEHCKFSQZh7o2WZBLjTCBMKgYufENxJ5Bd1HSxvQ,2112
1872
1872
  esphome/components/pmwcs3/sensor.py,sha256=3p74vLRDpdjKxet4rgsRo9aCGJuKxXqa-MTUqE622qg,4048
1873
1873
  esphome/components/pn532/__init__.py,sha256=GY7ZRgRi8YhcswqISdOTCqwppdRdPKDxBW4UFgwm-TM,2933
@@ -3119,9 +3119,9 @@ esphome/dashboard/util/itertools.py,sha256=8eLrWEWmICLtXNxkKdYPQV0c_N4GEz8m9Npnb
3119
3119
  esphome/dashboard/util/password.py,sha256=cQz3b9B-ijTe7zS6BeCW0hc3pWv6JjC78jmnycYYAh8,321
3120
3120
  esphome/dashboard/util/subprocess.py,sha256=T8EW6dbU4LPd2DG1dRrdh8li71tt6J1isn411poMhkk,1022
3121
3121
  esphome/dashboard/util/text.py,sha256=ENDnfN4O0NdA3CKVJjQYabFbwbrsIhVKrAMQe53qYu4,534
3122
- esphome-2024.7.1.dist-info/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
3123
- esphome-2024.7.1.dist-info/METADATA,sha256=8Br6BjjqmWwQKeEF-qx0gIJ1xDbQPyV7B9kNNaALKu0,3263
3124
- esphome-2024.7.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
3125
- esphome-2024.7.1.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
3126
- esphome-2024.7.1.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
3127
- esphome-2024.7.1.dist-info/RECORD,,
3122
+ esphome-2024.7.3.dist-info/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
3123
+ esphome-2024.7.3.dist-info/METADATA,sha256=pP2io3DbvZBe9lmBiQ9vfPq3kKkyMF_OA9cCxFggvug,3263
3124
+ esphome-2024.7.3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
3125
+ esphome-2024.7.3.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
3126
+ esphome-2024.7.3.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
3127
+ esphome-2024.7.3.dist-info/RECORD,,