diff --git a/for_build/etc/thingsboard-gateway/extensions/serial/custom_serial_connector.py b/for_build/etc/thingsboard-gateway/extensions/serial/custom_serial_connector.py index 2dd081a12..ae6d9cb6c 100644 --- a/for_build/etc/thingsboard-gateway/extensions/serial/custom_serial_connector.py +++ b/for_build/etc/thingsboard-gateway/extensions/serial/custom_serial_connector.py @@ -135,7 +135,7 @@ def run(self): # Main loop of thread try: if len(data_from_device) > 0: converted_data = self.__devices[device]['converter'].convert(self.__devices[device]['device_config'], data_from_device) - self.__gateway.send_to_storage(self.get_name(), converted_data) + self.__gateway.send_to_storage(self.get_name(), self.get_id(), converted_data) time.sleep(.1) except Exception as e: log.exception(e) diff --git a/tests/sdk_tests.py b/tests/sdk_tests.py index 64411438f..3a284afbf 100644 --- a/tests/sdk_tests.py +++ b/tests/sdk_tests.py @@ -40,7 +40,7 @@ def tearDownClass(cls) -> None: @patch('tb_gateway_mqtt.TBGatewayMqttClient.gw_connect_device') def test_add_device(self, mock_func): self.gateway.add_device(self.DEVICE_NAME, - {'connector': self.gateway.available_connectors['MQTT Broker Connector']}, self.DEVICE_TYPE) + {'connector': self.gateway.available_connectors_by_name['MQTT Broker Connector']}, self.DEVICE_TYPE) mock_func.assert_called_with(self.DEVICE_NAME, self.DEVICE_TYPE) @patch('tb_gateway_mqtt.TBGatewayMqttClient.gw_disconnect_device') @@ -53,7 +53,7 @@ def test_send_attributes(self, mock_func): data = {self.DEVICE_NAME: {'attributes': {"atr1": 1, "atr2": True, "atr3": "value3"}}} self.gateway.add_device(self.DEVICE_NAME, - {'connector': self.gateway.available_connectors['MQTT Broker Connector']}, self.DEVICE_TYPE) + {'connector': self.gateway.available_connectors_by_name['MQTT Broker Connector']}, self.DEVICE_TYPE) self.gateway._TBGatewayService__send_data(data) mock_func.assert_called_with(self.DEVICE_NAME, {"atr1": 1, "atr2": True, "atr3": "value3"}) @@ -63,7 +63,7 @@ def test_send_telemetry(self, mock_func): data = {self.DEVICE_NAME: {'telemetry': {"key1": "11"}}} self.gateway.add_device(self.DEVICE_NAME, - {'connector': self.gateway.available_connectors['MQTT Broker Connector']}, self.DEVICE_TYPE) + {'connector': self.gateway.available_connectors_by_name['MQTT Broker Connector']}, self.DEVICE_TYPE) self.gateway._TBGatewayService__send_data(data) mock_func.assert_called_with(self.DEVICE_NAME, {"key1": "11"}) diff --git a/thingsboard_gateway/connectors/bacnet/bacnet_connector.py b/thingsboard_gateway/connectors/bacnet/bacnet_connector.py index b65d885e5..6a359561a 100644 --- a/thingsboard_gateway/connectors/bacnet/bacnet_connector.py +++ b/thingsboard_gateway/connectors/bacnet/bacnet_connector.py @@ -43,6 +43,7 @@ def __init__(self, gateway, config, connector_type): 'MessagesSent': 0} super().__init__() self.__config = config + self.__id = self.__config.get('id') self.setName(config.get('name', 'BACnet ' + ''.join(choice(ascii_lowercase) for _ in range(5)))) self.__devices = [] self.__device_indexes = {} @@ -128,6 +129,9 @@ def close(self): def get_name(self): return self.name + def get_id(self): + return self.__id + def get_type(self): return self._connector_type @@ -244,7 +248,7 @@ def __convert_and_save_data(self, queue): iocb.ioResponse if iocb.ioResponse else iocb.ioError) except Exception as e: self._log.exception(e) - self.__gateway.send_to_storage(self.name, converted_data) + self.__gateway.send_to_storage(self.get_name(), self.__id, converted_data) def __bacnet_device_mapping_response_cb(self, iocb, callback_params): mapping_type = callback_params["mapping_type"] @@ -261,7 +265,7 @@ def __bacnet_device_mapping_response_cb(self, iocb, callback_params): iocb.ioResponse if iocb.ioResponse else iocb.ioError) except Exception as e: self._log.exception(e) - self.__gateway.send_to_storage(self.name, converted_data) + self.__gateway.send_to_storage(self.get_name(), self.get_id(), converted_data) def __load_converters(self, device): datatypes = ["attributes", "telemetry", "attribute_updates", "server_side_rpc"] diff --git a/thingsboard_gateway/connectors/ble/ble_connector.py b/thingsboard_gateway/connectors/ble/ble_connector.py index 1ce8f51c2..c2488fb46 100644 --- a/thingsboard_gateway/connectors/ble/ble_connector.py +++ b/thingsboard_gateway/connectors/ble/ble_connector.py @@ -43,6 +43,7 @@ def __init__(self, gateway, config, connector_type): self._connector_type = connector_type self.__gateway = gateway self.__config = config + self.__id = self.__config.get('id') self.setName(self.__config.get("name", 'BLE Connector ' + ''.join(choice(ascii_lowercase) for _ in range(5)))) self.__log = init_logger(self.__gateway, self.name, self.__config.get('logLevel', 'INFO')) @@ -102,6 +103,9 @@ def close(self): def get_name(self): return self.name + def get_id(self): + return self.__id + def get_type(self): return self._connector_type @@ -126,7 +130,7 @@ def __process_data(self): self.__log.debug(converted_data) if converted_data is not None: - self.__gateway.send_to_storage(self.get_name(), converted_data) + self.__gateway.send_to_storage(self.get_name(), self.get_id(), converted_data) self.statistics['MessagesSent'] = self.statistics['MessagesSent'] + 1 self.__log.info('Data to ThingsBoard %s', converted_data) except Exception as e: diff --git a/thingsboard_gateway/connectors/can/can_connector.py b/thingsboard_gateway/connectors/can/can_connector.py index cbf6951f7..5750bfd19 100644 --- a/thingsboard_gateway/connectors/can/can_connector.py +++ b/thingsboard_gateway/connectors/can/can_connector.py @@ -72,6 +72,7 @@ def __init__(self, gateway, config, connector_type): self.__gateway = gateway self._connector_type = connector_type self.__config = config + self.__id = self.__config.get('id') self._log = init_logger(self.__gateway, self.name, self.__config.get('logLevel', 'INFO')) self.__bus_conf = {} self.__bus = None @@ -104,6 +105,9 @@ def close(self): def get_name(self): return self.name + def get_id(self): + return self.__id + def get_type(self): return self._connector_type @@ -351,7 +355,7 @@ def __check_and_send(self, conf, new_data): self._log.debug("[%s] Pushing to TB server '%s' device data: %s", self.get_name(), conf["deviceName"], to_send) - self.__gateway.send_to_storage(self.get_name(), to_send) + self.__gateway.send_to_storage(self.get_name(), self.get_id(), to_send) self.statistics['MessagesSent'] += 1 else: self._log.debug("[%s] '%s' device data has not been changed", self.get_name(), conf["deviceName"]) diff --git a/thingsboard_gateway/connectors/connector.py b/thingsboard_gateway/connectors/connector.py index 65288b239..c4de20c6c 100644 --- a/thingsboard_gateway/connectors/connector.py +++ b/thingsboard_gateway/connectors/connector.py @@ -27,6 +27,10 @@ def open(self): def close(self): pass + @abstractmethod + def get_id(self): + pass + @abstractmethod def get_name(self): pass diff --git a/thingsboard_gateway/connectors/ftp/ftp_connector.py b/thingsboard_gateway/connectors/ftp/ftp_connector.py index 43774167b..5e3c5ba01 100644 --- a/thingsboard_gateway/connectors/ftp/ftp_connector.py +++ b/thingsboard_gateway/connectors/ftp/ftp_connector.py @@ -39,6 +39,7 @@ def __init__(self, gateway, config, connector_type): self.statistics = {'MessagesReceived': 0, 'MessagesSent': 0} self.__config = config + self.__id = self.__config.get('id') self._connector_type = connector_type self.__gateway = gateway self.security = {**self.__config['security']} if self.__config['security']['type'] == 'basic' else { @@ -180,7 +181,7 @@ def __process_paths(self, ftp): def __send_data(self, converted_data): if converted_data: - self.__gateway.send_to_storage(self.getName(), converted_data) + self.__gateway.send_to_storage(self.getName(), self.get_id(), converted_data) self.statistics['MessagesSent'] = self.statistics['MessagesSent'] + 1 self.__log.debug("Data to ThingsBoard: %s", converted_data) @@ -192,6 +193,9 @@ def close(self): def get_name(self): return self.name + def get_id(self): + return self.__id + def get_type(self): return self._connector_type diff --git a/thingsboard_gateway/connectors/modbus/modbus_connector.py b/thingsboard_gateway/connectors/modbus/modbus_connector.py index 3f5a9a945..f61f3bd13 100644 --- a/thingsboard_gateway/connectors/modbus/modbus_connector.py +++ b/thingsboard_gateway/connectors/modbus/modbus_connector.py @@ -119,6 +119,7 @@ def __init__(self, gateway, config, connector_type): self.__backward_compatibility_adapter = BackwardCompatibilityAdapter(config, gateway.get_config_path(), logger=self.__log) self.__config = self.__backward_compatibility_adapter.convert() + self.__id = self.__config.get('id') self.setName(self.__config.get("name", 'Modbus Connector ' + ''.join(choice(ascii_lowercase) for _ in range(5)))) self.__connected = False @@ -316,7 +317,7 @@ def __convert_data(self, params): return to_send def _save_data(self, data): - self.__gateway.send_to_storage(self.get_name(), data) + self.__gateway.send_to_storage(self.get_name(), self.get_id(), data) self.statistics[STATISTIC_MESSAGE_SENT_PARAMETER] += 1 def close(self): @@ -344,6 +345,9 @@ def close(self): def get_name(self): return self.name + def get_id(self): + return self.__id + def __process_slaves(self): while not self.__stopped: if not self.__stopped and not ModbusConnector.process_requests.empty(): diff --git a/thingsboard_gateway/connectors/mqtt/mqtt_connector.py b/thingsboard_gateway/connectors/mqtt/mqtt_connector.py index 7cf86b0d5..89bd2ea1f 100644 --- a/thingsboard_gateway/connectors/mqtt/mqtt_connector.py +++ b/thingsboard_gateway/connectors/mqtt/mqtt_connector.py @@ -109,6 +109,7 @@ def __init__(self, gateway, config, connector_type): self.__gateway = gateway # Reference to TB Gateway self._connector_type = connector_type # Should be "mqtt" self.config = config # mqtt.json contents + self.__id = self.config.get('id') self.__log = init_logger(self.__gateway, self.config['name'], self.config.get('logLevel', 'INFO')) self.statistics = {'MessagesReceived': 0, 'MessagesSent': 0} @@ -328,6 +329,9 @@ def close(self): def get_name(self): return self.name + def get_id(self): + return self.__id + def __subscribe(self, topic, qos): message = self._client.subscribe(topic, qos) try: @@ -485,7 +489,7 @@ def put_data_to_convert(self, converter, message, content) -> bool: return False def _save_converted_msg(self, topic, data): - if self.__gateway.send_to_storage(self.name, data) == Status.SUCCESS: + if self.__gateway.send_to_storage(self.name, self.get_id(), data) == Status.SUCCESS: self.statistics['MessagesSent'] += 1 self.__log.debug("Successfully converted message from topic %s", topic) diff --git a/thingsboard_gateway/connectors/ocpp/ocpp_connector.py b/thingsboard_gateway/connectors/ocpp/ocpp_connector.py index c9fdcd2ce..f0867d7a0 100644 --- a/thingsboard_gateway/connectors/ocpp/ocpp_connector.py +++ b/thingsboard_gateway/connectors/ocpp/ocpp_connector.py @@ -58,6 +58,7 @@ class OcppConnector(Connector, Thread): def __init__(self, gateway, config, connector_type): super().__init__() self._config = config + self.__id = self._config.get('id') self._central_system_config = config['centralSystem'] self._charge_points_config = config.get('chargePoints', []) self._connector_type = connector_type @@ -220,6 +221,9 @@ def close(self): self._log.info('%s has been stopped.', self.get_name()) self._log.reset() + def get_id(self): + return self.__id + def get_name(self): return self.name @@ -249,7 +253,7 @@ def _send_data(self): while not self.__stopped: if not self.DATA_TO_SEND.empty(): converted_data = self.DATA_TO_SEND.get() - self._gateway.send_to_storage(self.name, converted_data) + self._gateway.send_to_storage(self.name, self.get_id(), converted_data) self.statistics['MessagesSent'] += 1 self._log.info("Data to ThingsBoard: %s", converted_data) diff --git a/thingsboard_gateway/connectors/odbc/odbc_connector.py b/thingsboard_gateway/connectors/odbc/odbc_connector.py index d922f5ad2..7ef116298 100644 --- a/thingsboard_gateway/connectors/odbc/odbc_connector.py +++ b/thingsboard_gateway/connectors/odbc/odbc_connector.py @@ -59,6 +59,7 @@ def __init__(self, gateway, config, connector_type): 'MessagesSent': 0} self.__gateway = gateway self.__config = config + self.__id = self.__config.get('id') self._log = init_logger(self.__gateway, self.name, self.__config.get('logLevel', 'INFO')) self._connector_type = connector_type self.__stopped = False @@ -94,6 +95,9 @@ def close(self): self._log.debug("[%s] Stopping", self.get_name()) self._log.reset() + def get_id(self): + return self.__id + def get_name(self): return self.name @@ -316,7 +320,7 @@ def __check_and_send(self, device_name, device_type, new_data): self._log.debug("[%s] Pushing to TB server '%s' device data: %s", self.get_name(), device_name, to_send) to_send['telemetry'] = [to_send['telemetry']] - self.__gateway.send_to_storage(self.get_name(), to_send) + self.__gateway.send_to_storage(self.get_name(), self.get_id(), to_send) self.statistics['MessagesSent'] += 1 else: self._log.debug("[%s] '%s' device data has not been changed", self.get_name(), device_name) diff --git a/thingsboard_gateway/connectors/opcua/opcua_connector.py b/thingsboard_gateway/connectors/opcua/opcua_connector.py index 97770a0a6..356394706 100644 --- a/thingsboard_gateway/connectors/opcua/opcua_connector.py +++ b/thingsboard_gateway/connectors/opcua/opcua_connector.py @@ -54,6 +54,7 @@ def __init__(self, gateway, config, connector_type): super().__init__() self.__gateway = gateway self._config = config + self.__id = self._config.get('id') self.__server_conf = config.get("server") self.setName( self._config.get("name", 'OPC-UA ' + ''.join(choice(ascii_lowercase) for _ in range(5)) + " Connector")) @@ -173,7 +174,7 @@ def run(self): # NOTE: possible performance improvement: use a map to store only one event per # variable to reduce frequency of messages to platform. while self.data_to_send: - self.__gateway.send_to_storage(self.get_name(), self.data_to_send.pop()) + self.__gateway.send_to_storage(self.get_name(), self.get_id(), self.data_to_send.pop()) if self.__stopped: self.close() break @@ -242,6 +243,9 @@ def close(self): self._log.info('%s has been stopped.', self.get_name()) self._log.reset() + def get_id(self): + return self.__id + def get_name(self): return self.name diff --git a/thingsboard_gateway/connectors/opcua_asyncio/opcua_connector.py b/thingsboard_gateway/connectors/opcua_asyncio/opcua_connector.py index a00ab7547..34a375577 100644 --- a/thingsboard_gateway/connectors/opcua_asyncio/opcua_connector.py +++ b/thingsboard_gateway/connectors/opcua_asyncio/opcua_connector.py @@ -55,6 +55,7 @@ def __init__(self, gateway, config, connector_type): self._connector_type = connector_type self.__gateway = gateway self.__config = config + self.__id = self.__config.get('id') self.__server_conf = config['server'] self.setName( self.__config.get("name", 'OPC-UA Connector ' + ''.join(choice(ascii_lowercase) for _ in range(5)))) @@ -124,6 +125,9 @@ async def __reset_nodes(self, device_name=None): pass self.__subscription = None + def get_id(self): + return self.__id + def get_name(self): return self.name @@ -401,7 +405,7 @@ def __send_data(self): data = self.__data_to_send.get() self.statistics['MessagesReceived'] = self.statistics['MessagesReceived'] + 1 self.__log.debug(data) - self.__gateway.send_to_storage(self.get_name(), data) + self.__gateway.send_to_storage(self.get_name(), self.get_id(), data) self.statistics['MessagesSent'] = self.statistics['MessagesSent'] + 1 self.__log.debug('Data to ThingsBoard %s', data) else: diff --git a/thingsboard_gateway/connectors/request/request_connector.py b/thingsboard_gateway/connectors/request/request_connector.py index 71cf04003..77797e666 100644 --- a/thingsboard_gateway/connectors/request/request_connector.py +++ b/thingsboard_gateway/connectors/request/request_connector.py @@ -49,6 +49,7 @@ def __init__(self, gateway, config, connector_type): 'MessagesSent': 0} self.__rpc_requests = [] self.__config = config + self.__id = self.__config.get('id') self._connector_type = connector_type self.__gateway = gateway self.setName(self.__config.get("name", "".join(choice(ascii_lowercase) for _ in range(5)))) @@ -293,12 +294,15 @@ def __process_data(self): try: if not self.__convert_queue.empty(): data = self.__convert_queue.get() - self.__gateway.send_to_storage(self.get_name(), data) + self.__gateway.send_to_storage(self.get_name(), self.get_id(), data) self.statistics["MessagesSent"] = self.statistics["MessagesSent"] + 1 except Exception as e: self._log.exception(e) + def get_id(self): + return self.__id + def get_name(self): return self.name diff --git a/thingsboard_gateway/connectors/rest/rest_connector.py b/thingsboard_gateway/connectors/rest/rest_connector.py index 1ef101146..53e87299d 100644 --- a/thingsboard_gateway/connectors/rest/rest_connector.py +++ b/thingsboard_gateway/connectors/rest/rest_connector.py @@ -62,6 +62,7 @@ def __init__(self, gateway, config, connector_type): 'STATISTICS_MESSAGE_SEND': self.statistic_message_send } self.__config = config + self.__id = self.__config.get('id') self._connector_type = connector_type self.statistics = {'MessagesReceived': 0, 'MessagesSent': 0} @@ -123,8 +124,8 @@ def load_handlers(self): mapping['security']['password']) for http_method in mapping['HTTPMethods']: handler = data_handlers[security_type](self.collect_statistic_and_send, self.get_name(), - self.endpoints[mapping["endpoint"]], self.__log, - provider=self.__event_provider) + self.get_id(), self.endpoints[mapping["endpoint"]], + self.__log, provider=self.__event_provider) handlers.append(web.route(http_method, mapping['endpoint'], handler)) except Exception as e: self.__log.error("Error on creating handlers - %s", str(e)) @@ -189,6 +190,9 @@ def close(self): self.__log.info('REST connector stopped.') self.__log.reset() + def get_id(self): + return self.__id + def get_name(self): return self.name @@ -274,8 +278,7 @@ def server_side_rpc_handler(self, content): self.__log.debug('Response from RPC request: %s', response) self.__gateway.send_rpc_reply(device=device, req_id=content["data"].get('id'), - content=response[2] if response and len( - response) >= 3 else response) + content=response[2] if response and len(response) >= 3 else response) else: for rpc_request in self.__rpc_requests: if fullmatch(rpc_request["deviceNameFilter"], content["device"]) and \ @@ -309,9 +312,9 @@ def statistic_message_received(self): def statistic_message_send(self): self.statistics["MessagesSent"] = self.statistics["MessagesSent"] + 1 - def collect_statistic_and_send(self, connector_name, data): + def collect_statistic_and_send(self, connector_name, connector_id, data): self.statistics["MessagesReceived"] = self.statistics["MessagesReceived"] + 1 - self.__gateway.send_to_storage(connector_name, data) + self.__gateway.send_to_storage(connector_name, connector_id, data) self.statistics["MessagesSent"] = self.statistics["MessagesSent"] + 1 def __fill_requests_from_TB(self): @@ -321,21 +324,21 @@ def __fill_requests_from_TB(self): } for request_section in requests_from_tb: for request_config_object in self.__config.get(request_section, []): - uplink_converter = TBModuleLoader.import_module(self._connector_type, - request_config_object.get("extension", - self._default_converters[ - "uplink"]))( - request_config_object, self.__log) - downlink_converter = TBModuleLoader.import_module(self._connector_type, - request_config_object.get("extension", - self._default_converters[ - "downlink"]))( - request_config_object, self.__log) + + uplink_imported_class = TBModuleLoader.import_module(self._connector_type, request_config_object.get("extension", self._default_converters["uplink"])) + uplink_converter = uplink_imported_class(request_config_object, self.__log) + + downlink_imported_class = TBModuleLoader.import_module(self._connector_type, request_config_object.get("extension", self._default_converters["downlink"])) + downlink_converter = downlink_imported_class(request_config_object, self.__log) + request_dict = {**request_config_object, "uplink_converter": uplink_converter, "downlink_converter": downlink_converter, } requests_from_tb[request_section].append(request_dict) + self.__log.debug("Requests from TB: %s", requests_from_tb) + self.__rpc_requests = requests_from_tb["serverSideRpc"] + self.__attribute_updates = requests_from_tb["attributeUpdates"] def __send_request(self, request_dict, converter_queue, logger, with_queue=True): url = "" @@ -372,8 +375,21 @@ def __send_request(self, request_dict, converter_queue, logger, with_queue=True) params["headers"] = request_dict["config"]["httpHeaders"] logger.debug("Request to %s will be sent", url) - response = request_dict["request"](**params) - data_to_storage = [url, request_dict["config"]["uplink_converter"]] + response = None + data_to_storage = [] + try: + response = request_dict["request"](**params) + + except Timeout: + logger.error("Timeout error on request %s.", url) + data_to_storage.append({"error": "Timeout", "code": 408}) + except RequestException as e: + logger.error("Cannot connect to %s. Request exception.", url) + data_to_storage.append({"error": str(e)}) + logger.debug(e) + except ConnectionError: + logger.error("Cannot connect to %s. Connection error.", url) + data_to_storage.append({"error": f"Cannot connect to target url: {url}"}) if response and response.ok: try: @@ -387,12 +403,13 @@ def __send_request(self, request_dict, converter_queue, logger, with_queue=True) converter_queue.put(data_to_storage) self.statistics["MessagesReceived"] = self.statistics["MessagesReceived"] + 1 else: - logger.error("Request to URL: %s finished with code: %i. Cat information: http://http.cat/%i", - url, - response.status_code, - response.status_code) - logger.debug("Response: %r", response.text) - data_to_storage.append({"error": response.reason, "code": response.status_code}) + if response is not None: + logger.error("Request to URL: %s finished with code: %i. Cat information: http://http.cat/%i", + url, + response.status_code, + response.status_code) + logger.debug("Response: %r", response.text) + data_to_storage.append({"error": response.reason, "code": response.status_code}) if with_queue: converter_queue.put(data_to_storage) @@ -401,14 +418,6 @@ def __send_request(self, request_dict, converter_queue, logger, with_queue=True) if not with_queue: return data_to_storage - - except Timeout: - logger.error("Timeout error on request %s.", url) - except RequestException as e: - logger.error("Cannot connect to %s. Connection error.", url) - logger.debug(e) - except ConnectionError: - logger.error("Cannot connect to %s. Connection error.", url) except Exception as e: logger.exception(e) @@ -417,9 +426,10 @@ class BaseDataHandler: responses_queue = Queue() response_attribute_request = Queue() - def __init__(self, send_to_storage, name, endpoint, logger, provider=None): + def __init__(self, send_to_storage, name, id, endpoint, logger, provider=None): self.log = logger self.send_to_storage = send_to_storage + self.connector_id = id self.__name = name self.__endpoint = endpoint self.__provider = provider @@ -551,7 +561,7 @@ async def __call__(self, request: web.Request): self.modify_data_for_remote_response(converted_data, self.response_expected) - self.send_to_storage(self.name, converted_data) + self.send_to_storage(self.name, self.connector_id, converted_data) self.log.info("CONVERTED_DATA: %r", converted_data) return self.get_response() @@ -600,7 +610,7 @@ async def __call__(self, request: web.Request): self.modify_data_for_remote_response(converted_data, self.response_expected) - self.send_to_storage(self.name, converted_data) + self.send_to_storage(self.name, self.connector_id, converted_data) self.log.info("CONVERTED_DATA: %r", converted_data) return self.get_response() diff --git a/thingsboard_gateway/connectors/snmp/snmp_connector.py b/thingsboard_gateway/connectors/snmp/snmp_connector.py index ba5f29568..1e1e2b970 100644 --- a/thingsboard_gateway/connectors/snmp/snmp_connector.py +++ b/thingsboard_gateway/connectors/snmp/snmp_connector.py @@ -53,6 +53,7 @@ def __init__(self, gateway, config, connector_type): self.__stopped = False self._connector_type = connector_type self.__config = config + self.__id = self.__config.get('id') self.setName(config.get("name", 'SNMP Connector ' + ''.join(choice(ascii_lowercase) for _ in range(5)))) self._log = init_logger(self.__gateway, self.name, self.__config.get('logLevel', 'INFO')) self.__devices = self.__config["devices"] @@ -99,6 +100,9 @@ def close(self): self.__stopped = True self._connected = False + def get_id(self): + return self.__id + def get_name(self): return self.name @@ -114,9 +118,9 @@ def is_stopped(self): def get_config(self): return self.__config - def collect_statistic_and_send(self, connector_name, data): + def collect_statistic_and_send(self, connector_name, connector_id, data): self.statistics["MessagesReceived"] = self.statistics["MessagesReceived"] + 1 - self.__gateway.send_to_storage(connector_name, data) + self.__gateway.send_to_storage(connector_name, connector_id, data) self.statistics["MessagesSent"] = self.statistics["MessagesSent"] + 1 async def __process_data(self, device): @@ -144,7 +148,7 @@ async def __process_data(self, device): self._log.exception(e) if isinstance(converted_data, dict) and (converted_data.get("attributes") or converted_data.get("telemetry")): - self.collect_statistic_and_send(self.get_name(), converted_data) + self.collect_statistic_and_send(self.get_name(), self.get_id(), converted_data) async def __process_methods(self, method, common_parameters, datatype_config): client = Client(ip=common_parameters['ip'], diff --git a/thingsboard_gateway/connectors/socket/socket_connector.py b/thingsboard_gateway/connectors/socket/socket_connector.py index 3ec3e1205..2bee5026f 100644 --- a/thingsboard_gateway/connectors/socket/socket_connector.py +++ b/thingsboard_gateway/connectors/socket/socket_connector.py @@ -39,6 +39,7 @@ class SocketConnector(Connector, Thread): def __init__(self, gateway, config, connector_type): super().__init__() self.__config = config + self.__id = self.__config.get('id') self._connector_type = connector_type self.statistics = {'MessagesReceived': 0, 'MessagesSent': 0} @@ -250,7 +251,7 @@ def __convert_data(self, device, data, converter): self.statistics['MessagesReceived'] = self.statistics['MessagesReceived'] + 1 if converted_data is not None: - self.__gateway.send_to_storage(self.get_name(), converted_data) + self.__gateway.send_to_storage(self.get_name(), self.get_id(), converted_data) self.statistics['MessagesSent'] = self.statistics['MessagesSent'] + 1 self.__log.info('Data to ThingsBoard %s', converted_data) except Exception as e: diff --git a/thingsboard_gateway/connectors/xmpp/xmpp_connector.py b/thingsboard_gateway/connectors/xmpp/xmpp_connector.py index 293778937..d2ffa2286 100644 --- a/thingsboard_gateway/connectors/xmpp/xmpp_connector.py +++ b/thingsboard_gateway/connectors/xmpp/xmpp_connector.py @@ -53,6 +53,7 @@ def __init__(self, gateway, config, connector_type): self.__gateway = gateway self.__config = config + self.__id = self.__config.get('id') self._server_config = config['server'] self._devices_config = config.get('devices', []) self.setName(config.get("name", 'XMPP Connector ' + ''.join(choice(ascii_lowercase) for _ in range(5)))) @@ -191,7 +192,7 @@ def _send_data(self): if not XMPPConnector.DATA_TO_SEND.empty(): data = XMPPConnector.DATA_TO_SEND.get() self.statistics['MessagesReceived'] = self.statistics['MessagesReceived'] + 1 - self.__gateway.send_to_storage(self.get_name(), data) + self.__gateway.send_to_storage(self.get_name(), self.get_id(), data) self.statistics['MessagesSent'] = self.statistics['MessagesSent'] + 1 self.__log.info('Data to ThingsBoard %s', data) @@ -203,6 +204,9 @@ def close(self): self.__log.info('%s has been stopped.', self.get_name()) self.__log.reset() + def get_id(self): + return self.__id + def get_name(self): return self.name diff --git a/thingsboard_gateway/gateway/constants.py b/thingsboard_gateway/gateway/constants.py index 3364e211f..45c279e04 100644 --- a/thingsboard_gateway/gateway/constants.py +++ b/thingsboard_gateway/gateway/constants.py @@ -30,6 +30,10 @@ CONNECTED_DEVICES_FILENAME = "connected_devices.json" PERSISTENT_GRPC_CONNECTORS_KEY_FILENAME = "persistent_keys.json" +RENAMING_PARAMETER = "renaming" +CONNECTOR_ID_PARAMETER = "connectorId" +CONNECTOR_NAME_PARAMETER = "connectorName" + # Data parameter constants DEVICE_SECTION_PARAMETER = "device" diff --git a/thingsboard_gateway/gateway/grpc_service/grpc_connector.py b/thingsboard_gateway/gateway/grpc_service/grpc_connector.py index 516b6942f..fb42bcff2 100644 --- a/thingsboard_gateway/gateway/grpc_service/grpc_connector.py +++ b/thingsboard_gateway/gateway/grpc_service/grpc_connector.py @@ -22,6 +22,7 @@ class GrpcConnector(Connector): def __init__(self, gateway, config, tb_grpc_server_manager: TBGRPCServerManager, session_id): self.name = None + self.__id = config.get("id") self.__server_manager = tb_grpc_server_manager self.__session_id = session_id self.__downlink_converter = GrpcDownlinkConverter() @@ -37,6 +38,9 @@ def close(self): message_to_connector = self.__downlink_converter.convert(converter_config, "") self.__server_manager.write(self.name, message_to_connector, self.__session_id) + def get_id(self): + return self.__id + def get_name(self): return self.name diff --git a/thingsboard_gateway/gateway/grpc_service/tb_grpc_manager.py b/thingsboard_gateway/gateway/grpc_service/tb_grpc_manager.py index b3d412641..a856dde5b 100644 --- a/thingsboard_gateway/gateway/grpc_service/tb_grpc_manager.py +++ b/thingsboard_gateway/gateway/grpc_service/tb_grpc_manager.py @@ -80,26 +80,26 @@ def incoming_messages_cb(self, session_id, msg: FromConnectorMessage): if msg.response.ByteSize() == 0: outgoing_message = True if msg.HasField("connectorGetConnectedDevicesMsg"): - connector_name = list(self.__connectors_sessions.keys())[ + connector_id = list(self.__connectors_sessions.keys())[ list(self.__connectors_sessions.values()).index(session_id)] - connected_devices = self.__get_connector_devices(connector_name) + connected_devices = self.__get_connector_devices(connector_id) downlink_converter_config = { "message_type": [DownlinkMessageType.ConnectorGetConnectedDevicesResponseMsg], "additional_message": connected_devices} outgoing_message = self.__downlink_converter.convert(downlink_converter_config, None) if msg.HasField("gatewayTelemetryMsg"): data = self.__convert_with_uplink_converter(msg.gatewayTelemetryMsg) - result_status = self.__gateway.send_to_storage(self.sessions[session_id]['name'], data) + result_status = self.__gateway.send_to_storage(self.sessions[session_id]['name'], self.sessions[session_id]['id'], data) outgoing_message = True self.__increase_incoming_statistic(session_id) if msg.HasField("gatewayAttributesMsg"): data = self.__convert_with_uplink_converter(msg.gatewayAttributesMsg) - result_status = self.__gateway.send_to_storage(self.sessions[session_id]['name'], data) + result_status = self.__gateway.send_to_storage(self.sessions[session_id]['name'], self.sessions[session_id]['id'], data) outgoing_message = True self.__increase_incoming_statistic(session_id) if msg.HasField("gatewayClaimMsg"): data = self.__convert_with_uplink_converter(msg.gatewayClaimMsg) - result_status = self.__gateway.send_to_storage(self.sessions[session_id]['name'], data) + result_status = self.__gateway.send_to_storage(self.sessions[session_id]['name'], self.sessions[session_id]['id'], data) outgoing_message = self.__downlink_converter.convert(downlink_converter_config, result_status) self.__increase_incoming_statistic(session_id) if msg.HasField("connectMsg"): @@ -152,28 +152,30 @@ def incoming_messages_cb(self, session_id, msg: FromConnectorMessage): except ValueError as e: log.error("Received unknown GRPC message!", e) - def write(self, connector_name, msg: FromServiceMessage, session_id=None): + def write(self, connector_name, connector_id, msg: FromServiceMessage, session_id=None): log.debug("[GRPC] outgoing message: %s", msg) if session_id is None: - session_id = self.__connectors_sessions.get(connector_name) + session_id = self.__connectors_sessions.get(connector_id) if session_id is not None: self.__grpc_server.write(session_id, msg) self.__increase_outgoing_statistic(session_id) else: - log.warning("Cannot write to connector with name %s, session is not found. Client is not registered!", - connector_name) + log.warning("[%r] Cannot write to connector with name %s, session is not found. Client is not registered!", + connector_id, connector_name) def registration_finished(self, registration_result: Status, session_id, connector_configuration): additional_message = FromConnectorMessage() additional_message.registerConnectorMsg.MergeFrom(RegisterConnectorMsg()) if registration_result == Status.SUCCESS: connector_name = connector_configuration['name'] + connector_id = connector_configuration['id'] self.sessions[session_id] = {"config": connector_configuration, "name": connector_name, - "statistics": DEFAULT_STATISTICS_DICT} - self.__connectors_sessions[connector_name] = session_id + "id": connector_id, "statistics": DEFAULT_STATISTICS_DICT} + self.__connectors_sessions[connector_id] = session_id msg = self.__grpc_server.get_response("SUCCESS", additional_message) configuration_msg = ConnectorConfigurationMsg() configuration_msg.connectorName = connector_name + configuration_msg.connectorId = connector_id configuration_msg.configuration = dumps(connector_configuration['config']) msg.connectorConfigurationMsg.MergeFrom(configuration_msg) self.__grpc_server.write(session_id, msg) @@ -190,7 +192,8 @@ def unregister(self, unregistration_result: Status, session_id, connector): additional_message.unregisterConnectorMsg.MergeFrom(UnregisterConnectorMsg()) if unregistration_result == Status.SUCCESS: connector_name = connector.get_name() - connector_session_id = self.__connectors_sessions.pop(connector_name) + connector_id = connector.get_id() + connector_session_id = self.__connectors_sessions.pop(connector_id) del self.sessions[connector_session_id] msg = self.__grpc_server.get_response("SUCCESS", additional_message) self.__grpc_server.write(session_id, msg) @@ -247,8 +250,8 @@ def stop(self): loop = asyncio.get_event_loop() loop.create_task(self.__aio_server.stop(True)) - def __get_connector_devices(self, connector_name: str): - return self.__gateway.get_devices(connector_name) + def __get_connector_devices(self, connector_id: str): + return self.__gateway.get_devices(connector_id) def set_gateway_read_callbacks(self, registration_cb, unregistration_cb): self.__register_connector = registration_cb diff --git a/thingsboard_gateway/gateway/proto/messages.proto b/thingsboard_gateway/gateway/proto/messages.proto index d5cda5e9a..430e7e45e 100644 --- a/thingsboard_gateway/gateway/proto/messages.proto +++ b/thingsboard_gateway/gateway/proto/messages.proto @@ -67,6 +67,7 @@ message UnregisterConnectorMsg { message ConnectorConfigurationMsg { string connectorName = 1; string configuration = 2; + string connectorId = 3; } message ConnectorGetConnectedDevicesMsg { diff --git a/thingsboard_gateway/gateway/proto/messages_pb2.py b/thingsboard_gateway/gateway/proto/messages_pb2.py index b51b6d3a5..cc88fcdf1 100644 --- a/thingsboard_gateway/gateway/proto/messages_pb2.py +++ b/thingsboard_gateway/gateway/proto/messages_pb2.py @@ -1,2009 +1,100 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: messages.proto +# Protobuf Python Version: 4.25.0 """Generated protocol buffer code.""" -from google.protobuf.internal import enum_type_wrapper -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor as _descriptor, descriptor_pool as _descriptor_pool, \ + symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder + # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() - - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='messages.proto', - package='messages', - syntax='proto3', - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x0emessages.proto\x12\x08messages\"\xa4\x01\n\x08Response\x12(\n\x06status\x18\x01 \x01(\x0e\x32\x18.messages.ResponseStatus\x12\x34\n\x0eserviceMessage\x18\x02 \x01(\x0b\x32\x1c.messages.FromServiceMessage\x12\x38\n\x10\x63onnectorMessage\x18\x03 \x01(\x0b\x32\x1e.messages.FromConnectorMessage\"\xa3\x05\n\x14\x46romConnectorMessage\x12$\n\x08response\x18\x01 \x01(\x0b\x32\x12.messages.Response\x12:\n\x13gatewayTelemetryMsg\x18\x02 \x01(\x0b\x32\x1d.messages.GatewayTelemetryMsg\x12<\n\x14gatewayAttributesMsg\x18\x03 \x01(\x0b\x32\x1e.messages.GatewayAttributesMsg\x12\x32\n\x0fgatewayClaimMsg\x18\x04 \x01(\x0b\x32\x19.messages.GatewayClaimMsg\x12<\n\x14registerConnectorMsg\x18\x05 \x01(\x0b\x32\x1e.messages.RegisterConnectorMsg\x12@\n\x16unregisterConnectorMsg\x18\x06 \x01(\x0b\x32 .messages.UnregisterConnectorMsg\x12(\n\nconnectMsg\x18\x07 \x01(\x0b\x32\x14.messages.ConnectMsg\x12.\n\rdisconnectMsg\x18\x08 \x01(\x0b\x32\x17.messages.DisconnectMsg\x12>\n\x15gatewayRpcResponseMsg\x18\t \x01(\x0b\x32\x1f.messages.GatewayRpcResponseMsg\x12I\n\x1agatewayAttributeRequestMsg\x18\n \x01(\x0b\x32%.messages.GatewayAttributesRequestMsg\x12R\n\x1f\x63onnectorGetConnectedDevicesMsg\x18\x0b \x01(\x0b\x32).messages.ConnectorGetConnectedDevicesMsg\"\x9e\x04\n\x12\x46romServiceMessage\x12$\n\x08response\x18\x01 \x01(\x0b\x32\x12.messages.Response\x12\x46\n\x19\x63onnectorConfigurationMsg\x18\x02 \x01(\x0b\x32#.messages.ConnectorConfigurationMsg\x12^\n%gatewayAttributeUpdateNotificationMsg\x18\x03 \x01(\x0b\x32/.messages.GatewayAttributeUpdateNotificationMsg\x12J\n\x1bgatewayAttributeResponseMsg\x18\x04 \x01(\x0b\x32%.messages.GatewayAttributeResponseMsg\x12H\n\x1agatewayDeviceRpcRequestMsg\x18\x05 \x01(\x0b\x32$.messages.GatewayDeviceRpcRequestMsg\x12@\n\x16unregisterConnectorMsg\x18\x06 \x01(\x0b\x32 .messages.UnregisterConnectorMsg\x12\x62\n\'connectorGetConnectedDevicesResponseMsg\x18\x07 \x01(\x0b\x32\x31.messages.ConnectorGetConnectedDevicesResponseMsg\",\n\x14RegisterConnectorMsg\x12\x14\n\x0c\x63onnectorKey\x18\x01 \x01(\t\".\n\x16UnregisterConnectorMsg\x12\x14\n\x0c\x63onnectorKey\x18\x01 \x01(\t\"I\n\x19\x43onnectorConfigurationMsg\x12\x15\n\rconnectorName\x18\x01 \x01(\t\x12\x15\n\rconfiguration\x18\x02 \x01(\t\"7\n\x1f\x43onnectorGetConnectedDevicesMsg\x12\x14\n\x0c\x63onnectorKey\x18\x01 \x01(\t\"b\n\'ConnectorGetConnectedDevicesResponseMsg\x12\x37\n\x10\x63onnectorDevices\x18\x01 \x03(\x0b\x32\x1d.messages.ConnectorDeviceInfo\"=\n\x13\x43onnectorDeviceInfo\x12\x12\n\ndeviceName\x18\x01 \x01(\t\x12\x12\n\ndeviceType\x18\x02 \x01(\t\"\x96\x01\n\rKeyValueProto\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x04type\x18\x02 \x01(\x0e\x32\x16.messages.KeyValueType\x12\x0e\n\x06\x62ool_v\x18\x03 \x01(\x08\x12\x0e\n\x06long_v\x18\x04 \x01(\x03\x12\x10\n\x08\x64ouble_v\x18\x05 \x01(\x01\x12\x10\n\x08string_v\x18\x06 \x01(\t\x12\x0e\n\x06json_v\x18\x07 \x01(\t\"<\n\tTsKvProto\x12\n\n\x02ts\x18\x01 \x01(\x03\x12#\n\x02kv\x18\x02 \x01(\x0b\x32\x17.messages.KeyValueProto\"@\n\rTsKvListProto\x12\n\n\x02ts\x18\x01 \x01(\x03\x12#\n\x02kv\x18\x02 \x03(\x0b\x32\x17.messages.KeyValueProto\"=\n\x10PostTelemetryMsg\x12)\n\x08tsKvList\x18\x01 \x03(\x0b\x32\x17.messages.TsKvListProto\"7\n\x10PostAttributeMsg\x12#\n\x02kv\x18\x01 \x03(\x0b\x32\x17.messages.KeyValueProto\"c\n\x1e\x41ttributeUpdateNotificationMsg\x12*\n\rsharedUpdated\x18\x01 \x03(\x0b\x32\x13.messages.TsKvProto\x12\x15\n\rsharedDeleted\x18\x02 \x03(\t\"N\n\x15ToDeviceRpcRequestMsg\x12\x11\n\trequestId\x18\x01 \x01(\x05\x12\x12\n\nmethodName\x18\x02 \x01(\t\x12\x0e\n\x06params\x18\x03 \x01(\t\"K\n\x16ToDeviceRpcResponseMsg\x12\x11\n\trequestId\x18\x01 \x01(\x05\x12\x0f\n\x07payload\x18\x02 \x01(\t\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"N\n\x15ToServerRpcRequestMsg\x12\x11\n\trequestId\x18\x01 \x01(\x05\x12\x12\n\nmethodName\x18\x02 \x01(\t\x12\x0e\n\x06params\x18\x03 \x01(\t\"K\n\x16ToServerRpcResponseMsg\x12\x11\n\trequestId\x18\x01 \x01(\x05\x12\x0f\n\x07payload\x18\x02 \x01(\t\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"4\n\x0b\x43laimDevice\x12\x11\n\tsecretKey\x18\x01 \x01(\t\x12\x12\n\ndurationMs\x18\x02 \x01(\x03\";\n\x11\x41ttributesRequest\x12\x12\n\nclientKeys\x18\x01 \x01(\t\x12\x12\n\nsharedKeys\x18\x02 \x01(\t\",\n\nRpcRequest\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0e\n\x06params\x18\x02 \x01(\t\"#\n\rDisconnectMsg\x12\x12\n\ndeviceName\x18\x01 \x01(\t\"4\n\nConnectMsg\x12\x12\n\ndeviceName\x18\x01 \x01(\t\x12\x12\n\ndeviceType\x18\x02 \x01(\t\"K\n\x0cTelemetryMsg\x12\x12\n\ndeviceName\x18\x01 \x01(\t\x12\'\n\x03msg\x18\x03 \x01(\x0b\x32\x1a.messages.PostTelemetryMsg\"L\n\rAttributesMsg\x12\x12\n\ndeviceName\x18\x01 \x01(\t\x12\'\n\x03msg\x18\x02 \x01(\x0b\x32\x1a.messages.PostAttributeMsg\"Q\n\x0e\x43laimDeviceMsg\x12\x12\n\ndeviceName\x18\x01 \x01(\t\x12+\n\x0c\x63laimRequest\x18\x02 \x01(\x0b\x32\x15.messages.ClaimDevice\":\n\x13GatewayTelemetryMsg\x12#\n\x03msg\x18\x01 \x03(\x0b\x32\x16.messages.TelemetryMsg\"8\n\x0fGatewayClaimMsg\x12%\n\x03msg\x18\x01 \x03(\x0b\x32\x18.messages.ClaimDeviceMsg\"<\n\x14GatewayAttributesMsg\x12$\n\x03msg\x18\x01 \x03(\x0b\x32\x17.messages.AttributesMsg\"E\n\x15GatewayRpcResponseMsg\x12\x12\n\ndeviceName\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\x05\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\t\"n\n\x1bGatewayAttributeResponseMsg\x12\x12\n\ndeviceName\x18\x01 \x01(\t\x12;\n\x0bresponseMsg\x18\x02 \x01(\x0b\x32&.messages.GatewayAttributesResponseMsg\"~\n%GatewayAttributeUpdateNotificationMsg\x12\x12\n\ndeviceName\x18\x01 \x01(\t\x12\x41\n\x0fnotificationMsg\x18\x02 \x01(\x0b\x32(.messages.AttributeUpdateNotificationMsg\"h\n\x1aGatewayDeviceRpcRequestMsg\x12\x12\n\ndeviceName\x18\x01 \x01(\t\x12\x36\n\rrpcRequestMsg\x18\x02 \x01(\x0b\x32\x1f.messages.ToDeviceRpcRequestMsg\"[\n\x1bGatewayAttributesRequestMsg\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x12\n\ndeviceName\x18\x02 \x01(\t\x12\x0e\n\x06\x63lient\x18\x03 \x01(\x08\x12\x0c\n\x04keys\x18\x04 \x03(\t\"\xac\x01\n\x1cGatewayAttributesResponseMsg\x12\x11\n\trequestId\x18\x01 \x01(\x05\x12\x34\n\x13\x63lientAttributeList\x18\x02 \x03(\x0b\x32\x17.messages.KeyValueProto\x12\x34\n\x13sharedAttributeList\x18\x03 \x03(\x0b\x32\x17.messages.KeyValueProto\x12\r\n\x05\x65rror\x18\x05 \x01(\t*F\n\x0eResponseStatus\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0b\n\x07SUCCESS\x10\x01\x12\r\n\tNOT_FOUND\x10\x02\x12\x0b\n\x07\x46\x41ILURE\x10\x03*Q\n\x0cKeyValueType\x12\r\n\tBOOLEAN_V\x10\x00\x12\n\n\x06LONG_V\x10\x01\x12\x0c\n\x08\x44OUBLE_V\x10\x02\x12\x0c\n\x08STRING_V\x10\x03\x12\n\n\x06JSON_V\x10\x04\x32_\n\x15TBGatewayProtoService\x12\x46\n\x06stream\x12\x1e.messages.FromConnectorMessage\x1a\x1c.messages.FromServiceMessageb\x06proto3' -) - -_RESPONSESTATUS = _descriptor.EnumDescriptor( - name='ResponseStatus', - full_name='messages.ResponseStatus', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='UNKNOWN', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='SUCCESS', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='NOT_FOUND', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='FAILURE', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=3978, - serialized_end=4048, -) -_sym_db.RegisterEnumDescriptor(_RESPONSESTATUS) - -ResponseStatus = enum_type_wrapper.EnumTypeWrapper(_RESPONSESTATUS) -_KEYVALUETYPE = _descriptor.EnumDescriptor( - name='KeyValueType', - full_name='messages.KeyValueType', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='BOOLEAN_V', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='LONG_V', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='DOUBLE_V', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='STRING_V', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='JSON_V', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=4050, - serialized_end=4131, -) -_sym_db.RegisterEnumDescriptor(_KEYVALUETYPE) - -KeyValueType = enum_type_wrapper.EnumTypeWrapper(_KEYVALUETYPE) -UNKNOWN = 0 -SUCCESS = 1 -NOT_FOUND = 2 -FAILURE = 3 -BOOLEAN_V = 0 -LONG_V = 1 -DOUBLE_V = 2 -STRING_V = 3 -JSON_V = 4 - - - -_RESPONSE = _descriptor.Descriptor( - name='Response', - full_name='messages.Response', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='messages.Response.status', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='serviceMessage', full_name='messages.Response.serviceMessage', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='connectorMessage', full_name='messages.Response.connectorMessage', index=2, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=29, - serialized_end=193, -) - - -_FROMCONNECTORMESSAGE = _descriptor.Descriptor( - name='FromConnectorMessage', - full_name='messages.FromConnectorMessage', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='response', full_name='messages.FromConnectorMessage.response', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='gatewayTelemetryMsg', full_name='messages.FromConnectorMessage.gatewayTelemetryMsg', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='gatewayAttributesMsg', full_name='messages.FromConnectorMessage.gatewayAttributesMsg', index=2, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='gatewayClaimMsg', full_name='messages.FromConnectorMessage.gatewayClaimMsg', index=3, - number=4, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='registerConnectorMsg', full_name='messages.FromConnectorMessage.registerConnectorMsg', index=4, - number=5, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='unregisterConnectorMsg', full_name='messages.FromConnectorMessage.unregisterConnectorMsg', index=5, - number=6, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='connectMsg', full_name='messages.FromConnectorMessage.connectMsg', index=6, - number=7, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='disconnectMsg', full_name='messages.FromConnectorMessage.disconnectMsg', index=7, - number=8, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='gatewayRpcResponseMsg', full_name='messages.FromConnectorMessage.gatewayRpcResponseMsg', index=8, - number=9, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='gatewayAttributeRequestMsg', full_name='messages.FromConnectorMessage.gatewayAttributeRequestMsg', index=9, - number=10, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='connectorGetConnectedDevicesMsg', full_name='messages.FromConnectorMessage.connectorGetConnectedDevicesMsg', index=10, - number=11, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=196, - serialized_end=871, -) - - -_FROMSERVICEMESSAGE = _descriptor.Descriptor( - name='FromServiceMessage', - full_name='messages.FromServiceMessage', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='response', full_name='messages.FromServiceMessage.response', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='connectorConfigurationMsg', full_name='messages.FromServiceMessage.connectorConfigurationMsg', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='gatewayAttributeUpdateNotificationMsg', full_name='messages.FromServiceMessage.gatewayAttributeUpdateNotificationMsg', index=2, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='gatewayAttributeResponseMsg', full_name='messages.FromServiceMessage.gatewayAttributeResponseMsg', index=3, - number=4, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='gatewayDeviceRpcRequestMsg', full_name='messages.FromServiceMessage.gatewayDeviceRpcRequestMsg', index=4, - number=5, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='unregisterConnectorMsg', full_name='messages.FromServiceMessage.unregisterConnectorMsg', index=5, - number=6, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='connectorGetConnectedDevicesResponseMsg', full_name='messages.FromServiceMessage.connectorGetConnectedDevicesResponseMsg', index=6, - number=7, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=874, - serialized_end=1416, -) - - -_REGISTERCONNECTORMSG = _descriptor.Descriptor( - name='RegisterConnectorMsg', - full_name='messages.RegisterConnectorMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='connectorKey', full_name='messages.RegisterConnectorMsg.connectorKey', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1418, - serialized_end=1462, -) - - -_UNREGISTERCONNECTORMSG = _descriptor.Descriptor( - name='UnregisterConnectorMsg', - full_name='messages.UnregisterConnectorMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='connectorKey', full_name='messages.UnregisterConnectorMsg.connectorKey', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1464, - serialized_end=1510, -) - - -_CONNECTORCONFIGURATIONMSG = _descriptor.Descriptor( - name='ConnectorConfigurationMsg', - full_name='messages.ConnectorConfigurationMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='connectorName', full_name='messages.ConnectorConfigurationMsg.connectorName', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='configuration', full_name='messages.ConnectorConfigurationMsg.configuration', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1512, - serialized_end=1585, -) - - -_CONNECTORGETCONNECTEDDEVICESMSG = _descriptor.Descriptor( - name='ConnectorGetConnectedDevicesMsg', - full_name='messages.ConnectorGetConnectedDevicesMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='connectorKey', full_name='messages.ConnectorGetConnectedDevicesMsg.connectorKey', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1587, - serialized_end=1642, -) - - -_CONNECTORGETCONNECTEDDEVICESRESPONSEMSG = _descriptor.Descriptor( - name='ConnectorGetConnectedDevicesResponseMsg', - full_name='messages.ConnectorGetConnectedDevicesResponseMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='connectorDevices', full_name='messages.ConnectorGetConnectedDevicesResponseMsg.connectorDevices', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1644, - serialized_end=1742, -) - - -_CONNECTORDEVICEINFO = _descriptor.Descriptor( - name='ConnectorDeviceInfo', - full_name='messages.ConnectorDeviceInfo', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='deviceName', full_name='messages.ConnectorDeviceInfo.deviceName', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='deviceType', full_name='messages.ConnectorDeviceInfo.deviceType', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1744, - serialized_end=1805, -) - - -_KEYVALUEPROTO = _descriptor.Descriptor( - name='KeyValueProto', - full_name='messages.KeyValueProto', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='messages.KeyValueProto.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='type', full_name='messages.KeyValueProto.type', index=1, - number=2, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='bool_v', full_name='messages.KeyValueProto.bool_v', index=2, - number=3, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='long_v', full_name='messages.KeyValueProto.long_v', index=3, - number=4, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='double_v', full_name='messages.KeyValueProto.double_v', index=4, - number=5, type=1, cpp_type=5, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='string_v', full_name='messages.KeyValueProto.string_v', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='json_v', full_name='messages.KeyValueProto.json_v', index=6, - number=7, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1808, - serialized_end=1958, -) - - -_TSKVPROTO = _descriptor.Descriptor( - name='TsKvProto', - full_name='messages.TsKvProto', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='ts', full_name='messages.TsKvProto.ts', index=0, - number=1, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='kv', full_name='messages.TsKvProto.kv', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1960, - serialized_end=2020, -) - - -_TSKVLISTPROTO = _descriptor.Descriptor( - name='TsKvListProto', - full_name='messages.TsKvListProto', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='ts', full_name='messages.TsKvListProto.ts', index=0, - number=1, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='kv', full_name='messages.TsKvListProto.kv', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2022, - serialized_end=2086, -) - - -_POSTTELEMETRYMSG = _descriptor.Descriptor( - name='PostTelemetryMsg', - full_name='messages.PostTelemetryMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='tsKvList', full_name='messages.PostTelemetryMsg.tsKvList', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2088, - serialized_end=2149, -) - - -_POSTATTRIBUTEMSG = _descriptor.Descriptor( - name='PostAttributeMsg', - full_name='messages.PostAttributeMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='kv', full_name='messages.PostAttributeMsg.kv', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2151, - serialized_end=2206, -) - - -_ATTRIBUTEUPDATENOTIFICATIONMSG = _descriptor.Descriptor( - name='AttributeUpdateNotificationMsg', - full_name='messages.AttributeUpdateNotificationMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sharedUpdated', full_name='messages.AttributeUpdateNotificationMsg.sharedUpdated', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='sharedDeleted', full_name='messages.AttributeUpdateNotificationMsg.sharedDeleted', index=1, - number=2, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2208, - serialized_end=2307, -) - - -_TODEVICERPCREQUESTMSG = _descriptor.Descriptor( - name='ToDeviceRpcRequestMsg', - full_name='messages.ToDeviceRpcRequestMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='requestId', full_name='messages.ToDeviceRpcRequestMsg.requestId', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='methodName', full_name='messages.ToDeviceRpcRequestMsg.methodName', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='params', full_name='messages.ToDeviceRpcRequestMsg.params', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2309, - serialized_end=2387, -) - - -_TODEVICERPCRESPONSEMSG = _descriptor.Descriptor( - name='ToDeviceRpcResponseMsg', - full_name='messages.ToDeviceRpcResponseMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='requestId', full_name='messages.ToDeviceRpcResponseMsg.requestId', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='payload', full_name='messages.ToDeviceRpcResponseMsg.payload', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='error', full_name='messages.ToDeviceRpcResponseMsg.error', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2389, - serialized_end=2464, -) - - -_TOSERVERRPCREQUESTMSG = _descriptor.Descriptor( - name='ToServerRpcRequestMsg', - full_name='messages.ToServerRpcRequestMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='requestId', full_name='messages.ToServerRpcRequestMsg.requestId', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='methodName', full_name='messages.ToServerRpcRequestMsg.methodName', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='params', full_name='messages.ToServerRpcRequestMsg.params', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2466, - serialized_end=2544, -) - - -_TOSERVERRPCRESPONSEMSG = _descriptor.Descriptor( - name='ToServerRpcResponseMsg', - full_name='messages.ToServerRpcResponseMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='requestId', full_name='messages.ToServerRpcResponseMsg.requestId', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='payload', full_name='messages.ToServerRpcResponseMsg.payload', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='error', full_name='messages.ToServerRpcResponseMsg.error', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2546, - serialized_end=2621, -) - - -_CLAIMDEVICE = _descriptor.Descriptor( - name='ClaimDevice', - full_name='messages.ClaimDevice', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='secretKey', full_name='messages.ClaimDevice.secretKey', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='durationMs', full_name='messages.ClaimDevice.durationMs', index=1, - number=2, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2623, - serialized_end=2675, -) - - -_ATTRIBUTESREQUEST = _descriptor.Descriptor( - name='AttributesRequest', - full_name='messages.AttributesRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='clientKeys', full_name='messages.AttributesRequest.clientKeys', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='sharedKeys', full_name='messages.AttributesRequest.sharedKeys', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2677, - serialized_end=2736, -) - - -_RPCREQUEST = _descriptor.Descriptor( - name='RpcRequest', - full_name='messages.RpcRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='method', full_name='messages.RpcRequest.method', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='params', full_name='messages.RpcRequest.params', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2738, - serialized_end=2782, -) - - -_DISCONNECTMSG = _descriptor.Descriptor( - name='DisconnectMsg', - full_name='messages.DisconnectMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='deviceName', full_name='messages.DisconnectMsg.deviceName', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2784, - serialized_end=2819, -) - - -_CONNECTMSG = _descriptor.Descriptor( - name='ConnectMsg', - full_name='messages.ConnectMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='deviceName', full_name='messages.ConnectMsg.deviceName', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='deviceType', full_name='messages.ConnectMsg.deviceType', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2821, - serialized_end=2873, -) - - -_TELEMETRYMSG = _descriptor.Descriptor( - name='TelemetryMsg', - full_name='messages.TelemetryMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='deviceName', full_name='messages.TelemetryMsg.deviceName', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='msg', full_name='messages.TelemetryMsg.msg', index=1, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2875, - serialized_end=2950, -) - - -_ATTRIBUTESMSG = _descriptor.Descriptor( - name='AttributesMsg', - full_name='messages.AttributesMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='deviceName', full_name='messages.AttributesMsg.deviceName', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='msg', full_name='messages.AttributesMsg.msg', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2952, - serialized_end=3028, -) - - -_CLAIMDEVICEMSG = _descriptor.Descriptor( - name='ClaimDeviceMsg', - full_name='messages.ClaimDeviceMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='deviceName', full_name='messages.ClaimDeviceMsg.deviceName', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='claimRequest', full_name='messages.ClaimDeviceMsg.claimRequest', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3030, - serialized_end=3111, -) - - -_GATEWAYTELEMETRYMSG = _descriptor.Descriptor( - name='GatewayTelemetryMsg', - full_name='messages.GatewayTelemetryMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='msg', full_name='messages.GatewayTelemetryMsg.msg', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3113, - serialized_end=3171, -) - - -_GATEWAYCLAIMMSG = _descriptor.Descriptor( - name='GatewayClaimMsg', - full_name='messages.GatewayClaimMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='msg', full_name='messages.GatewayClaimMsg.msg', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3173, - serialized_end=3229, -) - - -_GATEWAYATTRIBUTESMSG = _descriptor.Descriptor( - name='GatewayAttributesMsg', - full_name='messages.GatewayAttributesMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='msg', full_name='messages.GatewayAttributesMsg.msg', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3231, - serialized_end=3291, -) - - -_GATEWAYRPCRESPONSEMSG = _descriptor.Descriptor( - name='GatewayRpcResponseMsg', - full_name='messages.GatewayRpcResponseMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='deviceName', full_name='messages.GatewayRpcResponseMsg.deviceName', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='id', full_name='messages.GatewayRpcResponseMsg.id', index=1, - number=2, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='messages.GatewayRpcResponseMsg.data', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3293, - serialized_end=3362, -) - - -_GATEWAYATTRIBUTERESPONSEMSG = _descriptor.Descriptor( - name='GatewayAttributeResponseMsg', - full_name='messages.GatewayAttributeResponseMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='deviceName', full_name='messages.GatewayAttributeResponseMsg.deviceName', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='responseMsg', full_name='messages.GatewayAttributeResponseMsg.responseMsg', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3364, - serialized_end=3474, -) - - -_GATEWAYATTRIBUTEUPDATENOTIFICATIONMSG = _descriptor.Descriptor( - name='GatewayAttributeUpdateNotificationMsg', - full_name='messages.GatewayAttributeUpdateNotificationMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='deviceName', full_name='messages.GatewayAttributeUpdateNotificationMsg.deviceName', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='notificationMsg', full_name='messages.GatewayAttributeUpdateNotificationMsg.notificationMsg', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3476, - serialized_end=3602, -) - - -_GATEWAYDEVICERPCREQUESTMSG = _descriptor.Descriptor( - name='GatewayDeviceRpcRequestMsg', - full_name='messages.GatewayDeviceRpcRequestMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='deviceName', full_name='messages.GatewayDeviceRpcRequestMsg.deviceName', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='rpcRequestMsg', full_name='messages.GatewayDeviceRpcRequestMsg.rpcRequestMsg', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3604, - serialized_end=3708, -) - - -_GATEWAYATTRIBUTESREQUESTMSG = _descriptor.Descriptor( - name='GatewayAttributesRequestMsg', - full_name='messages.GatewayAttributesRequestMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='id', full_name='messages.GatewayAttributesRequestMsg.id', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='deviceName', full_name='messages.GatewayAttributesRequestMsg.deviceName', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='client', full_name='messages.GatewayAttributesRequestMsg.client', index=2, - number=3, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='keys', full_name='messages.GatewayAttributesRequestMsg.keys', index=3, - number=4, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3710, - serialized_end=3801, -) - - -_GATEWAYATTRIBUTESRESPONSEMSG = _descriptor.Descriptor( - name='GatewayAttributesResponseMsg', - full_name='messages.GatewayAttributesResponseMsg', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='requestId', full_name='messages.GatewayAttributesResponseMsg.requestId', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='clientAttributeList', full_name='messages.GatewayAttributesResponseMsg.clientAttributeList', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='sharedAttributeList', full_name='messages.GatewayAttributesResponseMsg.sharedAttributeList', index=2, - number=3, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='error', full_name='messages.GatewayAttributesResponseMsg.error', index=3, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3804, - serialized_end=3976, -) - -_RESPONSE.fields_by_name['status'].enum_type = _RESPONSESTATUS -_RESPONSE.fields_by_name['serviceMessage'].message_type = _FROMSERVICEMESSAGE -_RESPONSE.fields_by_name['connectorMessage'].message_type = _FROMCONNECTORMESSAGE -_FROMCONNECTORMESSAGE.fields_by_name['response'].message_type = _RESPONSE -_FROMCONNECTORMESSAGE.fields_by_name['gatewayTelemetryMsg'].message_type = _GATEWAYTELEMETRYMSG -_FROMCONNECTORMESSAGE.fields_by_name['gatewayAttributesMsg'].message_type = _GATEWAYATTRIBUTESMSG -_FROMCONNECTORMESSAGE.fields_by_name['gatewayClaimMsg'].message_type = _GATEWAYCLAIMMSG -_FROMCONNECTORMESSAGE.fields_by_name['registerConnectorMsg'].message_type = _REGISTERCONNECTORMSG -_FROMCONNECTORMESSAGE.fields_by_name['unregisterConnectorMsg'].message_type = _UNREGISTERCONNECTORMSG -_FROMCONNECTORMESSAGE.fields_by_name['connectMsg'].message_type = _CONNECTMSG -_FROMCONNECTORMESSAGE.fields_by_name['disconnectMsg'].message_type = _DISCONNECTMSG -_FROMCONNECTORMESSAGE.fields_by_name['gatewayRpcResponseMsg'].message_type = _GATEWAYRPCRESPONSEMSG -_FROMCONNECTORMESSAGE.fields_by_name['gatewayAttributeRequestMsg'].message_type = _GATEWAYATTRIBUTESREQUESTMSG -_FROMCONNECTORMESSAGE.fields_by_name['connectorGetConnectedDevicesMsg'].message_type = _CONNECTORGETCONNECTEDDEVICESMSG -_FROMSERVICEMESSAGE.fields_by_name['response'].message_type = _RESPONSE -_FROMSERVICEMESSAGE.fields_by_name['connectorConfigurationMsg'].message_type = _CONNECTORCONFIGURATIONMSG -_FROMSERVICEMESSAGE.fields_by_name['gatewayAttributeUpdateNotificationMsg'].message_type = _GATEWAYATTRIBUTEUPDATENOTIFICATIONMSG -_FROMSERVICEMESSAGE.fields_by_name['gatewayAttributeResponseMsg'].message_type = _GATEWAYATTRIBUTERESPONSEMSG -_FROMSERVICEMESSAGE.fields_by_name['gatewayDeviceRpcRequestMsg'].message_type = _GATEWAYDEVICERPCREQUESTMSG -_FROMSERVICEMESSAGE.fields_by_name['unregisterConnectorMsg'].message_type = _UNREGISTERCONNECTORMSG -_FROMSERVICEMESSAGE.fields_by_name['connectorGetConnectedDevicesResponseMsg'].message_type = _CONNECTORGETCONNECTEDDEVICESRESPONSEMSG -_CONNECTORGETCONNECTEDDEVICESRESPONSEMSG.fields_by_name['connectorDevices'].message_type = _CONNECTORDEVICEINFO -_KEYVALUEPROTO.fields_by_name['type'].enum_type = _KEYVALUETYPE -_TSKVPROTO.fields_by_name['kv'].message_type = _KEYVALUEPROTO -_TSKVLISTPROTO.fields_by_name['kv'].message_type = _KEYVALUEPROTO -_POSTTELEMETRYMSG.fields_by_name['tsKvList'].message_type = _TSKVLISTPROTO -_POSTATTRIBUTEMSG.fields_by_name['kv'].message_type = _KEYVALUEPROTO -_ATTRIBUTEUPDATENOTIFICATIONMSG.fields_by_name['sharedUpdated'].message_type = _TSKVPROTO -_TELEMETRYMSG.fields_by_name['msg'].message_type = _POSTTELEMETRYMSG -_ATTRIBUTESMSG.fields_by_name['msg'].message_type = _POSTATTRIBUTEMSG -_CLAIMDEVICEMSG.fields_by_name['claimRequest'].message_type = _CLAIMDEVICE -_GATEWAYTELEMETRYMSG.fields_by_name['msg'].message_type = _TELEMETRYMSG -_GATEWAYCLAIMMSG.fields_by_name['msg'].message_type = _CLAIMDEVICEMSG -_GATEWAYATTRIBUTESMSG.fields_by_name['msg'].message_type = _ATTRIBUTESMSG -_GATEWAYATTRIBUTERESPONSEMSG.fields_by_name['responseMsg'].message_type = _GATEWAYATTRIBUTESRESPONSEMSG -_GATEWAYATTRIBUTEUPDATENOTIFICATIONMSG.fields_by_name['notificationMsg'].message_type = _ATTRIBUTEUPDATENOTIFICATIONMSG -_GATEWAYDEVICERPCREQUESTMSG.fields_by_name['rpcRequestMsg'].message_type = _TODEVICERPCREQUESTMSG -_GATEWAYATTRIBUTESRESPONSEMSG.fields_by_name['clientAttributeList'].message_type = _KEYVALUEPROTO -_GATEWAYATTRIBUTESRESPONSEMSG.fields_by_name['sharedAttributeList'].message_type = _KEYVALUEPROTO -DESCRIPTOR.message_types_by_name['Response'] = _RESPONSE -DESCRIPTOR.message_types_by_name['FromConnectorMessage'] = _FROMCONNECTORMESSAGE -DESCRIPTOR.message_types_by_name['FromServiceMessage'] = _FROMSERVICEMESSAGE -DESCRIPTOR.message_types_by_name['RegisterConnectorMsg'] = _REGISTERCONNECTORMSG -DESCRIPTOR.message_types_by_name['UnregisterConnectorMsg'] = _UNREGISTERCONNECTORMSG -DESCRIPTOR.message_types_by_name['ConnectorConfigurationMsg'] = _CONNECTORCONFIGURATIONMSG -DESCRIPTOR.message_types_by_name['ConnectorGetConnectedDevicesMsg'] = _CONNECTORGETCONNECTEDDEVICESMSG -DESCRIPTOR.message_types_by_name['ConnectorGetConnectedDevicesResponseMsg'] = _CONNECTORGETCONNECTEDDEVICESRESPONSEMSG -DESCRIPTOR.message_types_by_name['ConnectorDeviceInfo'] = _CONNECTORDEVICEINFO -DESCRIPTOR.message_types_by_name['KeyValueProto'] = _KEYVALUEPROTO -DESCRIPTOR.message_types_by_name['TsKvProto'] = _TSKVPROTO -DESCRIPTOR.message_types_by_name['TsKvListProto'] = _TSKVLISTPROTO -DESCRIPTOR.message_types_by_name['PostTelemetryMsg'] = _POSTTELEMETRYMSG -DESCRIPTOR.message_types_by_name['PostAttributeMsg'] = _POSTATTRIBUTEMSG -DESCRIPTOR.message_types_by_name['AttributeUpdateNotificationMsg'] = _ATTRIBUTEUPDATENOTIFICATIONMSG -DESCRIPTOR.message_types_by_name['ToDeviceRpcRequestMsg'] = _TODEVICERPCREQUESTMSG -DESCRIPTOR.message_types_by_name['ToDeviceRpcResponseMsg'] = _TODEVICERPCRESPONSEMSG -DESCRIPTOR.message_types_by_name['ToServerRpcRequestMsg'] = _TOSERVERRPCREQUESTMSG -DESCRIPTOR.message_types_by_name['ToServerRpcResponseMsg'] = _TOSERVERRPCRESPONSEMSG -DESCRIPTOR.message_types_by_name['ClaimDevice'] = _CLAIMDEVICE -DESCRIPTOR.message_types_by_name['AttributesRequest'] = _ATTRIBUTESREQUEST -DESCRIPTOR.message_types_by_name['RpcRequest'] = _RPCREQUEST -DESCRIPTOR.message_types_by_name['DisconnectMsg'] = _DISCONNECTMSG -DESCRIPTOR.message_types_by_name['ConnectMsg'] = _CONNECTMSG -DESCRIPTOR.message_types_by_name['TelemetryMsg'] = _TELEMETRYMSG -DESCRIPTOR.message_types_by_name['AttributesMsg'] = _ATTRIBUTESMSG -DESCRIPTOR.message_types_by_name['ClaimDeviceMsg'] = _CLAIMDEVICEMSG -DESCRIPTOR.message_types_by_name['GatewayTelemetryMsg'] = _GATEWAYTELEMETRYMSG -DESCRIPTOR.message_types_by_name['GatewayClaimMsg'] = _GATEWAYCLAIMMSG -DESCRIPTOR.message_types_by_name['GatewayAttributesMsg'] = _GATEWAYATTRIBUTESMSG -DESCRIPTOR.message_types_by_name['GatewayRpcResponseMsg'] = _GATEWAYRPCRESPONSEMSG -DESCRIPTOR.message_types_by_name['GatewayAttributeResponseMsg'] = _GATEWAYATTRIBUTERESPONSEMSG -DESCRIPTOR.message_types_by_name['GatewayAttributeUpdateNotificationMsg'] = _GATEWAYATTRIBUTEUPDATENOTIFICATIONMSG -DESCRIPTOR.message_types_by_name['GatewayDeviceRpcRequestMsg'] = _GATEWAYDEVICERPCREQUESTMSG -DESCRIPTOR.message_types_by_name['GatewayAttributesRequestMsg'] = _GATEWAYATTRIBUTESREQUESTMSG -DESCRIPTOR.message_types_by_name['GatewayAttributesResponseMsg'] = _GATEWAYATTRIBUTESRESPONSEMSG -DESCRIPTOR.enum_types_by_name['ResponseStatus'] = _RESPONSESTATUS -DESCRIPTOR.enum_types_by_name['KeyValueType'] = _KEYVALUETYPE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -Response = _reflection.GeneratedProtocolMessageType('Response', (_message.Message,), { - 'DESCRIPTOR' : _RESPONSE, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.Response) - }) -_sym_db.RegisterMessage(Response) - -FromConnectorMessage = _reflection.GeneratedProtocolMessageType('FromConnectorMessage', (_message.Message,), { - 'DESCRIPTOR' : _FROMCONNECTORMESSAGE, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.FromConnectorMessage) - }) -_sym_db.RegisterMessage(FromConnectorMessage) - -FromServiceMessage = _reflection.GeneratedProtocolMessageType('FromServiceMessage', (_message.Message,), { - 'DESCRIPTOR' : _FROMSERVICEMESSAGE, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.FromServiceMessage) - }) -_sym_db.RegisterMessage(FromServiceMessage) - -RegisterConnectorMsg = _reflection.GeneratedProtocolMessageType('RegisterConnectorMsg', (_message.Message,), { - 'DESCRIPTOR' : _REGISTERCONNECTORMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.RegisterConnectorMsg) - }) -_sym_db.RegisterMessage(RegisterConnectorMsg) - -UnregisterConnectorMsg = _reflection.GeneratedProtocolMessageType('UnregisterConnectorMsg', (_message.Message,), { - 'DESCRIPTOR' : _UNREGISTERCONNECTORMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.UnregisterConnectorMsg) - }) -_sym_db.RegisterMessage(UnregisterConnectorMsg) - -ConnectorConfigurationMsg = _reflection.GeneratedProtocolMessageType('ConnectorConfigurationMsg', (_message.Message,), { - 'DESCRIPTOR' : _CONNECTORCONFIGURATIONMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.ConnectorConfigurationMsg) - }) -_sym_db.RegisterMessage(ConnectorConfigurationMsg) - -ConnectorGetConnectedDevicesMsg = _reflection.GeneratedProtocolMessageType('ConnectorGetConnectedDevicesMsg', (_message.Message,), { - 'DESCRIPTOR' : _CONNECTORGETCONNECTEDDEVICESMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.ConnectorGetConnectedDevicesMsg) - }) -_sym_db.RegisterMessage(ConnectorGetConnectedDevicesMsg) - -ConnectorGetConnectedDevicesResponseMsg = _reflection.GeneratedProtocolMessageType('ConnectorGetConnectedDevicesResponseMsg', (_message.Message,), { - 'DESCRIPTOR' : _CONNECTORGETCONNECTEDDEVICESRESPONSEMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.ConnectorGetConnectedDevicesResponseMsg) - }) -_sym_db.RegisterMessage(ConnectorGetConnectedDevicesResponseMsg) - -ConnectorDeviceInfo = _reflection.GeneratedProtocolMessageType('ConnectorDeviceInfo', (_message.Message,), { - 'DESCRIPTOR' : _CONNECTORDEVICEINFO, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.ConnectorDeviceInfo) - }) -_sym_db.RegisterMessage(ConnectorDeviceInfo) - -KeyValueProto = _reflection.GeneratedProtocolMessageType('KeyValueProto', (_message.Message,), { - 'DESCRIPTOR' : _KEYVALUEPROTO, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.KeyValueProto) - }) -_sym_db.RegisterMessage(KeyValueProto) - -TsKvProto = _reflection.GeneratedProtocolMessageType('TsKvProto', (_message.Message,), { - 'DESCRIPTOR' : _TSKVPROTO, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.TsKvProto) - }) -_sym_db.RegisterMessage(TsKvProto) - -TsKvListProto = _reflection.GeneratedProtocolMessageType('TsKvListProto', (_message.Message,), { - 'DESCRIPTOR' : _TSKVLISTPROTO, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.TsKvListProto) - }) -_sym_db.RegisterMessage(TsKvListProto) - -PostTelemetryMsg = _reflection.GeneratedProtocolMessageType('PostTelemetryMsg', (_message.Message,), { - 'DESCRIPTOR' : _POSTTELEMETRYMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.PostTelemetryMsg) - }) -_sym_db.RegisterMessage(PostTelemetryMsg) - -PostAttributeMsg = _reflection.GeneratedProtocolMessageType('PostAttributeMsg', (_message.Message,), { - 'DESCRIPTOR' : _POSTATTRIBUTEMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.PostAttributeMsg) - }) -_sym_db.RegisterMessage(PostAttributeMsg) - -AttributeUpdateNotificationMsg = _reflection.GeneratedProtocolMessageType('AttributeUpdateNotificationMsg', (_message.Message,), { - 'DESCRIPTOR' : _ATTRIBUTEUPDATENOTIFICATIONMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.AttributeUpdateNotificationMsg) - }) -_sym_db.RegisterMessage(AttributeUpdateNotificationMsg) - -ToDeviceRpcRequestMsg = _reflection.GeneratedProtocolMessageType('ToDeviceRpcRequestMsg', (_message.Message,), { - 'DESCRIPTOR' : _TODEVICERPCREQUESTMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.ToDeviceRpcRequestMsg) - }) -_sym_db.RegisterMessage(ToDeviceRpcRequestMsg) - -ToDeviceRpcResponseMsg = _reflection.GeneratedProtocolMessageType('ToDeviceRpcResponseMsg', (_message.Message,), { - 'DESCRIPTOR' : _TODEVICERPCRESPONSEMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.ToDeviceRpcResponseMsg) - }) -_sym_db.RegisterMessage(ToDeviceRpcResponseMsg) - -ToServerRpcRequestMsg = _reflection.GeneratedProtocolMessageType('ToServerRpcRequestMsg', (_message.Message,), { - 'DESCRIPTOR' : _TOSERVERRPCREQUESTMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.ToServerRpcRequestMsg) - }) -_sym_db.RegisterMessage(ToServerRpcRequestMsg) - -ToServerRpcResponseMsg = _reflection.GeneratedProtocolMessageType('ToServerRpcResponseMsg', (_message.Message,), { - 'DESCRIPTOR' : _TOSERVERRPCRESPONSEMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.ToServerRpcResponseMsg) - }) -_sym_db.RegisterMessage(ToServerRpcResponseMsg) - -ClaimDevice = _reflection.GeneratedProtocolMessageType('ClaimDevice', (_message.Message,), { - 'DESCRIPTOR' : _CLAIMDEVICE, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.ClaimDevice) - }) -_sym_db.RegisterMessage(ClaimDevice) - -AttributesRequest = _reflection.GeneratedProtocolMessageType('AttributesRequest', (_message.Message,), { - 'DESCRIPTOR' : _ATTRIBUTESREQUEST, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.AttributesRequest) - }) -_sym_db.RegisterMessage(AttributesRequest) - -RpcRequest = _reflection.GeneratedProtocolMessageType('RpcRequest', (_message.Message,), { - 'DESCRIPTOR' : _RPCREQUEST, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.RpcRequest) - }) -_sym_db.RegisterMessage(RpcRequest) - -DisconnectMsg = _reflection.GeneratedProtocolMessageType('DisconnectMsg', (_message.Message,), { - 'DESCRIPTOR' : _DISCONNECTMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.DisconnectMsg) - }) -_sym_db.RegisterMessage(DisconnectMsg) - -ConnectMsg = _reflection.GeneratedProtocolMessageType('ConnectMsg', (_message.Message,), { - 'DESCRIPTOR' : _CONNECTMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.ConnectMsg) - }) -_sym_db.RegisterMessage(ConnectMsg) - -TelemetryMsg = _reflection.GeneratedProtocolMessageType('TelemetryMsg', (_message.Message,), { - 'DESCRIPTOR' : _TELEMETRYMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.TelemetryMsg) - }) -_sym_db.RegisterMessage(TelemetryMsg) - -AttributesMsg = _reflection.GeneratedProtocolMessageType('AttributesMsg', (_message.Message,), { - 'DESCRIPTOR' : _ATTRIBUTESMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.AttributesMsg) - }) -_sym_db.RegisterMessage(AttributesMsg) - -ClaimDeviceMsg = _reflection.GeneratedProtocolMessageType('ClaimDeviceMsg', (_message.Message,), { - 'DESCRIPTOR' : _CLAIMDEVICEMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.ClaimDeviceMsg) - }) -_sym_db.RegisterMessage(ClaimDeviceMsg) - -GatewayTelemetryMsg = _reflection.GeneratedProtocolMessageType('GatewayTelemetryMsg', (_message.Message,), { - 'DESCRIPTOR' : _GATEWAYTELEMETRYMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.GatewayTelemetryMsg) - }) -_sym_db.RegisterMessage(GatewayTelemetryMsg) - -GatewayClaimMsg = _reflection.GeneratedProtocolMessageType('GatewayClaimMsg', (_message.Message,), { - 'DESCRIPTOR' : _GATEWAYCLAIMMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.GatewayClaimMsg) - }) -_sym_db.RegisterMessage(GatewayClaimMsg) - -GatewayAttributesMsg = _reflection.GeneratedProtocolMessageType('GatewayAttributesMsg', (_message.Message,), { - 'DESCRIPTOR' : _GATEWAYATTRIBUTESMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.GatewayAttributesMsg) - }) -_sym_db.RegisterMessage(GatewayAttributesMsg) - -GatewayRpcResponseMsg = _reflection.GeneratedProtocolMessageType('GatewayRpcResponseMsg', (_message.Message,), { - 'DESCRIPTOR' : _GATEWAYRPCRESPONSEMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.GatewayRpcResponseMsg) - }) -_sym_db.RegisterMessage(GatewayRpcResponseMsg) - -GatewayAttributeResponseMsg = _reflection.GeneratedProtocolMessageType('GatewayAttributeResponseMsg', (_message.Message,), { - 'DESCRIPTOR' : _GATEWAYATTRIBUTERESPONSEMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.GatewayAttributeResponseMsg) - }) -_sym_db.RegisterMessage(GatewayAttributeResponseMsg) - -GatewayAttributeUpdateNotificationMsg = _reflection.GeneratedProtocolMessageType('GatewayAttributeUpdateNotificationMsg', (_message.Message,), { - 'DESCRIPTOR' : _GATEWAYATTRIBUTEUPDATENOTIFICATIONMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.GatewayAttributeUpdateNotificationMsg) - }) -_sym_db.RegisterMessage(GatewayAttributeUpdateNotificationMsg) - -GatewayDeviceRpcRequestMsg = _reflection.GeneratedProtocolMessageType('GatewayDeviceRpcRequestMsg', (_message.Message,), { - 'DESCRIPTOR' : _GATEWAYDEVICERPCREQUESTMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.GatewayDeviceRpcRequestMsg) - }) -_sym_db.RegisterMessage(GatewayDeviceRpcRequestMsg) - -GatewayAttributesRequestMsg = _reflection.GeneratedProtocolMessageType('GatewayAttributesRequestMsg', (_message.Message,), { - 'DESCRIPTOR' : _GATEWAYATTRIBUTESREQUESTMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.GatewayAttributesRequestMsg) - }) -_sym_db.RegisterMessage(GatewayAttributesRequestMsg) - -GatewayAttributesResponseMsg = _reflection.GeneratedProtocolMessageType('GatewayAttributesResponseMsg', (_message.Message,), { - 'DESCRIPTOR' : _GATEWAYATTRIBUTESRESPONSEMSG, - '__module__' : 'messages_pb2' - # @@protoc_insertion_point(class_scope:messages.GatewayAttributesResponseMsg) - }) -_sym_db.RegisterMessage(GatewayAttributesResponseMsg) - - - -_TBGATEWAYPROTOSERVICE = _descriptor.ServiceDescriptor( - name='TBGatewayProtoService', - full_name='messages.TBGatewayProtoService', - file=DESCRIPTOR, - index=0, - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_start=4133, - serialized_end=4228, - methods=[ - _descriptor.MethodDescriptor( - name='stream', - full_name='messages.TBGatewayProtoService.stream', - index=0, - containing_service=None, - input_type=_FROMCONNECTORMESSAGE, - output_type=_FROMSERVICEMESSAGE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), -]) -_sym_db.RegisterServiceDescriptor(_TBGATEWAYPROTOSERVICE) - -DESCRIPTOR.services_by_name['TBGatewayProtoService'] = _TBGATEWAYPROTOSERVICE - +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( + b'\n\x0emessages.proto\x12\x08messages\"\xa4\x01\n\x08Response\x12(\n\x06status\x18\x01 \x01(\x0e\x32\x18.messages.ResponseStatus\x12\x34\n\x0eserviceMessage\x18\x02 \x01(\x0b\x32\x1c.messages.FromServiceMessage\x12\x38\n\x10\x63onnectorMessage\x18\x03 \x01(\x0b\x32\x1e.messages.FromConnectorMessage\"\xa3\x05\n\x14\x46romConnectorMessage\x12$\n\x08response\x18\x01 \x01(\x0b\x32\x12.messages.Response\x12:\n\x13gatewayTelemetryMsg\x18\x02 \x01(\x0b\x32\x1d.messages.GatewayTelemetryMsg\x12<\n\x14gatewayAttributesMsg\x18\x03 \x01(\x0b\x32\x1e.messages.GatewayAttributesMsg\x12\x32\n\x0fgatewayClaimMsg\x18\x04 \x01(\x0b\x32\x19.messages.GatewayClaimMsg\x12<\n\x14registerConnectorMsg\x18\x05 \x01(\x0b\x32\x1e.messages.RegisterConnectorMsg\x12@\n\x16unregisterConnectorMsg\x18\x06 \x01(\x0b\x32 .messages.UnregisterConnectorMsg\x12(\n\nconnectMsg\x18\x07 \x01(\x0b\x32\x14.messages.ConnectMsg\x12.\n\rdisconnectMsg\x18\x08 \x01(\x0b\x32\x17.messages.DisconnectMsg\x12>\n\x15gatewayRpcResponseMsg\x18\t \x01(\x0b\x32\x1f.messages.GatewayRpcResponseMsg\x12I\n\x1agatewayAttributeRequestMsg\x18\n \x01(\x0b\x32%.messages.GatewayAttributesRequestMsg\x12R\n\x1f\x63onnectorGetConnectedDevicesMsg\x18\x0b \x01(\x0b\x32).messages.ConnectorGetConnectedDevicesMsg\"\x9e\x04\n\x12\x46romServiceMessage\x12$\n\x08response\x18\x01 \x01(\x0b\x32\x12.messages.Response\x12\x46\n\x19\x63onnectorConfigurationMsg\x18\x02 \x01(\x0b\x32#.messages.ConnectorConfigurationMsg\x12^\n%gatewayAttributeUpdateNotificationMsg\x18\x03 \x01(\x0b\x32/.messages.GatewayAttributeUpdateNotificationMsg\x12J\n\x1bgatewayAttributeResponseMsg\x18\x04 \x01(\x0b\x32%.messages.GatewayAttributeResponseMsg\x12H\n\x1agatewayDeviceRpcRequestMsg\x18\x05 \x01(\x0b\x32$.messages.GatewayDeviceRpcRequestMsg\x12@\n\x16unregisterConnectorMsg\x18\x06 \x01(\x0b\x32 .messages.UnregisterConnectorMsg\x12\x62\n\'connectorGetConnectedDevicesResponseMsg\x18\x07 \x01(\x0b\x32\x31.messages.ConnectorGetConnectedDevicesResponseMsg\",\n\x14RegisterConnectorMsg\x12\x14\n\x0c\x63onnectorKey\x18\x01 \x01(\t\".\n\x16UnregisterConnectorMsg\x12\x14\n\x0c\x63onnectorKey\x18\x01 \x01(\t\"^\n\x19\x43onnectorConfigurationMsg\x12\x15\n\rconnectorName\x18\x01 \x01(\t\x12\x15\n\rconfiguration\x18\x02 \x01(\t\x12\x13\n\x0b\x63onnectorId\x18\x03 \x01(\t\"7\n\x1f\x43onnectorGetConnectedDevicesMsg\x12\x14\n\x0c\x63onnectorKey\x18\x01 \x01(\t\"b\n\'ConnectorGetConnectedDevicesResponseMsg\x12\x37\n\x10\x63onnectorDevices\x18\x01 \x03(\x0b\x32\x1d.messages.ConnectorDeviceInfo\"=\n\x13\x43onnectorDeviceInfo\x12\x12\n\ndeviceName\x18\x01 \x01(\t\x12\x12\n\ndeviceType\x18\x02 \x01(\t\"\x96\x01\n\rKeyValueProto\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x04type\x18\x02 \x01(\x0e\x32\x16.messages.KeyValueType\x12\x0e\n\x06\x62ool_v\x18\x03 \x01(\x08\x12\x0e\n\x06long_v\x18\x04 \x01(\x03\x12\x10\n\x08\x64ouble_v\x18\x05 \x01(\x01\x12\x10\n\x08string_v\x18\x06 \x01(\t\x12\x0e\n\x06json_v\x18\x07 \x01(\t\"<\n\tTsKvProto\x12\n\n\x02ts\x18\x01 \x01(\x03\x12#\n\x02kv\x18\x02 \x01(\x0b\x32\x17.messages.KeyValueProto\"@\n\rTsKvListProto\x12\n\n\x02ts\x18\x01 \x01(\x03\x12#\n\x02kv\x18\x02 \x03(\x0b\x32\x17.messages.KeyValueProto\"=\n\x10PostTelemetryMsg\x12)\n\x08tsKvList\x18\x01 \x03(\x0b\x32\x17.messages.TsKvListProto\"7\n\x10PostAttributeMsg\x12#\n\x02kv\x18\x01 \x03(\x0b\x32\x17.messages.KeyValueProto\"c\n\x1e\x41ttributeUpdateNotificationMsg\x12*\n\rsharedUpdated\x18\x01 \x03(\x0b\x32\x13.messages.TsKvProto\x12\x15\n\rsharedDeleted\x18\x02 \x03(\t\"N\n\x15ToDeviceRpcRequestMsg\x12\x11\n\trequestId\x18\x01 \x01(\x05\x12\x12\n\nmethodName\x18\x02 \x01(\t\x12\x0e\n\x06params\x18\x03 \x01(\t\"K\n\x16ToDeviceRpcResponseMsg\x12\x11\n\trequestId\x18\x01 \x01(\x05\x12\x0f\n\x07payload\x18\x02 \x01(\t\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"N\n\x15ToServerRpcRequestMsg\x12\x11\n\trequestId\x18\x01 \x01(\x05\x12\x12\n\nmethodName\x18\x02 \x01(\t\x12\x0e\n\x06params\x18\x03 \x01(\t\"K\n\x16ToServerRpcResponseMsg\x12\x11\n\trequestId\x18\x01 \x01(\x05\x12\x0f\n\x07payload\x18\x02 \x01(\t\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"4\n\x0b\x43laimDevice\x12\x11\n\tsecretKey\x18\x01 \x01(\t\x12\x12\n\ndurationMs\x18\x02 \x01(\x03\";\n\x11\x41ttributesRequest\x12\x12\n\nclientKeys\x18\x01 \x01(\t\x12\x12\n\nsharedKeys\x18\x02 \x01(\t\",\n\nRpcRequest\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0e\n\x06params\x18\x02 \x01(\t\"#\n\rDisconnectMsg\x12\x12\n\ndeviceName\x18\x01 \x01(\t\"4\n\nConnectMsg\x12\x12\n\ndeviceName\x18\x01 \x01(\t\x12\x12\n\ndeviceType\x18\x02 \x01(\t\"K\n\x0cTelemetryMsg\x12\x12\n\ndeviceName\x18\x01 \x01(\t\x12\'\n\x03msg\x18\x03 \x01(\x0b\x32\x1a.messages.PostTelemetryMsg\"L\n\rAttributesMsg\x12\x12\n\ndeviceName\x18\x01 \x01(\t\x12\'\n\x03msg\x18\x02 \x01(\x0b\x32\x1a.messages.PostAttributeMsg\"Q\n\x0e\x43laimDeviceMsg\x12\x12\n\ndeviceName\x18\x01 \x01(\t\x12+\n\x0c\x63laimRequest\x18\x02 \x01(\x0b\x32\x15.messages.ClaimDevice\":\n\x13GatewayTelemetryMsg\x12#\n\x03msg\x18\x01 \x03(\x0b\x32\x16.messages.TelemetryMsg\"8\n\x0fGatewayClaimMsg\x12%\n\x03msg\x18\x01 \x03(\x0b\x32\x18.messages.ClaimDeviceMsg\"<\n\x14GatewayAttributesMsg\x12$\n\x03msg\x18\x01 \x03(\x0b\x32\x17.messages.AttributesMsg\"E\n\x15GatewayRpcResponseMsg\x12\x12\n\ndeviceName\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\x05\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\t\"n\n\x1bGatewayAttributeResponseMsg\x12\x12\n\ndeviceName\x18\x01 \x01(\t\x12;\n\x0bresponseMsg\x18\x02 \x01(\x0b\x32&.messages.GatewayAttributesResponseMsg\"~\n%GatewayAttributeUpdateNotificationMsg\x12\x12\n\ndeviceName\x18\x01 \x01(\t\x12\x41\n\x0fnotificationMsg\x18\x02 \x01(\x0b\x32(.messages.AttributeUpdateNotificationMsg\"h\n\x1aGatewayDeviceRpcRequestMsg\x12\x12\n\ndeviceName\x18\x01 \x01(\t\x12\x36\n\rrpcRequestMsg\x18\x02 \x01(\x0b\x32\x1f.messages.ToDeviceRpcRequestMsg\"[\n\x1bGatewayAttributesRequestMsg\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x12\n\ndeviceName\x18\x02 \x01(\t\x12\x0e\n\x06\x63lient\x18\x03 \x01(\x08\x12\x0c\n\x04keys\x18\x04 \x03(\t\"\xac\x01\n\x1cGatewayAttributesResponseMsg\x12\x11\n\trequestId\x18\x01 \x01(\x05\x12\x34\n\x13\x63lientAttributeList\x18\x02 \x03(\x0b\x32\x17.messages.KeyValueProto\x12\x34\n\x13sharedAttributeList\x18\x03 \x03(\x0b\x32\x17.messages.KeyValueProto\x12\r\n\x05\x65rror\x18\x05 \x01(\t*F\n\x0eResponseStatus\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0b\n\x07SUCCESS\x10\x01\x12\r\n\tNOT_FOUND\x10\x02\x12\x0b\n\x07\x46\x41ILURE\x10\x03*Q\n\x0cKeyValueType\x12\r\n\tBOOLEAN_V\x10\x00\x12\n\n\x06LONG_V\x10\x01\x12\x0c\n\x08\x44OUBLE_V\x10\x02\x12\x0c\n\x08STRING_V\x10\x03\x12\n\n\x06JSON_V\x10\x04\x32_\n\x15TBGatewayProtoService\x12\x46\n\x06stream\x12\x1e.messages.FromConnectorMessage\x1a\x1c.messages.FromServiceMessageb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'messages_pb2', _globals) +if _descriptor._USE_C_DESCRIPTORS == False: + DESCRIPTOR._options = None + _globals['_RESPONSESTATUS']._serialized_start = 3999 + _globals['_RESPONSESTATUS']._serialized_end = 4069 + _globals['_KEYVALUETYPE']._serialized_start = 4071 + _globals['_KEYVALUETYPE']._serialized_end = 4152 + _globals['_RESPONSE']._serialized_start = 29 + _globals['_RESPONSE']._serialized_end = 193 + _globals['_FROMCONNECTORMESSAGE']._serialized_start = 196 + _globals['_FROMCONNECTORMESSAGE']._serialized_end = 871 + _globals['_FROMSERVICEMESSAGE']._serialized_start = 874 + _globals['_FROMSERVICEMESSAGE']._serialized_end = 1416 + _globals['_REGISTERCONNECTORMSG']._serialized_start = 1418 + _globals['_REGISTERCONNECTORMSG']._serialized_end = 1462 + _globals['_UNREGISTERCONNECTORMSG']._serialized_start = 1464 + _globals['_UNREGISTERCONNECTORMSG']._serialized_end = 1510 + _globals['_CONNECTORCONFIGURATIONMSG']._serialized_start = 1512 + _globals['_CONNECTORCONFIGURATIONMSG']._serialized_end = 1606 + _globals['_CONNECTORGETCONNECTEDDEVICESMSG']._serialized_start = 1608 + _globals['_CONNECTORGETCONNECTEDDEVICESMSG']._serialized_end = 1663 + _globals['_CONNECTORGETCONNECTEDDEVICESRESPONSEMSG']._serialized_start = 1665 + _globals['_CONNECTORGETCONNECTEDDEVICESRESPONSEMSG']._serialized_end = 1763 + _globals['_CONNECTORDEVICEINFO']._serialized_start = 1765 + _globals['_CONNECTORDEVICEINFO']._serialized_end = 1826 + _globals['_KEYVALUEPROTO']._serialized_start = 1829 + _globals['_KEYVALUEPROTO']._serialized_end = 1979 + _globals['_TSKVPROTO']._serialized_start = 1981 + _globals['_TSKVPROTO']._serialized_end = 2041 + _globals['_TSKVLISTPROTO']._serialized_start = 2043 + _globals['_TSKVLISTPROTO']._serialized_end = 2107 + _globals['_POSTTELEMETRYMSG']._serialized_start = 2109 + _globals['_POSTTELEMETRYMSG']._serialized_end = 2170 + _globals['_POSTATTRIBUTEMSG']._serialized_start = 2172 + _globals['_POSTATTRIBUTEMSG']._serialized_end = 2227 + _globals['_ATTRIBUTEUPDATENOTIFICATIONMSG']._serialized_start = 2229 + _globals['_ATTRIBUTEUPDATENOTIFICATIONMSG']._serialized_end = 2328 + _globals['_TODEVICERPCREQUESTMSG']._serialized_start = 2330 + _globals['_TODEVICERPCREQUESTMSG']._serialized_end = 2408 + _globals['_TODEVICERPCRESPONSEMSG']._serialized_start = 2410 + _globals['_TODEVICERPCRESPONSEMSG']._serialized_end = 2485 + _globals['_TOSERVERRPCREQUESTMSG']._serialized_start = 2487 + _globals['_TOSERVERRPCREQUESTMSG']._serialized_end = 2565 + _globals['_TOSERVERRPCRESPONSEMSG']._serialized_start = 2567 + _globals['_TOSERVERRPCRESPONSEMSG']._serialized_end = 2642 + _globals['_CLAIMDEVICE']._serialized_start = 2644 + _globals['_CLAIMDEVICE']._serialized_end = 2696 + _globals['_ATTRIBUTESREQUEST']._serialized_start = 2698 + _globals['_ATTRIBUTESREQUEST']._serialized_end = 2757 + _globals['_RPCREQUEST']._serialized_start = 2759 + _globals['_RPCREQUEST']._serialized_end = 2803 + _globals['_DISCONNECTMSG']._serialized_start = 2805 + _globals['_DISCONNECTMSG']._serialized_end = 2840 + _globals['_CONNECTMSG']._serialized_start = 2842 + _globals['_CONNECTMSG']._serialized_end = 2894 + _globals['_TELEMETRYMSG']._serialized_start = 2896 + _globals['_TELEMETRYMSG']._serialized_end = 2971 + _globals['_ATTRIBUTESMSG']._serialized_start = 2973 + _globals['_ATTRIBUTESMSG']._serialized_end = 3049 + _globals['_CLAIMDEVICEMSG']._serialized_start = 3051 + _globals['_CLAIMDEVICEMSG']._serialized_end = 3132 + _globals['_GATEWAYTELEMETRYMSG']._serialized_start = 3134 + _globals['_GATEWAYTELEMETRYMSG']._serialized_end = 3192 + _globals['_GATEWAYCLAIMMSG']._serialized_start = 3194 + _globals['_GATEWAYCLAIMMSG']._serialized_end = 3250 + _globals['_GATEWAYATTRIBUTESMSG']._serialized_start = 3252 + _globals['_GATEWAYATTRIBUTESMSG']._serialized_end = 3312 + _globals['_GATEWAYRPCRESPONSEMSG']._serialized_start = 3314 + _globals['_GATEWAYRPCRESPONSEMSG']._serialized_end = 3383 + _globals['_GATEWAYATTRIBUTERESPONSEMSG']._serialized_start = 3385 + _globals['_GATEWAYATTRIBUTERESPONSEMSG']._serialized_end = 3495 + _globals['_GATEWAYATTRIBUTEUPDATENOTIFICATIONMSG']._serialized_start = 3497 + _globals['_GATEWAYATTRIBUTEUPDATENOTIFICATIONMSG']._serialized_end = 3623 + _globals['_GATEWAYDEVICERPCREQUESTMSG']._serialized_start = 3625 + _globals['_GATEWAYDEVICERPCREQUESTMSG']._serialized_end = 3729 + _globals['_GATEWAYATTRIBUTESREQUESTMSG']._serialized_start = 3731 + _globals['_GATEWAYATTRIBUTESREQUESTMSG']._serialized_end = 3822 + _globals['_GATEWAYATTRIBUTESRESPONSEMSG']._serialized_start = 3825 + _globals['_GATEWAYATTRIBUTESRESPONSEMSG']._serialized_end = 3997 + _globals['_TBGATEWAYPROTOSERVICE']._serialized_start = 4154 + _globals['_TBGATEWAYPROTOSERVICE']._serialized_end = 4249 # @@protoc_insertion_point(module_scope) diff --git a/thingsboard_gateway/gateway/tb_gateway_service.py b/thingsboard_gateway/gateway/tb_gateway_service.py index 41600db60..739562835 100644 --- a/thingsboard_gateway/gateway/tb_gateway_service.py +++ b/thingsboard_gateway/gateway/tb_gateway_service.py @@ -34,7 +34,8 @@ from thingsboard_gateway.connectors.connector import Connector from thingsboard_gateway.gateway.constant_enums import DeviceActions, Status from thingsboard_gateway.gateway.constants import CONNECTED_DEVICES_FILENAME, CONNECTOR_PARAMETER, \ - PERSISTENT_GRPC_CONNECTORS_KEY_FILENAME + PERSISTENT_GRPC_CONNECTORS_KEY_FILENAME, RENAMING_PARAMETER, CONNECTOR_NAME_PARAMETER, DEVICE_TYPE_PARAMETER, \ + CONNECTOR_ID_PARAMETER from thingsboard_gateway.gateway.device_filter import DeviceFilter from thingsboard_gateway.gateway.duplicate_detector import DuplicateDetector from thingsboard_gateway.gateway.shell.proxy import AutoProxy @@ -60,7 +61,7 @@ except ImportError: print("Cannot load GRPC connector!") -log:TbLogger = None +log: TbLogger = None main_handler = logging.handlers.MemoryHandler(-1) DEFAULT_CONNECTORS = { @@ -199,7 +200,8 @@ def __init__(self, config_file=None): self.__updates_check_time = 0 self.version = self.__updater.get_version() log.info("ThingsBoard IoT gateway version: %s", self.version["current_version"]) - self.available_connectors: dict[str, Connector] = {} + self.available_connectors_by_name: dict[str, Connector] = {} + self.available_connectors_by_id: dict[str, Connector] = {} self.__connector_incoming_messages = {} self.__connected_devices = {} self.__renamed_devices = {} @@ -298,7 +300,7 @@ def __init__(self, config_file=None): self.__grpc_manager = None self.init_device_filtering(self.__config['thingsboard'].get('deviceFiltering', DEFAULT_DEVICE_FILTER)) - self.__duplicate_detector = DuplicateDetector(self.available_connectors) + self.__duplicate_detector = DuplicateDetector(self.available_connectors_by_name) self.__init_remote_configuration() @@ -424,8 +426,8 @@ def _watchers(self): if self.tb_client.is_connected() and not self.__subscribed_to_rpc_topics: for device in self.__saved_devices: - self.add_device(device, {"connector": self.__saved_devices[device]["connector"]}, - device_type=self.__saved_devices[device]["device_type"], reconnect=True) + self.add_device(device, {CONNECTOR_PARAMETER: self.__saved_devices[device][CONNECTOR_PARAMETER]}, + device_type=self.__saved_devices[device][DEVICE_TYPE_PARAMETER], reconnect=True) self.subscribe_to_required_topics() self.__subscribed_to_rpc_topics = True @@ -499,9 +501,9 @@ def __modify_main_config(self): self.__config['thingsboard'] = {**self.__config['thingsboard'], **env_variables} def __close_connectors(self): - for current_connector in self.available_connectors: + for current_connector in self.available_connectors_by_id: try: - self.available_connectors[current_connector].close() + self.available_connectors_by_id[current_connector].close() log.debug("Connector %s closed connection.", current_connector) except Exception as e: log.exception(e) @@ -582,10 +584,10 @@ def __process_remote_converter_configuration_update(self, content: dict): key = list(content.keys())[0] connector_name, converter_name = key.split(':') log.info('Got remote converter configuration update') - if not self.available_connectors.get(connector_name): + if not self.available_connectors_by_name.get(connector_name): raise ValueError - self.available_connectors[connector_name].update_converter_config(converter_name, content[key]) + self.available_connectors_by_name[connector_name].update_converter_config(converter_name, content[key]) except (ValueError, AttributeError, IndexError) as e: log.debug('Failed to process remote converter update: %s', e) @@ -659,34 +661,36 @@ def __check_shared_attributes(self): self.tb_client.client.request_attributes(callback=self._attributes_parse) def __register_connector(self, session_id, connector_key): - if self.__grpc_connectors.get(connector_key) is not None and self.__grpc_connectors[connector_key]['name'] not in self.available_connectors: + if self.__grpc_connectors.get(connector_key) is not None and self.__grpc_connectors[connector_key]['id'] not in self.available_connectors_by_id: target_connector = self.__grpc_connectors.get(connector_key) connector = GrpcConnector(self, target_connector['config'], self.__grpc_manager, session_id) connector.setName(target_connector['name']) - self.available_connectors[connector.get_name()] = connector + self.available_connectors_by_name[connector.get_name()] = connector + self.available_connectors_by_id[connector.get_id()] = connector self.__grpc_manager.registration_finished(Status.SUCCESS, session_id, target_connector) - log.info("GRPC connector with key %s registered with name %s", connector_key, connector.get_name()) + log.info("[%r][%r] GRPC connector with key %s registered with name %s", session_id, + connector.get_id(), connector_key, connector.get_name()) elif self.__grpc_connectors.get(connector_key) is not None: self.__grpc_manager.registration_finished(Status.FAILURE, session_id, None) - log.error("GRPC connector with key: %s - already registered!", connector_key) + log.error("[%r] GRPC connector with key: %s - already registered!", session_id, connector_key) else: self.__grpc_manager.registration_finished(Status.NOT_FOUND, session_id, None) - log.error("GRPC configuration for connector with key: %s - not found", connector_key) + log.error("[%r] GRPC configuration for connector with key: %s - not found", session_id, connector_key) def __unregister_connector(self, session_id, connector_key): - if self.__grpc_connectors.get(connector_key) is not None and self.__grpc_connectors[connector_key]['name'] in self.available_connectors: - connector_name = self.__grpc_connectors[connector_key]['name'] - target_connector: GrpcConnector = self.available_connectors.pop(connector_name) + if self.__grpc_connectors.get(connector_key) is not None and self.__grpc_connectors[connector_key]['id'] in self.available_connectors_by_id: + connector_id = self.__grpc_connectors[connector_key]['id'] + target_connector: GrpcConnector = self.available_connectors_by_id.pop(connector_id) self.__grpc_manager.unregister(Status.SUCCESS, session_id, target_connector) - log.info("GRPC connector with key %s and name %s - unregistered", connector_key, + log.info("[%r] GRPC connector with key %s and name %s - unregistered", session_id, connector_key, target_connector.get_name()) elif self.__grpc_connectors.get(connector_key) is not None: self.__grpc_manager.unregister(Status.NOT_FOUND, session_id, None) - log.error("GRPC connector with key: %s - is not registered!", connector_key) + log.error("[%r] GRPC connector with key: %s - is not registered!", session_id, connector_key) else: self.__grpc_manager.unregister(Status.FAILURE, session_id, None) - log.error("GRPC configuration for connector with key: %s - not found in configuration and not registered", - connector_key) + log.error("[%r] GRPC configuration for connector with key: %s - not found in configuration and not registered", + session_id, connector_key) @staticmethod def _generate_persistent_key(connector, connectors_persistent_keys): @@ -758,11 +762,25 @@ def _load_connectors(self, config=None): log.debug(e) log.warning("Cannot parse connector configuration as a JSON, it will be passed as a string.") + connector_id = TBUtility.get_or_create_connector_id(connector_conf) + + if isinstance(connector_conf, dict): + if connector_conf.get('id') is None: + connector_conf['id'] = connector_id + with open(config_file_path, 'w', encoding="UTF-8") as conf_file: + conf_file.write(dumps(connector_conf, indent=2)) + elif isinstance(connector_conf, str): + start_find = connector_conf.find("{id_var_start}") + end_find = connector_conf.find("{id_var_end}") + if not (start_find > -1 and end_find > -1): + connector_conf = "{id_var_start}" + str(connector_id) + "{id_var_end}" + connector_conf + if not self.connectors_configs.get(connector['type']): self.connectors_configs[connector['type']] = [] if connector['type'] != 'grpc' and isinstance(connector_conf, dict): connector_conf["name"] = connector['name'] self.connectors_configs[connector['type']].append({"name": connector['name'], + "id": connector_id, "config": {connector['configuration']: connector_conf} if connector['type'] != 'grpc' else connector_conf, "config_updated": stat(config_file_path), @@ -789,24 +807,32 @@ def __connect_with_connectors(self): for config in connector_config["config"]: connector = None connector_name = None + connector_id = None try: - if connector_config["config"][config] is not None and len(connector_config["config"][config].keys()) > 2: - connector_name = connector_config["name"] - - available_connector = self.available_connectors.get(connector_name) - - if available_connector is None or available_connector.is_stopped(): - connector = self._implemented_connectors[connector_type](self, - connector_config["config"][config], - connector_type) - connector.setName(connector_name) - self.available_connectors[connector.get_name()] = connector - connector.open() + if connector_config["config"][config] is not None: + if ("logLevel" in connector_config["config"][config] and "name" in connector_config["config"][config] and len(connector_config["config"][config].keys()) > 2) or \ + ("logLevel" not in connector_config["config"][config] and "name" not in connector_config["config"][config] and len(connector_config["config"][config].keys()) > 1): + connector_name = connector_config["name"] + connector_id = connector_config["id"] + + available_connector = self.available_connectors_by_id.get(connector_id) + + if available_connector is None or available_connector.is_stopped(): + connector = self._implemented_connectors[connector_type](self, + connector_config["config"][config], + connector_type) + connector.setName(connector_name) + self.available_connectors_by_id[connector_id] = connector + self.available_connectors_by_name[connector_name] = connector + connector.open() + else: + log.warning("[%r] Connector with name %s already exists and not stopped!", connector_id, connector_name) else: - log.warning("Connector with name %s already exists and not stopped!", connector_name) + log.warning("Config incorrect for %s", connector_type) else: - log.warning("Config not found or empty for %s", connector_type) + log.warning("Config is empty for %s", connector_type) except Exception as e: + log.error("[%r] Error on loading connector %r: %r", connector_id, connector_name, e) log.exception(e, attr_name=connector_name) if connector is not None: connector.close() @@ -826,7 +852,7 @@ def __connect_with_connectors(self): thread = Thread(target=self._run_connector, args=(connector_abs_path, connector_config_json,), - daemon=True, name='Separate DRPC Connector') + daemon=True, name='Separated GRPC Connector') thread.start() def _run_connector(self, connector_abs_path, connector_config_json): @@ -859,7 +885,9 @@ def check_connector_configuration_updates(self): if self.__remote_configurator is not None: self.__remote_configurator.send_current_configuration() - def send_to_storage(self, connector_name, data): + def send_to_storage(self, connector_name, connector_id, data=None): + if data is None: + log.error("[%r]Data is empty from connector %r!", connector_id, connector_name) try: device_valid = True if self.__device_filter: @@ -871,7 +899,7 @@ def send_to_storage(self, connector_name, data): filtered_data = self.__duplicate_detector.filter_data(connector_name, data) if filtered_data: - self.__converted_data_queue.put((connector_name, filtered_data), True, 100) + self.__converted_data_queue.put((connector_name, connector_id, filtered_data), True, 100) return Status.SUCCESS else: return Status.NO_NEW_DATA @@ -883,7 +911,7 @@ def __send_to_storage(self): while not self.stopped: try: if not self.__converted_data_queue.empty(): - connector_name, event = self.__converted_data_queue.get(True, 100) + connector_name, connector_id, event = self.__converted_data_queue.get(True, 100) data_array = event if isinstance(event, list) else [event] for data in data_array: if not connector_name == self.name: @@ -892,7 +920,7 @@ def __send_to_storage(self): if 'attributes' not in data: data['attributes'] = [] if not TBUtility.validate_converted_data(data): - log.error("Data from %s connector is invalid.", connector_name) + log.error("[%r] Data from %s connector is invalid.", connector_id, connector_name) continue if data.get('deviceType') is None: device_name = data['deviceName'] @@ -904,12 +932,12 @@ def __send_to_storage(self): data["deviceType"] = "default" if data["deviceName"] not in self.get_devices() and self.tb_client.is_connected(): self.add_device(data["deviceName"], - {"connector": self.available_connectors[connector_name]}, + {CONNECTOR_PARAMETER: self.available_connectors_by_id[connector_id]}, device_type=data["deviceType"]) - if not self.__connector_incoming_messages.get(connector_name): - self.__connector_incoming_messages[connector_name] = 0 + if not self.__connector_incoming_messages.get(connector_id): + self.__connector_incoming_messages[connector_id] = 0 else: - self.__connector_incoming_messages[connector_name] += 1 + self.__connector_incoming_messages[connector_id] += 1 else: data["deviceName"] = "currentThingsBoardGateway" data['deviceType'] = "gateway" @@ -935,7 +963,7 @@ def __send_to_storage(self): adopted_data_size += self.__get_data_size(attribute) if adopted_data_size >= max_data_size: # We have surpassed the max_data_size, so send what we have and clear attributes - self.__send_data_pack_to_storage(adopted_data, connector_name) + self.__send_data_pack_to_storage(adopted_data, connector_name, connector_id) adopted_data['attributes'] = {} adopted_data_size = empty_adopted_data_size @@ -956,7 +984,7 @@ def __send_to_storage(self): adopted_data_size += self.__get_data_size(kv_data) if adopted_data_size >= max_data_size: # we have surpassed the max_data_size, so send what we have and clear attributes and telemetry - self.__send_data_pack_to_storage(adopted_data, connector_name) + self.__send_data_pack_to_storage(adopted_data, connector_name, connector_id) adopted_data['telemetry'] = [] adopted_data['attributes'] = {} adopted_data_size = empty_adopted_data_size @@ -964,12 +992,12 @@ def __send_to_storage(self): # It is possible that we get here and have some telemetry or attributes not yet sent, so check for that. if len(adopted_data['telemetry']) > 0 or len(adopted_data['attributes']) > 0: - self.__send_data_pack_to_storage(adopted_data, connector_name) + self.__send_data_pack_to_storage(adopted_data, connector_name, connector_id) # technically unnecessary to clear here, but leaving for consistency. adopted_data['telemetry'] = [] adopted_data['attributes'] = {} else: - self.__send_data_pack_to_storage(data, connector_name) + self.__send_data_pack_to_storage(data, connector_name, connector_id) else: sleep(0.2) @@ -1004,13 +1032,13 @@ def __convert_telemetry_to_ts(data): data["telemetry"] = {"ts": int(time() * 1000), "values": telemetry} return data - def __send_data_pack_to_storage(self, data, connector_name): + def __send_data_pack_to_storage(self, data, connector_name, connector_id=None): json_data = dumps(data) save_result = self._event_storage.put(json_data) if not save_result: - log.error('Data from the device "%s" cannot be saved, connector name is %s.', - data["deviceName"], - connector_name) + log.error('%rData from the device "%s" cannot be saved, connector name is %s.', + "[" + connector_id + "] " if connector_id is not None else "", + data["deviceName"], connector_name) def check_size(self, devices_data_in_event_pack): if self.__get_data_size(devices_data_in_event_pack) >= self.__config["thingsboard"].get("maxPayloadSizeBytes", @@ -1142,10 +1170,10 @@ def _rpc_request_handler(self, request_id, content): try: device = content.get("device") if device is not None: - connector_name = self.get_devices()[device].get("connector") - if connector_name is not None: + connector = self.get_devices()[device].get(CONNECTOR_PARAMETER) + if connector is not None: content['id'] = request_id - connector_name.server_side_rpc_handler(content) + connector.server_side_rpc_handler(content) else: log.error("Received RPC request but connector for the device %s not found. Request data: \n %s", content["device"], @@ -1160,12 +1188,12 @@ def _rpc_request_handler(self, request_id, content): result = None if self.connectors_configs.get(module): log.debug("Connector \"%s\" for RPC request \"%s\" found", module, content["method"]) - for connector_name in self.available_connectors: - if self.available_connectors[connector_name]._connector_type == module: + for connector_name in self.available_connectors_by_name: + if self.available_connectors_by_name[connector_name]._connector_type == module: log.debug("Sending command RPC %s to connector %s", content["method"], connector_name) content['id'] = request_id - result = self.available_connectors[connector_name].server_side_rpc_handler(content) + result = self.available_connectors_by_name[connector_name].server_side_rpc_handler(content) elif module == 'gateway' or module in self.__remote_shell.shell_commands: result = self.__rpc_gateway_processing(request_id, content) else: @@ -1221,8 +1249,8 @@ def __rpc_ping(*args): def __rpc_devices(self, *args): data_to_send = {} for device in self.__connected_devices: - if self.__connected_devices[device]["connector"] is not None: - data_to_send[device] = self.__connected_devices[device]["connector"].get_name() + if self.__connected_devices[device][CONNECTOR_PARAMETER] is not None: + data_to_send[device] = self.__connected_devices[device][CONNECTOR_PARAMETER].get_name() return {"code": 200, "resp": data_to_send} def __rpc_update(self, *args): @@ -1305,7 +1333,7 @@ def _attribute_update_callback(self, content, *args): log.debug(args) if content.get('device') is not None: try: - self.__connected_devices[content["device"]]["connector"].on_attributes_update(content) + self.__connected_devices[content["device"]][CONNECTOR_PARAMETER].on_attributes_update(content) except Exception as e: log.exception(e) else: @@ -1313,12 +1341,12 @@ def _attribute_update_callback(self, content, *args): def __form_statistics(self): summary_messages = {"eventsProduced": 0, "eventsSent": 0} - for connector in self.available_connectors: + for connector in self.available_connectors_by_name: connector_camel_case = connector.replace(' ', '') telemetry = { - (connector_camel_case + ' EventsProduced').replace(' ', ''): self.available_connectors[ + (connector_camel_case + ' EventsProduced').replace(' ', ''): self.available_connectors_by_name[ connector].statistics.get('MessagesReceived', 0), - (connector_camel_case + ' EventsSent').replace(' ', ''): self.available_connectors[ + (connector_camel_case + ' EventsSent').replace(' ', ''): self.available_connectors_by_name[ connector].statistics.get('MessagesSent', 0) } summary_messages['eventsProduced'] += telemetry[ @@ -1338,8 +1366,8 @@ def add_device_async(self, data): def add_device(self, device_name, content, device_type=None, reconnect=False): if device_name not in self.__saved_devices or reconnect: device_type = device_type if device_type is not None else 'default' - self.__connected_devices[device_name] = {**content, "device_type": device_type} - self.__saved_devices[device_name] = {**content, "device_type": device_type} + self.__connected_devices[device_name] = {**content, DEVICE_TYPE_PARAMETER: device_type} + self.__saved_devices[device_name] = {**content, DEVICE_TYPE_PARAMETER: device_type} self.__save_persistent_devices() device_details = { 'connectorType': content['connector'].get_type(), @@ -1349,9 +1377,12 @@ def add_device(self, device_name, content, device_type=None, reconnect=False): self.tb_client.client.gw_send_attributes(device_name, device_details) def update_device(self, device_name, event, content): + should_save = False if event == 'connector' and self.__connected_devices[device_name].get(event) != content: - self.__save_persistent_devices() + should_save = True self.__connected_devices[device_name][event] = content + if should_save: + self.__save_persistent_devices() def del_device_async(self, data): if data['deviceName'] in self.__saved_devices: @@ -1367,18 +1398,18 @@ def del_device(self, device_name): self.__saved_devices.pop(device_name) self.__save_persistent_devices() - def get_devices(self, connector_name: str = None): - return self.__connected_devices if connector_name is None else { - device_name: self.__connected_devices[device_name]["device_type"] for device_name in - self.__connected_devices.keys() if self.__connected_devices[device_name].get("connector") is not None and - self.__connected_devices[device_name]["connector"].get_name() == connector_name} + def get_devices(self, connector_id: str = None): + return self.__connected_devices if connector_id is None else { + device_name: self.__connected_devices[device_name][DEVICE_TYPE_PARAMETER] for device_name in + self.__connected_devices.keys() if self.__connected_devices[device_name].get(CONNECTOR_PARAMETER) is not None and + self.__connected_devices[device_name][CONNECTOR_PARAMETER].get_id() == connector_id} def __process_async_device_actions(self): while not self.stopped: if not self.__async_device_actions_queue.empty(): action, data = self.__async_device_actions_queue.get() if action == DeviceActions.CONNECT: - self.add_device(data['deviceName'], {CONNECTOR_PARAMETER: self.available_connectors[data['name']]}, + self.add_device(data['deviceName'], {CONNECTOR_PARAMETER: self.available_connectors_by_name[data['name']]}, data.get('deviceType')) elif action == DeviceActions.DISCONNECT: self.del_device(data['deviceName']) @@ -1406,33 +1437,43 @@ def __save_persistent_keys(self, persistent_keys): log.exception(e) def __load_persistent_devices(self): - devices = None + loaded_connected_devices = None if CONNECTED_DEVICES_FILENAME in listdir(self._config_dir) and \ path.getsize(self._config_dir + CONNECTED_DEVICES_FILENAME) > 0: try: - devices = load_file(self._config_dir + CONNECTED_DEVICES_FILENAME) + loaded_connected_devices = load_file(self._config_dir + CONNECTED_DEVICES_FILENAME) except Exception as e: log.exception(e) else: open(self._config_dir + CONNECTED_DEVICES_FILENAME, 'w').close() - if devices is not None: - log.debug("Loaded devices:\n %s", devices) - for device_name in devices: + if loaded_connected_devices is not None: + log.debug("Loaded devices:\n %s", loaded_connected_devices) + for device_name in loaded_connected_devices: try: - if not isinstance(devices[device_name], list): + if isinstance(loaded_connected_devices[device_name], str): open(self._config_dir + CONNECTED_DEVICES_FILENAME, 'w').close() log.debug("Old connected_devices file, new file will be created") return - if self.available_connectors.get(devices[device_name][0]): + device_data_to_save = {} + if isinstance(loaded_connected_devices[device_name], list) \ + and self.available_connectors_by_name.get(loaded_connected_devices[device_name][0]): device_data_to_save = { - "connector": self.available_connectors[devices[device_name][0]], - "device_type": devices[device_name][1]} - if len(devices[device_name]) > 2 and device_name not in self.__renamed_devices: - new_device_name = devices[device_name][2] + CONNECTOR_PARAMETER: self.available_connectors_by_name[loaded_connected_devices[device_name][0]], + DEVICE_TYPE_PARAMETER: loaded_connected_devices[device_name][1]} + if len(loaded_connected_devices[device_name]) > 2 and device_name not in self.__renamed_devices: + new_device_name = loaded_connected_devices[device_name][2] self.__renamed_devices[device_name] = new_device_name - self.__connected_devices[device_name] = device_data_to_save - self.__saved_devices[device_name] = device_data_to_save + elif isinstance(loaded_connected_devices[device_name], dict): + device_data_to_save = { + CONNECTOR_PARAMETER: self.available_connectors_by_id[loaded_connected_devices[device_name][CONNECTOR_ID_PARAMETER]], + DEVICE_TYPE_PARAMETER: loaded_connected_devices[device_name][DEVICE_TYPE_PARAMETER]} + if loaded_connected_devices[device_name].get(RENAMING_PARAMETER) is not None: + new_device_name = loaded_connected_devices[device_name][RENAMING_PARAMETER] + self.__renamed_devices[device_name] = new_device_name + self.__connected_devices[device_name] = device_data_to_save + self.__saved_devices[device_name] = device_data_to_save + except Exception as e: log.exception(e) continue @@ -1444,13 +1485,13 @@ def __save_persistent_devices(self): with self.__lock: data_to_save = {} for device in self.__connected_devices: - if self.__connected_devices[device]["connector"] is not None: - data_to_save[device] = [self.__connected_devices[device]["connector"].get_name(), - self.__connected_devices[device]["device_type"]] - - if device in self.__renamed_devices: - data_to_save[device].append(self.__renamed_devices.get(device)) - + if self.__connected_devices[device][CONNECTOR_PARAMETER] is not None: + data_to_save[device] = { + CONNECTOR_NAME_PARAMETER: self.__connected_devices[device][CONNECTOR_PARAMETER].get_name(), + DEVICE_TYPE_PARAMETER: self.__connected_devices[device][DEVICE_TYPE_PARAMETER], + CONNECTOR_ID_PARAMETER: self.__connected_devices[device][CONNECTOR_PARAMETER].get_id(), + RENAMING_PARAMETER: self.__renamed_devices.get(device) + } with open(self._config_dir + CONNECTED_DEVICES_FILENAME, 'w') as config_file: try: config_file.write(dumps(data_to_save, indent=2, sort_keys=True)) @@ -1502,18 +1543,18 @@ def get_storage_events_count(self): # Connectors ----------------- def get_available_connectors(self): - return {num + 1: name for (num, name) in enumerate(self.available_connectors)} + return {num + 1: name for (num, name) in enumerate(self.available_connectors_by_name)} def get_connector_status(self, name): try: - connector = self.available_connectors[name] + connector = self.available_connectors_by_name[name] return {'connected': connector.is_connected()} except KeyError: return f'Connector {name} not found!' def get_connector_config(self, name): try: - connector = self.available_connectors[name] + connector = self.available_connectors_by_name[name] return connector.get_config() except KeyError: return f'Connector {name} not found!' diff --git a/thingsboard_gateway/grpc_connectors/gw_grpc_connector.py b/thingsboard_gateway/grpc_connectors/gw_grpc_connector.py index f9e0fe0bc..305f95c2b 100644 --- a/thingsboard_gateway/grpc_connectors/gw_grpc_connector.py +++ b/thingsboard_gateway/grpc_connectors/gw_grpc_connector.py @@ -38,6 +38,7 @@ def __init__(self, connector_config: str, config_dir_path: str): self.__started = False self.registered = False self.connection_config = simplejson.loads(connector_config) + self.__connector_id = None self.__connector_name = None self.__received_configuration = None self.__registration_request_sent = False @@ -130,8 +131,9 @@ def _incoming_messages_callback(self, data): self.registered = True self.__registration_request_sent = False self.__received_configuration = data.connectorConfigurationMsg.configuration + self.__connector_id = data.connectorConfigurationMsg.connectorId self.__connector_name = data.connectorConfigurationMsg.connectorName - log.info("Connector %s connected to ThingsBoard IoT gateway", self.__connector_name) + log.info("[%r] Connector %s connected to ThingsBoard IoT gateway", self.__connector_id, self.__connector_name) log.debug("Configuration - received.") log.debug(self.__received_configuration) if data.HasField('connectorGetConnectedDevicesResponseMsg'): diff --git a/thingsboard_gateway/tb_utility/tb_gateway_remote_configurator.py b/thingsboard_gateway/tb_utility/tb_gateway_remote_configurator.py index d86d3084c..56c3e27aa 100644 --- a/thingsboard_gateway/tb_utility/tb_gateway_remote_configurator.py +++ b/thingsboard_gateway/tb_utility/tb_gateway_remote_configurator.py @@ -23,6 +23,7 @@ from thingsboard_gateway.gateway.tb_client import TBClient from thingsboard_gateway.tb_utility.tb_handler import TBLoggerHandler +from thingsboard_gateway.tb_utility.tb_utility import TBUtility LOG = getLogger("service") @@ -358,16 +359,16 @@ def _handle_grpc_configuration_update(self, config): if config != self.grpc_configuration: try: self._gateway.init_grpc_service(config) - for connector_name in self._gateway.available_connectors: - self._gateway.available_connectors[connector_name].close() + for connector_name in self._gateway.available_connectors_by_name: + self._gateway.available_connectors_by_name[connector_name].close() self._gateway.load_connectors(self._get_general_config_in_local_format()) self._gateway.connect_with_connectors() except Exception as e: LOG.error('Something went wrong with applying the new GRPC configuration. Reverting...') LOG.exception(e) self._gateway.init_grpc_service(self.grpc_configuration) - for connector_name in self._gateway.available_connectors: - self._gateway.available_connectors[connector_name].close() + for connector_name in self._gateway.available_connectors_by_name: + self._gateway.available_connectors_by_name[connector_name].close() self._gateway.load_connectors(self._get_general_config_in_local_format()) self._gateway.connect_with_connectors() else: @@ -416,10 +417,10 @@ def _handle_active_connectors_update(self, config): has_changed = False for_deletion = [] - for active_connector_name in self._gateway.available_connectors: + for active_connector_name in self._gateway.available_connectors_by_name: if active_connector_name not in config: try: - self._gateway.available_connectors[active_connector_name].close() + self._gateway.available_connectors_by_name[active_connector_name].close() for_deletion.append(active_connector_name) has_changed = True except Exception as e: @@ -427,7 +428,7 @@ def _handle_active_connectors_update(self, config): if has_changed: for name in for_deletion: - self._gateway.available_connectors.pop(name) + self._gateway.available_connectors_by_name.pop(name) self._delete_connectors_from_config(config) with open(self._gateway.get_config_path() + 'tb_gateway.json', 'w') as file: @@ -441,6 +442,7 @@ def _handle_connector_configuration_update(self, config): Expected the following data structure: { "name": "Mqtt Broker Connector", + "id": "bee7caf1-fd37-4026-8782-d480915d4d1a" "type": "mqtt", "configuration": "mqtt.json", "logLevel": "INFO", @@ -457,9 +459,22 @@ def _handle_connector_configuration_update(self, config): try: config_file_name = config['configuration'] - found_connectors = list(filter(lambda item: item['name'] == config['name'], self.connectors_configuration)) + identifier_parameter = 'id' if config.get('id') else 'name' + found_connectors = list(filter(lambda item: item[identifier_parameter] == config[identifier_parameter], + self.connectors_configuration)) + + if (config.get('configurationJson') + and config.get('configurationJson').get('id') is None + and len(found_connectors) > 0 + and found_connectors[0].get('configurationJson') is not None + and found_connectors[0].get('configurationJson').get('id') is not None): + connector_id = TBUtility.get_or_create_connector_id(found_connectors[0].get("configurationJson")) + else: + connector_id = TBUtility.get_or_create_connector_id(config.get('configurationJson')) if not found_connectors: - connector_configuration = {'name': config['name'], 'type': config['type'], + connector_configuration = {'name': config['name'], + 'type': config['type'], + 'id': connector_id, 'configuration': config_file_name} if config.get('key'): connector_configuration['key'] = config['key'] @@ -468,7 +483,9 @@ def _handle_connector_configuration_update(self, config): connector_configuration['class'] = config['class'] with open(self._gateway.get_config_path() + config_file_name, 'w') as file: - config['configurationJson'].update({'logLevel': config['logLevel'], 'name': config['name']}) + config['configurationJson'].update({'logLevel': config['logLevel'], + 'name': config['name'], + 'id': connector_id}) self.create_configuration_file_backup(config, config_file_name) file.writelines(dumps(config['configurationJson'], indent=' ')) @@ -493,13 +510,15 @@ def _handle_connector_configuration_update(self, config): changed = True connector_configuration = None - if found_connector.get('name') != config['name'] or found_connector.get('type') != config[ - 'type'] or found_connector.get('class') != config.get('class') or found_connector.get( - 'key') != config.get('key') or found_connector.get('configurationJson', {}).get( - 'logLevel') != config.get('logLevel'): + if (found_connector.get('id') != connector_id + or found_connector.get('name') != config['name'] + or found_connector.get('type') != config['type'] + or found_connector.get('class') != config.get('class') + or found_connector.get('key') != config.get('key') + or found_connector.get('configurationJson', {}).get('logLevel') != config.get('logLevel')): changed = True connector_configuration = {'name': config['name'], 'type': config['type'], - 'configuration': config_file_name} + 'id': connector_id,'configuration': config_file_name} if config.get('key'): connector_configuration['key'] = config['key'] @@ -511,18 +530,28 @@ def _handle_connector_configuration_update(self, config): if changed: with open(self._gateway.get_config_path() + config_file_name, 'w') as file: - config['configurationJson'].update({'logLevel': config['logLevel'], 'name': config['name']}) + config['configurationJson'].update({'logLevel': config['logLevel'], + 'name': config['name'], + 'id': connector_id}) file.writelines(dumps(config['configurationJson'], indent=' ')) if connector_configuration is None: connector_configuration = found_connector - self._gateway.available_connectors[connector_configuration['name']].close() - self._gateway.available_connectors.pop(connector_configuration['name']) + self._gateway.available_connectors_by_id[connector_configuration['id']].close() + self._gateway.available_connectors_by_id.pop(connector_configuration['id']) + if self._gateway.available_connectors_by_name.get(connector_configuration['name']): + self._gateway.available_connectors_by_name.pop(connector_configuration['name']) self._gateway.load_connectors(self._get_general_config_in_local_format()) self._gateway.connect_with_connectors() + for device_name in self._gateway.get_devices().keys(): + for connector_id in self._gateway.available_connectors_by_id.keys(): + if (self._gateway.available_connectors_by_id.get(connector_id) + and self._gateway.available_connectors_by_id[connector_id].get_id() == connector_id): + self._gateway.update_device(device_name, "connector", self._gateway.available_connectors_by_id[connector_id]) + self._gateway.tb_client.client.send_attributes({config['name']: config}) except Exception as e: LOG.exception(e) diff --git a/thingsboard_gateway/tb_utility/tb_utility.py b/thingsboard_gateway/tb_utility/tb_utility.py index d0521691c..918651845 100644 --- a/thingsboard_gateway/tb_utility/tb_utility.py +++ b/thingsboard_gateway/tb_utility/tb_utility.py @@ -14,6 +14,7 @@ import datetime from logging import getLogger from re import search, findall +from uuid import uuid4 from cryptography import x509 from cryptography.x509.oid import NameOID @@ -246,3 +247,16 @@ def convert_data_type(data, new_type, use_eval=False): return bool(evaluated_data) else: return str(evaluated_data) + + @staticmethod + def get_or_create_connector_id(connector_conf): + connector_id = str(uuid4()) + if isinstance(connector_conf, dict): + if connector_conf.get('id') is not None: + connector_id = connector_conf['id'] + elif isinstance(connector_conf, str): + start_find = connector_conf.find("{id_var_start}") + end_find = connector_conf.find("{id_var_end}") + if start_find > -1 and end_find > -1: + connector_id = connector_conf[start_find + 13:end_find] + return connector_id \ No newline at end of file