esphome-docs/components/exposure_notifications.rst

83 lines
2.8 KiB
ReStructuredText

Exposure Notification Listener
==============================
.. seo::
:description: Instructions for setting up exposure notification listeners for ESPHome.
:image: exposure_notifications.png
The ``exposure_notifications`` component uses the :doc:`/components/esp32_ble_tracker` to discover
nearby COVID-19 exposure notification bluetooth messages sent by phones running the
`Google/Apple Exposure Notification service <https://www.google.com/covid19/exposurenotifications/>`__.
.. code-block:: yaml
# Example configuration entry
esp32_ble_tracker:
exposure_notifications:
on_exposure_notification:
then:
- lambda: |
ESP_LOGD("main", "Got notification:");
ESP_LOGD("main", " RPI: %s", format_hex_pretty(x.rolling_proximity_identifier).c_str());
ESP_LOGD("main", " RSSI: %d", x.rssi);
Configuration variables:
------------------------
- **on_exposure_notification** (*Optional*, :ref:`Automation <automation>`): An automation
to run when an exposure notification bluetooth message is received.
A variable ``x`` of type :apistruct:`exposure_notifications::ExposureNotification` is passed to the automation.
An exposure notification payload contains:
- Rolling proximity identifier (RPI): A 16-byte long value used to identify a given device in a 10-minute window.
- Associated encrypted metadata (AEM): Additional encrypted metadata, like transmit power.
Because the GAEN framework is designed to prevent tracking an individual, this data can essentially
only be used to check whether a device with enabled exposure notifications is nearby (and to limited degree
also count them).
Indicator of device with exposure notifications
-----------------------------------------------
The following configuration can be used as an indicator whether an exposure-notifications
enabled device is nearby. As long as an exposure notification has been received in the last
minute, the indicator will be on.
.. code-block:: yaml
esp32_ble_tracker:
switch:
- platform: gpio
pin: GPIOXX
id: led
script:
- id: start_led
then:
- switch.turn_on: led
- delay: 1min
- switch.turn_off: led
exposure_notifications:
on_exposure_notification:
then:
- lambda: |
ESP_LOGD("main", "Got notification:");
ESP_LOGD("main", " RPI: %s", format_hex_pretty(x.rolling_proximity_identifier).c_str());
ESP_LOGD("main", " RSSI: %d", x.rssi);
# Stop existing timer so that turn_off doesn't get called
- script.stop: start_led
- script.execute: start_led
See Also
--------
- :doc:`esp32_ble_tracker`
- :apiref:`exposure_notifications/exposure_notifications.h`
- :ghedit:`Edit`