docs: def parse(self, data):
          """Parse a 12 bytes packet in the Lighting2 format and return a
          dictionary containing the data extracted. An example of a return value
          would be:
  
          .. code-block:: python
  
              {
                  'id': "0x111F342",
                  'packet_length': 10,
                  'packet_type': 17,
                  'packet_type_name': 'Humidity sensors',
                  'sequence_number': 19,
                  'packet_subtype': 0,
                  'packet_subtype_name': "AC",
                  'unit_code': 10,
                  'command': 1,
                  'command_text': "Off",
                  'level': 7,
                  'signal_level': 9,
              }
  
          :param data: bytearray to be parsed
          :type data: bytearray
  
          :return: Data dictionary containing the parsed values
          :rtype: dict
          """
  
          self.validate_packet(data)
  
          results = self.parse_header_part(data)
          sub_type = results['packet_subtype']
  
          id_ = self.dump_hex(data[4:8])
  
          unit_code = data[8]
          command = data[9]
          command_text = SUB_TYPE_COMMANDS.get(sub_type, {}).get(command)
          dim_level = DIM_LEVEL_TO_PERCENT.get(data[10], '--??--')
  
          sensor_specific = {
              'id': id_,
              'unit_code': unit_code,
              'command': command,
              'command_text': command_text,
              'dim_level': dim_level
          }
  
          results.update(RfxPacketUtils.parse_signal_upper(data[11]))
          results.update(sensor_specific)
  
          return results