1
0
mirror of https://github.com/thingsboard/thingsboard-gateway synced 2025-10-26 22:31:42 +08:00

RPC processing improvements

This commit is contained in:
zbeacon
2020-04-24 13:19:17 +03:00
parent 18afe4e02f
commit 353b6d9184
2 changed files with 17 additions and 12 deletions

View File

@@ -25,7 +25,7 @@ class BytesModbusDownlinkConverter(ModbusConverter):
self.__config = config
def convert(self, config, data):
byte_order_str = config.get("byteOrder", "LITTLE")
byte_order_str = config.get("byteOrder", "BIG")
byte_order = Endian.Big if byte_order_str.upper() == "BIG" else Endian.Little
builder = BinaryPayloadBuilder(byteorder=byte_order)
builder_functions = {"string": builder.add_string,
@@ -69,19 +69,22 @@ class BytesModbusDownlinkConverter(ModbusConverter):
assert builder_functions.get("string") is not None
builder_functions[lower_type](value)
elif lower_type in ["bit"]:
bits = [0 for _ in range(16)]
if byte_order_str == "LITTLE":
bits = bits[-1]
bits[config["bit"]-1] = int(bool(value))
bits = bits[-1]
else:
bits[config["bit"]-1] = int(bool(value))
log.debug(bits)
builder.add_bits(bits)
# bits = [0 for _ in range(16)]
# if byte_order_str == "LITTLE":
# bits = bits[-1]
# bits[config["bit"]-1] = int(bool(value))
# bits = bits[-1]
# else:
# bits[config["bit"]-1] = int(bool(value))
# log.debug(bits)
# builder.add_bits(bits)
builder.add_bits([bool(value)])
# result = 0
# for bit in bits:
# result = (result << 1) | bit
# return result
# return builder
elif lower_type in builder_functions:
builder_functions[lower_type](value)
else:
log.error("Unknown variable type")
@@ -97,6 +100,8 @@ class BytesModbusDownlinkConverter(ModbusConverter):
if "Exception" in str(builder):
log.exception(builder)
builder = str(builder)
if isinstance(builder, list) and len(builder) not in (8, 16, 32, 64):
builder = builder[0]
return builder
log.warning("Unsupported function code, for the device %s in the Modbus Downlink converter", config["device"])
return None

View File

@@ -452,7 +452,7 @@ class TBGatewayService:
if isinstance(arguments, list):
result = self.__gateway_rpc_methods[method_to_call](*arguments)
elif method_to_call in self.__self_rpc_sheduled_methods_functions:
seconds_to_restart = arguments*1000 if arguments else 0
seconds_to_restart = arguments*1000 if arguments and arguments != '{}' else 0
self.__sheduled_rpc_calls.append([time()*1000 + seconds_to_restart, self.__self_rpc_sheduled_methods_functions[method_to_call]])
log.info("Gateway %s sheduled in %i seconds", method_to_call, seconds_to_restart/1000)
result = {"success": True}