docs: def _handle_raw_packet(self, raw_packet):
          """Parse incoming packet."""
          if raw_packet[1:2] == b'\x1f':
              self._reset_timeout()
              year = raw_packet[2]
              month = raw_packet[3]
              day = raw_packet[4]
              hour = raw_packet[5]
              minute = raw_packet[6]
              sec = raw_packet[7]
              week = raw_packet[8]
              self.logger.debug(
                  'received date: Year: %s, Month: %s, Day: %s, Hour: %s, '
                  'Minute: %s, Sec: %s, Week %s',
                  year, month, day, hour, minute, sec, week)
          elif raw_packet[1:2] == b'\x0c':
              states = {}
              changes = []
              for switch in range(0, 16):
                  if raw_packet[2+switch:3+switch] == b'\x01':
                      states[format(switch, 'x')] = True
                      if (self.client.states.get(format(switch, 'x'), None)
                              is not True):
                          changes.append(format(switch, 'x'))
                          self.client.states[format(switch, 'x')] = True
                  elif raw_packet[2+switch:3+switch] == b'\x02':
                      states[format(switch, 'x')] = False
                      if (self.client.states.get(format(switch, 'x'), None)
                              is not False):
                          changes.append(format(switch, 'x'))
                          self.client.states[format(switch, 'x')] = False
              for switch in changes:
                  for status_cb in self.client.status_callbacks.get(switch, []):
                      status_cb(states[switch])
              self.logger.debug(states)
              if self.client.in_transaction:
                  self.client.in_transaction = False
                  self.client.active_packet = False
                  self.client.active_transaction.set_result(states)
                  while self.client.status_waiters:
                      waiter = self.client.status_waiters.popleft()
                      waiter.set_result(states)
                  if self.client.waiters:
                      self.send_packet()
                  else:
                      self._cmd_timeout.cancel()
              elif self._cmd_timeout:
                  self._cmd_timeout.cancel()
          else:
              self.logger.warning('received unknown packet: %s',
                                  binascii.hexlify(raw_packet))