[{"id":"2fbdd8.1b59b228","type":"comment","z":"f634ea1a.5e4518","name":"Finder 7E.64 Energy Meter","info":"Modbus adress: 01","x":150,"y":40,"wires":[]},{"id":"8f1dd2f2.7ede9","type":"modbus-read","z":"f634ea1a.5e4518","name":"Voltage","topic":"","showStatusActivities":true,"logIOActivities":false,"showErrors":true,"unitid":"1","dataType":"InputRegister","adr":"4108","quantity":"2","rate":"5","rateUnit":"s","delayOnStart":false,"startDelayTime":"","server":"56dd98d7.89a418","useIOFile":false,"ioFile":"","useIOForPayload":false,"x":110,"y":120,"wires":[["52018fbb.154cb"],[]]},{"id":"52018fbb.154cb","type":"function","z":"f634ea1a.5e4518","name":"Voltage","func":"var rawData = new ArrayBuffer(4);\nvar intView = new Uint16Array(rawData);\nvar fltView = new Float32Array(rawData);\n\nintView[0] = msg.payload[1]; //low\nintView[1] = msg.payload[0]; //high\n\nmsg.payload = parseFloat(fltView[0].toFixed(1));\nmsg.topic = \"voltage\";\n\nnode.status({fill:\"blue\",shape:\"ring\",text:msg.topic + \":\" + msg.payload}); \n\nreturn msg;","outputs":1,"noerr":0,"x":300,"y":120,"wires":[["a0106d1f.c193e","98df30ef.5acb9"]]},{"id":"1a1a2f8e.f21e8","type":"modbus-queue-info","z":"f634ea1a.5e4518","name":"Finder_queue","topic":"","unitid":"01","queueReadIntervalTime":"1000","lowLowLevel":"1","lowLevel":75,"highLevel":150,"highHighLevel":300,"server":"56dd98d7.89a418","errorOnHighLevel":false,"x":523.1428527832031,"y":500.107177734375,"wires":[["38833ff9.d84ad"]]},{"id":"f63e757c.55a408","type":"inject","z":"f634ea1a.5e4518","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":120,"y":500,"wires":[["e107381a.652248"]]},{"id":"e107381a.652248","type":"change","z":"f634ea1a.5e4518","name":"Reset queue","rules":[{"t":"set","p":"resetQueue","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":321.14286041259766,"y":501.1071891784668,"wires":[["1a1a2f8e.f21e8"]]},{"id":"687834ff.1a6c3c","type":"function","z":"f634ea1a.5e4518","name":"Current","func":"var rawData = new ArrayBuffer(4);\nvar intView = new Uint16Array(rawData);\nvar fltView = new Float32Array(rawData);\n\nintView[0] = msg.payload[1]; //low\nintView[1] = msg.payload[0]; //high\n\nmsg.payload = parseFloat(fltView[0].toFixed(1));\nmsg.topic = \"current\";\n\nnode.status({fill:\"blue\",shape:\"ring\",text:msg.topic + \":\" + msg.payload}); \n\nreturn msg;","outputs":1,"noerr":0,"x":300,"y":180,"wires":[["daa7b6cf.fe8838","98df30ef.5acb9"]]},{"id":"b40ef87b.2f5178","type":"function","z":"f634ea1a.5e4518","name":"Power","func":"var rawData = new ArrayBuffer(4);\nvar intView = new Uint16Array(rawData);\nvar fltView = new Float32Array(rawData);\n\nintView[0] = msg.payload[1]; //low\nintView[1] = msg.payload[0]; //high\n\nmsg.payload = parseFloat(fltView[0].toFixed(1));\nmsg.topic = \"power\";\n\nnode.status({fill:\"blue\",shape:\"ring\",text:msg.topic + \":\" + msg.payload}); \n\nreturn msg;","outputs":1,"noerr":0,"x":290,"y":240,"wires":[["1d5c3ad0.ba5ca5","98df30ef.5acb9"]]},{"id":"57575b16.ec9ba4","type":"function","z":"f634ea1a.5e4518","name":"Frequency","func":"var rawData = new ArrayBuffer(4);\nvar intView = new Uint16Array(rawData);\nvar fltView = new Float32Array(rawData);\n\nintView[0] = msg.payload[1]; //low\nintView[1] = msg.payload[0]; //high\n\nmsg.payload = parseFloat(fltView[0].toFixed(1));\nmsg.topic = \"frequency\";\n\nnode.status({fill:\"blue\",shape:\"ring\",text:msg.topic + \":\" + msg.payload}); \n\nreturn msg;","outputs":1,"noerr":0,"x":310,"y":300,"wires":[["4039d88.ece1528","98df30ef.5acb9"]]},{"id":"54808570.5e2eec","type":"function","z":"f634ea1a.5e4518","name":"Energy","func":"var rawData = new ArrayBuffer(4);\nvar intView = new Uint16Array(rawData);\nvar fltView = new Float32Array(rawData);\n\nintView[0] = msg.payload[1]; //low\nintView[1] = msg.payload[0]; //high\n\nmsg.payload = parseFloat(fltView[0].toFixed(2));\nmsg.topic = \"energy\";\n\nnode.status({fill:\"blue\",shape:\"ring\",text:msg.topic + \":\" + msg.payload}); \n\nreturn msg;","outputs":1,"noerr":0,"x":300,"y":360,"wires":[["eba50fe6.09a2f","98df30ef.5acb9"]]},{"id":"6e4b40db.caf37","type":"modbus-read","z":"f634ea1a.5e4518","name":"Current","topic":"","showStatusActivities":true,"logIOActivities":false,"showErrors":true,"unitid":"01","dataType":"InputRegister","adr":"4118","quantity":"2","rate":"5","rateUnit":"s","delayOnStart":false,"startDelayTime":"","server":"56dd98d7.89a418","useIOFile":false,"ioFile":"","useIOForPayload":false,"x":110,"y":180,"wires":[["687834ff.1a6c3c"],[]]},{"id":"7fb2ca8b.7271b4","type":"modbus-read","z":"f634ea1a.5e4518","name":" Power","topic":"","showStatusActivities":true,"logIOActivities":false,"showErrors":true,"unitid":"01","dataType":"InputRegister","adr":"4134","quantity":"2","rate":"5","rateUnit":"s","delayOnStart":false,"startDelayTime":"","server":"56dd98d7.89a418","useIOFile":false,"ioFile":"","useIOForPayload":false,"x":110,"y":240,"wires":[["b40ef87b.2f5178"],[]]},{"id":"32fbba46.d17626","type":"modbus-read","z":"f634ea1a.5e4518","name":"Frequency","topic":"","showStatusActivities":true,"logIOActivities":false,"showErrors":true,"unitid":"01","dataType":"InputRegister","adr":"4152","quantity":"2","rate":"5","rateUnit":"s","delayOnStart":false,"startDelayTime":"","server":"56dd98d7.89a418","useIOFile":false,"ioFile":"","useIOForPayload":false,"x":120,"y":300,"wires":[["57575b16.ec9ba4"],[]]},{"id":"1d5b12a1.072e6d","type":"modbus-read","z":"f634ea1a.5e4518","name":" Energy","topic":"","showStatusActivities":true,"logIOActivities":false,"showErrors":true,"unitid":"01","dataType":"InputRegister","adr":"4358","quantity":"2","rate":"5","rateUnit":"s","delayOnStart":false,"startDelayTime":"","server":"56dd98d7.89a418","useIOFile":false,"ioFile":"","useIOForPayload":false,"x":110,"y":360,"wires":[["54808570.5e2eec","c8f43072.3e2e3"],[]]},{"id":"a0106d1f.c193e","type":"ui_text","z":"f634ea1a.5e4518","group":"b7d67d23.1babd","order":0,"width":0,"height":0,"name":"","label":"Voltage","format":"{{msg.payload}} V","layout":"row-spread","x":540,"y":120,"wires":[]},{"id":"daa7b6cf.fe8838","type":"ui_text","z":"f634ea1a.5e4518","group":"b7d67d23.1babd","order":0,"width":0,"height":0,"name":"","label":"Current","format":"{{msg.payload}} A","layout":"row-spread","x":540,"y":180,"wires":[]},{"id":"1d5c3ad0.ba5ca5","type":"ui_text","z":"f634ea1a.5e4518","group":"b7d67d23.1babd","order":0,"width":0,"height":0,"name":"","label":"Power","format":"{{msg.payload}} W","layout":"row-spread","x":530,"y":240,"wires":[]},{"id":"4039d88.ece1528","type":"ui_text","z":"f634ea1a.5e4518","group":"b7d67d23.1babd","order":0,"width":0,"height":0,"name":"","label":"Frequency","format":"{{msg.payload}} Hz","layout":"row-spread","x":550,"y":300,"wires":[]},{"id":"eba50fe6.09a2f","type":"ui_text","z":"f634ea1a.5e4518","group":"b7d67d23.1babd","order":0,"width":0,"height":0,"name":"","label":"Total Energy","format":"{{msg.payload}} Wh","layout":"row-spread","x":550,"y":360,"wires":[]},{"id":"98df30ef.5acb9","type":"function","z":"f634ea1a.5e4518","name":"Build object","func":"watch_topic = \"energy\";\nvar output = {};\n\ncontext.set(msg.topic,msg.payload);\n\nif (context.get(\"voltage\")!==undefined) {\n output.voltage = context.get(\"voltage\");\n}\nif (context.get(\"current\")!==undefined) {\n output.current = context.get(\"current\");\n}\nif (context.get(\"power\")!==undefined) {\n output.power = context.get(\"power\");\n}\nif (context.get(\"frequency\")!==undefined) {\n output.frequency = context.get(\"frequency\");\n}\nif (context.get(\"energy\")!==undefined) {\n output.energy = context.get(\"energy\");\n}\nmsg.payload = output;\n\nif (msg.topic===watch_topic) {\n msg.topic = \"finder 7e.64\";\n return msg;\n}","outputs":1,"noerr":0,"x":790,"y":120,"wires":[["e7978b15.f0d338"]]},{"id":"80f5b5e7.9e7128","type":"function","z":"f634ea1a.5e4518","name":"reset on HighHigh","func":"if(\"high high level reached\" === msg.state) {\n msg.resetQueue = true;\n return msg;\n}\n","outputs":1,"noerr":0,"x":390,"y":600,"wires":[["1a1a2f8e.f21e8","b8be59e.11861a8"]]},{"id":"439656b8.3628b8","type":"catch","z":"f634ea1a.5e4518","name":"Catch queue errors","scope":["1a1a2f8e.f21e8"],"x":130,"y":600,"wires":[["80f5b5e7.9e7128"]]},{"id":"8693588c.5b2198","type":"comment","z":"f634ea1a.5e4518","name":"Error handling","info":"","x":118,"y":555,"wires":[]},{"id":"b8be59e.11861a8","type":"function","z":"f634ea1a.5e4518","name":"Diagnostic input message structure","func":"// setting a global flag that the solar system is down\n\nmsg.payload = \"SDM120 modbus queue reached high level, resetting. (\" + msg.state + \")\";\nmsg.system = 4; // System id, use 1 for Dummy\n//msg.state = 1; // specify if the message is to change system status\nmsg.severity = 1; // 0: information, 1: warning, 2: error\nmsg.email = false; // if separate email should be sent\n//msg.emailtext = \"Clean up step of the SAIA log backup has failed\";\nreturn msg;","outputs":1,"noerr":0,"x":690,"y":599,"wires":[["a890b24b.6802f"]]},{"id":"a890b24b.6802f","type":"link out","z":"f634ea1a.5e4518","name":"","links":["13e089a7.73cb46"],"x":876,"y":599,"wires":[]},{"id":"e2df8c83.a6365","type":"catch","z":"f634ea1a.5e4518","name":"Modbus read errors","scope":["6e4b40db.caf37","1d5b12a1.072e6d","32fbba46.d17626","7fb2ca8b.7271b4","8f1dd2f2.7ede9","2fbdd8.1b59b228"],"x":130,"y":660,"wires":[["d7fdc8f.540ed38"]]},{"id":"d7fdc8f.540ed38","type":"function","z":"f634ea1a.5e4518","name":"Diagnostic input message structure","func":"// setting a global flag that the solar system is down\n\nmsg.payload = \"SDM120 modbus error: \" + msg.error.message;\nmsg.system = 4; // System id, use 1 for Dummy\n//msg.state = 1; // specify if the message is to change system status\nmsg.severity = 1; // 0: information, 1: warning, 2: error\nmsg.email = false; // if separate email should be sent\n//msg.emailtext = \"Clean up step of the SAIA log backup has failed\";\nreturn msg;","outputs":1,"noerr":0,"x":440,"y":660,"wires":[["c974e64d.e00e38"]]},{"id":"c974e64d.e00e38","type":"link out","z":"f634ea1a.5e4518","name":"","links":["13e089a7.73cb46"],"x":635,"y":660,"wires":[]},{"id":"38833ff9.d84ad","type":"debug","z":"f634ea1a.5e4518","name":"","active":false,"console":"false","complete":"true","x":704.0000076293945,"y":499.2500247955322,"wires":[]},{"id":"c8f43072.3e2e3","type":"function","z":"f634ea1a.5e4518","name":"Health check","func":"var devicename = \"finder\"; // Device name used for context variable\nvar system_id = 1; // System id number for diagnostic update\nvar online_threshold = 10; // Seconds between updates under which the device is considered online\nvar offline_threshold = 30; // Seconds between updates above which the device is considered offline\n\nvar temp = context.get(devicename+\"_update\");\nvar current = new Date();\nmsg.payload = \"No data\";\nmsg.warning = false;\nif (msg.topic!==\"timecheck\") {\n // Do not update the context if it is triggered by the check inject node\n context.set(devicename+\"_update\",current);\n}\nif (temp===undefined) {\n // this will be the case when node-red is booting up or redeployed\n context.set(devicename+\"_update\",current);\n}\n\nif (temp!==undefined) {\n current = current - temp;\n current = Math.floor(current/1000);\n var minute = Math.floor(current/60);\n var hour = Math.floor(minute/60);\n var day = Math.floor(hour/24);\n if (current>24*60*60) {\n msg.payload = \"Last update \" + day + \" days, \" + hour%24 + \" hours, \" + minute%60 + \" minutes, \" + current%60 + \" seconds ago\";\n } else if (current>60*60) {\n msg.payload = \"Last update \" + hour%24 + \" hours, \" + minute%60 + \" minutes, \" + current%60 + \" seconds ago\";\n } else if (current>60) {\n msg.payload = \"Last update \" + minute%60 + \" minutes, \" + current%60 + \" seconds ago\";\n } else {\n msg.payload = \"Last update \" + current%60 + \" seconds ago\";\n }\n\n if (context.get(devicename+\"_state\")!==1) {\n if (current<online_threshold) {\n msg.payload = \"SDM120 is now online\";\n msg.system = system_id; // System id, use 1 for Dummy\n msg.state = 1; // specify if the message is to change system status\n msg.severity = 0; // 0: information, 1: warning, 2: error\n //msg.email = true; // if separate email should be sent\n //msg.emailtext = \"\"; this a long text which goes into the email \n msg.warning = true;\n context.set(devicename+\"_state\",1);\n }\n } else {\n if (current>offline_threshold) {\n msg.payload = \"SDM120 is not transmitting\";\n msg.system = system_id; // System id, use 1 for Dummy\n msg.state = 99; // specify if the message is to change system status\n msg.severity = 2; // 0: information, 1: warning, 2: error\n //msg.email = true; // if separate email should be sent\n //msg.emailtext = \"\"; this a long text which goes into the email \n msg.warning = true;\n context.set(devicename+\"_state\",99);\n }\n }\n \n \n}\n\nnode.status({fill:\"blue\",shape:\"ring\",text:msg.payload});\n\nreturn msg;","outputs":1,"noerr":0,"x":330,"y":440,"wires":[["d49662cf.00423"]]},{"id":"7b086717.8318b8","type":"inject","z":"f634ea1a.5e4518","name":"Check","topic":"timecheck","payload":"","payloadType":"date","repeat":"1","crontab":"","once":false,"x":120,"y":440,"wires":[["c8f43072.3e2e3"]]},{"id":"d49662cf.00423","type":"switch","z":"f634ea1a.5e4518","name":"Update diag?","property":"warning","propertyType":"msg","rules":[{"t":"true"}],"checkall":"true","outputs":1,"x":510,"y":440,"wires":[["b9edea2d.2d8228"]]},{"id":"b9edea2d.2d8228","type":"link out","z":"f634ea1a.5e4518","name":"","links":["13e089a7.73cb46"],"x":675,"y":440,"wires":[]},{"id":"e7978b15.f0d338","type":"json","z":"f634ea1a.5e4518","name":"","property":"payload","action":"obj","pretty":false,"x":970,"y":120,"wires":[["bba6a74e.6b9838","78d9184b.7a3e98"]]},{"id":"fb22bd4a.b6c42","type":"debug","z":"f634ea1a.5e4518","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":1170,"y":240,"wires":[]},{"id":"bba6a74e.6b9838","type":"function","z":"f634ea1a.5e4518","name":"Extract for domoticz","func":"\nnode.log (\"Power and Energy to Domoticz HTTP\");\nvar power = JSON.parse(msg.payload.power);\nvar energy = JSON.parse(msg.payload.energy);\nmsg.url = \"127.0.0.1:8090/json.htm?type=command¶m=udevice&idx=12&nvalue=0&svalue=\"+power +\";\"+energy ;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":200,"wires":[["fb22bd4a.b6c42","d34d89c.5491078"]]},{"id":"d34d89c.5491078","type":"http request","z":"f634ea1a.5e4518","name":"Domoticz","method":"use","ret":"txt","paytoqs":false,"url":"","tls":"","persist":false,"proxy":"","authType":"","x":1160,"y":200,"wires":[[]]},{"id":"509465cc.bbee3c","type":"comment","z":"f634ea1a.5e4518","name":"Modb. adress: 01 - 19,2 K - 8/N/1","info":"","x":170,"y":80,"wires":[]},{"id":"78d9184b.7a3e98","type":"function","z":"f634ea1a.5e4518","name":"Extract for influxdb","func":"let Voltage = msg.payload.voltage;\nlet Current = msg.payload.current;\nlet Power = msg.payload.power;\nlet Frequency = msg.payload.frequency;\nlet Energy = msg.payload.energy;\n\nlet _msg = {\n payload: []\n};\n\n_msg.payload=\n {\n measurement: \"modbus\",\n\t\tfields: {\n\t\t\tvoltage: Voltage,\t\t\t\n\t\t\tcurrent: Current,\t\n\t\t\tpower: Power,\t\n\t\t frequency: Frequency,\t\n\t\t energy: Energy,\n\t\t},\n\t\ttags:{\n\t\t device: \"Finder\",\n\t\t},\n\t\ttimestamp: flow.get('timestamp')\n\t}\n\n\nreturn _msg;","outputs":1,"noerr":0,"x":830,"y":280,"wires":[["f90eafa2.8e7d8","eacde55b.abc468"]]},{"id":"f90eafa2.8e7d8","type":"debug","z":"f634ea1a.5e4518","name":"","active":false,"console":false,"complete":"false","x":1170,"y":320,"wires":[]},{"id":"be082080.01a66","type":"influxdb batch","z":"f634ea1a.5e4518","influxdb":"e6884c0f.212a5","precision":"","retentionPolicy":"","name":"Influxdb","x":1160,"y":280,"wires":[]},{"id":"eacde55b.abc468","type":"join","z":"f634ea1a.5e4518","name":"","mode":"custom","build":"array","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"8","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"num","reduceFixup":"","x":1030,"y":280,"wires":[["be082080.01a66"]]},{"id":"56dd98d7.89a418","type":"modbus-client","z":"","name":"Serial_19200_8_N_1","clienttype":"serial","bufferCommands":true,"stateLogEnabled":false,"tcpHost":"127.0.0.1","tcpPort":"502","tcpType":"DEFAULT","serialPort":"/dev/ttyUSB1","serialType":"RTU-BUFFERD","serialBaudrate":"19200","serialDatabits":"8","serialStopbits":"1","serialParity":"none","serialConnectionDelay":"100","unit_id":"","commandDelay":"30","clientTimeout":"2000","reconnectTimeout":"5000"},{"id":"b7d67d23.1babd","type":"ui_group","z":"","name":"Finder 7E.64 Energy Meter","tab":"1d96e69a.746759","order":1,"disp":true,"width":"6","collapse":false},{"id":"e6884c0f.212a5","type":"influxdb","z":"","hostname":"127.0.0.1","port":"8086","protocol":"http","database":"energy","name":"","usetls":false,"tls":""},{"id":"1d96e69a.746759","type":"ui_tab","z":"","name":"Modbus","icon":"memory","order":15}]