esphome 2024.9.0__py3-none-any.whl → 2024.9.0b1__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.
@@ -1032,7 +1032,6 @@ bool APIConnection::send_media_player_info(media_player::MediaPlayer *media_play
1032
1032
  media_format.sample_rate = supported_format.sample_rate;
1033
1033
  media_format.num_channels = supported_format.num_channels;
1034
1034
  media_format.purpose = static_cast<enums::MediaPlayerFormatPurpose>(supported_format.purpose);
1035
- media_format.sample_bytes = supported_format.sample_bytes;
1036
1035
  msg.supported_formats.push_back(media_format);
1037
1036
  }
1038
1037
 
@@ -1224,39 +1223,6 @@ void APIConnection::on_voice_assistant_announce_request(const VoiceAssistantAnno
1224
1223
  }
1225
1224
  }
1226
1225
 
1227
- VoiceAssistantConfigurationResponse APIConnection::voice_assistant_get_configuration(
1228
- const VoiceAssistantConfigurationRequest &msg) {
1229
- VoiceAssistantConfigurationResponse resp;
1230
- if (voice_assistant::global_voice_assistant != nullptr) {
1231
- if (voice_assistant::global_voice_assistant->get_api_connection() != this) {
1232
- return resp;
1233
- }
1234
-
1235
- auto &config = voice_assistant::global_voice_assistant->get_configuration();
1236
- for (auto &wake_word : config.available_wake_words) {
1237
- VoiceAssistantWakeWord resp_wake_word;
1238
- resp_wake_word.id = wake_word.id;
1239
- resp_wake_word.wake_word = wake_word.wake_word;
1240
- for (const auto &lang : wake_word.trained_languages) {
1241
- resp_wake_word.trained_languages.push_back(lang);
1242
- }
1243
- resp.available_wake_words.push_back(std::move(resp_wake_word));
1244
- }
1245
- resp.max_active_wake_words = config.max_active_wake_words;
1246
- }
1247
- return resp;
1248
- }
1249
-
1250
- void APIConnection::voice_assistant_set_configuration(const VoiceAssistantSetConfiguration &msg) {
1251
- if (voice_assistant::global_voice_assistant != nullptr) {
1252
- if (voice_assistant::global_voice_assistant->get_api_connection() != this) {
1253
- return;
1254
- }
1255
-
1256
- voice_assistant::global_voice_assistant->on_set_configuration(msg.active_wake_words);
1257
- }
1258
- }
1259
-
1260
1226
  #endif
1261
1227
 
1262
1228
  #ifdef USE_ALARM_CONTROL_PANEL
@@ -152,9 +152,6 @@ class APIConnection : public APIServerConnection {
152
152
  void on_voice_assistant_audio(const VoiceAssistantAudio &msg) override;
153
153
  void on_voice_assistant_timer_event_response(const VoiceAssistantTimerEventResponse &msg) override;
154
154
  void on_voice_assistant_announce_request(const VoiceAssistantAnnounceRequest &msg) override;
155
- VoiceAssistantConfigurationResponse voice_assistant_get_configuration(
156
- const VoiceAssistantConfigurationRequest &msg) override;
157
- void voice_assistant_set_configuration(const VoiceAssistantSetConfiguration &msg) override;
158
155
  #endif
159
156
 
160
157
  #ifdef USE_ALARM_CONTROL_PANEL
@@ -5149,10 +5149,6 @@ bool MediaPlayerSupportedFormat::decode_varint(uint32_t field_id, ProtoVarInt va
5149
5149
  this->purpose = value.as_enum<enums::MediaPlayerFormatPurpose>();
5150
5150
  return true;
5151
5151
  }
5152
- case 5: {
5153
- this->sample_bytes = value.as_uint32();
5154
- return true;
5155
- }
5156
5152
  default:
5157
5153
  return false;
5158
5154
  }
@@ -5172,7 +5168,6 @@ void MediaPlayerSupportedFormat::encode(ProtoWriteBuffer buffer) const {
5172
5168
  buffer.encode_uint32(2, this->sample_rate);
5173
5169
  buffer.encode_uint32(3, this->num_channels);
5174
5170
  buffer.encode_enum<enums::MediaPlayerFormatPurpose>(4, this->purpose);
5175
- buffer.encode_uint32(5, this->sample_bytes);
5176
5171
  }
5177
5172
  #ifdef HAS_PROTO_MESSAGE_DUMP
5178
5173
  void MediaPlayerSupportedFormat::dump_to(std::string &out) const {
@@ -5195,11 +5190,6 @@ void MediaPlayerSupportedFormat::dump_to(std::string &out) const {
5195
5190
  out.append(" purpose: ");
5196
5191
  out.append(proto_enum_to_string<enums::MediaPlayerFormatPurpose>(this->purpose));
5197
5192
  out.append("\n");
5198
-
5199
- out.append(" sample_bytes: ");
5200
- sprintf(buffer, "%" PRIu32, this->sample_bytes);
5201
- out.append(buffer);
5202
- out.append("\n");
5203
5193
  out.append("}");
5204
5194
  }
5205
5195
  #endif
@@ -7124,140 +7114,6 @@ void VoiceAssistantAnnounceFinished::dump_to(std::string &out) const {
7124
7114
  out.append("}");
7125
7115
  }
7126
7116
  #endif
7127
- bool VoiceAssistantWakeWord::decode_length(uint32_t field_id, ProtoLengthDelimited value) {
7128
- switch (field_id) {
7129
- case 1: {
7130
- this->id = value.as_string();
7131
- return true;
7132
- }
7133
- case 2: {
7134
- this->wake_word = value.as_string();
7135
- return true;
7136
- }
7137
- case 3: {
7138
- this->trained_languages.push_back(value.as_string());
7139
- return true;
7140
- }
7141
- default:
7142
- return false;
7143
- }
7144
- }
7145
- void VoiceAssistantWakeWord::encode(ProtoWriteBuffer buffer) const {
7146
- buffer.encode_string(1, this->id);
7147
- buffer.encode_string(2, this->wake_word);
7148
- for (auto &it : this->trained_languages) {
7149
- buffer.encode_string(3, it, true);
7150
- }
7151
- }
7152
- #ifdef HAS_PROTO_MESSAGE_DUMP
7153
- void VoiceAssistantWakeWord::dump_to(std::string &out) const {
7154
- __attribute__((unused)) char buffer[64];
7155
- out.append("VoiceAssistantWakeWord {\n");
7156
- out.append(" id: ");
7157
- out.append("'").append(this->id).append("'");
7158
- out.append("\n");
7159
-
7160
- out.append(" wake_word: ");
7161
- out.append("'").append(this->wake_word).append("'");
7162
- out.append("\n");
7163
-
7164
- for (const auto &it : this->trained_languages) {
7165
- out.append(" trained_languages: ");
7166
- out.append("'").append(it).append("'");
7167
- out.append("\n");
7168
- }
7169
- out.append("}");
7170
- }
7171
- #endif
7172
- void VoiceAssistantConfigurationRequest::encode(ProtoWriteBuffer buffer) const {}
7173
- #ifdef HAS_PROTO_MESSAGE_DUMP
7174
- void VoiceAssistantConfigurationRequest::dump_to(std::string &out) const {
7175
- out.append("VoiceAssistantConfigurationRequest {}");
7176
- }
7177
- #endif
7178
- bool VoiceAssistantConfigurationResponse::decode_varint(uint32_t field_id, ProtoVarInt value) {
7179
- switch (field_id) {
7180
- case 3: {
7181
- this->max_active_wake_words = value.as_uint32();
7182
- return true;
7183
- }
7184
- default:
7185
- return false;
7186
- }
7187
- }
7188
- bool VoiceAssistantConfigurationResponse::decode_length(uint32_t field_id, ProtoLengthDelimited value) {
7189
- switch (field_id) {
7190
- case 1: {
7191
- this->available_wake_words.push_back(value.as_message<VoiceAssistantWakeWord>());
7192
- return true;
7193
- }
7194
- case 2: {
7195
- this->active_wake_words.push_back(value.as_string());
7196
- return true;
7197
- }
7198
- default:
7199
- return false;
7200
- }
7201
- }
7202
- void VoiceAssistantConfigurationResponse::encode(ProtoWriteBuffer buffer) const {
7203
- for (auto &it : this->available_wake_words) {
7204
- buffer.encode_message<VoiceAssistantWakeWord>(1, it, true);
7205
- }
7206
- for (auto &it : this->active_wake_words) {
7207
- buffer.encode_string(2, it, true);
7208
- }
7209
- buffer.encode_uint32(3, this->max_active_wake_words);
7210
- }
7211
- #ifdef HAS_PROTO_MESSAGE_DUMP
7212
- void VoiceAssistantConfigurationResponse::dump_to(std::string &out) const {
7213
- __attribute__((unused)) char buffer[64];
7214
- out.append("VoiceAssistantConfigurationResponse {\n");
7215
- for (const auto &it : this->available_wake_words) {
7216
- out.append(" available_wake_words: ");
7217
- it.dump_to(out);
7218
- out.append("\n");
7219
- }
7220
-
7221
- for (const auto &it : this->active_wake_words) {
7222
- out.append(" active_wake_words: ");
7223
- out.append("'").append(it).append("'");
7224
- out.append("\n");
7225
- }
7226
-
7227
- out.append(" max_active_wake_words: ");
7228
- sprintf(buffer, "%" PRIu32, this->max_active_wake_words);
7229
- out.append(buffer);
7230
- out.append("\n");
7231
- out.append("}");
7232
- }
7233
- #endif
7234
- bool VoiceAssistantSetConfiguration::decode_length(uint32_t field_id, ProtoLengthDelimited value) {
7235
- switch (field_id) {
7236
- case 1: {
7237
- this->active_wake_words.push_back(value.as_string());
7238
- return true;
7239
- }
7240
- default:
7241
- return false;
7242
- }
7243
- }
7244
- void VoiceAssistantSetConfiguration::encode(ProtoWriteBuffer buffer) const {
7245
- for (auto &it : this->active_wake_words) {
7246
- buffer.encode_string(1, it, true);
7247
- }
7248
- }
7249
- #ifdef HAS_PROTO_MESSAGE_DUMP
7250
- void VoiceAssistantSetConfiguration::dump_to(std::string &out) const {
7251
- __attribute__((unused)) char buffer[64];
7252
- out.append("VoiceAssistantSetConfiguration {\n");
7253
- for (const auto &it : this->active_wake_words) {
7254
- out.append(" active_wake_words: ");
7255
- out.append("'").append(it).append("'");
7256
- out.append("\n");
7257
- }
7258
- out.append("}");
7259
- }
7260
- #endif
7261
7117
  bool ListEntitiesAlarmControlPanelResponse::decode_varint(uint32_t field_id, ProtoVarInt value) {
7262
7118
  switch (field_id) {
7263
7119
  case 6: {
@@ -1277,7 +1277,6 @@ class MediaPlayerSupportedFormat : public ProtoMessage {
1277
1277
  uint32_t sample_rate{0};
1278
1278
  uint32_t num_channels{0};
1279
1279
  enums::MediaPlayerFormatPurpose purpose{};
1280
- uint32_t sample_bytes{0};
1281
1280
  void encode(ProtoWriteBuffer buffer) const override;
1282
1281
  #ifdef HAS_PROTO_MESSAGE_DUMP
1283
1282
  void dump_to(std::string &out) const override;
@@ -1849,53 +1848,6 @@ class VoiceAssistantAnnounceFinished : public ProtoMessage {
1849
1848
  protected:
1850
1849
  bool decode_varint(uint32_t field_id, ProtoVarInt value) override;
1851
1850
  };
1852
- class VoiceAssistantWakeWord : public ProtoMessage {
1853
- public:
1854
- std::string id{};
1855
- std::string wake_word{};
1856
- std::vector<std::string> trained_languages{};
1857
- void encode(ProtoWriteBuffer buffer) const override;
1858
- #ifdef HAS_PROTO_MESSAGE_DUMP
1859
- void dump_to(std::string &out) const override;
1860
- #endif
1861
-
1862
- protected:
1863
- bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override;
1864
- };
1865
- class VoiceAssistantConfigurationRequest : public ProtoMessage {
1866
- public:
1867
- void encode(ProtoWriteBuffer buffer) const override;
1868
- #ifdef HAS_PROTO_MESSAGE_DUMP
1869
- void dump_to(std::string &out) const override;
1870
- #endif
1871
-
1872
- protected:
1873
- };
1874
- class VoiceAssistantConfigurationResponse : public ProtoMessage {
1875
- public:
1876
- std::vector<VoiceAssistantWakeWord> available_wake_words{};
1877
- std::vector<std::string> active_wake_words{};
1878
- uint32_t max_active_wake_words{0};
1879
- void encode(ProtoWriteBuffer buffer) const override;
1880
- #ifdef HAS_PROTO_MESSAGE_DUMP
1881
- void dump_to(std::string &out) const override;
1882
- #endif
1883
-
1884
- protected:
1885
- bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override;
1886
- bool decode_varint(uint32_t field_id, ProtoVarInt value) override;
1887
- };
1888
- class VoiceAssistantSetConfiguration : public ProtoMessage {
1889
- public:
1890
- std::vector<std::string> active_wake_words{};
1891
- void encode(ProtoWriteBuffer buffer) const override;
1892
- #ifdef HAS_PROTO_MESSAGE_DUMP
1893
- void dump_to(std::string &out) const override;
1894
- #endif
1895
-
1896
- protected:
1897
- bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override;
1898
- };
1899
1851
  class ListEntitiesAlarmControlPanelResponse : public ProtoMessage {
1900
1852
  public:
1901
1853
  std::string object_id{};
@@ -496,19 +496,6 @@ bool APIServerConnectionBase::send_voice_assistant_announce_finished(const Voice
496
496
  return this->send_message_<VoiceAssistantAnnounceFinished>(msg, 120);
497
497
  }
498
498
  #endif
499
- #ifdef USE_VOICE_ASSISTANT
500
- #endif
501
- #ifdef USE_VOICE_ASSISTANT
502
- bool APIServerConnectionBase::send_voice_assistant_configuration_response(
503
- const VoiceAssistantConfigurationResponse &msg) {
504
- #ifdef HAS_PROTO_MESSAGE_DUMP
505
- ESP_LOGVV(TAG, "send_voice_assistant_configuration_response: %s", msg.dump().c_str());
506
- #endif
507
- return this->send_message_<VoiceAssistantConfigurationResponse>(msg, 122);
508
- }
509
- #endif
510
- #ifdef USE_VOICE_ASSISTANT
511
- #endif
512
499
  #ifdef USE_ALARM_CONTROL_PANEL
513
500
  bool APIServerConnectionBase::send_list_entities_alarm_control_panel_response(
514
501
  const ListEntitiesAlarmControlPanelResponse &msg) {
@@ -1169,28 +1156,6 @@ bool APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type,
1169
1156
  ESP_LOGVV(TAG, "on_voice_assistant_announce_request: %s", msg.dump().c_str());
1170
1157
  #endif
1171
1158
  this->on_voice_assistant_announce_request(msg);
1172
- #endif
1173
- break;
1174
- }
1175
- case 121: {
1176
- #ifdef USE_VOICE_ASSISTANT
1177
- VoiceAssistantConfigurationRequest msg;
1178
- msg.decode(msg_data, msg_size);
1179
- #ifdef HAS_PROTO_MESSAGE_DUMP
1180
- ESP_LOGVV(TAG, "on_voice_assistant_configuration_request: %s", msg.dump().c_str());
1181
- #endif
1182
- this->on_voice_assistant_configuration_request(msg);
1183
- #endif
1184
- break;
1185
- }
1186
- case 123: {
1187
- #ifdef USE_VOICE_ASSISTANT
1188
- VoiceAssistantSetConfiguration msg;
1189
- msg.decode(msg_data, msg_size);
1190
- #ifdef HAS_PROTO_MESSAGE_DUMP
1191
- ESP_LOGVV(TAG, "on_voice_assistant_set_configuration: %s", msg.dump().c_str());
1192
- #endif
1193
- this->on_voice_assistant_set_configuration(msg);
1194
1159
  #endif
1195
1160
  break;
1196
1161
  }
@@ -1681,35 +1646,6 @@ void APIServerConnection::on_subscribe_voice_assistant_request(const SubscribeVo
1681
1646
  this->subscribe_voice_assistant(msg);
1682
1647
  }
1683
1648
  #endif
1684
- #ifdef USE_VOICE_ASSISTANT
1685
- void APIServerConnection::on_voice_assistant_configuration_request(const VoiceAssistantConfigurationRequest &msg) {
1686
- if (!this->is_connection_setup()) {
1687
- this->on_no_setup_connection();
1688
- return;
1689
- }
1690
- if (!this->is_authenticated()) {
1691
- this->on_unauthenticated_access();
1692
- return;
1693
- }
1694
- VoiceAssistantConfigurationResponse ret = this->voice_assistant_get_configuration(msg);
1695
- if (!this->send_voice_assistant_configuration_response(ret)) {
1696
- this->on_fatal_error();
1697
- }
1698
- }
1699
- #endif
1700
- #ifdef USE_VOICE_ASSISTANT
1701
- void APIServerConnection::on_voice_assistant_set_configuration(const VoiceAssistantSetConfiguration &msg) {
1702
- if (!this->is_connection_setup()) {
1703
- this->on_no_setup_connection();
1704
- return;
1705
- }
1706
- if (!this->is_authenticated()) {
1707
- this->on_unauthenticated_access();
1708
- return;
1709
- }
1710
- this->voice_assistant_set_configuration(msg);
1711
- }
1712
- #endif
1713
1649
  #ifdef USE_ALARM_CONTROL_PANEL
1714
1650
  void APIServerConnection::on_alarm_control_panel_command_request(const AlarmControlPanelCommandRequest &msg) {
1715
1651
  if (!this->is_connection_setup()) {
@@ -253,15 +253,6 @@ class APIServerConnectionBase : public ProtoService {
253
253
  #ifdef USE_VOICE_ASSISTANT
254
254
  bool send_voice_assistant_announce_finished(const VoiceAssistantAnnounceFinished &msg);
255
255
  #endif
256
- #ifdef USE_VOICE_ASSISTANT
257
- virtual void on_voice_assistant_configuration_request(const VoiceAssistantConfigurationRequest &value){};
258
- #endif
259
- #ifdef USE_VOICE_ASSISTANT
260
- bool send_voice_assistant_configuration_response(const VoiceAssistantConfigurationResponse &msg);
261
- #endif
262
- #ifdef USE_VOICE_ASSISTANT
263
- virtual void on_voice_assistant_set_configuration(const VoiceAssistantSetConfiguration &value){};
264
- #endif
265
256
  #ifdef USE_ALARM_CONTROL_PANEL
266
257
  bool send_list_entities_alarm_control_panel_response(const ListEntitiesAlarmControlPanelResponse &msg);
267
258
  #endif
@@ -434,13 +425,6 @@ class APIServerConnection : public APIServerConnectionBase {
434
425
  #ifdef USE_VOICE_ASSISTANT
435
426
  virtual void subscribe_voice_assistant(const SubscribeVoiceAssistantRequest &msg) = 0;
436
427
  #endif
437
- #ifdef USE_VOICE_ASSISTANT
438
- virtual VoiceAssistantConfigurationResponse voice_assistant_get_configuration(
439
- const VoiceAssistantConfigurationRequest &msg) = 0;
440
- #endif
441
- #ifdef USE_VOICE_ASSISTANT
442
- virtual void voice_assistant_set_configuration(const VoiceAssistantSetConfiguration &msg) = 0;
443
- #endif
444
428
  #ifdef USE_ALARM_CONTROL_PANEL
445
429
  virtual void alarm_control_panel_command(const AlarmControlPanelCommandRequest &msg) = 0;
446
430
  #endif
@@ -542,12 +526,6 @@ class APIServerConnection : public APIServerConnectionBase {
542
526
  #ifdef USE_VOICE_ASSISTANT
543
527
  void on_subscribe_voice_assistant_request(const SubscribeVoiceAssistantRequest &msg) override;
544
528
  #endif
545
- #ifdef USE_VOICE_ASSISTANT
546
- void on_voice_assistant_configuration_request(const VoiceAssistantConfigurationRequest &msg) override;
547
- #endif
548
- #ifdef USE_VOICE_ASSISTANT
549
- void on_voice_assistant_set_configuration(const VoiceAssistantSetConfiguration &msg) override;
550
- #endif
551
529
  #ifdef USE_ALARM_CONTROL_PANEL
552
530
  void on_alarm_control_panel_command_request(const AlarmControlPanelCommandRequest &msg) override;
553
531
  #endif
@@ -41,7 +41,7 @@ CONFIG_SCHEMA = cv.All(
41
41
  cv.Optional(CONF_SERVICE_UUID): esp32_ble_tracker.bt_uuid,
42
42
  cv.Optional(CONF_IBEACON_MAJOR): cv.uint16_t,
43
43
  cv.Optional(CONF_IBEACON_MINOR): cv.uint16_t,
44
- cv.Optional(CONF_IBEACON_UUID): esp32_ble_tracker.bt_uuid,
44
+ cv.Optional(CONF_IBEACON_UUID): cv.uuid,
45
45
  cv.Optional(CONF_TIMEOUT, default="5min"): cv.positive_time_period,
46
46
  cv.Optional(CONF_MIN_RSSI): cv.All(
47
47
  cv.decibel, cv.int_range(min=-100, max=-30)
@@ -83,7 +83,7 @@ async def to_code(config):
83
83
  cg.add(var.set_service_uuid128(uuid128))
84
84
 
85
85
  if ibeacon_uuid := config.get(CONF_IBEACON_UUID):
86
- ibeacon_uuid = esp32_ble_tracker.as_reversed_hex_array(ibeacon_uuid)
86
+ ibeacon_uuid = esp32_ble_tracker.as_hex_array(str(ibeacon_uuid))
87
87
  cg.add(var.set_ibeacon_uuid(ibeacon_uuid))
88
88
 
89
89
  if (ibeacon_major := config.get(CONF_IBEACON_MAJOR)) is not None:
@@ -31,13 +31,6 @@ ESPBTUUID ESPBTUUID::from_raw(const uint8_t *data) {
31
31
  memcpy(ret.uuid_.uuid.uuid128, data, ESP_UUID_LEN_128);
32
32
  return ret;
33
33
  }
34
- ESPBTUUID ESPBTUUID::from_raw_reversed(const uint8_t *data) {
35
- ESPBTUUID ret;
36
- ret.uuid_.len = ESP_UUID_LEN_128;
37
- for (int i = 0; i < ESP_UUID_LEN_128; i++)
38
- ret.uuid_.uuid.uuid128[ESP_UUID_LEN_128 - 1 - i] = data[i];
39
- return ret;
40
- }
41
34
  ESPBTUUID ESPBTUUID::from_raw(const std::string &data) {
42
35
  ESPBTUUID ret;
43
36
  if (data.length() == 4) {
@@ -20,7 +20,6 @@ class ESPBTUUID {
20
20
  static ESPBTUUID from_uint32(uint32_t uuid);
21
21
 
22
22
  static ESPBTUUID from_raw(const uint8_t *data);
23
- static ESPBTUUID from_raw_reversed(const uint8_t *data);
24
23
 
25
24
  static ESPBTUUID from_raw(const std::string &data);
26
25
 
@@ -462,16 +462,14 @@ void ESPBTDevice::parse_scan_rst(const esp_ble_gap_cb_param_t::ble_scan_result_e
462
462
  ESP_LOGVV(TAG, " Service UUID: %s", uuid.to_string().c_str());
463
463
  }
464
464
  for (auto &data : this->manufacturer_datas_) {
465
- auto ibeacon = ESPBLEiBeacon::from_manufacturer_data(data);
466
- if (ibeacon.has_value()) {
467
- ESP_LOGVV(TAG, " Manufacturer iBeacon:");
468
- ESP_LOGVV(TAG, " UUID: %s", ibeacon.value().get_uuid().to_string().c_str());
469
- ESP_LOGVV(TAG, " Major: %u", ibeacon.value().get_major());
470
- ESP_LOGVV(TAG, " Minor: %u", ibeacon.value().get_minor());
471
- ESP_LOGVV(TAG, " TXPower: %d", ibeacon.value().get_signal_power());
472
- } else {
473
- ESP_LOGVV(TAG, " Manufacturer ID: %s, data: %s", data.uuid.to_string().c_str(),
474
- format_hex_pretty(data.data).c_str());
465
+ ESP_LOGVV(TAG, " Manufacturer data: %s", format_hex_pretty(data.data).c_str());
466
+ if (this->get_ibeacon().has_value()) {
467
+ auto ibeacon = this->get_ibeacon().value();
468
+ ESP_LOGVV(TAG, " iBeacon data:");
469
+ ESP_LOGVV(TAG, " UUID: %s", ibeacon.get_uuid().to_string().c_str());
470
+ ESP_LOGVV(TAG, " Major: %u", ibeacon.get_major());
471
+ ESP_LOGVV(TAG, " Minor: %u", ibeacon.get_minor());
472
+ ESP_LOGVV(TAG, " TXPower: %d", ibeacon.get_signal_power());
475
473
  }
476
474
  }
477
475
  for (auto &data : this->service_datas_) {
@@ -480,7 +478,7 @@ void ESPBTDevice::parse_scan_rst(const esp_ble_gap_cb_param_t::ble_scan_result_e
480
478
  ESP_LOGVV(TAG, " Data: %s", format_hex_pretty(data.data).c_str());
481
479
  }
482
480
 
483
- ESP_LOGVV(TAG, " Adv data: %s", format_hex_pretty(param.ble_adv, param.adv_data_len + param.scan_rsp_len).c_str());
481
+ ESP_LOGVV(TAG, "Adv data: %s", format_hex_pretty(param.ble_adv, param.adv_data_len + param.scan_rsp_len).c_str());
484
482
  #endif
485
483
  }
486
484
  void ESPBTDevice::parse_adv_(const esp_ble_gap_cb_param_t::ble_scan_result_evt_param &param) {
@@ -44,10 +44,10 @@ class ESPBLEiBeacon {
44
44
  ESPBLEiBeacon(const uint8_t *data);
45
45
  static optional<ESPBLEiBeacon> from_manufacturer_data(const ServiceData &data);
46
46
 
47
- uint16_t get_major() { return byteswap(this->beacon_data_.major); }
48
- uint16_t get_minor() { return byteswap(this->beacon_data_.minor); }
47
+ uint16_t get_major() { return ((this->beacon_data_.major & 0xFF) << 8) | (this->beacon_data_.major >> 8); }
48
+ uint16_t get_minor() { return ((this->beacon_data_.minor & 0xFF) << 8) | (this->beacon_data_.minor >> 8); }
49
49
  int8_t get_signal_power() { return this->beacon_data_.signal_power; }
50
- ESPBTUUID get_uuid() { return ESPBTUUID::from_raw_reversed(this->beacon_data_.proximity_uuid); }
50
+ ESPBTUUID get_uuid() { return ESPBTUUID::from_raw(this->beacon_data_.proximity_uuid); }
51
51
 
52
52
  protected:
53
53
  struct {
@@ -37,7 +37,6 @@ struct MediaPlayerSupportedFormat {
37
37
  uint32_t sample_rate;
38
38
  uint32_t num_channels;
39
39
  MediaPlayerFormatPurpose purpose;
40
- uint32_t sample_bytes;
41
40
  };
42
41
 
43
42
  class MediaPlayer;
@@ -755,7 +755,7 @@ void VoiceAssistant::on_event(const api::VoiceAssistantEventResponse &msg) {
755
755
  message = std::move(arg.value);
756
756
  }
757
757
  }
758
- if (code == "wake-word-timeout" || code == "wake_word_detection_aborted" || code == "no_wake_word") {
758
+ if (code == "wake-word-timeout" || code == "wake_word_detection_aborted") {
759
759
  // Don't change state here since either the "tts-end" or "run-end" events will do it.
760
760
  return;
761
761
  } else if (code == "wake-provider-missing" || code == "wake-engine-missing") {
@@ -77,18 +77,6 @@ struct Timer {
77
77
  }
78
78
  };
79
79
 
80
- struct WakeWord {
81
- std::string id;
82
- std::string wake_word;
83
- std::vector<std::string> trained_languages;
84
- };
85
-
86
- struct Configuration {
87
- std::vector<WakeWord> available_wake_words;
88
- std::vector<std::string> active_wake_words;
89
- uint32_t max_active_wake_words;
90
- };
91
-
92
80
  class VoiceAssistant : public Component {
93
81
  public:
94
82
  void setup() override;
@@ -145,8 +133,6 @@ class VoiceAssistant : public Component {
145
133
  void on_audio(const api::VoiceAssistantAudio &msg);
146
134
  void on_timer_event(const api::VoiceAssistantTimerEventResponse &msg);
147
135
  void on_announce(const api::VoiceAssistantAnnounceRequest &msg);
148
- void on_set_configuration(const std::vector<std::string> &active_wake_words){};
149
- const Configuration &get_configuration() { return this->config_; };
150
136
 
151
137
  bool is_running() const { return this->state_ != State::IDLE; }
152
138
  void set_continuous(bool continuous) { this->continuous_ = continuous; }
@@ -293,8 +279,6 @@ class VoiceAssistant : public Component {
293
279
  AudioMode audio_mode_{AUDIO_MODE_UDP};
294
280
  bool udp_socket_running_{false};
295
281
  bool start_udp_socket_();
296
-
297
- Configuration config_{};
298
282
  };
299
283
 
300
284
  template<typename... Ts> class StartAction : public Action<Ts...>, public Parented<VoiceAssistant> {
esphome/const.py CHANGED
@@ -1,6 +1,6 @@
1
1
  """Constants used by esphome."""
2
2
 
3
- __version__ = "2024.9.0"
3
+ __version__ = "2024.9.0b1"
4
4
 
5
5
  ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
6
6
  VALID_SUBSTITUTIONS_CHARACTERS = (
esphome/core/config.py CHANGED
@@ -100,6 +100,9 @@ def valid_include(value):
100
100
  def valid_project_name(value: str):
101
101
  if value.count(".") != 1:
102
102
  raise cv.Invalid("project name needs to have a namespace")
103
+
104
+ value = value.replace(" ", "_")
105
+
103
106
  return value
104
107
 
105
108
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: esphome
3
- Version: 2024.9.0
3
+ Version: 2024.9.0b1
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=GePHUM7xdXb_Pil59SHVsXg2F4VBPgkH-Fz2PDX8Z54,1873
5
5
  esphome/config.py,sha256=ArMupdqCpKqQm-vFWb85HueI88DAfYTjuhR6mA691DI,39614
6
6
  esphome/config_helpers.py,sha256=MKf_wzO35nn41FvigXE0iYKDslPgL2ruf8R-EPtTT2I,3256
7
7
  esphome/config_validation.py,sha256=8EJWDk3JRqPE6eXXL_u6sSPvlRWLHYTIXb6MfsEriW0,66190
8
- esphome/const.py,sha256=IpfqhzjgG_TpYWfKCNeOgL0j5g_i1w7fnprjLCiXaWM,39687
8
+ esphome/const.py,sha256=GbxZB_gT5N6GQ3ps3R3iWrSn2bcAbI0bsDGx-HcVv1U,39689
9
9
  esphome/coroutine.py,sha256=j_14z8dIIzIBeuNO30D4c1RJvMMt1xZFZ58Evd-EvJA,9344
10
10
  esphome/cpp_generator.py,sha256=lXPXHYUsFIvBSAoZ93mXYlGcXYg5L18nTtYGHE4_rr8,31203
11
11
  esphome/cpp_helpers.py,sha256=6C2vNbOIhZKi43xRVlk5hp9GfshfBn-rc5D_ZFUEYaE,4801
@@ -173,15 +173,15 @@ esphome/components/apds9960/apds9960.h,sha256=oFrXPQrPDS16gNSVdN1n6SKuvjwc9LdvpK
173
173
  esphome/components/apds9960/binary_sensor.py,sha256=DcfxkwZFvgmOU3C_gVSfZOpJ-EZlZXMd0gHnAUnxxCs,786
174
174
  esphome/components/apds9960/sensor.py,sha256=HoGfwl7WqJkpKI7BjeM1alXPcppdWVRrWwFzrZ0ISAo,871
175
175
  esphome/components/api/__init__.py,sha256=grnorxG9QG00eQwcIsiijno_o_JS6xKzOitqLS1DkXg,9895
176
- esphome/components/api/api_connection.cpp,sha256=iaN0Hr26xHjaMyvWrfWUuFJ6or43td4Y-Hrbb0WW6DU,58827
177
- esphome/components/api/api_connection.h,sha256=TzVix_TjCGRcXJ5yvkM7-ZVWYec5SAmzKhZFEsrxmiw,10648
176
+ esphome/components/api/api_connection.cpp,sha256=kCxMbK72NJvYdPmj8k7L4IYOv5fTlxfTQp3rUOUvkWk,57490
177
+ esphome/components/api/api_connection.h,sha256=iuCMJTKXOziKjWTSkidOyh8Yh7uEpEVdxSFOxPaFE08,10418
178
178
  esphome/components/api/api_frame_helper.cpp,sha256=-K3JLxUJ3gKpxVzJwOAwlCvlwl7C7VTgQWhpHlhzgd0,32998
179
179
  esphome/components/api/api_frame_helper.h,sha256=c1ET5DyoWNtdEkxLCVmyfyA8ZASBv9iAA24I5mtmnzA,5522
180
180
  esphome/components/api/api_noise_context.h,sha256=0i3J3wchJitnQBTJeQm1380t0duhsz7WxJDrlUBF8mE,405
181
- esphome/components/api/api_pb2.cpp,sha256=cPTrbhVar99mgyggNjv0vIu4rg0-LMZzd0WGZPvdPkQ,245524
182
- esphome/components/api/api_pb2.h,sha256=sTeQ5zL0_Ncs4GvxizY-B5kPevCLqJ9tuU9tMX69FgY,70507
183
- esphome/components/api/api_pb2_service.cpp,sha256=xYIanFE-N_3LRJgp-1_5Ey88_BMlYZao1QjztZEaNPo,53963
184
- esphome/components/api/api_pb2_service.h,sha256=XgdMInOdOxFQZ0X7EDt8rQWX9Z0TSS2LDWsga5vNckg,22581
181
+ esphome/components/api/api_pb2.cpp,sha256=s2zkb8VgiLbIobbMOJUVGt4xsq5obKwKp6P2BT5_1og,241306
182
+ esphome/components/api/api_pb2.h,sha256=Ix4i56SescULD98D_vEfXV91sz236yFneoZIdtgxLUU,68977
183
+ esphome/components/api/api_pb2_service.cpp,sha256=Qmuo3Aa7FVjOA2z3Y8EOP0SwGphw_-nT7pNqTKetTNc,51970
184
+ esphome/components/api/api_pb2_service.h,sha256=uavT9B8kn3p-Q1fVGIoLGAh3xdpzhQM1zYF09gfstdE,21597
185
185
  esphome/components/api/api_server.cpp,sha256=imCfdE_CkAWw9nnOPiA8QsyoSQyHx6jQcNbKvYRDzZc,11286
186
186
  esphome/components/api/api_server.h,sha256=BokLEuG9sMLC-TSUR7tCQn2NonL_mJ9E6gdr2wYrQLg,5304
187
187
  esphome/components/api/client.py,sha256=UOxu9LsM1fprWq6TmSbSEkvD0mSZjJFVXZxXllMPt8s,1775
@@ -336,7 +336,7 @@ esphome/components/ble_client/text_sensor/automation.h,sha256=OCbnb9y1crqjzfy-4K
336
336
  esphome/components/ble_client/text_sensor/ble_text_sensor.cpp,sha256=oVGnE8A_zow1Dl1GaLs1ZFfgo0qNieNJIMxrmKtn61Y,4861
337
337
  esphome/components/ble_client/text_sensor/ble_text_sensor.h,sha256=NpCmxNNxJUaM9iz7gX6Fwdu-6vgHoMiXXWQGrha8Vxk,2018
338
338
  esphome/components/ble_presence/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
339
- esphome/components/ble_presence/binary_sensor.py,sha256=L6YQsfP-QhB7GnouCNHCpdnbSY7h2jn0TrwPSMet-DE,3437
339
+ esphome/components/ble_presence/binary_sensor.py,sha256=2MFciM8F51fPWHsJfc1IfyUOyjJT10YYmJrL6Y5vUxQ,3415
340
340
  esphome/components/ble_presence/ble_presence_device.cpp,sha256=bCNNQrzNbYexs2xMSxskyE8biYNHQ0_vsmdEAv0f7wk,325
341
341
  esphome/components/ble_presence/ble_presence_device.h,sha256=f9iWhtLuVqEg3HdG3vn6bYET56xj4DVrML861banlvg,4040
342
342
  esphome/components/ble_rssi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -769,8 +769,8 @@ esphome/components/esp32_ble/ble.h,sha256=5u4PxcvcOk5tpO_nv2f6fB68BfTf2Zuv1PPH_v
769
769
  esphome/components/esp32_ble/ble_advertising.cpp,sha256=nWetDKFwcdhyaqRyq8KKmsFctLEF-4Bw81QPYHmxi24,6039
770
770
  esphome/components/esp32_ble/ble_advertising.h,sha256=dLksw168KS1wh3_X7GhesS9nacINphlZUl4nMgYSA8M,1480
771
771
  esphome/components/esp32_ble/ble_event.h,sha256=ED5C_SrTybqtu30vevlPr8NBsBUVKK6MSVC9UzwspHc,2771
772
- esphome/components/esp32_ble/ble_uuid.cpp,sha256=k-txBt8lIMT8fgtBkKcRT94NrEuU57-rBSCE-lcp0Tw,6077
773
- esphome/components/esp32_ble/ble_uuid.h,sha256=K7SoC6fQB7u_FQc4u__crSBLhxpCezc75uO7JFfaX7E,916
772
+ esphome/components/esp32_ble/ble_uuid.cpp,sha256=B_EzwLTVdJN0Yqqbu_MnFZODRG_wHOHHYzm4m1OHVaU,5837
773
+ esphome/components/esp32_ble/ble_uuid.h,sha256=dwiOniSDlOHF7Yz7O_f7IFzPc8VCXMFljDjPONQ6oJo,857
774
774
  esphome/components/esp32_ble/const_esp32c6.h,sha256=-PzjJqEK5QC52OEPtsjKPAlyv1Tr5lJnm4_-RuGSPyc,3123
775
775
  esphome/components/esp32_ble/queue.h,sha256=Y-wl0zLEas9TSEUIbRMqE_uCr6CEQvdk_24oNU9MYVo,1141
776
776
  esphome/components/esp32_ble_beacon/__init__.py,sha256=X8ovDDVUexlT_UM9OiXWzB6mgGgayA2MdOIix67yoZg,3174
@@ -799,8 +799,8 @@ esphome/components/esp32_ble_server/ble_service.cpp,sha256=zs-xQT9ISP8hn40DoL3k9
799
799
  esphome/components/esp32_ble_server/ble_service.h,sha256=MTQ1FsfwMgDoDiLNo0RqPObE8b9sE4NcCSVxlmR49v8,2328
800
800
  esphome/components/esp32_ble_tracker/__init__.py,sha256=Sgr8LKTUWh5nC2bh_iKNlQQZY7GSRr5FLG2QxI-piaY,12362
801
801
  esphome/components/esp32_ble_tracker/automation.h,sha256=0pDA6EX__f14sT0KJwcnqg7UOsueKjjegHPznQj9biw,3795
802
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp,sha256=x0e81DwrOvBl9RSryR-i9ASagHE9m2qBuPSzEIfn7fY,26439
803
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h,sha256=20CmxJv8NhxH5bDKvhkAkiuObByaj6sOJq-BiNROhmE,8842
802
+ esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp,sha256=8onqXeXMzyfcKcgFjqxh6eqv9fXxeacEDnlL7YgJTrk,26335
803
+ esphome/components/esp32_ble_tracker/esp32_ble_tracker.h,sha256=D2Tl9kmxM5NclVzxjcHR-th2_CfEvEvZXiGGNc0Bv98,8913
804
804
  esphome/components/esp32_camera/__init__.py,sha256=qhJ3Jgv1gum3m8kfkOFZLK7TLNsbuHZxIrqxBb11mz0,12649
805
805
  esphome/components/esp32_camera/esp32_camera.cpp,sha256=Ba2nu453rF4FDSlIJwD5sLnzE8ru4kKK4xVCvMdoyac,16960
806
806
  esphome/components/esp32_camera/esp32_camera.h,sha256=3-MKRSBcjDgI3I0uKmt0bGSfp2t6B85Zsjr06tmpa9Q,7590
@@ -1602,7 +1602,7 @@ esphome/components/mdns/mdns_rp2040.cpp,sha256=AzSFWtVJtq2dA9wJIFkvZvk8r_7oYbdFV
1602
1602
  esphome/components/media_player/__init__.py,sha256=5tWKlPTnq8sr0ObnedsntJyfQZRUC8yTUc7Jyk2pcH0,6830
1603
1603
  esphome/components/media_player/automation.h,sha256=jq0TR0-YX9xnyZrdXBaFTUFplrruF-eqWQpfC0TUBYU,2995
1604
1604
  esphome/components/media_player/media_player.cpp,sha256=bJSxcKtsju4xZie-u89yADZavHYx9hiKaUWt-C-BBmk,3938
1605
- esphome/components/media_player/media_player.h,sha256=8NMfzWbDQqo64pK5QPiTggo0BIN6hPRgiQgLFEVXcOY,3069
1605
+ esphome/components/media_player/media_player.h,sha256=ysqBAMrWGejUl3dMTTDUqsRfgtREjrYFuXyLhyTnPhs,3044
1606
1606
  esphome/components/mhz19/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1607
1607
  esphome/components/mhz19/mhz19.cpp,sha256=CBBVBMqGUsrc-4PMOaBDuKCAFNr43Kukt3a018kQI0k,3924
1608
1608
  esphome/components/mhz19/mhz19.h,sha256=DTuwpBz6gAZVn_QIUnmPiE4Y188XYiOS9WxIggcjZJ4,2050
@@ -2991,8 +2991,8 @@ esphome/components/vl53l0x/sensor.py,sha256=P8rWgRSOAQO-kAn35UC2I2_UwmYKUWS3DvYD
2991
2991
  esphome/components/vl53l0x/vl53l0x_sensor.cpp,sha256=JqSIf9jjNhin561LU-QzAmRKEK0PqQ8CuLO2mn380og,15017
2992
2992
  esphome/components/vl53l0x/vl53l0x_sensor.h,sha256=iTtScB2O7DVFh0eR9AVht2l3AdSAPJOVMtflTv2ZX7c,2561
2993
2993
  esphome/components/voice_assistant/__init__.py,sha256=mMd2eklOnmvpDJLjzr1nIUS6iXIWjHi6mmlGDs7iV1M,13826
2994
- esphome/components/voice_assistant/voice_assistant.cpp,sha256=aVJEIdRAtZa3RQon_sb76UfUKgNwBtRghQLEt8QxLZ4,29613
2995
- esphome/components/voice_assistant/voice_assistant.h,sha256=0nwW6Jzad0JU3L-On3FbUa5VmHy1jmTHhyn3FvQSJxM,11648
2994
+ esphome/components/voice_assistant/voice_assistant.cpp,sha256=3PGG9hwvPzFwePMxeZS8NOu7KrvnxR48uN5ywoPqD94,29587
2995
+ esphome/components/voice_assistant/voice_assistant.h,sha256=SC4EW1MBdyjBJWyh06XBgGzr7bP3goD204_DQzUJRAU,11204
2996
2996
  esphome/components/voltage_sampler/__init__.py,sha256=IU5YrROZSNyuAP1d6M_V3ZGAwNjXCHPcVy5nMjZ953Y,155
2997
2997
  esphome/components/voltage_sampler/voltage_sampler.h,sha256=Y67FLOpOzW29v29BRRyYgEmGZ_B8QnUUaqJMH6FA3jM,337
2998
2998
  esphome/components/wake_on_lan/__init__.py,sha256=-RYpXD02o3dlFnKzOCYk58bUbxfD2v-wj1ECywj-cgI,50
@@ -3213,7 +3213,7 @@ esphome/core/component.cpp,sha256=Uea5Hkm0E9yJMJYnrbLFFVpdcBZgaWSxfAiwcyGKByA,93
3213
3213
  esphome/core/component.h,sha256=U4m8_g9gSBBIjRNw4k36entP2JcA6F3SsWbwty_hKdo,11744
3214
3214
  esphome/core/component_iterator.cpp,sha256=TUu2K34ATYa1Qyf2s-sZJBksAiFIGj3egzbDKPuFtTQ,11117
3215
3215
  esphome/core/component_iterator.h,sha256=cjacKgRrlxl-VwPOysfBJZNK0NMzcc-w9xXn82m5dYc,3599
3216
- esphome/core/config.py,sha256=gGGU5EI6FJkVGk4N4uP9MdRPct8b9n49Q6P7jGJHBbw,14511
3216
+ esphome/core/config.py,sha256=cIyIQzLLMKGr6milcT69-YPNVhehNzw2Tu311-MLGwo,14549
3217
3217
  esphome/core/controller.cpp,sha256=feO4yH0GETNCqi9MTZEtsOaoo-CPV2rM9S7UfQXY6Ew,4553
3218
3218
  esphome/core/controller.h,sha256=PXCcMqYpq0xjFCdlOKv6WuYlcETnB4sq3UQWdOTt9PU,3720
3219
3219
  esphome/core/datatypes.h,sha256=wN8xro8vqXT13w9KvVOXeQfBwlI_WQZ6uFaIGyub67E,2114
@@ -3260,9 +3260,9 @@ esphome/dashboard/util/itertools.py,sha256=8eLrWEWmICLtXNxkKdYPQV0c_N4GEz8m9Npnb
3260
3260
  esphome/dashboard/util/password.py,sha256=cQz3b9B-ijTe7zS6BeCW0hc3pWv6JjC78jmnycYYAh8,321
3261
3261
  esphome/dashboard/util/subprocess.py,sha256=T8EW6dbU4LPd2DG1dRrdh8li71tt6J1isn411poMhkk,1022
3262
3262
  esphome/dashboard/util/text.py,sha256=ENDnfN4O0NdA3CKVJjQYabFbwbrsIhVKrAMQe53qYu4,534
3263
- esphome-2024.9.0.dist-info/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
3264
- esphome-2024.9.0.dist-info/METADATA,sha256=-goooB6AsPI4f-niKeJ6k3xI_JCtYql0nTptAhGfPJQ,3263
3265
- esphome-2024.9.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
3266
- esphome-2024.9.0.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
3267
- esphome-2024.9.0.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
3268
- esphome-2024.9.0.dist-info/RECORD,,
3263
+ esphome-2024.9.0b1.dist-info/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
3264
+ esphome-2024.9.0b1.dist-info/METADATA,sha256=kji5jh5Jeh8tmPSkGQMVSu26BMcdaH3FC6h9l5E2G3U,3265
3265
+ esphome-2024.9.0b1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
3266
+ esphome-2024.9.0b1.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
3267
+ esphome-2024.9.0b1.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
3268
+ esphome-2024.9.0b1.dist-info/RECORD,,