예제 #1
0
    def __init__(self):
        self._connection_event_callbacks_lock = lock_factory.build_rlock()
        self._connection_event_callbacks = []

        self._lock = lock_factory.build_rlock()
        self._status_condition = Condition(self._lock)
        self._status = ClientStatus.INITIALIZED
예제 #2
0
    def __init__(self, cloud_client, device_uuid, **kwargs):
        self.__cloud_client = cloud_client
        self._state_lock = lock_factory.build_rlock()
        self.__event_handlers_lock = lock_factory.build_rlock()
        self.__event_handlers = []

        self.uuid = device_uuid
        self._channels = kwargs.get('channels', [])

        # Information about device
        self.name = kwargs.get('devName')
        self.type = kwargs.get('deviceType')
        self.fwversion = kwargs.get('fmwareVersion')
        self.hwversion = kwargs.get('hdwareVersion')
        self.online = kwargs.get('onlineStatus') == 1

        self._abilities = None
예제 #3
0
    def __init__(self, cloud_credentials, discovery_interval, auto_reconnect):
        self._cloud_creds = cloud_credentials
        self._http_client = MerossHttpClient(cloud_credentials=self._cloud_creds)

        self._devices_lock = lock_factory.build_rlock()
        self._devices = dict()
        self._event_callbacks_lock = lock_factory.build_rlock()
        self._event_callbacks = []

        # Instantiate the mqtt cloud client
        self._cloud_client = MerossCloudClient(cloud_credentials=self._cloud_creds,
                                               push_message_callback=self._dispatch_push_notification,
                                               auto_reconnect=auto_reconnect)
        self._cloud_client.connection_status.register_connection_event_callback(callback=self._fire_event)
        self._device_discoverer = None
        self._stop_discovery = Event()
        self._device_discovery_done = Event()
        self._discovery_interval = discovery_interval
예제 #4
0
파일: client.py 프로젝트: yraghu/MerossIot
    def __init__(
            self,
            cloud_credentials,  # type: MerossCloudCreds
            push_message_callback=None,  # type: callable
            auto_reconnect=True,  # type: bool
            **kwords):

        self.connection_status = ConnectionStatusManager()
        self._cloud_creds = cloud_credentials
        self._auto_reconnect = auto_reconnect
        self._pending_response_messages = dict()
        self._pending_responses_lock = lock_factory.build_rlock()
        self._push_message_callback = push_message_callback
        self._subscription_count = AtomicCounter(0)

        if "domain" in kwords:
            self._domain = kwords['domain']
        else:
            self._domain = "iot.meross.com"

        # Lookup port and certificate for MQTT server
        self._port = kwords.get('port', MerossCloudClient._DEFAULT_PORT)
        self._ca_cert = kwords.get('ca_cert', None)

        self._generate_client_and_app_id()

        # Password is calculated as the MD5 of USERID concatenated with KEY
        md5_hash = md5()
        clearpwd = "%s%s" % (self._cloud_creds.user_id, self._cloud_creds.key)
        md5_hash.update(clearpwd.encode("utf8"))
        hashed_password = md5_hash.hexdigest()

        # Start the mqtt client
        self._mqtt_client = mqtt.Client(
            client_id=self._client_id, protocol=mqtt.MQTTv311
        )  # ex. app-id -> app:08d4c9f99da40203ebc798a76512ec14
        self._mqtt_client.on_connect = self._on_connect
        self._mqtt_client.on_message = self._on_message
        self._mqtt_client.on_disconnect = self._on_disconnect
        self._mqtt_client.on_subscribe = self._on_subscribe

        # Avoid login if user_id is None
        if self._cloud_creds.user_id is not None:
            self._mqtt_client.username_pw_set(
                username=self._cloud_creds.user_id, password=hashed_password)
        self._mqtt_client.tls_set(ca_certs=self._ca_cert,
                                  certfile=None,
                                  keyfile=None,
                                  cert_reqs=ssl.CERT_REQUIRED,
                                  tls_version=ssl.PROTOCOL_TLS,
                                  ciphers=None)
예제 #5
0
파일: hubs.py 프로젝트: yraghu/MerossIot
 def __init__(self, cloud_client, device_uuid, **kwords):
     super(GenericHub, self).__init__(cloud_client, device_uuid, **kwords)
     self._subdev_lock = lock_factory.build_rlock()
     self._state = {}
     self._sub_devices = {}
예제 #6
0
 def __init__(self, initialValue):
     self._lock = lock_factory.build_rlock()
     self._val = initialValue