VictronGX_Custom_Sensors/node-red-flows/bmv700_mppt_serial.json

1 line
10 KiB
JSON
Raw Permalink Normal View History

[{"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.r