EcoFlow BLE (Unofficial)

That is very useful, thank you! Firefox just didn’t work for me for some reason.

thank you, other guides did not help me but yours did. I’ve been trying for 3 hours. you are the hero haha

What’s involved in adding support for Delta 3 Plus (now just no_devices_found)? I just got one of these and would love to monitor it without using the cloud service.

Let me know if I can help.

Hi @maddios , in general that would take the device itself to test the integration on it. Otherwise not much: to find the right protobuf definition and prepare some logic for the device - since it’s relatively new it should support the recent ble protocol and work similar to the available devices.

I just created a pull request for my Delta 3 Plus tweak.

Great news folks, with 2 huge contributions from @GnoX and help with testing from the community we have a new release v0.4.1:

  • Much better interface that helps new users to locate the USER_ID - it makes request to ecoflow.com with provided user/password and gives USER_ID back to continue configuration.
  • River 3 now supports controls - so you can tune your device right from the integration
  • Device now shows it’s SN and Mac address
  • Multiple bugfixes that made the integration much better

And want thank @GnoX for all those great changes, his effort in digging and rewriting the internal systems brought this integration on a new level of quality!

2 Likes

Just finished setting it up using my River 3 (NAS edition), it works perfectly, really great job! :slight_smile:

Is there maybe a way to configure it to do less updates than each second? It takes quite the CPU time to run this often.
Thanks.

And want thank @GnoX for all those great changes, his effort in digging and rewriting the internal systems brought this integration on a new level of quality!

No problem, glad I could help! Thanks to all people that helped with testing.

Is there maybe a way to configure it to do less updates than each second? It takes quite the CPU time to run this often.

Yeah, I thought that might be a concern for some lower powered devices - for River 3 we are trying to parse 3 messages per second. I am running HA on a N100 device and did not notice any noticable increase in cpu nor power usage with a single device. I do have a RPi4 laying around though, so when I have time, I’ll probably try to look into some optimizations.


Also a sidenote: I am buying Delta 3 Plus so Delta 3 owners can look forward to getting good support for it.

Note edits:

Just wanted to say thanks for this. Just bought a River 3 as a UPS for the home cable modem, router, switch, alarm system and server (an Intel NUC) and this works perfectly with it, allowing me to notify about power failures when we are away and schedule shutdowns automatically.

I am using this via an Atom Lite S3 and ESPHome, and it was picky about distance and interference as everything is in a console. I ended up plugging the Atom directly into the River’s USB A and that worked great. Thanks again for the work.

(spoke too soon…while it created the initial entities and populated them with values, it fails to update those entities. I tried 3 different ESPs, this is from a different S3 that is right next to the River 3 - within 5 inches)


2025-03-13 14:29:52.633 DEBUG (MainThread) [custom_components.ef_ble] Init EcoFlow BLE Integration
2025-03-13 14:29:52.633 DEBUG (MainThread) [custom_components.ef_ble] Connecting Device
2025-03-13 14:29:52.633 DEBUG (MainThread) [custom_components.ef_ble.eflib.devicebase] 9C:9E:6E:5B:DC:16: Creating new device: River 3 (245Wh) (R651ZAB4XGBK4446)
2025-03-13 14:29:52.634 INFO (MainThread) [custom_components.ef_ble.eflib.devicebase] 9C:9E:6E:5B:DC:16: Connecting to River 3
2025-03-13 14:29:52.634 INFO (MainThread) [custom_components.ef_ble.eflib.connection] 9C:9E:6E:5B:DC:16: Connecting to device
2025-03-13 14:29:56.571 WARNING (MainThread) [homeassistant.helpers.template] Template variable warning: 'homeassistant.util.read_only_dict.ReadOnlyDict object' has no attribute 'cell_voltages' when rendering '{{states.sensor.sok_aa01308_delta_voltage.attributes.cell_voltages}}'
2025-03-13 14:30:06.763 INFO (MainThread) [custom_components.ef_ble.eflib.connection] 9C:9E:6E:5B:DC:16: Connected
2025-03-13 14:30:06.763 DEBUG (MainThread) [custom_components.ef_ble.eflib.connection] 9C:9E:6E:5B:DC:16: MTU: 500
2025-03-13 14:30:06.763 INFO (MainThread) [custom_components.ef_ble.eflib.connection] 9C:9E:6E:5B:DC:16: Init completed, starting auth routine...
2025-03-13 14:30:06.763 DEBUG (MainThread) [custom_components.ef_ble.eflib.connection] 9C:9E:6E:5B:DC:16: initBleSessionKey: Pub key exchange
2025-03-13 14:30:06.764 DEBUG (MainThread) [custom_components.ef_ble.eflib.connection] 9C:9E:6E:5B:DC:16: Sending: '5a5a00012c00010076056784c6424c70c845e5694040fb5f11ed4abad553778474d5f468c34b3232697e8a8e6cb78a890339'
2025-03-13 14:30:14.626 WARNING (MainThread) [custom_components.ef_ble.eflib.connection] 9C:9E:6E:5B:DC:16: Disconnected from device
2025-03-13 14:30:14.626 WARNING (MainThread) [custom_components.ef_ble.eflib.connection] 9C:9E:6E:5B:DC:16: Disconnected from device
2025-03-13 14:30:14.626 WARNING (MainThread) [custom_components.ef_ble.eflib.connection] 9C:9E:6E:5B:DC:16: Reconnecting to the device in 10 seconds...
2025-03-13 14:30:14.626 WARNING (MainThread) [custom_components.ef_ble.eflib.connection] 9C:9E:6E:5B:DC:16: Reconnecting to the device in 10 seconds...
2025-03-13 14:30:15.627 DEBUG (MainThread) [custom_components.ef_ble.eflib.connection] 9C:9E:6E:5B:DC:16: Skip sending: disconnected: '5a5a00012c00010076056784c6424c70c845e5694040fb5f11ed4abad553778474d5f468c34b3232697e8a8e6cb78a890339'
2025-03-13 14:30:15.627 DEBUG (MainThread) [custom_components.ef_ble] Creating entities
2025-03-13 14:30:15.635 DEBUG (MainThread) [custom_components.ef_ble] Setup done
2025-03-13 14:30:24.627 INFO (MainThread) [custom_components.ef_ble.eflib.connection] 9C:9E:6E:5B:DC:16: Reconnecting to device
2025-03-13 14:30:24.628 INFO (MainThread) [custom_components.ef_ble.eflib.connection] 9C:9E:6E:5B:DC:16: Reconnecting to device
2025-03-13 14:30:25.272 ERROR (MainThread) [custom_components.ef_ble.eflib.connection] 9C:9E:6E:5B:DC:16: Failed to connect to the device: Error ESP_GATT_CONN_FAIL_ESTABLISH while connecting: Connection failed to establish
2025-03-13 14:30:25.272 WARNING (MainThread) [custom_components.ef_ble.eflib.connection] 9C:9E:6E:5B:DC:16: Disconnected from device
2025-03-13 14:30:25.272 ERROR (MainThread) [custom_components.ef_ble.eflib.connection] 9C:9E:6E:5B:DC:16: Failed to connect to the device: Error ESP_GATT_CONN_FAIL_ESTABLISH while connecting: Connection failed to establish
2025-03-13 14:30:25.273 WARNING (MainThread) [custom_components.ef_ble.eflib.connection] 9C:9E:6E:5B:DC:16: Disconnected from device
2025-03-13 14:30:25.273 WARNING (MainThread) [custom_components.ef_ble.eflib.connection] 9C:9E:6E:5B:DC:16: Reconnecting to the device in 30 seconds...
2025-03-13 14:30:25.273 WARNING (MainThread) [custom_components.ef_ble.eflib.connection] 9C:9E:6E:5B:DC:16: Reconnecting to the device in 30 seconds...

So I deleted the device, restarted HA, re-added the device and for a minute it worked perfectly - it was updating fairly rapidly. Then all entities went to Unavailable. I waited a minute then they all came back for a few seconds, then back to Unavailable. The log shows a ESP_GATT_CONN_FAIL_ESTABLISH and it no longer connects at all. This is from an ESP32-S3 sitting a few inches from the River 3.

So I then disabled the device, waited a couple minutes and then re-enabled the device. It connected fine and began working correctly - it held on for about 6 minutes before dropping again. I tried the disable/enable again but nada - it doesn’t come back.

More: I again swapped the ESP for a different model (a different S3), and the only thing I configured differently was removing the captive portal if it can’t connect to Wi-Fi. I located it in the same place as the previous attempt and now it has stayed up for 30 minutes. Go figure.

Yeah, if you experiencing issues with ble connectivity - I specifically bought those “esp32 devkit v1” with esp32-wroom-32 onboard as they were recommended with note that other versions could work wrong. And configuration is very important to use esp-idf instead of default arduino as I described here: EcoFlow BLE (Unofficial) - #42 by Rabit

Thanks for the reply. I actually am not sure what I did to finally get it to work reliably, but it is working fine now - and I’m back to an Atom Lite S3, which is what I started with. I had moved it all around, plugged it directly into the River 3, and nothing worked for more than a minute. I had tried 3 different ESPs. I’ve used ESPHome a bunch for various BLE equipment - Victron solar/shunts, Mopeka propane tank gauges, battery BMSs - and never had this issue before - and some of those ESPs do a bunch of things besides BLE. I also did a few router changes along the way - changed channels and turned on Bluetooth Coexistence.

But anyway, it now works and is great! Thanks so much for doing this.

As usual with hardware and complicated protocols - you never know until you poke it with a stick) There is a lot of variables - even environment and revision of the device hardware could be fatal, but anyway glad your setup is working!)