ha-ef-ble icon indicating copy to clipboard operation
ha-ef-ble copied to clipboard

[Bug]: Error trying to add Ultra X

Open deltamelter opened this issue 1 month ago • 5 comments

What happened?

Running HA Supervised on Raspi 5 and adding new device with latest ha-ef-ble-0.5.4

Detected blocking call to import_module with args
('.stream_pro', 'custom_components.ef_ble.eflib.devices')
inside the event loop by custom integration 'ef_ble'
at custom_components/ef_ble/eflib/devices/__init__.py, line 20:

    importlib.import_module(f".{device}", __name__) for device in __all__

(offender: /config/custom_components/ef_ble/eflib/devices/__init__.py, line 20)

Please create a bug report at:
https://github.com/rabits/ha-ef-ble/issues

For developers:
https://developers.home-assistant.io/docs/asyncio_blocking_operations/#import_module


Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/usr/src/homeassistant/homeassistant/__main__.py", line 229, in <module>
    sys.exit(main())
  File "/usr/src/homeassistant/homeassistant/__main__.py", line 215, in main
    exit_code = runner.run(runtime_conf)
  File "/usr/src/homeassistant/homeassistant/runner.py", line 289, in run
    return loop.run_until_complete(setup_and_run_hass(runtime_config))
  File "/usr/local/lib/python3.13/asyncio/base_events.py", line 712, in run_until_complete
    self.run_forever()
  File "/usr/local/lib/python3.13/asyncio/base_events.py", line 683, in run_forever
    self._run_once()
  File "/usr/local/lib/python3.13/asyncio/base_events.py", line 2050, in _run_once
    handle._run()
  File "/usr/local/lib/python3.13/asyncio/events.py", line 89, in _run
    self._context.run(self._callback, *self._args)
  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 1464, in async_init
    flow, result = await self._async_init(flow_id, handler, context, data)
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 1502, in _async_init
    flow = await self.async_create_flow(handler, context=context, data=data)
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 1724, in async_create_flow
    handler = await _async_get_flow_handler(
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 3990, in _async_get_flow_handler
    await _load_integration(hass, domain, hass_config)
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 3969, in _load_integration
    await integration.async_get_platform("config_flow")
  File "/usr/src/homeassistant/homeassistant/loader.py", line 1099, in async_get_platform
    platforms = await self.async_get_platforms((platform_name,))
  File "/usr/src/homeassistant/homeassistant/loader.py", line 1164, in async_get_platforms
    platforms.update(self._load_platforms(platform_names))
  File "/usr/src/homeassistant/homeassistant/loader.py", line 1089, in _load_platforms
    platform_name: self._load_platform(platform_name)
  File "/usr/src/homeassistant/homeassistant/loader.py", line 1263, in _load_platform
    cache[full_name] = self._import_platform(platform_name)
  File "/usr/src/homeassistant/homeassistant/loader.py", line 1295, in _import_platform
    return importlib.import_module(f"{self.pkg_path}.{platform_name}")
  File "/usr/src/homeassistant/homeassistant/util/loop.py", line 201, in protected_loop_func
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.13/importlib/__init__.py", line 88, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1310, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 1027, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "/config/custom_components/ef_ble/__init__.py", line 17, in <module>
    from . import eflib
  File "<frozen importlib._bootstrap>", line 1415, in _handle_fromlist
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 1027, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "/config/custom_components/ef_ble/eflib/__init__.py", line 8, in <module>
    from . import devices
  File "<frozen importlib._bootstrap>", line 1415, in _handle_fromlist
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 1027, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "/config/custom_components/ef_ble/eflib/devices/__init__.py", line 20, in <module>
    importlib.import_module(f".{device}", __name__) for device in __all__

What version of our software are you running?

ha-ef-ble-0.5.4

What device are you seeing the problem on?

Raspi 5 adding Ultra X

What bluetooth connection are you using?

Internal bluetooth adapter

Have you changed the integration settings?

No response

Integration settings (if you changed them)


Relevant log output


deltamelter avatar Nov 20 '25 22:11 deltamelter

Sorry man, could you please format the log properly? Please use github markdown tools like "code block" to make it readable. For now I don't see a proper way to help here.

rabits avatar Nov 20 '25 23:11 rabits

Also Ultra X is not in the list of supported devices - but it seems that they are using similar serial number, as the supported ones, so will keep a "bug" here, because in theory the integration should not show unsupported devices as addable.

rabits avatar Nov 20 '25 23:11 rabits

Also Ultra X is not in the list of supported devices

Ok, It is in the list of recognised devices in the readme, so thought I would give it a go.

deltamelter avatar Nov 21 '25 00:11 deltamelter

Also Ultra X is not in the list of supported devices - but it seems that they are using similar serial number, as the supported ones, so will keep a "bug" here, because in theory the integration should not show unsupported devices as addable.

Did we not add it in #90?

This report is valid, I probably screwed some imports up causing them to be called asynchronously, I'll look at it.

GnoX avatar Nov 21 '25 00:11 GnoX

Oh yeah right, I see it in the list https://github.com/rabits/ha-ef-ble/releases/tag/v0.5.3 - sorry, head full of "everything else") Yeah I've marked it invalid just because it was unreadable, now it's good.

rabits avatar Nov 21 '25 01:11 rabits

So should this work in the latest version or do I have to use the gnox for? Does that even have the fix for Stream Ultra X? Is this more complicated that just adding the name? The error pops up straight away, so can't even try to link with stream microinverter. Am I missing some other pre-req?

deltamelter avatar Dec 02 '25 12:12 deltamelter

Stream Ultra X should work - the problem you have is not specific to the device, it might have something to do with HA installation. I wasn't able to quickly reproduce the error you posted in my environment and didn't yet have enough time to fully investigate it, sorry for that. I'll update you as soon as I get to it.

One thing - is the error you posted the only error in your logs? I though that the blocking call detection was only a warning that does not disable this integration.

GnoX avatar Dec 02 '25 15:12 GnoX

@GnoX Is it worth trying with your fork?

I cleared the messages and ran again, the is right at the start when I choose the integration from the add integration menu.

Logger: homeassistant.loader
Source: loader.py:1263
First occurred: 7:17:20 PM (2 occurrences)
Last logged: 7:17:20 PM

Unexpected exception importing platform custom_components.ef_ble.config_flow
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/loader.py", line 1263, in _load_platform
    cache[full_name] = self._import_platform(platform_name)
  File "/usr/src/homeassistant/homeassistant/loader.py", line 1295, in _import_platform
    return importlib.import_module(f"{self.pkg_path}.{platform_name}")
  File "/usr/src/homeassistant/homeassistant/util/loop.py", line 201, in protected_loop_func
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.13/importlib/__init__.py", line 88, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1310, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib/_bootstrap_external>", line 1027, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "/config/custom_components/ef_ble/__init__.py", line 17, in <module>
    from . import eflib
  File "/config/custom_components/ef_ble/eflib/__init__.py", line 8, in <module>
    from . import devices
  File "/config/custom_components/ef_ble/eflib/devices/__init__.py", line 20, in <module>
    importlib.import_module(f".{device}", __name__) for device in __all__
  File "/usr/src/homeassistant/homeassistant/util/loop.py", line 201, in protected_loop_func
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.13/importlib/__init__.py", line 88, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/config/custom_components/ef_ble/eflib/devices/alternator_charger.py", line 10, in <module>
    from ..pb import dc009_apl_comm_pb2
  File "/config/custom_components/ef_ble/eflib/pb/dc009_apl_comm_pb2.py", line 16, in <module>
    DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
        b'\n\x14\x64\x63...<VERY LONG PROTOBUF BLOB>...'
    )
Logger: homeassistant.config_entries
Source: config_entries.py:3971
First occurred: 7:17:20 PM (1 occurrence)
Last logged: 7:17:20 PM

Error occurred loading flow for integration ef_ble: Exception importing custom_components.ef_ble.config_flow

deltamelter avatar Dec 02 '25 20:12 deltamelter

@GnoX Is it worth trying with your fork?

Probably not, my fork only differs in its development environment (apart from dev versions), it should be the same otherwise.

I cleared the messages and ran again, the is right at the start when I choose the integration from the add integration menu.

Okay, this looks like the actual exception and the original error you posted might just be a side effect. There should be a message at the end of the traceback after that long protobuf dump, can you look for it?

So far, these logs only contained generic exception messages which are unfortunately not telling me too much.

GnoX avatar Dec 02 '25 20:12 GnoX

Looked at the raw logs and see what I think you are referring to

```    DESCRIPTOR = 
_descriptor_pool.Default().AddSerializedFile(b'\n\x14\x64\x63\x30\x30\x39_apl_comm.proto\"\x83\x02\n\tEventPush\x12\x16\n\tevent_ver\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x16\n\tevent_seq\x18\x02 \x01(\rH\x01\x88\x01\x01\x12&\n\nevent_item\x18\x03 \x03(\x0b\x32\x12.EventPush.LogItem\x1a\x81\x01\n\x07LogItem\x12\x16\n\tunix_time\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x0f\n\x02ms\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08\x65vent_no\x18\x03 \x01(\rH\x02\x88\x01\x01\x12\x14\n\x0c\x65vent_detail\x18\x04 \x03(\x02\x42\x0c\n\n_unix_timeB\x05\n\x03_msB\x0b\n\t_event_noB\x0c\n\n_event_verB\x0c\n\n_event_seq\"\x80\x01\n\x08\x45ventAck\x12\x13\n\x06result\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x16\n\tevent_seq\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x1b\n\x0e\x65vent_item_num\x18\x03 \x01(\rH\x02\x88\x01\x01\x42\t\n\x07_resultB\x0c\n\n_event_seqB\x11\n\x0f_event_item_num\"\x9a\x03\n\x14PropertyUploadPeriod\x12\x30\n#display_property_full_upload_period\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x37\n*display_property_incremental_upload_period\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x30\n#runtime_property_full_upload_period\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x37\n*runtime_property_incremental_upload_period\x18\x04 \x01(\x05H\x03\x88\x01\x01\x42&\n$_display_property_full_upload_periodB-\n+_display_property_incremental_upload_periodB&\n$_runtime_property_full_upload_periodB-\n+_runtime_property_incremental_upload_period\"\xc0\x01\n\x1eSpChargerDevBattChgXt60Setting\x12*\n\rcar_batt_type\x18\x01 \x01(\x0e\x32\x0e.CAR_BATT_TYPEH\x00\x88\x01\x01\x12\x42\n\x19\x64\x65v_batt_chg_xt60_setting\x18\x02 \x01(\x0e\x32\x1a.DEV_BATT_CHG_XT60_SETTINGH\x01\x88\x01\x01\x42\x10\n\x0e_car_batt_typeB\x1c\n\x1a_dev_batt_chg_xt60_setting\"\x89\x0f\n\x0b\x43onfigWrite\x12\x1a\n\rcfg_power_off\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12\x19\n\x0c\x63\x66g_power_on\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\"\n\x15reset_factory_setting\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x19\n\x0c\x63\x66g_utc_time\x18\x06 \x01(\rH\x03\x88\x01\x01\x12\x1d\n\x10\x63\x66g_utc_timezone\x18\x07 \x01(\x05H\x04\x88\x01\x01\x12\x34\n\'cfg_display_property_full_upload_period\x18\x43 \x01(\x05H\x05\x88\x01\x01\x12;\n.cfg_display_property_incremental_upload_period\x18\x44 \x01(\x05H\x06\x88\x01\x01\x12\x34\n\'cfg_runtime_property_full_upload_period\x18\x45 \x01(\x05H\x07\x88\x01\x01\x12;\n.cfg_runtime_property_incremental_upload_period\x18\x46 \x01(\x05H\x08\x88\x01\x01\x12\x30\n#active_display_property_full_upload\x18G \x01(\x08H\t\x88\x01\x01\x12\x30\n#active_runtime_property_full_upload\x18H \x01(\x08H\n\x88\x01\x01\x12:\n\x17\x63\x66g_sp_charger_chg_mode\x18t \x01(\x0e\x32\x14.SP_CHARGER_CHG_MODEH\x0b\x88\x01\x01\x12$\n\x17\x63\x66g_sp_charger_chg_open\x18z \x01(\x08H\x0c\x88\x01\x01\x12)\n\x1c\x63\x66g_sp_charger_chg_pow_limit\x18{ \x01(\x02H\r\x88\x01\x01\x12\x31\n#cfg_sp_charger_car_batt_vol_setting\x18\x89\x01 \x01(\rH\x0e\x88\x01\x01\x12\x35\n\'cfg_sp_charger_extension_line_p_setting\x18\xcb\x01 \x01(\x02H\x0f\x88\x01\x01\x12\x35\n\'cfg_sp_charger_extension_line_n_setting\x18\xcc\x01 \x01(\x02H\x10\x88\x01\x01\x12Q\n\"cfg_sp_charger_driving_chg_setting\x18\xcd\x01 \x01(\x0e\x32\x1f.SP_CHARGER_DRIVING_CHG_SETTINGH\x11\x88\x01\x01\x12\x33\n%cfg_sp_charger_car_batt_chg_amp_limit\x18\xd9\x01 \x01(\x02H\x12\x88\x01\x01\x12\x33\n%cfg_sp_charger_dev_batt_chg_amp_limit\x18\xda\x01 \x01(\x02H\x13\x88\x01\x01\x12W\n(cfg_sp_charger_dev_batt_chg_xt60_setting\x18\xdb\x01 \x01(\x0b\x32\x1f.SpChargerDevBattChgXt60SettingH\x14\x88\x01\x01\x12\x37\n)cfg_sp_charger_car_batt_urgent_chg_switch\x18\xdd\x01 \x01(\x08H\x15\x88\x01\x01\x42\x10\n\x0e_cfg_power_offB\x0f\n\r_cfg_power_onB\x18\n\x16_reset_factory_settingB\x0f\n\r_cfg_utc_timeB\x13\n\x11_cfg_utc_timezoneB*\n(_cfg_display_property_full_upload_periodB1\n/_cfg_display_property_incremental_upload_periodB*\n(_cfg_runtime_property_full_upload_periodB1\n/_cfg_runtime_property_incremental_upload_periodB&\n$_active_display_property_full_uploadB&\n$_active_runtime_property_full_uploadB\x1a\n\x18_cfg_sp_charger_chg_modeB\x1a\n\x18_cfg_sp_charger_chg_openB\x1f\n\x1d_cfg_sp_charger_chg_pow_limitB&\n$_cfg_sp_charger_car_batt_vol_settingB*\n(_cfg_sp_charger_extension_line_p_settingB*\n(_cfg_sp_charger_extension_line_n_settingB%\n#_cfg_sp_charger_driving_chg_settingB(\n&_cfg_sp_charger_car_batt_chg_amp_limitB(\n&_cfg_sp_charger_dev_batt_chg_amp_limitB+\n)_cfg_sp_charger_dev_batt_chg_xt60_settingB,\n*_cfg_sp_charger_car_batt_urgent_chg_switch\"\xd8\x0f\n\x0e\x43onfigWriteAck\x12\x16\n\taction_id\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x16\n\tconfig_ok\x18\x02 \x01(\x08H\x01\x88\x01\x01\x12\x1a\n\rcfg_power_off\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x19\n\x0c\x63\x66g_power_on\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\"\n\x15reset_factory_setting\x18\x05 \x01(\rH\x04\x88\x01\x01\x12\x19\n\x0c\x63\x66g_utc_time\x18\x06 \x01(\rH\x05\x88\x01\x01\x12\x1d\n\x10\x63\x66g_utc_timezone\x18\x07 \x01(\x05H\x06\x88\x01\x01\x12\x34\n\'cfg_display_property_full_upload_period\x18\x43 \x01(\x05H\x07\x88\x01\x01\x12;\n.cfg_display_property_incremental_upload_period\x18\x44 \x01(\x05H\x08\x88\x01\x01\x12\x34\n\'cfg_runtime_property_full_upload_period\x18\x45 \x01(\x05H\t\x88\x01\x01\x12;\n.cfg_runtime_property_incremental_upload_period\x18\x46 \x01(\x05H\n\x88\x01\x01\x12\x30\n#active_display_property_full_upload\x18G \x01(\x08H\x0b\x88\x01\x01\x12\x30\n#active_runtime_property_full_upload\x18H \x01(\x08H\x0c\x88\x01\x01\x12:\n\x17\x63\x66g_sp_charger_chg_mode\x18t \x01(\x0e\x32\x14.SP_CHARGER_CHG_MODEH\r\x88\x01\x01\x12$\n\x17\x63\x66g_sp_charger_chg_open\x18z \x01(\x08H\x0e\x88\x01\x01\x12)\n\x1c\x63\x66g_sp_charger_chg_pow_limit\x18{ \x01(\x02H\x0f\x88\x01\x01\x12\x31\n#cfg_sp_charger_car_batt_vol_setting\x18\x89\x01 \x01(\rH\x10\x88\x01\x01\x12\x35\n\'cfg_sp_charger_extension_line_p_setting\x18\xcb\x01 \x01(\x02H\x11\x88\x01\x01\x12\x35\n\'cfg_sp_charger_extension_line_n_setting\x18\xcc\x01 \x01(\x02H\x12\x88\x01\x01\x12Q\n\"cfg_sp_charger_driving_chg_setting\x18\xcd\x01 \x01(\x0e\x32\x1f.SP_CHARGER_DRIVING_CHG_SETTINGH\x13\x88\x01\x01\x12\x33\n%cfg_sp_charger_car_batt_chg_amp_limit\x18\xd9\x01 \x01(\x02H\x14\x88\x01\x01\x12\x33\n%cfg_sp_charger_dev_batt_chg_amp_limit\x18\xda\x01 \x01(\x02H\x15\x88\x01\x01\x12W\n(cfg_sp_charger_dev_batt_chg_xt60_setting\x18\xdb\x01 \x01(\x0b\x32\x1f.SpChargerDevBattChgXt60SettingH\x16\x88\x01\x01\x12\x37\n)cfg_sp_charger_car_batt_urgent_chg_switch\x18\xdd\x01 \x01(\x08H\x17\x88\x01\x01\x42\x0c\n\n_action_idB\x0c\n\n_config_okB\x10\n\x0e_cfg_power_offB\x0f\n\r_cfg_power_onB\x18\n\x16_reset_factory_settingB\x0f\n\r_cfg_utc_timeB\x13\n\x11_cfg_utc_timezoneB*\n(_cfg_display_property_full_upload_periodB1\n/_cfg_display_property_incremental_upload_periodB*\n(_cfg_runtime_property_full_upload_periodB1\n/_cfg_runtime_property_incremental_upload_periodB&\n$_active_display_property_full_uploadB&\n$_active_runtime_property_full_uploadB\x1a\n\x18_cfg_sp_charger_chg_modeB\x1a\n\x18_cfg_sp_charger_chg_openB\x1f\n\x1d_cfg_sp_charger_chg_pow_limitB&\n$_cfg_sp_charger_car_batt_vol_settingB*\n(_cfg_sp_charger_extension_line_p_settingB*\n(_cfg_sp_charger_extension_line_n_settingB%\n#_cfg_sp_charger_driving_chg_settingB(\n&_cfg_sp_charger_car_batt_chg_amp_limitB(\n&_cfg_sp_charger_dev_batt_chg_amp_limitB+\n)_cfg_sp_charger_dev_batt_chg_xt60_settingB,\n*_cfg_sp_charger_car_batt_urgent_chg_switch\"\x1f\n\nConfigRead\x12\x11\n\taction_id\x18\x01 \x03(\r\"o\n\rConfigReadAck\x12\x19\n\x0c\x63\x66g_utc_time\x18\x06 \x01(\rH\x00\x88\x01\x01\x12\x1d\n\x10\x63\x66g_utc_timezone\x18\x07 \x01(\x05H\x01\x88\x01\x01\x42\x0f\n\r_cfg_utc_timeB\x13\n\x11_cfg_utc_timezone\"\xa3\x15\n\x15\x44isplayPropertyUpload\x12\x1d\n\x0f\x64\x65v_online_flag\x18\x82\x01 \x01(\x08H\x00\x88\x01\x01\x12\x1a\n\x0cutc_timezone\x18\x85\x01 \x01(\x05H\x01\x88\x01\x01\x12\x14\n\x07\x65rrcode\x18\x01 \x01(\rH\x02\x88\x01\x01\x12\x1a\n\x0c\x63ms_batt_soc\x18\x86\x02 \x01(\x02H\x03\x88\x01\x01\x12\x1f\n\x11\x63ms_chg_dsg_state\x18\x9a\x02 \x01(\rH\x04\x88\x01\x01\x12\x1e\n\x10\x63ms_dsg_rem_time\x18\x8c\x02 \x01(\rH\x05\x88\x01\x01\x12\x1e\n\x10\x63ms_chg_rem_time\x18\x8d\x02 \x01(\rH\x06\x88\x01\x01\x12\x1a\n\rcms_batt_temp\x18\x66 \x01(\x05H\x07\x88\x01\x01\x12\x19\n\x0cpow_in_sum_w\x18\x03 \x01(\x02H\x08\x88\x01\x01\x12\x1a\n\rpow_out_sum_w\x18\x04 \x01(\x02H\t\x88\x01\x01\x12\x19\n\x0bpow_get_dcp\x18\xa9\x03 \x01(\x02H\n\x88\x01\x01\x12\x1c\n\x0fpow_get_dc_bidi\x18i \x01(\x02H\x0b\x88\x01\x01\x12&\n\x19plug_in_info_dc_bidi_flag\x18j \x01(\x08H\x0c\x88\x01\x01\x12&\n\x18plug_in_info_dcp_in_flag\x18\xaa\x03 \x01(\x08H\r\x88\x01\x01\x12#\n\x15plug_in_info_dcp_type\x18\xab\x03 \x01(\rH\x0e\x88\x01\x01\x12%\n\x17plug_in_info_dcp_detail\x18\xac\x03 \x01(\rH\x0f\x88\x01\x01\x12!\n\x13plug_in_info_dcp_sn\x18\xb1\x03 \x01(\tH\x10\x88\x01\x01\x12(\n\x1aplug_in_info_dcp_run_state\x18\xb4\x03 \x01(\rH\x11\x88\x01\x01\x12\x37\n\x13sp_charger_chg_mode\x18\xc5\x04 \x01(\x0e\x32\x14.SP_CHARGER_CHG_MODEH\x12\x88\x01\x01\x12!\n\x13sp_charger_chg_open\x18\xd5\x04 \x01(\x08H\x13\x88\x01\x01\x12&\n\x18sp_charger_chg_pow_limit\x18\xd6\x04 \x01(\x02H\x14\x88\x01\x01\x12$\n\x16sp_charger_chg_pow_max\x18\xdb\x04 \x01(\x02H\x15\x88\x01\x01\x12\"\n\x14sp_charger_run_state\x18\xc6\x04 \x01(\rH\x16\x88\x01\x01\x12\'\n\x19sp_charger_is_connect_car\x18\xc7\x04 \x01(\x08H\x17\x88\x01\x01\x12-\n\x1fsp_charger_car_batt_vol_setting\x18\x8a\x01 \x01(\rH\x18\x88\x01\x01\x12%\n\x17sp_charger_car_batt_vol\x18\x8b\x01 \x01(\x02H\x19\x88\x01\x01\x12\x31\n#sp_charger_extension_line_p_setting\x18\xe0\x04 \x01(\x02H\x1a\x88\x01\x01\x12\x31\n#sp_charger_extension_line_n_setting\x18\xe1\x04 \x01(\x02H\x1b\x88\x01\x01\x12M\n\x1esp_charger_driving_chg_setting\x18\xe2\x04 \x01(\x0e\x32\x1f.SP_CHARGER_DRIVING_CHG_SETTINGH\x1c\x88\x01\x01\x12/\n!sp_charger_car_batt_chg_amp_limit\x18\xf0\x04 \x01(\x02H\x1d\x88\x01\x01\x12/\n!sp_charger_dev_batt_chg_amp_limit\x18\xf1\x04 \x01(\x02H\x1e\x88\x01\x01\x12S\n$sp_charger_dev_batt_chg_xt60_setting\x18\xf2\x04 \x01(\x0b\x32\x1f.SpChargerDevBattChgXt60SettingH\x1f\x88\x01\x01\x12-\n\x1fsp_charger_car_batt_chg_amp_max\x18\xd3\x05 \x01(\x02H \x88\x01\x01\x12-\n\x1fsp_charger_dev_batt_chg_amp_max\x18\xd5\x05 \x01(\x02H!\x88\x01\x01\x12\x33\n%sp_charger_car_batt_urgent_chg_switch\x18\xd6\x05 \x01(\x08H\"\x88\x01\x01\x12\x32\n$sp_charger_car_batt_urgent_chg_state\x18\xd4\x05 \x01(\rH#\x88\x01\x01\x12\"\n\x14module_bluetooth_snr\x18\xd7\x04 \x01(\x02H$\x88\x01\x01\x12#\n\x15module_bluetooth_rssi\x18\xd8\x04 \x01(\x02H%\x88\x01\x01\x12\x1d\n\x0fmodule_wifi_snr\x18\xd9\x04 \x01(\x02H&\x88\x01\x01\x12\x1e\n\x10module_wifi_rssi\x18\xda\x04 \x01(\x02H\'\x88\x01\x01\x42\x12\n\x10_dev_online_flagB\x0f\n\r_utc_timezoneB\n\n\x08_errcodeB\x0f\n\r_cms_batt_socB\x14\n\x12_cms_chg_dsg_stateB\x13\n\x11_cms_dsg_rem_timeB\x13\n\x11_cms_chg_rem_timeB\x10\n\x0e_cms_batt_tempB\x0f\n\r_pow_in_sum_wB\x10\n\x0e_pow_out_sum_wB\x0e\n\x0c_pow_get_dcpB\x12\n\x10_pow_get_dc_bidiB\x1c\n\x1a_plug_in_info_dc_bidi_flagB\x1b\n\x19_plug_in_info_dcp_in_flagB\x18\n\x16_plug_in_info_dcp_typeB\x1a\n\x18_plug_in_info_dcp_detailB\x16\n\x14_plug_in_info_dcp_snB\x1d\n\x1b_plug_in_info_dcp_run_stateB\x16\n\x14_sp_charger_chg_modeB\x16\n\x14_sp_charger_chg_openB\x1b\n\x19_sp_charger_chg_pow_limitB\x19\n\x17_sp_charger_chg_pow_maxB\x17\n\x15_sp_charger_run_stateB\x1c\n\x1a_sp_charger_is_connect_carB\"\n _sp_charger_car_batt_vol_settingB\x1a\n\x18_sp_charger_car_batt_volB&\n$_sp_charger_extension_line_p_settingB&\n$_sp_charger_extension_line_n_settingB!\n\x1f_sp_charger_driving_chg_settingB$\n\"_sp_charger_car_batt_chg_amp_limitB$\n\"_sp_charger_dev_batt_chg_amp_limitB\'\n%_sp_charger_dev_batt_chg_xt60_settingB\"\n _sp_charger_car_batt_chg_amp_maxB\"\n _sp_charger_dev_batt_chg_amp_maxB(\n&_sp_charger_car_batt_urgent_chg_switchB\'\n%_sp_charger_car_batt_urgent_chg_stateB\x17\n\x15_module_bluetooth_snrB\x18\n\x16_module_bluetooth_rssiB\x12\n\x10_module_wifi_snrB\x13\n\x11_module_wifi_rssi\"\xa1\x05\n\x15RuntimePropertyUpload\x12\x31\n#display_property_full_upload_period\x18\xa5\x02 \x01(\x05H\x00\x88\x01\x01\x12\x38\n*display_property_incremental_upload_period\x18\xa6\x02 \x01(\x05H\x01\x88\x01\x01\x12\x31\n#runtime_property_full_upload_period\x18\xa7\x02 \x01(\x05H\x02\x88\x01\x01\x12\x38\n*runtime_property_incremental_upload_period\x18\xa8\x02 \x01(\x05H\x03\x88\x01\x01\x12%\n\x18plug_in_info_dc_bidi_vol\x18g \x01(\x02H\x04\x88\x01\x01\x12%\n\x18plug_in_info_dc_bidi_amp\x18h \x01(\x02H\x05\x88\x01\x01\x12\"\n\x14plug_in_info_dcp_vol\x18\xbb\x03 \x01(\x02H\x06\x88\x01\x01\x12\"\n\x14plug_in_info_dcp_amp\x18\xc0\x03 \x01(\x02H\x07\x88\x01\x01\x42&\n$_display_property_full_upload_periodB-\n+_display_property_incremental_upload_periodB&\n$_runtime_property_full_upload_periodB-\n+_runtime_property_incremental_upload_periodB\x1b\n\x19_plug_in_info_dc_bidi_volB\x1b\n\x19_plug_in_info_dc_bidi_ampB\x17\n\x15_plug_in_info_dcp_volB\x17\n\x15_plug_in_info_dcp_amp\"\xf8\x01\n\nDevRequest\x12\x19\n\x0c\x64\x65v_utc_time\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x1d\n\x10\x64\x65v_utc_timezone\x18\x02 \x01(\x02H\x01\x88\x01\x01\x12+\n\x1erequire_property_upload_period\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12!\n\x14require_time_service\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x0f\n\r_dev_utc_timeB\x13\n\x11_dev_utc_timezoneB!\n\x1f_require_property_upload_periodB\x17\n\x15_require_time_service\"\xb6\x01\n\rDevRequestAck\x12\x17\n\nrequest_id\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x17\n\nrequire_ok\x18\x02 \x01(\rH\x01\x88\x01\x01\x12:\n\x16property_upload_period\x18\x03 \x01(\x0b\x32\x15.PropertyUploadPeriodH\x02\x88\x01\x01\x42\r\n\x0b_request_idB\r\n\x0b_require_okB\x19\n\x17_property_upload_period*\xa6\x01\n\x13SP_CHARGER_CHG_MODE\x12\x1c\n\x18SP_CHARGER_CHG_MODE_IDLE\x10\x00\x12#\n\x1fSP_CHARGER_CHG_MODE_DRIVING_CHG\x10\x01\x12\'\n#SP_CHARGER_CHG_MODE_BAT_MAINTENANCE\x10\x02\x12#\n\x1fSP_CHARGER_CHG_MODE_PARKING_CHG\x10\x03*\xb6\x01\n\x1eSP_CHARGER_DRIVING_CHG_SETTING\x12\x1c\n\x18\x44RIVING_CHG_SETTING_IDLE\x10\x00\x12&\n\"DRIVING_CHG_SETTING_12V_IN_24V_OUT\x10\x01\x12&\n\"DRIVING_CHG_SETTING_12V_IN_48V_OUT\x10\x02\x12&\n\"DRIVING_CHG_SETTING_24V_IN_48V_OUT\x10\x03*P\n\rCAR_BATT_TYPE\x12\x11\n\rCAR_BATT_IDLE\x10\x00\x12\x15\n\x11\x43\x41R_BATT_12V_TYPE\x10\x01\x12\x15\n\x11\x43\x41R_BATT_24V_TYPE\x10\x02*\x94\x02\n\x19\x44\x45V_BATT_CHG_XT60_SETTING\x12\x1a\n\x16\x44\x45V_BATT_CHG_XT60_IDLE\x10\x00\x12%\n!DEV_BATT_CHG_XT60_EF_DELTA_SERIES\x10\x01\x12*\n&DEV_BATT_CHG_XT60_EF_11V_TO_30V_SERIES\x10\x02\x12*\n&DEV_BATT_CHG_XT60_EF_11V_TO_60V_SERIES\x10\x03\x12-\n)DEV_BATT_CHG_XT60_OTHER_11V_TO_30V_SERIES\x10\x04\x12-\n)DEV_BATT_CHG_XT60_OTHER_11V_TO_60V_SERIES\x10\x05\x42\x02P\x01\x62\x06proto3')
TypeError: Couldn't build proto file into descriptor pool: duplicate symbol 'DisplayPropertyUpload'
2025-12-02 20:55:52.583 ERROR (MainThread) [homeassistant.loader] Unexpected exception importing platform custom_components.ef_ble.config_flow

deltamelter avatar Dec 02 '25 21:12 deltamelter

Thanks, that's something I can work with - should be fixed in #105

Just pushed v0.22.1 to my fork, you can check if that works for you.

GnoX avatar Dec 02 '25 21:12 GnoX

Image

2025-12-02 22:07:30.874 ERROR (MainThread) [aiohttp.server] Error handling request from 192.168.1.228
Traceback (most recent call last):
  File "/usr/local/lib/python3.13/site-packages/aiohttp/web_protocol.py", line 510, in _handle_request
    resp = await request_handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/aiohttp/web_app.py", line 569, in _handle
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/aiohttp/web_middlewares.py", line 117, in impl
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 92, in security_filter_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 87, in forwarded_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 26, in request_context_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 86, in ban_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 242, in auth_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/headers.py", line 41, in headers_middleware
    response = await handler(request)
               ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/http.py", line 73, in handle
    result = await handler(request, **request.match_info)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/decorators.py", line 83, in with_admin
    return await func(self, request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/data_validator.py", line 74, in wrapper
    return await method(view, request, data, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 188, in post
    return await self._post_impl(request, data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 195, in _post_impl
    return await super()._post_impl(request, data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py", line 83, in _post_impl
    result = await self._flow_mgr.async_init(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<2 lines>...
    )
    ^
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 1464, in async_init
    flow, result = await self._async_init(flow_id, handler, context, data)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 1512, in _async_init
    result = await self._async_handle_step(flow, flow.init_step, data)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 493, in _async_handle_step
    result: _FlowResultT = await getattr(flow, method)(user_input)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/ef_ble/config_flow.py", line 168, in async_step_user
    device = eflib.NewDevice(
        discovery_info.device, discovery_info.advertisement
    )
  File "/config/custom_components/ef_ble/eflib/__init__.py", line 28, in NewDevice
    if item.Device.check(sn):
       ^^^^^^^^^^^
AttributeError: module 'custom_components.ef_ble.eflib.devices.unsupported' has no attribute 'Device'. Did you mean: 'BLEDevice'?

deltamelter avatar Dec 02 '25 22:12 deltamelter

This error is a bit odd, but if the cause is what I'm thinking it is, it could also explain the initial error. How are you installing other versions of this integration? I think this can happen if you're installing it manually by merging the folders of the new version with the previous version. If that's the case, make sure that you first remove the whole ef_ble directory.

GnoX avatar Dec 02 '25 22:12 GnoX

I dropped ef-ble folder straight into the custom_components, at least with the last 2 versions, I was sure it was overwriting all files but I guess not.. Restarted and it's all working now. Thanks for the troubleshooting, sorry if I wasted your time 😁 So I will try the latest from the main repo and see if it was just the incomplete install

deltamelter avatar Dec 02 '25 22:12 deltamelter

Now it all finally makes sense to me, I was so confused as I couldn't really find a reason why these errors could ever occur.

I dropped ef-ble folder straight into the custom_components

Yeah, dropping in files usually just overwrites files that already exist, but does not delete files that were either deleted or renamed and that's a problem if they are imported which in this case they were.

Thanks for the troubleshooting, sorry if I wasted your time 😁

No worries, glad I could help.

GnoX avatar Dec 02 '25 22:12 GnoX

No, Release v0.5.5 still gives that Config flow could not be loaded: {"message":"Invalid handler specified"} error, even when installed cleanly. I'll go back to your fork version for now. Thanks.

deltamelter avatar Dec 02 '25 22:12 deltamelter