def parse(self, data):
        """Parse a 18 bytes packet in the Electricity format and return a
        dictionary containing the data extracted. An example of a return value
        would be:

        .. code-block:: python

            {
                'count': 3,
                'current_watts': 692,
                'id': "0x2EB2",
                'packet_length': 17,
                'packet_type': 90,
                'packet_type_name': 'Energy usage sensors',
                'sequence_number': 0,
                'packet_subtype': 1,
                'packet_subtype_name': "CM119/160",
                'total_watts': 920825.1947099693,
                'signal_level': 9,
                'battery_level': 6,
            }

        :param data: bytearray to be parsed
        :type data: bytearray

        :return: Data dictionary containing the parsed values
        :rtype: dict
        """

        self.validate_packet(data)

        TOTAL_DIVISOR = 223.666

        id_ = self.dump_hex(data[4:6])
        count = data[6]
        instant = data[7:11]
        total = data[11:16]

        current_watts = self._bytes_to_uint_32(instant)
        total_watts = self._bytes_to_uint_48(total) / TOTAL_DIVISOR

        sensor_specific = {
            'count': count,
            'current_watts': current_watts,
            'id': id_,
            'total_watts': total_watts
        }

        results = self.parse_header_part(data)
        results.update(RfxPacketUtils.parse_signal_and_battery(data[17]))
        results.update(sensor_specific)

        return results