mirror of
https://github.com/esphome/esphome-docs.git
synced 2024-11-18 11:15:36 +01:00
135 lines
4.4 KiB
ReStructuredText
135 lines
4.4 KiB
ReStructuredText
BLE Client Sensor
|
|
=================
|
|
|
|
.. seo::
|
|
:description: Fetch numeric values from BLE devices.
|
|
:image: bluetooth.svg
|
|
|
|
The ``ble_client`` component is a sensor platform that can query BLE devices for RSSI or specific
|
|
values of service characteristics.
|
|
|
|
For more information on BLE services and characteristics, see :doc:`/components/ble_client`.
|
|
|
|
.. warning::
|
|
|
|
The BLE software stack on the ESP32 consumes a significant amount of RAM on the device.
|
|
|
|
**Crashes are likely to occur** if you include too many additional components in your device's
|
|
configuration. Memory-intensive components such as :doc:`/components/voice_assistant` and other
|
|
audio components are most likely to cause issues.
|
|
|
|
.. code-block:: yaml
|
|
|
|
esp32_ble_tracker:
|
|
|
|
ble_client:
|
|
- mac_address: FF:FF:20:00:0F:15
|
|
id: itag_black
|
|
|
|
sensor:
|
|
- platform: ble_client
|
|
type: characteristic
|
|
ble_client_id: itag_black
|
|
name: "iTag battery level"
|
|
service_uuid: '180f'
|
|
characteristic_uuid: '2a19'
|
|
icon: 'mdi:battery'
|
|
unit_of_measurement: '%'
|
|
|
|
- platform: ble_client
|
|
type: rssi
|
|
ble_client_id: itag_black
|
|
name: "iTag RSSI"
|
|
|
|
Configuration variables:
|
|
------------------------
|
|
|
|
- **type** (**Required**): One of ``rssi``, ``characteristic``.
|
|
|
|
rssi options:
|
|
|
|
- **update_interval** (*Optional*, :ref:`config-time`): The interval to poll the device.
|
|
- All other options from :ref:`Sensor <config-sensor>`.
|
|
|
|
characteristic options:
|
|
|
|
- **ble_client_id** (**Required**, :ref:`config-id`): ID of the associated BLE client.
|
|
- **service_uuid** (**Required**, UUID): UUID of the service on the device.
|
|
- **characteristic_uuid** (**Required**, UUID): UUID of the service's characteristic to query.
|
|
- **descriptor_uuid** (*Optional*, UUID): UUID of the characteristic's descriptor to query.
|
|
- **id** (*Optional*, :ref:`config-id`): The ID to use for code generation, and for reference by dependent components.
|
|
- **lambda** (*Optional*, :ref:`lambda <config-lambda>`): The lambda to use for converting a raw data
|
|
reading to a sensor value. See :ref:`ble-sensor-lambda` for more information.
|
|
- **notify** (*Optional*, boolean): Instruct the server to send notifications for this
|
|
characteristic.
|
|
- **update_interval** (*Optional*, :ref:`config-time`): The interval to poll the device.
|
|
- All other options from :ref:`Sensor <config-sensor>`.
|
|
|
|
Automations:
|
|
|
|
- **on_notify** (*Optional*, :ref:`Automation <automation>`): An automation to
|
|
perform when a notify message is received from the device. See :ref:`ble_sensor-on_notify`.
|
|
|
|
.. _ble-sensor-lambda:
|
|
|
|
Raw Data Parsing Lambda
|
|
-----------------------
|
|
|
|
By default only the first byte of each message received on the service's characteristic is used
|
|
for the sensor reading. For more complex messages, this behavior can be overridden by a custom
|
|
lambda function to parse the raw data. The received data bytes are passed to the lambda as a
|
|
variable ``x`` of type ``std::vector<uint8_t>``. The function must return a single ``float`` value.
|
|
|
|
.. code-block:: yaml
|
|
|
|
...
|
|
|
|
sensor:
|
|
- platform: ble_client
|
|
type: characteristic
|
|
ble_client_id: t_sensor
|
|
name: "Temperature Sensor 32bit float"
|
|
...
|
|
device_class: "temperature"
|
|
lambda: |-
|
|
return *((float*)(&x[0]));
|
|
|
|
|
|
BLE Sensor Automation
|
|
---------------------
|
|
|
|
.. _ble_sensor-on_notify:
|
|
|
|
``on_notify``
|
|
*************
|
|
|
|
This automation is triggered when the device/server sends a notify message for
|
|
a characteristic. The config variable *notify* must be true or this will have
|
|
no effect.
|
|
A variable ``x`` of type ``float`` is passed to the automation for use in lambdas.
|
|
|
|
Example UUIDs
|
|
-------------
|
|
The UUIDs available on a device are dependent on the type of
|
|
device and the functionality made available. Check the ESPHome
|
|
device logs for those that are found on the device.
|
|
|
|
Some common ones:
|
|
|
|
+----------+------------------+-----------------------+
|
|
| Service | Characteristic | Description |
|
|
+==========+==================+=======================+
|
|
| 180F | 2A19 | Battery level |
|
|
+----------+------------------+-----------------------+
|
|
| 181A | 2A6F | Humidity |
|
|
+----------+------------------+-----------------------+
|
|
|
|
|
|
See Also
|
|
--------
|
|
|
|
- :doc:`/components/ble_client`
|
|
- :ref:`sensor-filters`
|
|
- :apiref:`ble_sensor/ble_sensor.h`
|
|
- :ghedit:`Edit`
|