Bluetooth propane tank monitor: ESPhome, Otodata, Nee-vo, Ferrellgas, BLE

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:


      
4 Likes