mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	| @@ -41,7 +41,7 @@ CONFIG_SCHEMA = cv.All( | ||||
|             cv.Optional(CONF_SERVICE_UUID): esp32_ble_tracker.bt_uuid, | ||||
|             cv.Optional(CONF_IBEACON_MAJOR): 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_MIN_RSSI): cv.All( | ||||
|                 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)) | ||||
|  | ||||
|     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)) | ||||
|  | ||||
|         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); | ||||
|   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 ret; | ||||
|   if (data.length() == 4) { | ||||
|   | ||||
| @@ -20,6 +20,7 @@ class ESPBTUUID { | ||||
|   static ESPBTUUID from_uint32(uint32_t uuid); | ||||
|  | ||||
|   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); | ||||
|  | ||||
|   | ||||
| @@ -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()); | ||||
|   } | ||||
|   for (auto &data : this->manufacturer_datas_) { | ||||
|     ESP_LOGVV(TAG, "  Manufacturer data: %s", format_hex_pretty(data.data).c_str()); | ||||
|     if (this->get_ibeacon().has_value()) { | ||||
|       auto ibeacon = this->get_ibeacon().value(); | ||||
|       ESP_LOGVV(TAG, "    iBeacon data:"); | ||||
|       ESP_LOGVV(TAG, "      UUID: %s", ibeacon.get_uuid().to_string().c_str()); | ||||
|       ESP_LOGVV(TAG, "      Major: %u", ibeacon.get_major()); | ||||
|       ESP_LOGVV(TAG, "      Minor: %u", ibeacon.get_minor()); | ||||
|       ESP_LOGVV(TAG, "      TXPower: %d", ibeacon.get_signal_power()); | ||||
|     auto ibeacon = ESPBLEiBeacon::from_manufacturer_data(data); | ||||
|     if (ibeacon.has_value()) { | ||||
|       ESP_LOGVV(TAG, "  Manufacturer iBeacon:"); | ||||
|       ESP_LOGVV(TAG, "    UUID: %s", ibeacon.value().get_uuid().to_string().c_str()); | ||||
|       ESP_LOGVV(TAG, "    Major: %u", ibeacon.value().get_major()); | ||||
|       ESP_LOGVV(TAG, "    Minor: %u", ibeacon.value().get_minor()); | ||||
|       ESP_LOGVV(TAG, "    TXPower: %d", ibeacon.value().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_) { | ||||
|   | ||||
| @@ -44,10 +44,10 @@ class ESPBLEiBeacon { | ||||
|   ESPBLEiBeacon(const uint8_t *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_minor() { return ((this->beacon_data_.minor & 0xFF) << 8) | (this->beacon_data_.minor >> 8); } | ||||
|   uint16_t get_major() { return byteswap(this->beacon_data_.major); } | ||||
|   uint16_t get_minor() { return byteswap(this->beacon_data_.minor); } | ||||
|   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: | ||||
|   struct { | ||||
|   | ||||
| @@ -755,7 +755,7 @@ void VoiceAssistant::on_event(const api::VoiceAssistantEventResponse &msg) { | ||||
|           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. | ||||
|         return; | ||||
|       } else if (code == "wake-provider-missing" || code == "wake-engine-missing") { | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| """Constants used by esphome.""" | ||||
|  | ||||
| __version__ = "2024.9.0b1" | ||||
| __version__ = "2024.9.0b2" | ||||
|  | ||||
| ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" | ||||
| VALID_SUBSTITUTIONS_CHARACTERS = ( | ||||
|   | ||||
		Reference in New Issue
	
	Block a user