code: def connect(self, broker, port=1883, client_id="", clean_session=True):
          
          logger.info('Connecting to %s at port %s' % (broker, port))
          self._connected = False
          self._unexpected_disconnect = False
          self._mqttc = mqtt.Client(client_id, clean_session)
  
          # set callbacks
          self._mqttc.on_connect = self._on_connect
          self._mqttc.on_disconnect = self._on_disconnect
  
          if self._username:
              self._mqttc.username_pw_set(self._username, self._password)
  
          self._mqttc.connect(broker, int(port))
  
          timer_start = time.time()
          while time.time() < timer_start + self._loop_timeout:
              if self._connected or self._unexpected_disconnect:
                  break;
              self._mqttc.loop()
  
          if self._unexpected_disconnect:
              raise RuntimeError("The client disconnected unexpectedly")
          logger.debug('client_id: %s' % self._mqttc._client_id)
          return self._mqttc
docs: Connect to an MQTT broker. This is a pre-requisite step for publish
          and subscribe keywords.
  
          `broker` MQTT broker host
  
          `port` broker port (default 1883)
  
          `client_id` if not specified, a random id is generated
  
          `clean_session` specifies the clean session flag for the connection
  
          Examples:
  
          Connect to a broker with default port and client id
          | Connect | 127.0.0.1 |
  
          Connect to a broker by specifying the port and client id explicitly
          | Connect | 127.0.0.1 | 1883 | test.client |
  
          Connect to a broker with clean session flag set to false
          | Connect | 127.0.0.1 | clean_session=${false} |