码迷,mamicode.com
首页 > 数据库 > 详细

智能家居填坑004 Modbus接入逻辑篇

时间:2020-02-23 16:42:04      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:inter   targe   stat   jpeg   events   ror   register   win   object   

背景

自复位开关->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

}] 

 

智能家居填坑004 Modbus接入逻辑篇

标签:inter   targe   stat   jpeg   events   ror   register   win   object   

原文地址:https://www.cnblogs.com/kiddfu/p/12350037.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!