mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 15:12:06 +00:00 
			
		
		
		
	| @@ -41,7 +41,7 @@ CONFIG_SCHEMA = cv.All( | |||||||
|             cv.Optional(CONF_SERVICE_UUID): esp32_ble_tracker.bt_uuid, |             cv.Optional(CONF_SERVICE_UUID): esp32_ble_tracker.bt_uuid, | ||||||
|             cv.Optional(CONF_IBEACON_MAJOR): cv.uint16_t, |             cv.Optional(CONF_IBEACON_MAJOR): cv.uint16_t, | ||||||
|             cv.Optional(CONF_IBEACON_MINOR): cv.uint16_t, |             cv.Optional(CONF_IBEACON_MINOR): cv.uint16_t, | ||||||
|             cv.Optional(CONF_IBEACON_UUID): cv.uuid, |             cv.Optional(CONF_IBEACON_UUID): esp32_ble_tracker.bt_uuid, | ||||||
|             cv.Optional(CONF_TIMEOUT, default="5min"): cv.positive_time_period, |             cv.Optional(CONF_TIMEOUT, default="5min"): cv.positive_time_period, | ||||||
|             cv.Optional(CONF_MIN_RSSI): cv.All( |             cv.Optional(CONF_MIN_RSSI): cv.All( | ||||||
|                 cv.decibel, cv.int_range(min=-100, max=-30) |                 cv.decibel, cv.int_range(min=-100, max=-30) | ||||||
| @@ -83,7 +83,7 @@ async def to_code(config): | |||||||
|             cg.add(var.set_service_uuid128(uuid128)) |             cg.add(var.set_service_uuid128(uuid128)) | ||||||
|  |  | ||||||
|     if ibeacon_uuid := config.get(CONF_IBEACON_UUID): |     if ibeacon_uuid := config.get(CONF_IBEACON_UUID): | ||||||
|         ibeacon_uuid = esp32_ble_tracker.as_hex_array(str(ibeacon_uuid)) |         ibeacon_uuid = esp32_ble_tracker.as_reversed_hex_array(ibeacon_uuid) | ||||||
|         cg.add(var.set_ibeacon_uuid(ibeacon_uuid)) |         cg.add(var.set_ibeacon_uuid(ibeacon_uuid)) | ||||||
|  |  | ||||||
|         if (ibeacon_major := config.get(CONF_IBEACON_MAJOR)) is not None: |         if (ibeacon_major := config.get(CONF_IBEACON_MAJOR)) is not None: | ||||||
|   | |||||||
| @@ -31,6 +31,13 @@ ESPBTUUID ESPBTUUID::from_raw(const uint8_t *data) { | |||||||
|   memcpy(ret.uuid_.uuid.uuid128, data, ESP_UUID_LEN_128); |   memcpy(ret.uuid_.uuid.uuid128, data, ESP_UUID_LEN_128); | ||||||
|   return ret; |   return ret; | ||||||
| } | } | ||||||
|  | ESPBTUUID ESPBTUUID::from_raw_reversed(const uint8_t *data) { | ||||||
|  |   ESPBTUUID ret; | ||||||
|  |   ret.uuid_.len = ESP_UUID_LEN_128; | ||||||
|  |   for (int i = 0; i < ESP_UUID_LEN_128; i++) | ||||||
|  |     ret.uuid_.uuid.uuid128[ESP_UUID_LEN_128 - 1 - i] = data[i]; | ||||||
|  |   return ret; | ||||||
|  | } | ||||||
| ESPBTUUID ESPBTUUID::from_raw(const std::string &data) { | ESPBTUUID ESPBTUUID::from_raw(const std::string &data) { | ||||||
|   ESPBTUUID ret; |   ESPBTUUID ret; | ||||||
|   if (data.length() == 4) { |   if (data.length() == 4) { | ||||||
|   | |||||||
| @@ -20,6 +20,7 @@ class ESPBTUUID { | |||||||
|   static ESPBTUUID from_uint32(uint32_t uuid); |   static ESPBTUUID from_uint32(uint32_t uuid); | ||||||
|  |  | ||||||
|   static ESPBTUUID from_raw(const uint8_t *data); |   static ESPBTUUID from_raw(const uint8_t *data); | ||||||
|  |   static ESPBTUUID from_raw_reversed(const uint8_t *data); | ||||||
|  |  | ||||||
|   static ESPBTUUID from_raw(const std::string &data); |   static ESPBTUUID from_raw(const std::string &data); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -462,14 +462,16 @@ void ESPBTDevice::parse_scan_rst(const esp_ble_gap_cb_param_t::ble_scan_result_e | |||||||
|     ESP_LOGVV(TAG, "  Service UUID: %s", uuid.to_string().c_str()); |     ESP_LOGVV(TAG, "  Service UUID: %s", uuid.to_string().c_str()); | ||||||
|   } |   } | ||||||
|   for (auto &data : this->manufacturer_datas_) { |   for (auto &data : this->manufacturer_datas_) { | ||||||
|     ESP_LOGVV(TAG, "  Manufacturer data: %s", format_hex_pretty(data.data).c_str()); |     auto ibeacon = ESPBLEiBeacon::from_manufacturer_data(data); | ||||||
|     if (this->get_ibeacon().has_value()) { |     if (ibeacon.has_value()) { | ||||||
|       auto ibeacon = this->get_ibeacon().value(); |       ESP_LOGVV(TAG, "  Manufacturer iBeacon:"); | ||||||
|       ESP_LOGVV(TAG, "    iBeacon data:"); |       ESP_LOGVV(TAG, "    UUID: %s", ibeacon.value().get_uuid().to_string().c_str()); | ||||||
|       ESP_LOGVV(TAG, "      UUID: %s", ibeacon.get_uuid().to_string().c_str()); |       ESP_LOGVV(TAG, "    Major: %u", ibeacon.value().get_major()); | ||||||
|       ESP_LOGVV(TAG, "      Major: %u", ibeacon.get_major()); |       ESP_LOGVV(TAG, "    Minor: %u", ibeacon.value().get_minor()); | ||||||
|       ESP_LOGVV(TAG, "      Minor: %u", ibeacon.get_minor()); |       ESP_LOGVV(TAG, "    TXPower: %d", ibeacon.value().get_signal_power()); | ||||||
|       ESP_LOGVV(TAG, "      TXPower: %d", ibeacon.get_signal_power()); |     } else { | ||||||
|  |       ESP_LOGVV(TAG, "  Manufacturer ID: %s, data: %s", data.uuid.to_string().c_str(), | ||||||
|  |                 format_hex_pretty(data.data).c_str()); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|   for (auto &data : this->service_datas_) { |   for (auto &data : this->service_datas_) { | ||||||
|   | |||||||
| @@ -44,10 +44,10 @@ class ESPBLEiBeacon { | |||||||
|   ESPBLEiBeacon(const uint8_t *data); |   ESPBLEiBeacon(const uint8_t *data); | ||||||
|   static optional<ESPBLEiBeacon> from_manufacturer_data(const ServiceData &data); |   static optional<ESPBLEiBeacon> from_manufacturer_data(const ServiceData &data); | ||||||
|  |  | ||||||
|   uint16_t get_major() { return ((this->beacon_data_.major & 0xFF) << 8) | (this->beacon_data_.major >> 8); } |   uint16_t get_major() { return byteswap(this->beacon_data_.major); } | ||||||
|   uint16_t get_minor() { return ((this->beacon_data_.minor & 0xFF) << 8) | (this->beacon_data_.minor >> 8); } |   uint16_t get_minor() { return byteswap(this->beacon_data_.minor); } | ||||||
|   int8_t get_signal_power() { return this->beacon_data_.signal_power; } |   int8_t get_signal_power() { return this->beacon_data_.signal_power; } | ||||||
|   ESPBTUUID get_uuid() { return ESPBTUUID::from_raw(this->beacon_data_.proximity_uuid); } |   ESPBTUUID get_uuid() { return ESPBTUUID::from_raw_reversed(this->beacon_data_.proximity_uuid); } | ||||||
|  |  | ||||||
|  protected: |  protected: | ||||||
|   struct { |   struct { | ||||||
|   | |||||||
| @@ -755,7 +755,7 @@ void VoiceAssistant::on_event(const api::VoiceAssistantEventResponse &msg) { | |||||||
|           message = std::move(arg.value); |           message = std::move(arg.value); | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|       if (code == "wake-word-timeout" || code == "wake_word_detection_aborted") { |       if (code == "wake-word-timeout" || code == "wake_word_detection_aborted" || code == "no_wake_word") { | ||||||
|         // Don't change state here since either the "tts-end" or "run-end" events will do it. |         // Don't change state here since either the "tts-end" or "run-end" events will do it. | ||||||
|         return; |         return; | ||||||
|       } else if (code == "wake-provider-missing" || code == "wake-engine-missing") { |       } else if (code == "wake-provider-missing" || code == "wake-engine-missing") { | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| """Constants used by esphome.""" | """Constants used by esphome.""" | ||||||
|  |  | ||||||
| __version__ = "2024.9.0b1" | __version__ = "2024.9.0b2" | ||||||
|  |  | ||||||
| ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" | ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" | ||||||
| VALID_SUBSTITUTIONS_CHARACTERS = ( | VALID_SUBSTITUTIONS_CHARACTERS = ( | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user