Merge pull request #115 from robcalon/patch-1
asynchronous read_as_object method
This commit is contained in:
		
						commit
						041ac758f4
					
				| @ -95,3 +95,36 @@ class AsyncSerialReader(SerialReader): | ||||
|                     ) | ||||
|                 except ParseError as e: | ||||
|                     logger.warning('Failed to parse telegram: %s', e) | ||||
|                      | ||||
|     async def read_as_object(self, queue): | ||||
|         """ | ||||
|         Read complete DSMR telegram's from the serial interface  | ||||
|         and return a Telegram object. | ||||
|          | ||||
|         Instead of being a generator, Telegram objects are pushed  | ||||
|         to provided queue for asynchronous processing. | ||||
|          | ||||
|         :rtype: None | ||||
|         """ | ||||
| 
 | ||||
|         # create Serial StreamReader | ||||
|         conn = serial_asyncio.open_serial_connection(**self.serial_settings) | ||||
|         reader, _ = await conn | ||||
| 
 | ||||
|         while True: | ||||
| 
 | ||||
|             # Read line if available or give control back to loop until new | ||||
|             # data has arrived. | ||||
|             data = await reader.readline() | ||||
|             self.telegram_buffer.append(data.decode('ascii')) | ||||
| 
 | ||||
|             for telegram in self.telegram_buffer.get_all(): | ||||
| 
 | ||||
|                     try: | ||||
|                         queue.put_nowait( | ||||
|                             Telegram(telegram, self.telegram_parser, self.telegram_specification) | ||||
|                         ) | ||||
|                     except InvalidChecksumError as e: | ||||
|                         logger.warning(str(e)) | ||||
|                     except ParseError as e: | ||||
|                         logger.error('Failed to parse telegram: %s', e) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user