mirror of
https://github.com/thingsboard/thingsboard-gateway
synced 2025-10-26 22:31:42 +08:00
Merge pull request #562 from samson0v/master
Fixed convertor for REST Connector
This commit is contained in:
@@ -13,7 +13,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
from time import time
|
||||
from simplejson import dumps, loads
|
||||
from simplejson import dumps
|
||||
from thingsboard_gateway.connectors.rest.rest_converter import RESTConverter, log
|
||||
from thingsboard_gateway.tb_utility.tb_utility import TBUtility
|
||||
|
||||
@@ -29,11 +29,13 @@ class JsonRESTUplinkConverter(RESTConverter):
|
||||
dict_result = {"deviceName": None, "deviceType": None, "attributes": [], "telemetry": []}
|
||||
try:
|
||||
if self.__config.get("deviceNameExpression") is not None:
|
||||
dict_result["deviceName"] = TBUtility.get_value(self.__config.get("deviceNameExpression"), data, expression_instead_none=True)
|
||||
dict_result["deviceName"] = TBUtility.get_value(self.__config.get("deviceNameExpression"), data,
|
||||
expression_instead_none=True)
|
||||
else:
|
||||
log.error("The expression for looking \"deviceName\" not found in config %s", dumps(self.__config))
|
||||
if self.__config.get("deviceTypeExpression") is not None:
|
||||
dict_result["deviceType"] = TBUtility.get_value(self.__config.get("deviceTypeExpression"), data, expression_instead_none=True)
|
||||
dict_result["deviceType"] = TBUtility.get_value(self.__config.get("deviceTypeExpression"), data,
|
||||
expression_instead_none=True)
|
||||
else:
|
||||
log.error("The expression for looking \"deviceType\" not found in config %s", dumps(self.__config))
|
||||
except Exception as e:
|
||||
@@ -43,20 +45,19 @@ class JsonRESTUplinkConverter(RESTConverter):
|
||||
for datatype in datatypes:
|
||||
dict_result[datatypes[datatype]] = []
|
||||
for datatype_config in self.__config.get(datatype, []):
|
||||
value = TBUtility.get_value(datatype_config["value"], data, datatype_config["type"], expression_instead_none=True)
|
||||
value_tag = TBUtility.get_value(datatype_config["value"], data, datatype_config["type"], get_tag=True)
|
||||
key = TBUtility.get_value(datatype_config["key"], data, datatype_config["type"], expression_instead_none=True)
|
||||
key_tag = TBUtility.get_value(datatype_config["key"], data, get_tag=True)
|
||||
if ("${" not in str(value) and "}" not in str(value)) \
|
||||
and ("${" not in str(key) and "}" not in str(key)):
|
||||
is_valid_key = isinstance(key, str) and "${" in datatype_config["key"] and "}" in datatype_config["key"]
|
||||
is_valid_value = isinstance(value, str) and "${" in datatype_config["value"] and "}" in datatype_config["value"]
|
||||
full_key = datatype_config["key"].replace('${' + str(key_tag) + '}', str(key)) if is_valid_key else key
|
||||
full_value = datatype_config["value"].replace('${' + value_tag + '}', value) if is_valid_value else value
|
||||
if datatype == 'timeseries' and (data.get("ts") is not None or data.get("timestamp") is not None):
|
||||
dict_result[datatypes[datatype]].append({"ts": data.get('ts', data.get('timestamp', int(time()))), 'values': {full_key: full_value}})
|
||||
else:
|
||||
dict_result[datatypes[datatype]].append({full_key: full_value})
|
||||
value = datatype_config['value'] if '${' not in datatype_config['value'] and '}' not in \
|
||||
datatype_config['value'] else data[
|
||||
datatype_config['value'][2:-1]]
|
||||
|
||||
key = datatype_config['key'] if '${' not in datatype_config['key'] and '}' not in \
|
||||
datatype_config['key'] else data[
|
||||
datatype_config['key'][2:-1]]
|
||||
|
||||
if datatype == 'timeseries' and (data.get("ts") is not None or data.get("timestamp") is not None):
|
||||
dict_result[datatypes[datatype]].append(
|
||||
{"ts": data.get('ts', data.get('timestamp', int(time()))), 'values': {key: value}})
|
||||
else:
|
||||
dict_result[datatypes[datatype]].append({key: value})
|
||||
except Exception as e:
|
||||
log.error('Error in converter, for config: \n%s\n and message: \n%s\n', dumps(self.__config), str(data))
|
||||
log.exception(e)
|
||||
|
||||
Reference in New Issue
Block a user