VictronGX_Custom_Sensors/node-red-flows/bmv700_mppt_serial.json

1 line
10 KiB
JSON

[{"id":"316890a8.f0d1f","type":"function","z":"826d79b3.e52a08","name":"VE.Direct to JSON","func":"// name: VE.Direct to JSON\n// outputs: 1\n// inputs: 1 serial node, split input \"on the character\" \"\\n\"\n// and deliver \"binary buffers\"\n\nvar block = context.get('block') || \"{\";\nvar checksum = context.get('checksum') || 0;\n\nvar fieldBuffer = msg.payload;\nvar fieldLenght = fieldBuffer.length;\n\nvar field = fieldBuffer.toString();\nfield = field.replace(/\\r?\\n?/g, '');\nfield = field.split(\"\\t\");\n\n// Drop null fields\nif (field[0] === \"\") {\n// node.warn(\"NULL field dropped!\");\n return null;\n}\n\n// Remove HEX messages and add CR+LF for checksum\nif (field[0] == \"Checksum\" && field[1].length > 1) {\n fieldLenght = 12;\n fieldBuffer[10] = 0xd;\n fieldBuffer[11] = 0xa;\n// node.warn(\"HEX message stripped!\");\n}\n\nfor (var i = 0; i < fieldLenght; i++) {\n checksum -= fieldBuffer[i];\n}\n\nchecksum = checksum & 0xff;\n\nif (field[0] == \"Checksum\") {\n\n context.set('checksum', null);\n context.set('block', null);\n\n if (checksum === 0) {\n block = block += \"}\";\n msg.payload = JSON.parse(block);\n return msg;\n } else {\n// node.warn('Checksum failed!')\n return null;\n }\n}\n\nif (block.length > 1) {\n block = block += \",\";\n}\n\nblock = block += \"\\\"\" + field[0] + \"\\\"\" + \":\";\n\n// PID and FW values detected incorrectly as number\nvar isANumber = isNaN(field[1]) === false;\nif (isANumber && (field[0] !== \"PID\") && (field[0] !== \"FW\")) {\n// block = block += \"\\\"\" + field[1] + \"\\\"\";\n block = block += field[1];\n} else {\n// block = block += field[1];\n block = block += \"\\\"\" + field[1] + \"\\\"\";\n}\n\ncontext.set('checksum', checksum);\ncontext.set('block', block);\n","outputs":1,"noerr":0,"x":390,"y":80,"wires":[["bbb6abe8.7cc2","9fdc4c66.14822","e075f07d.8517a","553c5064.28d38","39df9ae8.152cb6","b9b3b6d2.c5f6f","ca1e1981.2921b8"]]},{"id":"49a494e8.0fe934","type":"serial in","z":"826d79b3.e52a08","name":"VE Battery Monitor","serial":"e6282798.9580b8","x":170,"y":80,"wires":[["316890a8.f0d1f"]]},{"id":"bbb6abe8.7cc2","type":"function","z":"826d79b3.e52a08","name":"Voltage","func":"msg.payload = msg.payload.V;\nif (msg.payload !== undefined) {\n msg.payload = msg.payload/1000;\n msg.payload = msg.payload.toString();\n return msg;\n}\n","outputs":1,"noerr":0,"x":600,"y":140,"wires":[[]]},{"id":"9fdc4c66.14822","type":"function","z":"826d79b3.e52a08","name":"Current","func":"msg.payload = msg.payload.I;\nif (msg.payload !== undefined) {\n msg.payload = msg.payload/1000;\n msg.payload = msg.payload.toString();\n return msg;\n}\n","outputs":1,"noerr":0,"x":600,"y":180,"wires":[[]]},{"id":"e075f07d.8517a","type":"function","z":"826d79b3.e52a08","name":"Power","func":"msg.payload = msg.payload.P;\nif (msg.payload !== undefined) {\n //msg.payload = msg.payload/10;\n msg.payload = msg.payload.toString();\n return msg;\n}\n","outputs":1,"noerr":0,"x":590,"y":220,"wires":[[]]},{"id":"553c5064.28d38","type":"function","z":"826d79b3.e52a08","name":"Alarm","func":"msg.payload = msg.payload.Alarm;\nif (msg.payload !== undefined) {\nreturn msg;\n}","outputs":1,"noerr":0,"x":590,"y":260,"wires":[[]]},{"id":"39df9ae8.152cb6","type":"function","z":"826d79b3.e52a08","name":"State of Charge","func":"msg.payload = msg.payload.SOC;\nif (msg.payload !== undefined) {\n msg.payload = msg.payload/10;\n msg.payload = msg.payload.toString();\n return msg;\n}\n","outputs":1,"noerr":0,"x":620,"y":300,"wires":[[]]},{"id":"64bdc3c1.714644","type":"function","z":"826d79b3.e52a08","name":"VE.Direct to JSON","func":"// name: VE.Direct to JSON\n// outputs: 1\n// inputs: 1 serial node, split input \"on the character\" \"\\n\"\n// and deliver \"binary buffers\"\n\nvar block = context.get('block') || \"{\";\nvar checksum = context.get('checksum') || 0;\n\nvar fieldBuffer = msg.payload;\nvar fieldLenght = fieldBuffer.length;\n\nvar field = fieldBuffer.toString();\nfield = field.replace(/\\r?\\n?/g, '');\nfield = field.split(\"\\t\");\n\n// Drop null fields\nif (field[0] === \"\") {\n// node.warn(\"NULL field dropped!\");\n return null;\n}\n\n// Remove HEX messages and add CR+LF for checksum\nif (field[0] == \"Checksum\" && field[1].length > 1) {\n fieldLenght = 12;\n fieldBuffer[10] = 0xd;\n fieldBuffer[11] = 0xa;\n// node.warn(\"HEX message stripped!\");\n}\n\nfor (var i = 0; i < fieldLenght; i++) {\n checksum -= fieldBuffer[i];\n}\n\nchecksum = checksum & 0xff;\n\nif (field[0] == \"Checksum\") {\n\n context.set('checksum', null);\n context.set('block', null);\n\n if (checksum === 0) {\n block = block += \"}\";\n msg.payload = JSON.parse(block);\n return msg;\n } else {\n// node.warn('Checksum failed!')\n return null;\n }\n}\n\nif (block.length > 1) {\n block = block += \",\";\n}\n\nblock = block += \"\\\"\" + field[0] + \"\\\"\" + \":\";\n\n// PID and FW values detected incorrectly as number\nvar isANumber = isNaN(field[1]) === false;\nif (isANumber && (field[0] !== \"PID\") && (field[0] !== \"FW\") && (field[0] !==\"OR\")) {\n// block = block += \"\\\"\" + field[1] + \"\\\"\";\n block = block += field[1];\n} else {\n// block = block += field[1];\n block = block += \"\\\"\" + field[1] + \"\\\"\";\n}\n\ncontext.set('checksum', checksum);\ncontext.set('block', block);\n","outputs":1,"noerr":0,"x":390,"y":560,"wires":[["a5265ebf.c9bef8","fe74d6e1.3b737","ba14497f.de6bd8","ad9cc38d.5db08","df43b65e.7a902","b94a95f8.6d15d8","fdfc0970.9c39a8","1171fa7d.00578e","2cd703d4.3b19f4","6130de0b.afe5e","1bd201ad.6ed07e"]]},{"id":"ce19e231.5cfac8","type":"serial in","z":"826d79b3.e52a08","name":"VE Solar Charger","serial":"3b9ed4c5.d9d57c","x":160,"y":560,"wires":[["64bdc3c1.714644"]]},{"id":"a5265ebf.c9bef8","type":"function","z":"826d79b3.e52a08","name":"PV Voltage","func":"msg.payload = msg.payload.VPV;\nif (msg.payload !== undefined) {\n msg.payload = msg.payload/1000;\n msg.payload = msg.payload.toString();\n return msg;\n}\n","outputs":1,"noerr":0,"x":610,"y":620,"wires":[[]]},{"id":"fe74d6e1.3b737","type":"function","z":"826d79b3.e52a08","name":"PV Current","func":"msg.payload = msg.payload.I;\nif (msg.payload !== undefined) {\n msg.payload = msg.payload/1000;\n msg.payload = msg.payload.toString();\n return msg;\n}\n","outputs":1,"noerr":0,"x":610,"y":660,"wires":[[]]},{"id":"ba14497f.de6bd8","type":"function","z":"826d79b3.e52a08","name":"PV Power","func":"msg.payload = msg.payload.PPV;\nif (msg.payload !== undefined) {\n msg.payload = msg.payload;\n msg.payload = msg.payload.toString();\n return msg;\n}\n","outputs":1,"noerr":0,"x":600,"y":700,"wires":[[]]},{"id":"ad9cc38d.5db08","type":"function","z":"826d79b3.e52a08","name":"Alarm","func":"msg.payload = msg.payload.ERR;\nif (msg.payload !== undefined) {\n if (msg.payload === 0) {\n msg.payload = \"OFF\"\n } else {\n msg.payload = \"ON\"\n }\nreturn msg;\n}","outputs":1,"noerr":0,"x":590,"y":740,"wires":[[]]},{"id":"df43b65e.7a902","type":"function","z":"826d79b3.e52a08","name":"Charging Voltage","func":"msg.payload = msg.payload.V;\nif (msg.payload !== undefined) {\n msg.payload = msg.payload/1000;\n msg.payload = msg.payload.toString();\n return msg;\n}\n","outputs":1,"noerr":0,"x":630,"y":780,"wires":[[]]},{"id":"b94a95f8.6d15d8","type":"function","z":"826d79b3.e52a08","name":"Charging Current","func":"msg.payload = msg.payload.I;\nif (msg.payload !== undefined) {\n msg.payload = msg.payload/1000;\n msg.payload = msg.payload.toString();\n return msg;\n}\n","outputs":1,"noerr":0,"x":630,"y":820,"wires":[[]]},{"id":"b9b3b6d2.c5f6f","type":"function","z":"826d79b3.e52a08","name":"Capacity","func":"msg.payload = msg.payload.CE;\nif (msg.payload !== undefined) {\n msg.payload = msg.payload/1000;\n msg.payload = msg.payload.toString();\n return msg;\n}\n","outputs":1,"noerr":0,"x":600,"y":340,"wires":[[]]},{"id":"ca1e1981.2921b8","type":"function","z":"826d79b3.e52a08","name":"Time remaining","func":"msg.payload = msg.payload.TTG;\nif (msg.payload !== undefined) {\n msg.payload = msg.payload/60;\n msg.payload = msg.payload.toString();\n return msg;\n}\n","outputs":1,"noerr":0,"x":620,"y":380,"wires":[[]]},{"id":"fdfc0970.9c39a8","type":"function","z":"826d79b3.e52a08","name":"Total Yield","func":"msg.payload = msg.payload.H19;\nif (msg.payload !== undefined) {\n msg.payload = msg.payload/100;\n msg.payload = msg.payload.toString();\n return msg;\n}\n","outputs":1,"noerr":0,"x":610,"y":860,"wires":[[]]},{"id":"1171fa7d.00578e","type":"function","z":"826d79b3.e52a08","name":"Today Yield","func":"msg.payload = msg.payload.H20;\nif (msg.payload !== undefined) {\n msg.payload = msg.payload/100;\n msg.payload = msg.payload.toString();\n return msg;\n}\n","outputs":1,"noerr":0,"x":610,"y":900,"wires":[[]]},{"id":"2cd703d4.3b19f4","type":"function","z":"826d79b3.e52a08","name":"Yesterday Yield","func":"msg.payload = msg.payload.H22;\nif (msg.payload !== undefined) {\n msg.payload = msg.payload/100;\n msg.payload = msg.payload.toString();\n return msg;\n}\n","outputs":1,"noerr":0,"x":620,"y":980,"wires":[[]]},{"id":"6130de0b.afe5e","type":"function","z":"826d79b3.e52a08","name":"CO2 Savings kg","func":"msg.payload = msg.payload.H19;\nif (msg.payload !== undefined) {\n msg.payload = (msg.payload/100) * 0.510;\n msg.payload = msg.payload.toString();\n return msg;\n}\n","outputs":1,"noerr":0,"x":620,"y":1020,"wires":[[]]},{"id":"1bd201ad.6ed07e","type":"function","z":"826d79b3.e52a08","name":"Today Power max","func":"msg.payload = msg.payload.H21;\nif (msg.payload !== undefined) {\n msg.payload = msg.payload.toString();\n return msg;\n}\n","outputs":1,"noerr":0,"x":630,"y":940,"wires":[[]]},{"id":"e6282798.9580b8","type":"serial-port","serialport":"/dev/ttyUSBbatt","serialbaud":"19200","databits":"8","parity":"none","stopbits":"1","waitfor":"","newline":"\\n","bin":"false","out":"char","addchar":"","responsetimeout":"10000"},{"id":"3b9ed4c5.d9d57c","type":"serial-port","serialport":"/dev/ttyUSBmppt","serialbaud":"19200","databits":"8","parity":"none","stopbits":"1","waitfor":"","newline":"\\n","bin":"false","out":"char","addchar":"","responsetimeout":"10000"}]