New Renogy BLE Custom Integration for Charge Controllers

Hi all, I wanted to share a custom integration that I have been working on.

Renogy HA, a Home Assistant integration for Renogy BLE devices

I have two Renogy Rover solar controllers, and I wanted to pull data locally from the Bluetooth module. I found various scripts online, but wanted something more native to Home Assistant. I used Cyrils’ renogy-bt script as a reference for the mod bus commands, and built a custom integration. Disclaimer: I have worked a lot with Python over the years, but this is a new level for me. I also took this as an opportunity to play with GitHub Copilot agent mode, so 95% percent of the code was either generated, planned, or reviewed by AI.

The bad news first: Currently, only charge controllers are supported. I don’t own any other Renogy products, but the modbus commands for other device types are in the renogy-bt script. I could attempt to implement them if others are willing to test. Also, this integration connects directly to Renogy devices via the BT-1 or BT-2 Bluetooth Low Energy modules. It does not work with Renogy Cloud APIs. There are other solutions online if you want to use Renogy Cloud.

The good news: The integration is working well with my two Rover devices. You can easily install the integration by adding my repo to HACS. Instructions are in the README. Setup is all done from the UI, and MQTT is not required. This makes it the simplest setup for pulling in your Renogy metrics to HA, provided you already have a bluetooth adapter or proxy working.

I live in an RV, so this integration helps me monitor our energy production while we’re on the road. Home Assistant is the beating heart of our setup, coordinating everything from the furnace to our alarm system.

I’d love to hear if anyone finds this integration useful, or if there is interest in other features. And if you want to contribute, please do!

Some other notes… The integration communicates with Renogy devices over an active Bluetooth connection. There are certain caveats to this, the main one being that most Bluetooth adapters can only have 3-7 active connections at once. If you are getting connection errors, your Bluetooth adapter may be maxed out. This happened to me, so I added an ESP32 proxy for additional connections. Read more about Home Assistant and Bluetooth here.

9 Likes

All I can say is, wow, amazing. Thank you so much!

I setup an ESPHome Proxy like you mentioned and I’m able to connect to Renogy Wanderer 10A Charge Controller via BT-1.

Do you think it’s possible to switch the load on/off from Home Assistant?

2 Likes

Yes, it should be! That is the next feature I will work on implementing. There is an open issue for it here: Toggle DC Load Output · Issue #15 · IAmTheMitchell/renogy-ha · GitHub

1 Like

Thank you! very cool and helpful!

1 Like

Will this work with an ESPhome bluetooth proxy?
My HASS controller is on the opposite side of the house.

1 Like

Yes, in fact it works best with a ESPHome bluetooth proxy! I use several of them (ESP32).

1 Like

Thanks for sharing, this is great! I can confirm it works for Adventurer charge controller! It might be my ESP32 config or other devices, but every so often I get ESP_GATTC_DISCONNECT_EVT, reason 8

1 Like

Hello couple of questions. Still learning but I have HAOS running on a pi 5. In my shed I have 2 Shelly Uni Plus and an esp32 board with wifi/bt configured as bluetooth proxy. I have added my Renogy Wanderer/BT-1 to HA here in my office. When I move it to the shed it becomes unavailable. The 2 uni plus pick it p but it never returns.I am sure I am missing something.
Thanks
Jeff

Hello, what are you moving between the shed and the office? Both your ESP32 and the Renogy BT-1? Or just one of the devices?

The ESP32 needs to be somewhat close to the Renogy BT-1 and also needs a good Wi-Fi signal. It might be easiest to check your router to make sure the ESP32 is still on your network. You can do more in depth debugging by plugging your ESP32 into a laptop and checking logs in ESPHome.

Thanks for the reply! I have it working now, flashed the esp32 from the command line and it is good to go now.
Thanks
Jeff

Core update broke Renogy

s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service legacy-services: starting
services-up: info: copying legacy longrun home-assistant (no readiness notification)
s6-rc: info: service legacy-services successfully started
2026-01-07 20:30:22.119 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration renogy which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2026-01-07 20:30:22.120 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration bms_ble which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2026-01-07 20:30:22.121 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration hacs which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2026-01-07 20:30:22.121 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration renogy which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2026-01-07 20:30:22.122 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration bms_ble which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2026-01-07 20:30:22.122 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration hacs which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2026-01-07 20:30:27.189 ERROR (MainThread) [homeassistant.components.lg_thinq.coordinator] Error fetching lg_thinq_9e6434fc33547a82ff0957924df30391ce0f5aae636e2a4d10e00e775950c3e9 data: ThinQAPIException: NOT_CONNECTED_DEVICE (1222) - Not connected device
2026-01-07 20:30:30.019 ERROR (SyncWorker_5) [homeassistant.util.package] Unable to install package renogy-ble==1.0.0: × No solution found when resolving dependencies:
  ╰─▶ Because renogy-ble==1.0.0 depends on bleak==1.0.1 and bleak==2.0.0, we
      can conclude that renogy-ble==1.0.0 cannot be used.
      And because you require renogy-ble==1.0.0, we can conclude that your
      requirements are unsatisfiable.
2026-01-07 20:30:30.600 ERROR (SyncWorker_5) [homeassistant.util.package] Unable to install package renogy-ble==1.0.0: × No solution found when resolving dependencies:
  ╰─▶ Because renogy-ble==1.0.0 depends on bleak==1.0.1 and bleak==2.0.0, we
      can conclude that renogy-ble==1.0.0 cannot be used.
      And because you require renogy-ble==1.0.0, we can conclude that your
      requirements are unsatisfiable.
2026-01-07 20:30:31.150 ERROR (SyncWorker_5) [homeassistant.util.package] Unable to install package renogy-ble==1.0.0: × No solution found when resolving dependencies:
  ╰─▶ Because renogy-ble==1.0.0 depends on bleak==1.0.1 and bleak==2.0.0, we
      can conclude that renogy-ble==1.0.0 cannot be used.
      And because you require renogy-ble==1.0.0, we can conclude that your
      requirements are unsatisfiable.
2026-01-07 20:30:31.151 ERROR (MainThread) [homeassistant.setup] Setup failed for custom integration 'renogy': Requirements for renogy not found: ['renogy-ble==1.0.0'].
2026-01-07 20:30:36.753 ERROR (SyncWorker_4) [homeassistant] Error doing job: Task exception was never retrieved (task: None)
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/discovery_flow.py", line 137, in _async_start
    await gather_with_limited_concurrency(FLOW_INIT_LIMIT, *init_coros)
  File "/usr/src/homeassistant/homeassistant/util/async_.py", line 113, in gather_with_limited_concurrency
    return await gather(
           ^^^^^^^^^^^^^
    ...<2 lines>...
    )
    ^
  File "/usr/src/homeassistant/homeassistant/util/async_.py", line 111, in sem_task
    return await task
           ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 1484, in async_init
    flow, result = await self._async_init(flow_id, handler, context, data)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 1522, in _async_init
    flow = await self.async_create_flow(handler, context=context, data=data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 1744, in async_create_flow
    handler = await _async_get_flow_handler(
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        self.hass, handler_key, self._hass_config
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 3988, in _async_get_flow_handler
    await _load_integration(hass, domain, hass_config)
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 3965, in _load_integration
    await async_process_deps_reqs(hass, hass_config, integration)
  File "/usr/src/homeassistant/homeassistant/setup.py", line 584, in async_process_deps_reqs
    await requirements.async_get_integration_with_requirements(
        hass, integration.domain
    )
  File "/usr/src/homeassistant/homeassistant/requirements.py", line 63, in async_get_integration_with_requirements
    return await manager.async_get_integration_with_requirements(domain)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/requirements.py", line 181, in async_get_integration_with_requirements
    await future
  File "/usr/src/homeassistant/homeassistant/requirements.py", line 170, in async_get_integration_with_requirements
    await self._async_process_integration(integration, done)
  File "/usr/src/homeassistant/homeassistant/requirements.py", line 193, in _async_process_integration
    await self.async_process_requirements(
        integration.domain, integration.requirements, integration.is_built_in
    )
  File "/usr/src/homeassistant/homeassistant/requirements.py", line 297, in async_process_requirements
    self._raise_for_failed_requirements(name, missing)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/requirements.py", line 325, in _raise_for_failed_requirements
    raise RequirementsNotFound(integration, [req])
homeassistant.requirements.RequirementsNotFound: Requirements for renogy not found: ['renogy-ble==1.0.0'].

This morning tried to delete the two instances and reinstall them below s the error logs:

s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service legacy-services: starting
services-up: info: copying legacy longrun home-assistant (no readiness notification)
s6-rc: info: service legacy-services successfully started
2026-01-08 08:47:21.659 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration renogy which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2026-01-08 08:47:21.660 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration bms_ble which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2026-01-08 08:47:21.662 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration hacs which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2026-01-08 08:47:21.662 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration renogy which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2026-01-08 08:47:21.663 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration bms_ble which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2026-01-08 08:47:21.663 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration hacs which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2026-01-08 08:47:33.476 ERROR (MainThread) [homeassistant.components.lg_thinq.coordinator] Error fetching lg_thinq_9e6434fc33547a82ff0957924df30391ce0f5aae636e2a4d10e00e775950c3e9 data: ThinQAPIException: NOT_CONNECTED_DEVICE (1222) - Not connected device
2026-01-08 08:47:47.982 ERROR (SyncWorker_3) [homeassistant.util.package] Unable to install package renogy-ble==1.0.0: × No solution found when resolving dependencies:
  ╰─▶ Because renogy-ble==1.0.0 depends on bleak==1.0.1 and bleak==2.0.0, we
      can conclude that renogy-ble==1.0.0 cannot be used.
      And because you require renogy-ble==1.0.0, we can conclude that your
      requirements are unsatisfiable.
2026-01-08 08:47:48.584 ERROR (SyncWorker_3) [homeassistant.util.package] Unable to install package renogy-ble==1.0.0: × No solution found when resolving dependencies:
  ╰─▶ Because renogy-ble==1.0.0 depends on bleak==1.0.1 and bleak==2.0.0, we
      can conclude that renogy-ble==1.0.0 cannot be used.
      And because you require renogy-ble==1.0.0, we can conclude that your
      requirements are unsatisfiable.
2026-01-08 08:47:49.211 ERROR (SyncWorker_3) [homeassistant.util.package] Unable to install package renogy-ble==1.0.0: × No solution found when resolving dependencies:
  ╰─▶ Because renogy-ble==1.0.0 depends on bleak==1.0.1 and bleak==2.0.0, we
      can conclude that renogy-ble==1.0.0 cannot be used.
      And because you require renogy-ble==1.0.0, we can conclude that your
      requirements are unsatisfiable.
2026-01-08 08:47:49.213 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved (task: None)
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/discovery_flow.py", line 137, in _async_start
    await gather_with_limited_concurrency(FLOW_INIT_LIMIT, *init_coros)
  File "/usr/src/homeassistant/homeassistant/util/async_.py", line 113, in gather_with_limited_concurrency
    return await gather(
           ^^^^^^^^^^^^^
    ...<2 lines>...
    )
    ^
  File "/usr/src/homeassistant/homeassistant/util/async_.py", line 111, in sem_task
    return await task
           ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 1484, in async_init
    flow, result = await self._async_init(flow_id, handler, context, data)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 1522, in _async_init
    flow = await self.async_create_flow(handler, context=context, data=data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 1744, in async_create_flow
    handler = await _async_get_flow_handler(
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        self.hass, handler_key, self._hass_config
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 3988, in _async_get_flow_handler
    await _load_integration(hass, domain, hass_config)
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 3965, in _load_integration
    await async_process_deps_reqs(hass, hass_config, integration)
  File "/usr/src/homeassistant/homeassistant/setup.py", line 584, in async_process_deps_reqs
    await requirements.async_get_integration_with_requirements(
        hass, integration.domain
    )
  File "/usr/src/homeassistant/homeassistant/requirements.py", line 63, in async_get_integration_with_requirements
    return await manager.async_get_integration_with_requirements(domain)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/requirements.py", line 164, in async_get_integration_with_requirements
    return await int_or_fut
           ^^^^^^^^^^^^^^^^
homeassistant.requirements.RequirementsNotFound: Requirements for renogy not found: ['renogy-ble==1.0.0'].
2026-01-08 08:51:08.176 ERROR (MainThread) [homeassistant.setup] Setup failed for custom integration 'renogy': Requirements for renogy not found: ['renogy-ble==1.0.0'].

Has anyone had a chance to test this with non-charger inverters such as the RIV1220PU-126?

Thanks for the fix!!!

1 Like

Hi There. I am super interested in this integration as I live off grid and I have a Renogy 300A bluetooth shunt for monitoring my battery. Is it possible to utilise this integration to be able to connect to the shunt via bluetooth?

Hi @russman, I am not aware of anyone testing with the non-charger inverters, unfortunately. It may not work at all, or it may be severely limited.

Hello @aaronpickering, the integration does not currently support shunts. Support may be added in the future, but there is admittedly a long list of requests before I will get to that. It is open source though, so anyone can fork and attempt to add support themselves!