From 353b6d918447222ac5fba16f61d13dc09131829d Mon Sep 17 00:00:00 2001 From: zbeacon Date: Fri, 24 Apr 2020 13:19:17 +0300 Subject: [PATCH] RPC processing improvements --- .../modbus/bytes_modbus_downlink_converter.py | 27 +++++++++++-------- .../gateway/tb_gateway_service.py | 2 +- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/thingsboard_gateway/connectors/modbus/bytes_modbus_downlink_converter.py b/thingsboard_gateway/connectors/modbus/bytes_modbus_downlink_converter.py index 5748475a..e79e2bce 100644 --- a/thingsboard_gateway/connectors/modbus/bytes_modbus_downlink_converter.py +++ b/thingsboard_gateway/connectors/modbus/bytes_modbus_downlink_converter.py @@ -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 diff --git a/thingsboard_gateway/gateway/tb_gateway_service.py b/thingsboard_gateway/gateway/tb_gateway_service.py index 2ad45f1f..b1651e88 100644 --- a/thingsboard_gateway/gateway/tb_gateway_service.py +++ b/thingsboard_gateway/gateway/tb_gateway_service.py @@ -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}