another converter
This commit is contained in:
parent
f6d4218e57
commit
2460f570d8
@ -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)
|
||||
}
|
||||
}
|
@ -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):
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user