diff --git a/services/core/PlatformDriverAgent/platform_driver/driver.py b/services/core/PlatformDriverAgent/platform_driver/driver.py index b86688f465..6caf974b44 100644 --- a/services/core/PlatformDriverAgent/platform_driver/driver.py +++ b/services/core/PlatformDriverAgent/platform_driver/driver.py @@ -167,7 +167,13 @@ def setup_device(self): self.heart_beat_point = config.get("heart_beat_point") - + # Check for duplicate names in registry entries and warn if this will cause rows to be skipped. + point_names = [r['Volttron Point Name'] for r in registry_config] + seen = set(point_names) + duplicates = [n for n in point_names if n not in seen or seen.remove(n)] + if duplicates: + _log.warning(f'Duplicate point names detected in registry file for {self.device_path}. ' + f'Only the last registry row will be used for points with names: {set(duplicates)}') self.interface = self.get_interface(driver_type, driver_config, registry_config) self.meta_data = {} diff --git a/volttron/platform/web/topic_tree.py b/volttron/platform/web/topic_tree.py index fedc0e6820..d029298520 100644 --- a/volttron/platform/web/topic_tree.py +++ b/volttron/platform/web/topic_tree.py @@ -166,6 +166,9 @@ def from_store(cls, platform, rpc_caller): registry_config = registry_config if kwargs else registry_config.get(timeout=5) for pnt in registry_config: point_name = pnt.pop('Volttron Point Name') - n = device_tree.create_node(point_name, f"{d}/{point_name}", parent=d, data=pnt) - n.segment_type = 'POINT' + try: + n = device_tree.create_node(point_name, f"{d}/{point_name}", parent=d, data=pnt) + n.segment_type = 'POINT' + except DuplicatedNodeIdError: + _log.warning(f'Duplicate Voltron Point Name ({point_name}) found in registry: {reg_cfg_name}.') return device_tree