For completeness – this is my updated yaml:
esphome:
name: ble-propane
esp32:
board: esp32dev
framework:
type: arduino
wifi:
ssid: "xxxxxxx"
password: "xxxxxx"
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "BLE-Propane Fallback Hotspot"
password: "xxxxxxxx"
# Enable logging
logger:
ota:
esp32_ble_tracker:
scan_parameters:
interval: 1100ms
window: 1100ms
on_ble_advertise:
- mac_address: XX:XX:XX:XX:XX:XX
then:
- lambda: |-
ESP_LOGD("ble_adv", " name: %s", x.get_name().c_str());
std::string name = x.get_name();
if (esphome::str_startswith(name, "level:")) {
name.erase(0,7);
std::string value = esphome::str_until(name.c_str(), ' ');
id(propane_level).publish_state(atof(value.c_str()));
id(propane_sensor_ok).publish_state(true);
}
if (esphome::str_startswith(name, "trbl:ACC")) {
name.erase(0,10);
std::string value = esphome::str_until(name.c_str(), ')');
id(propane_level).publish_state(atof(value.c_str()));
id(propane_sensor_ok).publish_state(false);
}
sensor:
# To store the propane level percentage - does nothing on its own.
- platform: template
name: Propane Level
id: propane_level
unit_of_measurement: '%'
# Reports the signal strength auto magically.
- platform: ble_rssi
mac_address: XX:XX:XX:XX:XX:XX
name: "Propane RSSI"
binary_sensor:
- platform: template
name: Propane Sensor Ok
id: propane_sensor_ok
api: