def get_request() -> xdlms.GetRequestNormal: # invocation counter return xdlms.GetRequestNormal(cosem_attribute=cosem.CosemAttribute( interface=enumerations.CosemInterface.DATA, instance=cosem.Obis(0, 0, 0x2B, 1, 0), attribute=2, ))
def get( self, cosem_attribute: cosem.CosemAttribute, access_descriptor: Optional[RangeDescriptor] = None, ) -> bytes: self.send( xdlms.GetRequestNormal( cosem_attribute=cosem_attribute, access_selection=access_descriptor ) ) all_data_received = False data = bytearray() while not all_data_received: get_response = self.next_event() if isinstance(get_response, xdlms.GetResponseNormal): data.extend(get_response.data) all_data_received = True continue if isinstance(get_response, xdlms.GetResponseWithBlock): data.extend(get_response.data) self.send( xdlms.GetRequestNext( invoke_id_and_priority=get_response.invoke_id_and_priority, block_number=get_response.block_number, ) ) continue if isinstance(get_response, xdlms.GetResponseLastBlock): data.extend(get_response.data) all_data_received = True continue if isinstance(get_response, xdlms.GetResponseLastBlockWithError): raise DataResultError( f"Error in blocktransfer of GET response: {get_response.error!r}" ) if isinstance(get_response, xdlms.GetResponseNormalWithError): raise DataResultError( f"Could not perform GET request: {get_response.error!r}" ) return bytes(data)