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

It took some effort but I did open mine. I put a flat head into the slot on the one side and peeled it up.
I also don’t need to replace the battery but was curious. Here is a pic of the battery. I couldn’t find a pack anywhere but i am sure it can be made easily by buying each cell separately.
Thank you all for this ! @tinker_ha

2 Likes

SOLVED: default scanning windows is too short to reliably catch the level. Increasing window to 1100ms picks it up!

Ok, so the code compiles alright and the config goes onto the esp32…but it doesn’t seem to be pinging the tank? If I use nRF Connect the esp32 picks up the tank levels, but it’s not doing it on it’s own. What am I missing here?

Config below:

# Bluetooth for Propane tank sensor

esp32_ble_tracker:
  scan_parameters:
    interval: 10s
    duration: 300s

# Sending state data: '{"timestamp":1309,"address":"C3:2E:95:XX:XX:XX","rssi":-69,"name":"level: 67.4 % horiz"}'
  on_ble_advertise:
    - mac_address: DC:24:XX:XX:XX:XX
      then:
        - lambda: |-
            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()));
            }

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: DC:24:XX:XX:XX:XX
    name: "Propane RSSI"
1 Like

Looks like you can get it here.

I am curious how one would charge it or if a standard lipo charging circuit would work?

$20 isn’t bad for a 10 year battery (woops. minimum quantity is 100!)

1 Like

Good stuff!

My Tank Utility Unit stopped working in November 22 after a long time off-line and a battery replacement. I get the feeling they tombstoned them, or it was a failed update. What this does do is leave me with the right angle gauge sensor and a shell for an ESP32 replacement. Eventually i’ll get that up on github if it isn’t already there.

In the meantime, i see a couple of inexpensive monitors mentioned here on the 'bay.

Cheers!

In case you want to dig into how the OEM app communicates with the BLE controller to replicate the same behaviour you can use an Andorid phone and enable the HCI Snoop Log:

That log file can be loaded into Wireshark and you will be able to see what’s being sent and received by the app.

In case y’all are interested, Sinope finally released their long-promised zigbee monitor.
$160 each.
May be a reasonable price compared to all the effort of finding parts and assembling a DIY model.

I asked them, and they said they have “no plans” to offer a wifi or BLE or zwave model. :frowning:

Thanks for posting this, it got me up and running in no time. I had been trying to merge this config on a ESP32 dev board that I had been using for ESPHome Bluetooth Proxy but it wasn’t working. I had to comment out the BT Proxy business:

#packages:
#  esphome.bluetooth-proxy: github://esphome/bluetooth-proxies/esp32-generic.yaml@main

And then after a few minutes the propane tank data started flowing into HA. Hope maybe this helps someone else. Thanks again!

DaBer

I’ve been totally impressed with the Mopeka Pro and Pro+ tank monitors.

I found a post on Reddit that listed the URL to the JSON data and I was able to get my propane level into my Home Assistance dashboard by using the command_line platform. There may be better ways to do this, but this is what I came up with and it seems to work.

command_line:
  - sensor:
      command: "curl -u Neevoemailaddress:Neevopassword https://telematics.otodatanetwork.com:4432/v1.5/DataService.svc/GetAllDisplayPropaneDevices --header Content-Type:application/json"
      name: "Propane Tank"
      unique_id: propane_tank
      value_template: "{{ value_json[0].Level }}"
      scan_interval: 86400
3 Likes

Holy cow!

This is exactly what I’ve been looking for and exactly what I need.

I just implemented it and it works great.

FYI, for multiple tanks, increment the “value_json” by 1 for each tank (value_json[1], for example).

Now I need the same thing for Amerigas…

Thank you!

3 Likes

Have been trying to implement this and not seeing the sensor created. My curl command works fine at the command line with my credentials.

Am I missing something as far as any formatting that needs to occur? I’ve tried it both directly in the configuration.yaml and the templates.yaml that I’ve created and still not seeing results.

The sensor should show up even if the curl statement is wrong. You will have to add it to your dashboard manually. What does your yaml look like?

Figured it out - had to give HA a swift kick and then it started working. Thanks again for sharing the URL as it has immediately found a home on my dashboard!

Happy New Year!

1 Like

Has anyone used the same info with the OtoData TM5030 or know if the TM6030 and TM5030 are interchangeable?

This isn’t working for me either. What are we missing? I created a sensor.yaml and put the code in there.

Did you also add the !include statement to your configuration.yaml file?

I did. The only way I could make it work was in the configuration.yaml

Does this still work? I can see that data if I follow the link but wont pull into HA.

Yes, it’s still working for me.

ok. All I get is unknown on my sensor. Can’t figure out why it wont pull the level into the sensor. All your doing is putting that code into the configuration yaml and changing the login details?