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
|
# 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
|
# 16bit integers to be written to the Modbus slave
|
||||||
|
|
||||||
|
import struct
|
||||||
|
|
||||||
|
|
||||||
Converters = {
|
Converters = {
|
||||||
"dht20TOFloat": {
|
"dht20TOFloat": {
|
||||||
"in": lambda x : float(x[0]) / 10.0,
|
"in": lambda x : float(x[0]) / 10.0,
|
||||||
"out": None
|
"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
|
# perform write operation
|
||||||
logger.debug("Holding register, perform write operation")
|
logger.debug("Holding register, perform write operation")
|
||||||
self.processCount += 1
|
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,
|
result = client.write_registers(address=self.address,
|
||||||
unit=self.unit,
|
unit=self.unit,
|
||||||
values=[v])
|
values=values)
|
||||||
logger.debug("Write result: {0!s}".format(result))
|
logger.debug("Write result: {0!s}".format(result))
|
||||||
self.writeRequestValue = None
|
self.writeRequestValue = None
|
||||||
else:
|
else:
|
||||||
@ -88,7 +97,16 @@ class HoldingRegisterDatapoint(AbstractModbusDatapoint):
|
|||||||
self.errorCount += 1
|
self.errorCount += 1
|
||||||
raise DatapointException(result)
|
raise DatapointException(result)
|
||||||
logger.debug("{0}: {1!s}".format(self.label, result.registers))
|
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()
|
self.lastContact = datetime.datetime.now()
|
||||||
|
|
||||||
def onMessage(self, value):
|
def onMessage(self, value):
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
"count": 2,
|
"count": 2,
|
||||||
"feedbackTopic": null,
|
"feedbackTopic": null,
|
||||||
"label": "Counter1",
|
"label": "Counter1",
|
||||||
|
"converter": "uint32",
|
||||||
"publishTopic": "Pub/Counter1",
|
"publishTopic": "Pub/Counter1",
|
||||||
"scanRate": null,
|
"scanRate": null,
|
||||||
"subscribeTopic": null,
|
"subscribeTopic": null,
|
||||||
@ -56,6 +57,7 @@
|
|||||||
"count": 2,
|
"count": 2,
|
||||||
"feedbackTopic": null,
|
"feedbackTopic": null,
|
||||||
"label": "Counter2",
|
"label": "Counter2",
|
||||||
|
"converter": "uint32",
|
||||||
"publishTopic": "Pub/Counter2",
|
"publishTopic": "Pub/Counter2",
|
||||||
"scanRate": null,
|
"scanRate": null,
|
||||||
"subscribeTopic": null,
|
"subscribeTopic": null,
|
||||||
@ -69,6 +71,7 @@
|
|||||||
"count": 2,
|
"count": 2,
|
||||||
"feedbackTopic": null,
|
"feedbackTopic": null,
|
||||||
"label": "Counter3",
|
"label": "Counter3",
|
||||||
|
"converter": "uint32",
|
||||||
"publishTopic": "Pub/Counter3",
|
"publishTopic": "Pub/Counter3",
|
||||||
"scanRate": null,
|
"scanRate": null,
|
||||||
"subscribeTopic": null,
|
"subscribeTopic": null,
|
||||||
@ -82,6 +85,7 @@
|
|||||||
"count": 2,
|
"count": 2,
|
||||||
"feedbackTopic": null,
|
"feedbackTopic": null,
|
||||||
"label": "Counter4",
|
"label": "Counter4",
|
||||||
|
"converter": "uint32",
|
||||||
"publishTopic": "Pub/Counter4",
|
"publishTopic": "Pub/Counter4",
|
||||||
"scanRate": 1.0,
|
"scanRate": 1.0,
|
||||||
"subscribeTopic": null,
|
"subscribeTopic": null,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user