Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • opc_zigbee
1 result

Target

Select target project
  • khlifi/zigbee_interface_server_node_red
1 result
Select Git revision
  • opc_zigbee
1 result
Show changes
Commits on Source (2)
......@@ -290,7 +290,7 @@
"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 this.sandboxFlowContext.set(\"access\", false);\n this.sandboxFlowContext.set(\"illuminance\", false);\n\n\n const sensor_Data = namespace.addFolder(rootFolder.objects, {\n \"browseName\": \"Sensor_data\"\n });\n const access_control = namespace.addFolder(rootFolder.objects, {\n \"browseName\": \"access_control\"\n });\n const access = namespace.addFolder(access_control, {\n \"browseName\": \"access_event\"\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 tempCritical = namespace.addFolder(sensor_Data, {\n \"browseName\": \"Temp_critical\"\n });\n const humidityCritical = namespace.addFolder(sensor_Data, {\n \"browseName\": \"Humidity_critical\"\n });\n const illuminance = namespace.addFolder(sensor_Data, {\n \"browseName\": \"illuminance\"\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 const temperatureCritical = namespace.addVariable({\n \"organizedBy\": tempCritical,\n \"browseName\": \"Value\",\n \"nodeId\": \"ns=1;s=Temp_critical_value\",\n \"dataType\": \"Boolean\",\n \"value\": {\n \"get\": function () {\n return new Variant({\n \"dataType\": DataType.Boolean,\n \"value\": flexServerInternals.sandboxFlowContext.get(\"critical_temperature\")\n });\n },\n \"set\": function (variant) {\n flexServerInternals.sandboxFlowContext.set(\n \"Value\",\n variant.value\n );\n return opcua.StatusCodes.Good;\n }\n }\n });\n\n const humidityCrit = namespace.addVariable({\n \"organizedBy\": humidityCritical,\n \"browseName\": \"Value\",\n \"nodeId\": \"ns=1;s=Humidity_critical_value\",\n \"dataType\": \"Boolean\",\n \"value\": {\n \"get\": function () {\n return new Variant({\n \"dataType\": DataType.Boolean,\n \"value\": flexServerInternals.sandboxFlowContext.get(\"critical_humidity\")\n });\n },\n \"set\": function (variant) {\n flexServerInternals.sandboxFlowContext.set(\n \"humiditycriticalvl\",\n variant.value\n );\n return opcua.StatusCodes.Good;\n }\n }\n });\n const accessevent= namespace.addVariable({\n \"organizedBy\": access_control,\n \"browseName\": \"Value\",\n \"nodeId\": \"ns=1;s=accessevent\",\n \"dataType\": \"Boolean\",\n \"value\": {\n \"get\": function () {\n return new Variant({\n \"dataType\": DataType.Boolean,\n \"value\": flexServerInternals.sandboxFlowContext.get(\"access\")\n });\n },\n \"set\": function (variant) {\n flexServerInternals.sandboxFlowContext.set(\n \"access\",\n variant.value\n );\n return opcua.StatusCodes.Good;\n }\n }\n });\nconst illuminance_var = namespace.addVariable({\n \"organizedBy\": illuminance,\n \"browseName\": \"illuminance\",\n \"nodeId\": \"ns=1;s=illuminance_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 \"lux\",\n Variant.value\n );\n return opcua.StatusCodes.Good;\n }\n }\n });\n \n done();\n}",
"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 this.sandboxFlowContext.set(\"humiditycriticalvl\", false);\n this.sandboxFlowContext.set(\"tempecriticalvl\", false);\n\n this.sandboxFlowContext.set(\"access\", false);\n this.sandboxFlowContext.set(\"illuminance\", false);\n\n\n const sensor_Data = namespace.addFolder(rootFolder.objects, {\n \"browseName\": \"Sensor_data\"\n });\n const access_control = namespace.addFolder(rootFolder.objects, {\n \"browseName\": \"access_control\"\n });\n const access = namespace.addFolder(access_control, {\n \"browseName\": \"access_event\"\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 tempCritical = namespace.addFolder(sensor_Data, {\n \"browseName\": \"Temp_critical\"\n });\n const humidityCritical = namespace.addFolder(sensor_Data, {\n \"browseName\": \"Humidity_critical\"\n });\n const illuminance = namespace.addFolder(sensor_Data, {\n \"browseName\": \"illuminance\"\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 const temperatureCritical = namespace.addVariable({\n \"organizedBy\": tempCritical,\n \"browseName\": \"Value\",\n \"nodeId\": \"ns=1;s=Temp_critical_value\",\n \"dataType\": \"Boolean\",\n \"value\": {\n \"get\": function () {\n return new Variant({\n \"dataType\": DataType.Boolean,\n \"value\": flexServerInternals.sandboxFlowContext.get(\"tempecriticalvl\")\n });\n },\n \"set\": function (variant) {\n flexServerInternals.sandboxFlowContext.set(\n \"tempecriticalvl\",\n variant.value\n );\n return opcua.StatusCodes.Good;\n }\n }\n });\n\n const humidityCrit = namespace.addVariable({\n \"organizedBy\": humidityCritical,\n \"browseName\": \"Value\",\n \"nodeId\": \"ns=1;s=Humidity_critical_value\",\n \"dataType\": \"Boolean\",\n \"value\": {\n \"get\": function () {\n return new Variant({\n \"dataType\": DataType.Boolean,\n \"value\": flexServerInternals.sandboxFlowContext.get(\"humiditycriticalvl\")\n });\n },\n \"set\": function (variant) {\n flexServerInternals.sandboxFlowContext.set(\n \"humiditycriticalvl\",\n variant.value\n );\n return opcua.StatusCodes.Good;\n }\n }\n });\n const accessevent= namespace.addVariable({\n \"organizedBy\": access_control,\n \"browseName\": \"Value\",\n \"nodeId\": \"ns=1;s=accessevent\",\n \"dataType\": \"Boolean\",\n \"value\": {\n \"get\": function () {\n return new Variant({\n \"dataType\": DataType.Boolean,\n \"value\": flexServerInternals.sandboxFlowContext.get(\"access\")\n });\n },\n \"set\": function (variant) {\n flexServerInternals.sandboxFlowContext.set(\n \"access\",\n variant.value\n );\n return opcua.StatusCodes.Good;\n }\n }\n });\nconst illuminance_var = namespace.addVariable({\n \"organizedBy\": illuminance,\n \"browseName\": \"illuminance\",\n \"nodeId\": \"ns=1;s=illuminance_value\",\n \"dataType\": \"Double\",\n \"value\": {\n \"get\": function () {\n return new Variant({\n \"dataType\": DataType.Double,\n \"value\": flexServerInternals.sandboxFlowContext.get(\"lux\")\n });\n },\n \"set\": function (Variant) {\n flexServerInternals.sandboxFlowContext.set(\n \"lux\",\n Variant.value\n );\n return opcua.StatusCodes.Good;\n }\n }\n });\n \n done();\n}",
"x": 540,
"y": 1120,
"wires": []
......@@ -418,7 +418,7 @@
"type": "function",
"z": "2df1dfd158b253ed",
"name": "check_critical_temperature_trigger",
"func": "var inputObject = msg.payload;\n\nvar criticalTemperature = inputObject.criticaltemp;\nvar criticalHumidity = inputObject.criticalhumidity;\n\nif (criticalTemperature || criticalHumidity) {\n // If either critical temperature or critical humidity is true\n msg.payload = \"Critical temperature or humidity condition is met.\";\n return msg;\n} else {\n // If neither critical temperature nor critical humidity is true\n msg.payload = \"Critical conditions are not met.\";\n}\n\n",
"func": "msg.topic=\"node-red-notification\"\nvar inputObject = msg.payload;\n\nvar criticalTemperature = inputObject.criticaltemp;\nvar criticalHumidity = inputObject.criticalhumidity;\n\n// Define the interval time in milliseconds (e.g., 10 minutes = 600000 ms)\nvar intervalTime = 600000;\n\nif (criticalTemperature || criticalHumidity) {\n // Get the current time\n var currentTime = Date.now();\n\n // Get the last sent time from the global context, defaulting to 0 if not set\n var lastSentTime = context.global.get('lastSentTime') || 0;\n\n // Check if the interval has passed since the last message was sent\n if (currentTime - lastSentTime > intervalTime) {\n // Update the last sent time in the global context\n context.global.set('lastSentTime', currentTime);\n\n // Set the message payload to indicate critical conditions\n msg.payload = \"Critical temperature or humidity condition is met.\";\n return msg;\n } else {\n // Interval has not passed, do not send a message\n return null;\n }\n} else {\n // Critical conditions are not met, do not send a message\n return null;\n}\n",
"outputs": 1,
"timeout": 0,
"noerr": 0,
......@@ -430,7 +430,7 @@
"wires": [
[
"213873f1f694ec7c",
"be57ed18809f8271"
"40ab787b1fb4316f"
]
]
},
......@@ -455,16 +455,16 @@
"id": "be57ed18809f8271",
"type": "e-mail",
"z": "2df1dfd158b253ed",
"server": "smtp.gmail.com",
"port": "465",
"server": "mail.gmx.net",
"port": "587",
"authtype": "BASIC",
"saslformat": true,
"token": "oauth2Response.access_token",
"secure": true,
"secure": false,
"tls": true,
"name": "waelkhlifi12@gmail.com",
"name": "node-redpi@gmx.de",
"dname": "notification_temperature",
"x": 610,
"x": 890,
"y": 900,
"wires": []
},
......@@ -846,7 +846,7 @@
"id": "463222ef6cdb8ddb",
"type": "function",
"z": "2df1dfd158b253ed",
"name": "set humidity event as global var",
"name": "set light event as global var",
"func": "var lighton= msg.payload.turnlighton;\nvar lightoff =msg.payload.turnlightoff;\nglobal.set(\"light_is_on\", lighton);\nglobal.set(\"light_is_off\", lightoff);\n\n\nreturn lighton,lightoff;\n",
"outputs": 1,
"timeout": 0,
......@@ -854,7 +854,7 @@
"initialize": "",
"finalize": "",
"libs": [],
"x": 630,
"x": 620,
"y": 420,
"wires": [
[
......@@ -878,5 +878,79 @@
"x": 820,
"y": 420,
"wires": []
},
{
"id": "fa77ab7e9cddaf5d",
"type": "inject",
"z": "2df1dfd158b253ed",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 80,
"y": 860,
"wires": [
[
"4e4eab1d17ba667b"
]
]
},
{
"id": "40ab787b1fb4316f",
"type": "trigger",
"z": "2df1dfd158b253ed",
"name": "email_trigger",
"op1": "1",
"op2": "0",
"op1type": "str",
"op2type": "str",
"duration": "250",
"extend": false,
"overrideDelay": false,
"units": "ms",
"reset": "",
"bytopic": "all",
"topic": "topic",
"outputs": 1,
"x": 390,
"y": 920,
"wires": [
[
"95a41fd1732aba03"
]
]
},
{
"id": "95a41fd1732aba03",
"type": "function",
"z": "2df1dfd158b253ed",
"name": "function 3",
"func": "msg.topic=\"node-red-notification\";\nmsg.payload=\" critical values reached\";\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 600,
"y": 920,
"wires": [
[
"be57ed18809f8271"
]
]
}
]
\ No newline at end of file
{
"9355c4bbb1adc9e0": {},
"ff246c28cc0fa0af": {}
"ff246c28cc0fa0af": {},
"be57ed18809f8271": {
"userid": "node-redpi@gmx.de",
"password": "node-redpi"
}
}
\ No newline at end of file