diff --git a/zigbee_node_red.json b/zigbee_node_red.json index fabfea9b07c89b847270b44f179f07629a13c1a5..f97c94356cc1145ff50f275e46650de53ec50c3d 100644 --- a/zigbee_node_red.json +++ b/zigbee_node_red.json @@ -7,6 +7,45 @@ "info": "", "env": [] }, + { + "id": "2df1dfd158b253ed", + "type": "tab", + "label": "Flow 2", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "9355c4bbb1adc9e0", + "type": "mqtt-broker", + "name": "zigbee2mqtt", + "broker": "mqtt://192.168.1.101", + "port": "1883", + "clientid": "", + "autoConnect": true, + "usetls": false, + "protocolVersion": "4", + "keepalive": "60", + "cleansession": true, + "autoUnsubscribe": true, + "birthTopic": "", + "birthQos": "0", + "birthRetain": "false", + "birthPayload": "", + "birthMsg": {}, + "closeTopic": "", + "closeQos": "0", + "closeRetain": "false", + "closePayload": "", + "closeMsg": {}, + "willTopic": "", + "willQos": "0", + "willRetain": "false", + "willPayload": "", + "willMsg": {}, + "userProps": "", + "sessionExpiry": "" + }, { "id": "8b5eb2f1c770a105", "type": "pythonshell in", @@ -39,5 +78,228 @@ "x": 750, "y": 320, "wires": [] + }, + { + "id": "5504d7e57750a247", + "type": "mqtt in", + "z": "2df1dfd158b253ed", + "name": "sensor_data", + "topic": "zigbee2mqtt/0x404ccafffe513a60", + "qos": "1", + "datatype": "auto-detect", + "broker": "9355c4bbb1adc9e0", + "nl": false, + "rap": true, + "rh": 0, + "inputs": 0, + "x": 170, + "y": 260, + "wires": [ + [ + "fe464b47c0eff2b8", + "7a219abcac0d9d02" + ] + ] + }, + { + "id": "fe464b47c0eff2b8", + "type": "function", + "z": "2df1dfd158b253ed", + "name": "function 1", + "func": "msg.payload= msg.payload.humidity;\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 360, + "y": 320, + "wires": [ + [ + "de144343b10bcc1d" + ] + ] + }, + { + "id": "e4a68ecef4f0edcc", + "type": "debug", + "z": "2df1dfd158b253ed", + "name": "debug 3", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "false", + "statusVal": "", + "statusType": "auto", + "x": 1000, + "y": 240, + "wires": [] + }, + { + "id": "7a219abcac0d9d02", + "type": "function", + "z": "2df1dfd158b253ed", + "name": "function 2", + "func": "msg.payload= msg.payload.temperature;\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 380, + "y": 200, + "wires": [ + [ + "3af0fa44188c14b9" + ] + ] + }, + { + "id": "de144343b10bcc1d", + "type": "function", + "z": "2df1dfd158b253ed", + "name": "set humidity as global variable", + "func": "global.set(\"humidity\", msg.payload);\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 690, + "y": 320, + "wires": [ + [ + "e4a68ecef4f0edcc" + ] + ] + }, + { + "id": "3af0fa44188c14b9", + "type": "function", + "z": "2df1dfd158b253ed", + "name": "set temperature as global variable", + "func": "global.set(\"temperature\", msg.payload);\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 680, + "y": 200, + "wires": [ + [ + "e4a68ecef4f0edcc" + ] + ] + }, + { + "id": "24d19c09ccd96cac", + "type": "inject", + "z": "2df1dfd158b253ed", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "2", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payload": "", + "payloadType": "date", + "x": 270, + "y": 440, + "wires": [ + [ + "34660c95bc35a27d" + ] + ] + }, + { + "id": "34660c95bc35a27d", + "type": "function", + "z": "2df1dfd158b253ed", + "name": "Get global variables", + "func": "flow.set('Temperature', global.get(\"temperature\"));\nflow.set('Humidity', global.get(\"humidity\"));\nmsg.payload = [\n\nflow.get('Temperature'),\nflow.get('Humidity')\n\n];\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 480, + "y": 440, + "wires": [ + [ + "e0289d94ffdc6595" + ] + ] + }, + { + "id": "e0289d94ffdc6595", + "type": "debug", + "z": "2df1dfd158b253ed", + "name": "debug 7", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "false", + "statusVal": "", + "statusType": "auto", + "x": 700, + "y": 440, + "wires": [] + }, + { + "id": "ef89c69c7929cec3", + "type": "opcua-compact-server", + "z": "2df1dfd158b253ed", + "port": "54844", + "endpoint": "", + "productUri": "", + "acceptExternalCommands": true, + "maxAllowedSessionNumber": 10, + "maxConnectionsPerEndpoint": 10, + "maxAllowedSubscriptionNumber": 100, + "alternateHostname": "", + "name": "", + "showStatusActivities": true, + "showErrors": true, + "allowAnonymous": true, + "individualCerts": false, + "isAuditing": false, + "serverDiscovery": true, + "users": [], + "xmlsetsOPCUA": [], + "publicCertificateFile": "", + "privateCertificateFile": "", + "registerServerMethod": "1", + "discoveryServerEndpointUrl": "opc.tcp://localhost:54840", + "capabilitiesForMDNS": "", + "maxNodesPerRead": 1000, + "maxNodesPerWrite": 1000, + "maxNodesPerHistoryReadData": 100, + "maxNodesPerBrowse": 3000, + "maxBrowseContinuationPoints": 10, + "maxHistoryContinuationPoints": 10, + "delayToInit": 1000, + "delayToClose": 200, + "serverShutdownTimeout": 100, + "addressSpaceScript": "function constructAlarmAddressSpace(server, addressSpace, eventObjects, done) {\n // server = the created node-opcua server\n // addressSpace = address space of the node-opcua server\n // eventObjects = add event variables here to hold them in memory from this script\n\n // internal sandbox objects are:\n // node = the compact server node,\n // coreServer = core compact server object for debug and access to NodeOPCUA\n // this.sandboxNodeContext = node context node-red\n // this.sandboxFlowContext = flow context node-red\n // this.sandboxGlobalContext = global context node-red\n // this.sandboxEnv = env variables\n // timeout and interval functions as expected from nodejs\n\n \n const opcua = coreServer.choreCompact.opcua;\n const LocalizedText = opcua.LocalizedText;\n const namespace = addressSpace.getOwnNamespace();\n\n const Variant = opcua.Variant;\n const DataType = opcua.DataType;\n const DataValue = opcua.DataValue;\n\n var flexServerInternals = this;\n\n \n const rootFolder = addressSpace.findNode(\"RootFolder\");\n\n this.sandboxFlowContext.set(\"Humidity\", false);\n this.sandboxFlowContext.set(\"Temperature\", false);\n\n const sensor_Data = namespace.addFolder(rootFolder.objects, {\n \"browseName\": \"Sensor_data\"\n });\n const temperature = namespace.addFolder(sensor_Data, {\n \"browseName\": \"temperature\"\n });\n const humidity = namespace.addFolder(sensor_Data, {\n \"browseName\": \"humidity\"\n });\n const temperature_float = namespace.addFolder(temperature, {\n \"browseName\": \"Float_C\"\n });\n const humidity_float = namespace.addFolder(humidity, {\n \"browseName\": \"humidity_%\"\n });\n const temperature_var = namespace.addVariable({\n \"organizedBy\": temperature_float,\n \"browseName\": \"temperature\",\n \"nodeId\": \"ns=1;s=Temperature_value\",\n \"dataType\": \"Double\",\n \"value\": {\n \"get\": function () {\n return new Variant({\n \"dataType\": DataType.Double,\n \"value\": flexServerInternals.sandboxFlowContext.get(\"Temperature\")\n });\n },\n \"set\": function (Variant) {\n flexServerInternals.sandboxFlowContext.set(\n \"Temperature\",\n Variant.value\n );\n return opcua.StatusCodes.Good;\n }\n }\n });\n const humidity_var = namespace.addVariable({\n \"organizedBy\": humidity_float,\n \"browseName\": \"Humidity\",\n \"nodeId\": \"ns=1;s=Humidity_value\",\n \"dataType\": \"Double\",\n \"value\": {\n \"get\": function () {\n return new Variant({\n \"dataType\": DataType.Double,\n \"value\": flexServerInternals.sandboxFlowContext.get(\"Humidity\")\n });\n },\n \"set\": function (Variant) {\n flexServerInternals.sandboxFlowContext.set(\n \"Humidity\",\n Variant.value\n );\n return opcua.StatusCodes.Good;\n }\n }\n });\n done();\n}", + "x": 540, + "y": 540, + "wires": [] } ] \ No newline at end of file