issue-51-telegram fix bug when no mbus devices are present
This commit is contained in:
		
							parent
							
								
									47db8cad27
								
							
						
					
					
						commit
						0593d4172d
					
				| @ -36,9 +36,12 @@ class Telegram(object): | |||||||
|         # Group Mbus related values into a MbusDevice object. |         # Group Mbus related values into a MbusDevice object. | ||||||
|         # TODO MaxDemandParser (BELGIUM_MAXIMUM_DEMAND_13_MONTHS) returns a list |         # TODO MaxDemandParser (BELGIUM_MAXIMUM_DEMAND_13_MONTHS) returns a list | ||||||
|         if isinstance(dsmr_object, DSMRObject) and dsmr_object.is_mbus_reading: |         if isinstance(dsmr_object, DSMRObject) and dsmr_object.is_mbus_reading: | ||||||
|             channel_id = dsmr_object.obis_id_code[1] |             self._add_mbus(obis_reference, dsmr_object) | ||||||
|             mbus_device = self._mbus_devices[channel_id] | 
 | ||||||
|             mbus_device.add(obis_reference, dsmr_object) |     def _add_mbus(self, obis_reference, dsmr_object): | ||||||
|  |         channel_id = dsmr_object.obis_id_code[1] | ||||||
|  |         mbus_device = self._mbus_devices[channel_id] | ||||||
|  |         mbus_device.add(obis_reference, dsmr_object) | ||||||
| 
 | 
 | ||||||
|     def get_mbus_devices(self): |     def get_mbus_devices(self): | ||||||
|         """ |         """ | ||||||
| @ -47,7 +50,9 @@ class Telegram(object): | |||||||
|         return [d[1] for d in sorted(self._mbus_devices.items(), key=lambda x: x[0])] |         return [d[1] for d in sorted(self._mbus_devices.items(), key=lambda x: x[0])] | ||||||
| 
 | 
 | ||||||
|     def get_mbus_device_by_channel(self, channel_id): |     def get_mbus_device_by_channel(self, channel_id): | ||||||
|         return self._mbus_devices[channel_id] |         # Check key, because defaultdict would otherwise instantiate an empty MbusDevice | ||||||
|  |         if channel_id in self._mbus_devices: | ||||||
|  |             return self._mbus_devices[channel_id] | ||||||
| 
 | 
 | ||||||
|     def __getattr__(self, name): |     def __getattr__(self, name): | ||||||
|         """ will only get called for undefined attributes """ |         """ will only get called for undefined attributes """ | ||||||
|  | |||||||
| @ -356,3 +356,14 @@ class TelegramTest(unittest.TestCase): | |||||||
|         self.assertEqual(mbus_device_2.DEVICE_TYPE.value, 3) |         self.assertEqual(mbus_device_2.DEVICE_TYPE.value, 3) | ||||||
|         self.assertEqual(mbus_device_2.EQUIPMENT_IDENTIFIER_GAS.value, '4730303339303031393336393930363139') |         self.assertEqual(mbus_device_2.EQUIPMENT_IDENTIFIER_GAS.value, '4730303339303031393336393930363139') | ||||||
|         self.assertEqual(mbus_device_2.HOURLY_GAS_METER_READING.value, Decimal('246.138')) |         self.assertEqual(mbus_device_2.HOURLY_GAS_METER_READING.value, Decimal('246.138')) | ||||||
|  | 
 | ||||||
|  |     def test_without_mbus_devices(self): | ||||||
|  |         parser = TelegramParser(telegram_specifications.V5, apply_checksum_validation=False) | ||||||
|  |         telegram = parser.parse('') | ||||||
|  | 
 | ||||||
|  |         self.assertEqual(telegram.get_mbus_devices(), []) | ||||||
|  |         self.assertIsNone(telegram.get_mbus_device_by_channel(1)) | ||||||
|  | 
 | ||||||
|  |         # Because of a bug related to incorrect use of defaultdict, | ||||||
|  |         # test again for unwanted side effects | ||||||
|  |         self.assertEqual(telegram.get_mbus_devices(), []) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user