another converter

This commit is contained in:
Wolfgang Hottgenroth 2019-07-17 14:49:01 +02:00
parent f6d4218e57
commit 2460f570d8
Signed by: wn
GPG Key ID: 6C1E5E531E0D5D7F
3 changed files with 32 additions and 3 deletions

View File

@ -3,9 +3,16 @@
# out: from MQTT to Modbus, input is the format received from MQTT, output shall be a list of
# 16bit integers to be written to the Modbus slave
import struct
Converters = {
"dht20TOFloat": {
"in": lambda x : float(x[0]) / 10.0,
"out": None
},
"uint32": {
"in": lambda x : struct.unpack('I', x)[0],
"out": lambda x : struct.pack('I', x)
}
}

View File

@ -71,10 +71,19 @@ class HoldingRegisterDatapoint(AbstractModbusDatapoint):
# perform write operation
logger.debug("Holding register, perform write operation")
self.processCount += 1
v = int(self.writeRequestValue)
values = None
logger.debug("{0}: raw: {1!s}".format(self.label, self.writeRequestValue))
if self.converter and Converters.Converters[self.converter]['out']:
try:
values = Converters.Converters[self.converter]['out'](self.writeRequestValue)
logger.debug("{0}: converted: {1!s}".format(self.label, values))
except Exception as e:
raise DatapointException("Exception caught when trying to converter modbus data: {0!s}".format(e))
else:
values = [int(self.writeRequestValue)]
result = client.write_registers(address=self.address,
unit=self.unit,
values=[v])
values=values)
logger.debug("Write result: {0!s}".format(result))
self.writeRequestValue = None
else:
@ -88,7 +97,16 @@ class HoldingRegisterDatapoint(AbstractModbusDatapoint):
self.errorCount += 1
raise DatapointException(result)
logger.debug("{0}: {1!s}".format(self.label, result.registers))
pubQueue.put(MqttProcessor.PublishItem(self.publishTopic, str(result.registers)))
value = None
if self.converter and Converters.Converters[self.converter]['in']:
try:
value = Converters.Converters[self.converter]['in'](result.registers)
logger.debug("{0}: converted: {1!s}".format(self.label, value))
except Exception as e:
raise DatapointException("Exception caught when trying to converter modbus data: {0!s}".format(e))
else:
value = result.registers
pubQueue.put(MqttProcessor.PublishItem(self.publishTopic, str(value)))
self.lastContact = datetime.datetime.now()
def onMessage(self, value):

View File

@ -43,6 +43,7 @@
"count": 2,
"feedbackTopic": null,
"label": "Counter1",
"converter": "uint32",
"publishTopic": "Pub/Counter1",
"scanRate": null,
"subscribeTopic": null,
@ -56,6 +57,7 @@
"count": 2,
"feedbackTopic": null,
"label": "Counter2",
"converter": "uint32",
"publishTopic": "Pub/Counter2",
"scanRate": null,
"subscribeTopic": null,
@ -69,6 +71,7 @@
"count": 2,
"feedbackTopic": null,
"label": "Counter3",
"converter": "uint32",
"publishTopic": "Pub/Counter3",
"scanRate": null,
"subscribeTopic": null,
@ -82,6 +85,7 @@
"count": 2,
"feedbackTopic": null,
"label": "Counter4",
"converter": "uint32",
"publishTopic": "Pub/Counter4",
"scanRate": 1.0,
"subscribeTopic": null,