背景
自复位开关->modbus DI模块->node-red->modbus DO模块->继电器->设备(灯具或插座)
参照003篇,已经成功接入两个模块。
思路
在nr里定义一个变量用来记录设备状态,所有的操控都是直接操作这个变量,然后用变量去控制相应的设备。这样,无论控制源是开关、语音助手、传感器、场景、人工智能等都转化为对变量的直接操控。变量可以储存为全局变量或者写入数据库。
var switchCFD = {payload:{power:true,lm:100,colortemperature:100}};
var socketTV = {payload:{power:true}};
var fanNewAir = {payload:{power:true,grade:1}};
然后通过写modbus操作统一改变设备状态。
包括接入的米家设备、mqtt设备等都是通过这个思路来更改状态。
演示
整体流预览
1、初始化,定义全局变量,写入初始状态。
2、获取按键状态、改变全局变量
3、预览
https://v.youku.com/v_show/id_XNDU1ODA2NTU4MA==.html
https://v.youku.com/v_show/id_XNDU1ODA2NTU4MA==.html
https://v.youku.com/v_show/id_XNDU1ODA2NTU4MA==.html
4、演示流
[ { "id": "57b89f19.5a761", "type": "inject", "z": "f62cb442.d1aef", "name": "", "topic": "", "payload": "", "payloadType": "date", "repeat": "0.2", "crontab": "", "once": true, "onceDelay": "0", "x": 100, "y": 360, "wires": [ [ "e82fb085.3fbf8", "821476c.4284d88" ] ] }, { "id": "5aceaa2f.2006ac", "type": "inject", "z": "f62cb442.d1aef", "name": "初始化", "topic": "", "payload": "", "payloadType": "date", "repeat": "", "crontab": "", "once": true, "onceDelay": "0", "x": 100, "y": 300, "wires": [ [ "2874b18e.b524ce" ] ] }, { "id": "2874b18e.b524ce", "type": "function", "z": "f62cb442.d1aef", "name": "定义状态数组", "func": "var VswitchCFD = {payload:{power:false,lm:100,colortemperature:100}};\nvar VsocketTV = {payload:{power:false}};\nvar VfanNewAir = {payload:{power:false,grade:0}};\nglobal.set(‘switchCFD‘,VswitchCFD);\nglobal.set(‘socketTV‘,VsocketTV);\nglobal.set(‘fanNewAir‘,VfanNewAir);\n\nreturn;", "outputs": 0, "noerr": 0, "x": 280, "y": 300, "wires": [] }, { "id": "e82fb085.3fbf8", "type": "function", "z": "f62cb442.d1aef", "name": "Read 0-2 on Unit 1 FC2", "func": "msg.payload = { value: msg.payload, ‘fc‘: 2, ‘unitid‘: 1, ‘address‘: 0 , ‘quantity‘: 3 };\nreturn msg;", "outputs": 1, "noerr": 0, "x": 310, "y": 420, "wires": [ [ "5e3cb9b1.efd778" ] ] }, { "id": "821476c.4284d88", "type": "function", "z": "f62cb442.d1aef", "name": "Write 0-2 on Unit 1 FC15", "func": "var Value = [global.get(‘switchCFD‘).payload.power,global.get(‘socketTV‘).payload.power,global.get(‘fanNewAir‘).payload.power];\nmsg.payload = { value: Value, ‘fc‘: 15, ‘unitid‘: 1, ‘address‘: 0 , ‘quantity‘: 3 };\nreturn msg;", "outputs": 1, "noerr": 0, "x": 310, "y": 360, "wires": [ [ "2f8d6d5b.7aa85a" ] ] }, { "id": "dc4ccbea.224f8", "type": "rbe", "z": "f62cb442.d1aef", "name": "", "func": "rbe", "gap": "", "start": "", "inout": "out", "property": "payload", "x": 710, "y": 420, "wires": [ [ "5ad43590.d6765c" ] ] }, { "id": "5e3cb9b1.efd778", "type": "modbus-flex-getter", "z": "f62cb442.d1aef", "name": "获取按键状态", "showStatusActivities": false, "showErrors": false, "logIOActivities": false, "server": "54b233c9.eea30c", "useIOFile": false, "ioFile": "", "useIOForPayload": false, "x": 540, "y": 420, "wires": [ [ "dc4ccbea.224f8" ], [] ] }, { "id": "2f8d6d5b.7aa85a", "type": "modbus-flex-write", "z": "f62cb442.d1aef", "name": "更改设备状态", "showStatusActivities": false, "showErrors": false, "server": "54b233c9.eea30c", "x": 540, "y": 360, "wires": [ [ "7170acc1.c51154" ], [] ] }, { "id": "5ad43590.d6765c", "type": "function", "z": "f62cb442.d1aef", "name": "", "func": "var value = msg.payload;\n\nvar msg0={payload:value[0]};\nvar msg1={payload:value[1]};\nvar msg2={payload:value[2]};\n\nreturn [msg0,msg1,msg2];", "outputs": 3, "noerr": 0, "x": 250, "y": 560, "wires": [ [ "e1e76528.64858" ], [], [] ] }, { "id": "e1e76528.64858", "type": "function", "z": "f62cb442.d1aef", "name": "00 厨房灯", "func": "var Value = global.get(‘switchCFD‘);\nif(msg.payload === true)\nValue.payload.power = !Value.payload.power;\nglobal.set(‘switchCFD‘,Value);\nreturn ;", "outputs": 0, "noerr": 0, "x": 400, "y": 540, "wires": [] }, { "id": "9fad2eef.2d3f2", "type": "comment", "z": "f62cb442.d1aef", "name": "初始化 断电、重启后执行,初始设备状态。只在最初执行一次", "info": "", "x": 260, "y": 260, "wires": [] }, { "id": "7170acc1.c51154", "type": "debug", "z": "f62cb442.d1aef", "name": "反馈设备状态", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "x": 740, "y": 360, "wires": [] }, { "id": "2c486cf.a83a494", "type": "modbus-server", "z": "f62cb442.d1aef", "name": "虚拟modbus", "logEnabled": false, "hostname": "127.0.0.1", "serverPort": 10502, "responseDelay": 100, "delayUnit": "ms", "coilsBufferSize": 10000, "holdingBufferSize": 10000, "inputBufferSize": 10000, "discreteBufferSize": 10000, "showErrors": false, "x": 290, "y": 100, "wires": [ [ "770f8ac1.9ad934" ], [ "91ad517b.724b78" ], [ "7e004d83.580e64" ], [ "2cbdcd7d.7e36ea" ] ] }, { "id": "770f8ac1.9ad934", "type": "modbus-response", "z": "f62cb442.d1aef", "name": "", "registerShowMax": 20, "x": 630, "y": 20, "wires": [] }, { "id": "91ad517b.724b78", "type": "modbus-response", "z": "f62cb442.d1aef", "name": "", "registerShowMax": 20, "x": 630, "y": 80, "wires": [] }, { "id": "7e004d83.580e64", "type": "modbus-response", "z": "f62cb442.d1aef", "name": "", "registerShowMax": 20, "x": 630, "y": 140, "wires": [] }, { "id": "2cbdcd7d.7e36ea", "type": "modbus-response", "z": "f62cb442.d1aef", "name": "", "registerShowMax": 20, "x": 630, "y": 200, "wires": [] }, { "id": "f455317d.4ec03", "type": "inject", "z": "f62cb442.d1aef", "name": "", "topic": "", "payload": "", "payloadType": "date", "repeat": "", "crontab": "", "once": true, "onceDelay": 0.1, "x": 100, "y": 100, "wires": [ [ "2c486cf.a83a494" ] ] }, { "id": "1c1973de.98f044", "type": "comment", "z": "f62cb442.d1aef", "name": "虚拟modbus 演示用", "info": "", "x": 130, "y": 40, "wires": [] }, { "id": "54b233c9.eea30c", "type": "modbus-client", "z": "", "name": "", "clienttype": "tcp", "bufferCommands": true, "stateLogEnabled": false, "tcpHost": "127.0.0.1", "tcpPort": "10502", "tcpType": "DEFAULT", "serialPort": "/dev/ttyUSB", "serialType": "RTU-BUFFERD", "serialBaudrate": "9600", "serialDatabits": "8", "serialStopbits": "1", "serialParity": "none", "serialConnectionDelay": "100", "unit_id": "1", "commandDelay": "1", "clientTimeout": "1000", "reconnectOnTimeout": true, "reconnectTimeout": "2000", "parallelUnitIdsAllowed": true }]
原文地址:https://www.cnblogs.com/kiddfu/p/12350037.html
时间: 2024-10-31 10:48:55