code: def _parse(self, registers):
          result = {'ip': self.ip, 'connected': True}
          decoder = BinaryPayloadDecoder.fromRegisters(registers,
                                                       byteorder=Endian.Big,
                                                       wordorder=Endian.Little)
          b = [decoder.decode_bits(), decoder.decode_bits()]
          reg_40001 = b[1] + b[0]
          monitor_integer = sum(1 << i for i, b in enumerate(reg_40001[:4]) if b)
          result['state'] = options['monitor state'][monitor_integer]
          fault_integer = sum(1 << i for i, b in enumerate(reg_40001[4:6]) if b)
          result['fault'] = {'status': options['fault status'][fault_integer]}
          low, high = reg_40001[6:8]
          result['alarm'] = options['alarm level'][low + high]
          decoder._pointer += 2
          result['concentration'] = decoder.decode_32bit_float()
          decoder._pointer += 2
          fault_number = decoder.decode_16bit_uint()
          if fault_number != 0:
              code = ('m' if fault_number < 30 else 'F') + str(fault_number)
              result['fault']['code'] = code
              result['fault'].update(faults[code])
          unit_bit = decoder.decode_bits().index(True)
          result['units'] = options['concentration unit'][unit_bit]
          decoder._pointer += 1
          result['temperature'] = decoder.decode_16bit_int()
          result['life'] = decoder.decode_16bit_uint() / 24.0
          decoder._pointer += 2
          result['flow'] = decoder.decode_16bit_uint()
          decoder._pointer += 2
          result['low-alarm threshold'] = round(decoder.decode_32bit_float(), 6)
          result['high-alarm threshold'] = round(decoder.decode_32bit_float(), 6)
          if result['units'] == 'ppb':
              result['concentration'] *= 1000
              result['low-alarm threshold'] *= 1000
              result['high-alarm threshold'] *= 1000
          return result