Skip to content

Commit 8ebdcb5

Browse files
committed
move unit determination to the setup entry function
1 parent b925c45 commit 8ebdcb5

File tree

6 files changed

+73
-79
lines changed

6 files changed

+73
-79
lines changed

custom_components/victron/binary_sensor.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,21 @@ async def async_setup_entry(
4343
for slave, registerLedger in register_set.items():
4444
for name in registerLedger:
4545
for register_name, registerInfo in register_info_dict[name].items():
46-
# _LOGGER.debug("unit == " + str(slave) + " registerLedger == " + str(registerLedger) + " registerInfo ")
47-
# _LOGGER.debug(str(registerInfo.slave))
46+
_LOGGER.debug("unit == " + str(slave) + " registerLedger == " + str(registerLedger) + " registerInfo ")
47+
48+
#VE.CAN device zero is present under unit 100. This seperates non system / settings entities into the seperate can device
49+
if slave == 100 and not register_name.startswith(("settings", "system")) :
50+
actual_id = 0
51+
else:
52+
actual_id = slave
4853

4954
if isinstance(registerInfo.entityType, BoolReadEntityType):
5055
descriptions.append(VictronEntityDescription(
5156
key=register_name,
5257
name=register_name.replace('_', ' '),
53-
slave=slave,
58+
slave=actual_id,
5459
))
60+
_LOGGER.debug("composed description == " + str(descriptions))
5561

5662
entities = []
5763
entity = {}
@@ -82,15 +88,9 @@ def __init__(self, coordinator: victronEnergyDeviceUpdateCoordinator, descriptio
8288
self._attr_device_class = description.device_class
8389
self._attr_name = f"{description.name}"
8490

85-
#VE.CAN device zero is present under unit 100. This seperates non system / settings entities into the seperate can device
86-
if description.slave == 100 and not description.key.startswith(("settings", "system")) :
87-
actual_id = 0
88-
else:
89-
actual_id = description.slave
90-
91-
self._attr_unique_id = f"{actual_id}_{self.description.key}"
92-
if actual_id not in (100, 225):
93-
self.entity_id = f"{BINARY_SENSOR_DOMAIN}.{DOMAIN}_{self.description.key}_{actual_id}"
91+
self._attr_unique_id = f"{self.description.slave}_{self.description.key}"
92+
if self.description.slave not in (100, 225):
93+
self.entity_id = f"{BINARY_SENSOR_DOMAIN}.{DOMAIN}_{self.description.key}_{self.description.slave}"
9494
else:
9595
self.entity_id = f"{BINARY_SENSOR_DOMAIN}.{DOMAIN}_{self.description.key}"
9696

custom_components/victron/button.py

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,27 +29,30 @@ async def async_setup_entry(
2929
"""Set up Victron energy binary sensor entries."""
3030
_LOGGER.debug("attempting to setup button entities")
3131
victron_coordinator: victronEnergyDeviceUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id]
32-
_LOGGER.debug(victron_coordinator.processed_data()["register_set"])
33-
_LOGGER.debug(victron_coordinator.processed_data()["data"])
3432
descriptions = []
3533
#TODO cleanup
3634
register_set = victron_coordinator.processed_data()["register_set"]
3735
for slave, registerLedger in register_set.items():
3836
for name in registerLedger:
3937
for register_name, registerInfo in register_info_dict[name].items():
40-
# _LOGGER.debug("unit == " + str(slave) + " registerLedger == " + str(registerLedger) + " registerInfo ")
41-
# _LOGGER.debug(str(registerInfo.slave))
38+
_LOGGER.debug("unit == " + str(slave) + " registerLedger == " + str(registerLedger) + " registerInfo ")
4239
if not config_entry.options[CONF_ADVANCED_OPTIONS]:
4340
continue
4441

42+
if slave == 100 and not register_name.startswith(("settings", "system")) :
43+
actual_id = 0
44+
else:
45+
actual_id = slave
46+
4547
if isinstance(registerInfo.entityType, ButtonWriteType):
4648
descriptions.append(VictronEntityDescription(
4749
key=register_name,
4850
name=register_name.replace('_', ' '),
49-
slave=slave,
51+
slave=actual_id,
5052
device_class=ButtonDeviceClass.RESTART,
5153
address=registerInfo.register,
5254
))
55+
_LOGGER.debug("composed description == " + str(descriptions))
5356

5457
entities = []
5558
entity = {}
@@ -79,15 +82,9 @@ def __init__(self, coordinator: victronEnergyDeviceUpdateCoordinator, descriptio
7982
self._attr_device_class = description.device_class
8083
self._attr_name = f"{description.name}"
8184

82-
#VE.CAN device zero is present under unit 100. This seperates non system / settings entities into the seperate can device
83-
if description.slave == 100 and not description.key.startswith(("settings", "system")) :
84-
actual_id = 0
85-
else:
86-
actual_id = description.slave
87-
88-
self._attr_unique_id = f"{actual_id}_{self.description.key}"
89-
if actual_id not in (100, 225):
90-
self.entity_id = f"{BUTTON_DOMAIN}.{DOMAIN}_{self.description.key}_{actual_id}"
85+
self._attr_unique_id = f"{self.description.slave}_{self.description.key}"
86+
if self.description.slave not in (100, 225):
87+
self.entity_id = f"{BUTTON_DOMAIN}.{DOMAIN}_{self.description.key}_{self.description.slave}"
9188
else:
9289
self.entity_id = f"{BUTTON_DOMAIN}.{DOMAIN}_{self.description.key}"
9390

custom_components/victron/number.py

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,18 @@ async def async_setup_entry(
6161
for slave, registerLedger in register_set.items():
6262
for name in registerLedger:
6363
for register_name, registerInfo in register_info_dict[name].items():
64-
# _LOGGER.debug("unit == " + str(slave) + " registerLedger == " + str(registerLedger) + " registerInfo ")
65-
# _LOGGER.debug(str(registerInfo.slave))
66-
# _LOGGER.debug("register_name")
67-
# _LOGGER.debug(register_name)
64+
_LOGGER.debug("unit == " + str(slave) + " registerLedger == " + str(registerLedger) + " registerInfo ")
65+
66+
if slave == 100 and not register_name.startswith(("settings", "system")) :
67+
actual_id = 0
68+
else:
69+
actual_id = slave
70+
6871
if isinstance(registerInfo.entityType, SliderWriteType):
6972
descriptions.append(VictronEntityDescription(
7073
key=register_name,
7174
name=register_name.replace('_', ' '),
72-
slave=slave,
75+
slave=actual_id,
7376
native_unit_of_measurement=registerInfo.unit,
7477
mode=NumberMode.SLIDER if config_entry.options[CONF_USE_SLIDERS] else NumberMode.BOX,
7578
native_min_value=determine_min_value(registerInfo.unit, config_entry.options, registerInfo.entityType.powerType, registerInfo.entityType.negative),
@@ -79,6 +82,7 @@ async def async_setup_entry(
7982
scale = registerInfo.scale,
8083
native_step = registerInfo.step
8184
))
85+
_LOGGER.debug("composed description == " + str(descriptions))
8286

8387
entities = []
8488
entity = {}
@@ -169,17 +173,11 @@ def __init__(self, coordinator: victronEnergyDeviceUpdateCoordinator, descriptio
169173

170174
self.data_key = str(self.description.slave) + "." + str(self.description.key)
171175

172-
#VE.CAN device zero is present under unit 100. This seperates non system / settings entities into the seperate can device
173-
if description.slave == 100 and not description.key.startswith(("settings", "system")) :
174-
actual_id = 0
175-
else:
176-
actual_id = description.slave
177-
178176
self._attr_native_value = self.description.value_fn(self.coordinator.processed_data(), self.description.slave, self.description.key)
179177

180-
self._attr_unique_id = f"{actual_id}_{self.description.key}"
181-
if actual_id not in (100, 225):
182-
self.entity_id = f"{NUMBER_DOMAIN}.{DOMAIN}_{self.description.key}_{actual_id}"
178+
self._attr_unique_id = f"{self.description.slave}_{self.description.key}"
179+
if self.description.slave not in (100, 225):
180+
self.entity_id = f"{NUMBER_DOMAIN}.{DOMAIN}_{self.description.key}_{self.description.slave}"
183181
else:
184182
self.entity_id = f"{NUMBER_DOMAIN}.{DOMAIN}_{self.description.key}"
185183

custom_components/victron/select.py

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,20 +38,25 @@ async def async_setup_entry(
3838
#TODO cleanup
3939
if config_entry.options[CONF_ADVANCED_OPTIONS]:
4040
register_set = victron_coordinator.processed_data()["register_set"]
41-
for unit, registerLedger in register_set.items():
41+
for slave, registerLedger in register_set.items():
4242
for name in registerLedger:
4343
for register_name, registerInfo in register_info_dict[name].items():
4444
if isinstance(registerInfo.entityType, SelectWriteType):
45-
# _LOGGER.debug("unit == " + str(unit) + " registerLedger == " + str(registerLedger) + " registerInfo ")
46-
# _LOGGER.debug("register_name")
47-
# _LOGGER.debug(register_name)
45+
_LOGGER.debug("unit == " + str(slave) + " registerLedger == " + str(registerLedger) + " registerInfo ")
46+
47+
if slave == 100 and not register_name.startswith(("settings", "system")) :
48+
actual_id = 0
49+
else:
50+
actual_id = slave
51+
4852
descriptions.append(VictronEntityDescription(
4953
key=register_name,
5054
name=register_name.replace('_', ' '),
51-
slave=unit,
55+
slave=actual_id,
5256
options=registerInfo.entityType.options,
5357
address=registerInfo.register,
5458
))
59+
_LOGGER.debug("composed description == " + str(descriptions))
5560

5661
entities = []
5762
entity = {}
@@ -83,15 +88,9 @@ def __init__(self, hass: HomeAssistant, coordinator: victronEnergyDeviceUpdateCo
8388
#this needs to be changed to allow multiple of the same type
8489
self._attr_name = f"{description.name}"
8590

86-
#VE.CAN device zero is present under unit 100. This seperates non system / settings entities into the seperate can device
87-
if description.slave == 100 and not description.key.startswith(("settings", "system")) :
88-
actual_id = 0
89-
else:
90-
actual_id = description.slave
91-
92-
self._attr_unique_id = f"{actual_id}_{self.description.key}"
93-
if actual_id not in (100, 225):
94-
self.entity_id = f"{SELECT_DOMAIN}.{DOMAIN}_{self.description.key}_{actual_id}"
91+
self._attr_unique_id = f"{self.description.slave}_{self.description.key}"
92+
if self.description.slave not in (100, 225):
93+
self.entity_id = f"{SELECT_DOMAIN}.{DOMAIN}_{self.description.key}_{self.description.slave}"
9594
else:
9695
self.entity_id = f"{SELECT_DOMAIN}.{DOMAIN}_{self.description.key}"
9796

custom_components/victron/sensor.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -57,17 +57,24 @@ async def async_setup_entry(
5757
if not isinstance(registerInfo.entityType, ReadEntityType) or isinstance(registerInfo.entityType, BoolReadEntityType):
5858
continue
5959

60+
#VE.CAN device zero is present under unit 100. This seperates non system / settings entities into the seperate can device
61+
if slave == 100 and not register_name.startswith(("settings", "system")) :
62+
actual_id = 0
63+
else:
64+
actual_id = slave
65+
6066

6167
descriptions.append(VictronEntityDescription(
6268
key=register_name,
6369
name=register_name.replace('_', ' '),
6470
native_unit_of_measurement=registerInfo.unit,
6571
state_class=registerInfo.determine_stateclass(),
66-
slave=slave,
72+
slave=actual_id,
6773
device_class=determine_victron_device_class(register_name, registerInfo.unit),
6874
entity_type=registerInfo.entityType if isinstance(registerInfo.entityType, TextReadEntityType) else None
6975
))
70-
76+
_LOGGER.debug("composed description == " + str(descriptions))
77+
7178
entities = []
7279
entity = {}
7380
for description in descriptions:
@@ -129,15 +136,9 @@ def __init__(self, coordinator: victronEnergyDeviceUpdateCoordinator, descriptio
129136
self._attr_state_class = description.state_class
130137
self.entity_type = description.entity_type
131138

132-
#VE.CAN device zero is present under unit 100. This seperates non system / settings entities into the seperate can device
133-
if description.slave == 100 and not description.key.startswith(("settings", "system")) :
134-
actual_id = 0
135-
else:
136-
actual_id = description.slave
137-
138-
self._attr_unique_id = f"{actual_id}_{self.description.key}"
139-
if actual_id not in (100, 225):
140-
self.entity_id = f"{SENSOR_DOMAIN}.{DOMAIN}_{self.description.key}_{actual_id}"
139+
self._attr_unique_id = f"{description.slave}_{self.description.key}"
140+
if description.slave not in (100, 225):
141+
self.entity_id = f"{SENSOR_DOMAIN}.{DOMAIN}_{self.description.key}_{description.slave}"
141142
else:
142143
self.entity_id = f"{SENSOR_DOMAIN}.{DOMAIN}_{self.description.key}"
143144

custom_components/victron/switch.py

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,22 @@ async def async_setup_entry(
3737
for slave, registerLedger in register_set.items():
3838
for name in registerLedger:
3939
for register_name, registerInfo in register_info_dict[name].items():
40-
# _LOGGER.debug("unit == " + str(unit) + " registerLedger == " + str(registerLedger) + " registerInfo ")
41-
# _LOGGER.debug(str(registerInfo.unit))
42-
# _LOGGER.debug("register_name")
43-
# _LOGGER.debug(register_name)
40+
_LOGGER.debug("unit == " + str(slave) + " registerLedger == " + str(registerLedger) + " registerInfo ")
41+
42+
#VE.CAN device zero is present under unit 100. This seperates non system / settings entities into the seperate can device
43+
if slave == 100 and not register_name.startswith(("settings", "system")) :
44+
actual_id = 0
45+
else:
46+
actual_id = slave
47+
4448
if isinstance(registerInfo.entityType, SwitchWriteType):
4549
descriptions.append(VictronEntityDescription(
4650
key=register_name,
4751
name=register_name.replace('_', ' '),
48-
slave=slave,
52+
slave=actual_id,
4953
address=registerInfo.register,
5054
))
55+
_LOGGER.debug("composed description == " + str(descriptions))
5156

5257
entities = []
5358
entity = {}
@@ -77,15 +82,9 @@ def __init__(self, hass: HomeAssistant, coordinator: victronEnergyDeviceUpdateCo
7782
self._attr_name = f"{description.name}"
7883
self.data_key = str(self.description.slave) + "." + str(self.description.key)
7984

80-
#VE.CAN device zero is present under unit 100. This seperates non system / settings entities into the seperate can device
81-
if description.slave == 100 and not description.key.startswith(("settings", "system")) :
82-
actual_id = 0
83-
else:
84-
actual_id = description.slave
85-
86-
self._attr_unique_id = f"{actual_id}_{self.description.key}"
87-
if actual_id not in (100, 225):
88-
self.entity_id = f"{SWITCH_DOMAIN}.{DOMAIN}_{self.description.key}_{actual_id}"
85+
self._attr_unique_id = f"{description.slave}_{self.description.key}"
86+
if description.slave not in (100, 225):
87+
self.entity_id = f"{SWITCH_DOMAIN}.{DOMAIN}_{self.description.key}_{description.slave}"
8988
else:
9089
self.entity_id = f"{SWITCH_DOMAIN}.{DOMAIN}_{self.description.key}"
9190

0 commit comments

Comments
 (0)