docs: def read(self):
          """
          Reads a single character from the device.
  
          :returns: character read from the device
          :raises: :py:class:`~alarmdecoder.util.CommError`
          """
          data = ''
  
          try:
              read_ready, _, _ = select.select([self._device], [], [], 0.5)
  
              if len(read_ready) != 0:
                  data = self._device.recv(1)
  
          except socket.error as err:
              raise CommError('Error while reading from device: {0}'.format(str(err)), err)
  
          return data.decode('utf-8')