Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 25 additions & 9 deletions modules/test/protocol/python/src/protocol_bacnet.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,19 +112,35 @@ def validate_device(self):
LOGGER.error('Error occurred when validating device', exc_info=True)
return result, description


def validate_protocol_version(self, device: BACnetDevice) -> tuple[bool, str]:
async def validate_protocol_version(
self,
device: BACnetDevice
) -> tuple[bool, str]:
LOGGER.info(
f'Resolving protocol version for BACnet device: {device.device_id}'
)
try:
version = self.bacnet.read(
f'{device.ip} device {device.device_id} protocolVersion')
revision = self.bacnet.read(
f'{device.ip} device {device.device_id} protocolRevision')
protocol_version = f'{version}.{revision}'
result = True
result_description = f'Device uses BACnet version {protocol_version}'
dut = await BAC0.device(
device.ip,
device.device_id,
self.bacnet
)
version = await dut.read_property(
('device', device.device_id, 'protocolVersion')
)
revision = await dut.read_property(
('device', device.device_id, 'protocolRevision')
)
if version is None or revision is None:
result = False
result_description = (
f'Failed to resolve protocol version: version={version}, '
f'revision={revision}')
LOGGER.error(result_description)
else:
protocol_version = f'{version}.{revision}'
result = True
result_description = f'Device uses BACnet version {protocol_version}'
except (UnknownPropertyError, ReadPropertyException,
NoResponseFromController, DeviceNotConnected) as e:
result = False
Expand Down
18 changes: 12 additions & 6 deletions modules/test/protocol/python/src/protocol_module.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,17 @@ class ProtocolModule(TestModule):

def __init__(self, module):
self._supports_bacnet = False
self._bacnet_loop = None
super().__init__(module_name=module, log_name=LOG_NAME)
global LOGGER
LOGGER = self._get_logger()
self._bacnet = BACnet(log=LOGGER, device_hw_addr=self._device_mac)

def _get_bacnet_loop(self):
if self._bacnet_loop is None:
self._bacnet_loop = asyncio.new_event_loop()
return self._bacnet_loop

def _protocol_valid_bacnet(self):
LOGGER.info('Running protocol.valid_bacnet')
result = None
Expand All @@ -47,11 +53,8 @@ def _protocol_valid_bacnet(self):
local_address = self.get_local_ip(interface_name)
if local_address:
local_address += '/24'
try:
loop = asyncio.get_running_loop()
loop.run_until_complete(self._bacnet.discover(local_address))
except RuntimeError:
asyncio.run(self._bacnet.discover(local_address))
self._get_bacnet_loop().run_until_complete(
self._bacnet.discover(local_address))
result = self._bacnet.validate_device()
if result[0]:
self._supports_bacnet = True
Expand All @@ -78,8 +81,11 @@ def _protocol_bacnet_version(self):
if len(self._bacnet.devices) > 0:
for device in self._bacnet.devices:
LOGGER.debug(f'Checking BACnet version for device: {device}')
loop = self._get_bacnet_loop()
result_status, result_description = \
self._bacnet.validate_protocol_version(device)
loop.run_until_complete(
self._bacnet.validate_protocol_version(device)
)
break

LOGGER.info(result_description)
Expand Down
Loading