You will be surprised how easy it is
I hadn’t seen Node-Red six months ago, and just referencing the material in the Learn and Resources section has led me through how to do this.
The node configuration I ended up using to read inverter data was just three nodes.
This is an export of it if you want to try it out. My inverter is a SMA Sunny Boy.
[{"id":"97421d98.5e182","type":"function","z":"c76d6df9.361a8","name":"UInt32","func":"// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\n// Represent these bytes as 32-bit unsigned int\nvalue = buf.readUInt32BE();\nif (value > 70000){\n value = 0;\n}\n// save the value\nmsg.payload = value;\nflow.power = value;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":590,"y":460,"wires":[["5df2213e.f0515"]]},{"id":"5df2213e.f0515","type":"mqtt out","z":"c76d6df9.361a8","name":"emon/SMAInverter/power","topic":"emon/SMAInverter/power","qos":"0","retain":"false","broker":"d5edc338.e2b45","x":870,"y":460,"wires":[]},{"id":"c1e74f92.e2186","type":"modbus-read","z":"c76d6df9.361a8","name":"SMA W","topic":"Watts","showStatusActivities":false,"logIOActivities":false,"showErrors":true,"unitid":"3","dataType":"HoldingRegister","adr":"30775","quantity":"2","rate":"15","rateUnit":"m","delayOnStart":false,"startDelayTime":"","server":"aa5b0e4b.5b65","useIOFile":false,"ioFile":"","useIOForPayload":false,"emptyMsgOnFail":false,"x":350,"y":460,"wires":[[],["97421d98.5e182"]]},{"id":"d5edc338.e2b45","type":"mqtt-broker","name":"emonCMS","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"aa5b0e4b.5b65","type":"modbus-client","name":"SunnyBoy","clienttype":"tcp","bufferCommands":true,"stateLogEnabled":false,"queueLogEnabled":false,"tcpHost":"192.168.2.251","tcpPort":"502","tcpType":"DEFAULT","serialPort":"/dev/ttyUSB","serialType":"RTU-BUFFERD","serialBaudrate":"9600","serialDatabits":"8","serialStopbits":"1","serialParity":"none","serialConnectionDelay":"100","unit_id":"3","commandDelay":"1","clientTimeout":"1000","reconnectOnTimeout":true,"reconnectTimeout":"2000","parallelUnitIdsAllowed":true}]