Skip to content

Instantly share code, notes, and snippets.

@blip2
Created July 25, 2022 19:05
Show Gist options
  • Save blip2/de1ed906ad8323d886c727986d6b1653 to your computer and use it in GitHub Desktop.
Save blip2/de1ed906ad8323d886c727986d6b1653 to your computer and use it in GitHub Desktop.
Node red export to poll a deep-sea generator using modbus TCP and push data out to MQTT
[
{
"id": "f6f2187d.f17ca8",
"type": "tab",
"label": "Generator Modbus",
"disabled": false,
"info": ""
},
{
"id": "d48f79b6327932c7",
"type": "modbus-flex-getter",
"z": "f6f2187d.f17ca8",
"name": "generator-p",
"showStatusActivities": true,
"showErrors": true,
"logIOActivities": false,
"server": "7cfcfcaad501b340",
"useIOFile": false,
"ioFile": "",
"useIOForPayload": false,
"emptyMsgOnFail": false,
"keepMsgProperties": true,
"x": 490,
"y": 60,
"wires": [
[
"f5b326dd071fe090"
],
[]
]
},
{
"id": "d65782abdbd3604f",
"type": "function",
"z": "f6f2187d.f17ca8",
"name": "registers",
"func": "registers = [\n // basic instrucmentation\n {\"payload\": { 'fc': 3, 'unitid': 1, 'address': 1024 , 'quantity': 34 },},\n // fuel\n {\"payload\": { 'fc': 3, 'unitid': 1, 'address': 1290 , 'quantity': 2 },},\n // derived values\n {\"payload\": { 'fc': 3, 'unitid': 1, 'address': 1536 , 'quantity': 34 },},\n];\nreturn Array.from({length: node.outputCount}, () => registers);",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 260,
"y": 140,
"wires": [
[
"d48f79b6327932c7",
"b440ef4f381a4c81",
"a826f73c6ed834d9",
"b32a06952727d7f8"
]
]
},
{
"id": "4fb9ff35b518f775",
"type": "inject",
"z": "f6f2187d.f17ca8",
"name": "poll",
"props": [
{
"p": "payload"
}
],
"repeat": "20",
"crontab": "",
"once": true,
"onceDelay": "1",
"topic": "",
"payload": "true",
"payloadType": "bool",
"x": 110,
"y": 140,
"wires": [
[
"d65782abdbd3604f"
]
]
},
{
"id": "c9dcaed7f662a0db",
"type": "function",
"z": "f6f2187d.f17ca8",
"name": "map output",
"func": "var data = {}\nif (msg.modbusRequest.address == \"1024\") {\n data = {\n \"oil_pressure\": msg.payload[0],\n \"coolant_temperature\": msg.payload[1],\n \"internal_fuel_level\": msg.payload[3],\n \"battery_voltage\": msg.payload[5]/10,\n \"engine_speed\": msg.payload[6],\n \"frequency\": msg.payload[7]/10,\n \"l1_voltage\": msg.payload[9]/10,\n \"l2_voltage\": msg.payload[11]/10,\n \"l3_voltage\": msg.payload[13]/10,\n \"l1_current\": msg.payload[21]/10,\n \"l2_current\": msg.payload[23]/10,\n \"l3_current\": msg.payload[25]/10,\n \"earth_current\": msg.payload[27]/10,\n \"l1_power\": msg.payload[29],\n \"l2_power\": msg.payload[31],\n \"l3_power\": msg.payload[33],\n };\n} else if (msg.modbusRequest.address == \"1290\") {\n if (msg.payload[1] != \"65535\") {\n data = {\n \"fuel_consumption\": msg.payload[1]/100,\n }\n }\n} else if (msg.modbusRequest.address == \"1536\") {\n data = {\n \"true_power\": msg.payload[1],\n \"l1_apparent_power\": msg.payload[3],\n \"l2_apparent_power\": msg.payload[5],\n \"l3_apparent_power\": msg.payload[7],\n \"apparent_power\": msg.payload[9],\n \"l1_reactive_power\": msg.payload[11],\n \"l2_reactice_power\": msg.payload[13],\n \"l3_reactive_power\": msg.payload[15],\n \"reactive_power\": msg.payload[17],\n \"power_factor\": msg.payload[21]/100,\n };\n}\nvar payload = Object.keys(data).map((key) => { return {\"topic\": \"emf/power/\" + msg.topic + \"/\" + key, \"payload\": data[key]}});\nreturn [payload,];",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 850,
"y": 140,
"wires": [
[
"1e519cd17fcb7670"
]
]
},
{
"id": "f5b326dd071fe090",
"type": "function",
"z": "f6f2187d.f17ca8",
"name": "generator-p",
"func": "msg.topic = \"generator-p\";\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 650,
"y": 60,
"wires": [
[
"c9dcaed7f662a0db"
]
]
},
{
"id": "b440ef4f381a4c81",
"type": "modbus-flex-getter",
"z": "f6f2187d.f17ca8",
"name": "generator-q",
"showStatusActivities": true,
"showErrors": true,
"logIOActivities": false,
"server": "a9a861f61b94e425",
"useIOFile": false,
"ioFile": "",
"useIOForPayload": false,
"emptyMsgOnFail": false,
"keepMsgProperties": true,
"x": 490,
"y": 120,
"wires": [
[
"edc0a22b9bfd6152"
],
[]
]
},
{
"id": "edc0a22b9bfd6152",
"type": "function",
"z": "f6f2187d.f17ca8",
"name": "generator-q",
"func": "msg.topic = \"generator-q\";\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 650,
"y": 120,
"wires": [
[
"c9dcaed7f662a0db"
]
]
},
{
"id": "a826f73c6ed834d9",
"type": "modbus-flex-getter",
"z": "f6f2187d.f17ca8",
"name": "generator-r",
"showStatusActivities": true,
"showErrors": true,
"logIOActivities": false,
"server": "499c574bc63c9dbf",
"useIOFile": false,
"ioFile": "",
"useIOForPayload": false,
"emptyMsgOnFail": false,
"keepMsgProperties": true,
"x": 490,
"y": 180,
"wires": [
[
"141f845856e208e0"
],
[]
]
},
{
"id": "141f845856e208e0",
"type": "function",
"z": "f6f2187d.f17ca8",
"name": "generator-r",
"func": "msg.topic = \"generator-r\";\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 650,
"y": 180,
"wires": [
[
"c9dcaed7f662a0db"
]
]
},
{
"id": "b32a06952727d7f8",
"type": "modbus-flex-getter",
"z": "f6f2187d.f17ca8",
"name": "generator-s",
"showStatusActivities": true,
"showErrors": true,
"logIOActivities": false,
"server": "061f619068ad7792",
"useIOFile": false,
"ioFile": "",
"useIOForPayload": false,
"emptyMsgOnFail": false,
"keepMsgProperties": true,
"x": 490,
"y": 240,
"wires": [
[
"e114f16a51b372d3"
],
[]
]
},
{
"id": "e114f16a51b372d3",
"type": "function",
"z": "f6f2187d.f17ca8",
"name": "generator-s",
"func": "msg.topic = \"generator-s\";\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 650,
"y": 240,
"wires": [
[
"c9dcaed7f662a0db"
]
]
},
{
"id": "1e519cd17fcb7670",
"type": "mqtt out",
"z": "f6f2187d.f17ca8",
"name": "MQTT",
"topic": "",
"qos": "1",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "0d46b03dc65ea258",
"x": 1030,
"y": 140,
"wires": []
},
{
"id": "7cfcfcaad501b340",
"type": "modbus-client",
"name": "generator-p",
"clienttype": "tcp",
"bufferCommands": true,
"stateLogEnabled": false,
"queueLogEnabled": false,
"tcpHost": "172.20.24.52",
"tcpPort": "502",
"tcpType": "DEFAULT",
"serialPort": "/dev/ttyUSB",
"serialType": "RTU-BUFFERD",
"serialBaudrate": "9600",
"serialDatabits": "8",
"serialStopbits": "1",
"serialParity": "none",
"serialConnectionDelay": "100",
"serialAsciiResponseStartDelimiter": "0x3A",
"unit_id": "1",
"commandDelay": "1",
"clientTimeout": "1000",
"reconnectOnTimeout": true,
"reconnectTimeout": "2000",
"parallelUnitIdsAllowed": true
},
{
"id": "a9a861f61b94e425",
"type": "modbus-client",
"name": "generator-q",
"clienttype": "tcp",
"bufferCommands": true,
"stateLogEnabled": false,
"queueLogEnabled": false,
"tcpHost": "172.20.24.10",
"tcpPort": "502",
"tcpType": "DEFAULT",
"serialPort": "/dev/ttyUSB",
"serialType": "RTU-BUFFERD",
"serialBaudrate": "9600",
"serialDatabits": "8",
"serialStopbits": "1",
"serialParity": "none",
"serialConnectionDelay": "100",
"serialAsciiResponseStartDelimiter": "0x3A",
"unit_id": "1",
"commandDelay": "1",
"clientTimeout": "1000",
"reconnectOnTimeout": true,
"reconnectTimeout": "2000",
"parallelUnitIdsAllowed": true
},
{
"id": "499c574bc63c9dbf",
"type": "modbus-client",
"name": "generator-r",
"clienttype": "tcp",
"bufferCommands": true,
"stateLogEnabled": false,
"queueLogEnabled": false,
"tcpHost": "172.20.24.11",
"tcpPort": "502",
"tcpType": "DEFAULT",
"serialPort": "/dev/ttyUSB",
"serialType": "RTU-BUFFERD",
"serialBaudrate": "9600",
"serialDatabits": "8",
"serialStopbits": "1",
"serialParity": "none",
"serialConnectionDelay": "100",
"serialAsciiResponseStartDelimiter": "0x3A",
"unit_id": "1",
"commandDelay": "1",
"clientTimeout": "1000",
"reconnectOnTimeout": true,
"reconnectTimeout": "2000",
"parallelUnitIdsAllowed": true
},
{
"id": "061f619068ad7792",
"type": "modbus-client",
"name": "generator-s",
"clienttype": "tcp",
"bufferCommands": true,
"stateLogEnabled": false,
"queueLogEnabled": false,
"tcpHost": "172.20.24.12",
"tcpPort": "502",
"tcpType": "DEFAULT",
"serialPort": "/dev/ttyUSB",
"serialType": "RTU-BUFFERD",
"serialBaudrate": "9600",
"serialDatabits": "8",
"serialStopbits": "1",
"serialParity": "none",
"serialConnectionDelay": "100",
"serialAsciiResponseStartDelimiter": "0x3A",
"unit_id": "1",
"commandDelay": "1",
"clientTimeout": "1000",
"reconnectOnTimeout": true,
"reconnectTimeout": "2000",
"parallelUnitIdsAllowed": true
},
{
"id": "0d46b03dc65ea258",
"type": "mqtt-broker",
"name": "mqtt.emf.camp",
"broker": "mqtt.emf.camp",
"port": "1883",
"clientid": "generator-node-red",
"autoConnect": true,
"usetls": false,
"protocolVersion": "4",
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"birthMsg": {},
"closeTopic": "",
"closeQos": "0",
"closePayload": "",
"closeMsg": {},
"willTopic": "",
"willQos": "0",
"willPayload": "",
"willMsg": {},
"sessionExpiry": ""
}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment