docs: def write_data(self, data, response_required=None, timeout=5.0, raw=False):
          """Write data on the asyncio Protocol"""
          if self._transport is None:
              return
  
          if self._paused:
              return
  
          if self._waiting_for_response:
              LOG.debug("queueing write %s", data)
              self._queued_writes.append((data, response_required, timeout))
              return
  
          if response_required:
              self._waiting_for_response = response_required
              if timeout > 0:
                  self._timeout_task = self.loop.call_later(
                      timeout, self._response_required_timeout)
  
          if not raw:
              cksum = 256 - reduce(lambda x, y: x+y, map(ord, data)) % 256
              data = data + '{:02X}'.format(cksum)
              if int(data[0:2], 16) != len(data)-2:
                  LOG.debug("message length wrong: %s", data)
  
          LOG.debug("write_data '%s'", data)
          self._transport.write((data + '\r\n').encode())