SolarEdge-modbus-influxdb

This flow extracts values from a SolarEdge inverter by accessing modbus-tcp on the inverter. In this example we also push those values into an influxdb-server.

[{"id":"ccdb2874.ab7a18","type":"debug","z":"b1d21476.ba5f88","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":797,"y":1108,"wires":[]},{"id":"a4e7878c.859e1","type":"function","z":"b1d21476.ba5f88","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':      round(uint16(40072) * scalefactor(40076), 2),\n        'AC Current phase A':    round(uint16(40073) * scalefactor(40076), 2),\n        'AC Current phase B':    round(uint16(40074) * scalefactor(40076), 2),\n        'AC Current phase C':    round(uint16(40075) * scalefactor(40076), 2),\n        'AC Voltage phase A':    round(uint16(40080) * scalefactor(40083), 2),\n        'AC Voltage phase B':    round(uint16(40081) * scalefactor(40083), 2),\n        'AC Voltage phase C':    round(uint16(40082) * scalefactor(40083), 2),\n        'AC Power output':        round(int16(40084) * scalefactor(40085), 2),\n        'AC Lifetimeproduction': round(uint32(40094) * scalefactor(40096), 2),\n        'DC Current':            round(uint16(40097) * scalefactor(40098), 2),\n        'DC Voltage':            round(uint16(40099) * scalefactor(40100), 2),\n        'DC Power input':         round(int16(40101) * scalefactor(40102), 2),\n        'Heat sink temp':         round(int16(40104) * scalefactor(40107), 2),\n        'Status':                round(uint16(40108), 2),\n        time: new Date()\n    },\n    {\n        inverter: '1'\n    }]\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} ","outputs":1,"noerr":0,"x":390,"y":1111,"wires":[["971fd960.34551","3f6de239.94e796","ccdb2874.ab7a18"]]},{"id":"3626c1bf.cfc89e","type":"modbus-read","z":"b1d21476.ba5f88","name":"SolarEdge 3","topic":"","showStatusActivities":false,"logIOActivities":false,"showErrors":false,"unitid":"1","dataType":"HoldingRegister","adr":"40069","quantity":"40","rate":"5000","rateUnit":"ms","delayOnStart":false,"startDelayTime":"","server":"4d15fe9c.d15258","useIOFile":false,"ioFile":"","useIOForPayload":false,"x":144,"y":1104,"wires":[[],["a4e7878c.859e1"]]},{"id":"971fd960.34551","type":"influxdb out","z":"b1d21476.ba5f88","influxdb":"7e4fea80.135824","name":"","measurement":"SolarEdge","precision":"ms","retentionPolicy":"","x":701.5,"y":1143,"wires":[]},{"id":"b24cd458.b49cc","type":"comment","z":"b1d21476.ba5f88","name":"Fetch Solaredge TCP modbus data","info":"zsdfzsdfg","x":189.5,"y":1043,"wires":[]},{"id":"4d15fe9c.d15258","type":"modbus-client","z":"","name":"SolarEdge","clienttype":"tcp","bufferCommands":true,"stateLogEnabled":false,"tcpHost":"192.168.6.10","tcpPort":"1502","tcpType":"DEFAULT","serialPort":"/dev/ttyUSB","serialType":"RTU-BUFFERD","serialBaudrate":"9600","serialDatabits":"8","serialStopbits":"1","serialParity":"none","serialConnectionDelay":"100","unit_id":1,"commandDelay":1,"clientTimeout":1000,"reconnectTimeout":20000},{"id":"7e4fea80.135824","type":"influxdb","z":"","hostname":"192.168.6.11","port":"8086","protocol":"http","database":"solaredge","name":"InfluxDB/solaredge","usetls":false,"tls":"b56a2f8c.4744d"},{"id":"b56a2f8c.4744d","type":"tls-config","z":"","name":"local-tls","cert":"","key":"","ca":"","certname":"","keyname":"","caname":"","verifyservercert":false}]

Collection Info

Flow Info

Created 3 years, 8 months ago
Rating: not yet rated

Owner

Actions

Rate:

Node Types

Core
  • comment (x1)
  • debug (x1)
  • function (x1)
  • tls-config (x1)
Other

Tags

  • SolarEdge
  • modbus
  • influxdb
  • inverter
Copy this flow JSON to your clipboard and then import into Node-RED using the Import From > Clipboard (Ctrl-I) menu option