[{"id":"9ad5eb66.99dcc8","type":"function","z":"cafd2af1.b44da8","name":"Solaredge TCP modbus -> JSON","func":"// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\n// Create influxdb JSON\nmsg.payload = [\n [{\n 'AC Total Current 40072': round(uint16(40072) * scalefactor(40076),1),\n 'AC Voltage phase AB 40077': round(uint16(40077) * scalefactor(40083),1),\n 'AC Power 40083': round(uint16(40083) * scalefactor(40084),1),\n 'AC Power output Watts 40084': round(int16(40084) * scalefactor(40085), 1),\n 'AC Frequency Hz 40086': round(uint16(40086) * scalefactor(40087),1),\n 'AC Apparent Power 40088': round(uint16(40088) * scalefactor(40089),1),\n 'AC Reactive Power 40090': round(uint16(40090) * scalefactor(40091),1),\n 'AC Power Factor 40092': round(uint16(40092) * scalefactor(40093),1),\n 'DC Current': round(int16(40097) * scalefactor(40098),1),\n 'DC Current Factor': round(int16(40098),2),\n 'DC Voltage': round(uint16(40099) * scalefactor(40100),1),\n 'DC Volt Factor': round(int16(40100),2),\n 'DC Power': round(int16(40101) * scalefactor(40102),1),\n 'Status 40108': round(uint16(40108), 2),\n time: new Date()\n },\n {\n inverter: '1'\n }]\n];\n\nreturn msg;\n\nfunction word(address) {\n // Find the correct offset in bytes\n // 40070 is the starting address we fetch from SolarEdge inverter\n return (address-40070) * 2;\n}\n\nfunction scalefactor(address) {\n return Math.pow(10, buf.readInt16BE(word(address)));\n}\n\nfunction int16(address) {\n return buf.readInt16BE(word(address))\n}\n\nfunction uint16(address) {\n return buf.readUInt16BE(word(address));\n}\n\nfunction int32(address) {\n return buf.readInt32BE(word(address))\n}\n\nfunction uint32(address) {\n return buf.readUInt32BE(word(address))\n}\n\nfunction round(value, decimals) {\n return Number(Math.round(value+'e'+decimals)+'e-'+decimals);\n} \n\n \n// 'Single Phase 101 40070': round(int16(40070),2),\n// 'Sunspec Length 40071': round(uint16(40071),2),\n// 'AC Current phase A 40073': round(uint16(40073) * scalefactor(40076), 2),\n// 'AC Current phase B 40074': round(uint16(40074) * scalefactor(40076), 2),\n// 'AC Current phase C 40075': round(uint16(40075) * scalefactor(40076), 2),\n// 'AC Current scale 40076': round(int16(40076), 2),\n// 'AC Voltage phase BC 40077': round(uint16(40078) * scalefactor(40083), 2),\n// 'AC Voltage phase CA 40078': round(uint16(40079) * scalefactor(40083), 2),\n// 'AC Voltage phase AN 40079': round(uint16(40080) * scalefactor(40083), 2),\n// 'AC Voltage phase BN 40080': round(uint16(40081) * scalefactor(40083), 2),\n// 'AC Voltage Scale 40083': round(int16(40083), 2),\n// 'AC Power Scale 40085': round(int16(40085), 2), \n// 'AC Frequency Scale 40087': round(int16(40087), 2),\n// 'AC A/Power Scale 40089': round(int16(40089), 2), \n// 'AC R/Power Scale 40091': round(int16(40091), 2), \n// 'AC P/F Scale 40093': round(int16(40093), 2), \n// 'AC Lifetimeproduction 40094': round(uint32(40094) * scalefactor(40096), 2),\n// 'Heat sink temp': round(int16(40104) * scalefactor(40107), 2),\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":560,"y":300,"wires":[["f2b18b54.e946c8","8a92ecec.f736c"]]}]