[Bug]: Error trying to add Ultra X
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
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.
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.
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.
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.
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.
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?
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 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
@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.
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
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.
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'?
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.
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
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.
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.