Doing Calculations on Modbus data

Thanks for all your help, starting to get my head round this stuff now.

[{"id":"81d6661c.13e578","type":"buffer-parser","z":"51f463cd.dae60c","name":"","data":"payload","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"int16be","name":"V_PU_Hi","offset":0,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"V_PU_Lo","offset":2,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"I_PU_Hi","offset":4,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"I_PU_Lo","offset":6,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"ver_sw","offset":8,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"Reserved1","offset":10,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"Reserved2","offset":12,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"Reserved3","offset":14,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"Reserved4","offset":16,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"Reserved5","offset":18,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"Reserved6","offset":20,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"Reserved7","offset":22,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"Reserved8","offset":24,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"Reserved9","offset":26,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"Reserved10","offset":28,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"Reserved11","offset":30,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"Reserved12","offset":32,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"Reserved13","offset":34,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"Reserved14","offset":36,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"Reserved15","offset":38,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"Reserved16","offset":40,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"Reserved17","offset":42,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"Reserved18","offset":44,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"Reserved19","offset":46,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"BattVoltsFiltered","offset":48,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"BattTermVoltFiltered","offset":50,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"BattSenseVolts","offset":52,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"ArrayVolts","offset":54,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"BattCurrentFiltered","offset":56,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"ArrayCurrentFiltered","offset":58,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"item31","offset":60,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"item32","offset":62,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"item33","offset":64,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"item34","offset":66,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"item35","offset":68,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"HeatsinkTemp","offset":70,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"RTS_Temp","offset":72,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"BattRegulationTemp","offset":74,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"item39","offset":76,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"ChargeCurrentFiltered","offset":78,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"vb_min","offset":80,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"vb_max","offset":82,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"hourmeter_HI","offset":84,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"hourmeter_LO","offset":86,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"Controller_faults ","offset":88,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"item46","offset":90,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"alarm_HI","offset":92,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"alarm_LO","offset":94,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"DIP_switch_positions ","offset":96,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"led_state","offset":98,"length":1,"offsetbit":0,"scale":1,"mask":""},{"type":"int16be","name":"ChargeState","offset":100,"length":1,"offsetbit":0,"scale":1,"mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"setTopic":true,"x":310,"y":1780,"wires":[["9297cc9a.f75c9"]]},{"id":"3d7647de.37baf8","type":"modbus-read","z":"51f463cd.dae60c","name":"","topic":"","showStatusActivities":false,"logIOActivities":false,"showErrors":false,"unitid":"","dataType":"HoldingRegister","adr":"0","quantity":"51","rate":"30","rateUnit":"s","delayOnStart":false,"startDelayTime":"","server":"fc5193e2.1655d","useIOFile":false,"ioFile":"","useIOForPayload":false,"x":110,"y":1780,"wires":[["81d6661c.13e578"],[]]},{"id":"9297cc9a.f75c9","type":"function","z":"51f463cd.dae60c","name":"","func":"var voltscaller = msg.payload.V_PU_Hi + (msg.payload.V_PU_Lo / 65536);\nvar currentscaller = msg.payload.I_PU_Hi + (msg.payload.I_PU_Lo / 65536);\n\nvar battvolts1 = (msg.payload.BattVoltsFiltered * voltscaller)/32768;\nvar batttermvolts1 = (msg.payload.BattTermVoltFiltered * voltscaller)/32768;\nvar battsensevolts1 = (msg.payload.BattSenseVolts * voltscaller)/32768;\nvar arrayvolts = (msg.payload.ArrayVolts * voltscaller)/32768;\n\nmsg.payload.BattVoltsFiltered = battvolts1;\nmsg.payload.BattTermVoltFiltered = batttermvolts1;\nmsg.payload.BattSenseVolts = battsensevolts1;\nmsg.payload.ArrayVolts = arrayvolts;\n\n\nvar battcurrent = (msg.payload.BattCurrentFiltered * currentscaller)/32768;\nvar arraycurrent = (msg.payload.ArrayCurrentFiltered * currentscaller)/32768;\nvar chargecurrent = (msg.payload.ChargeCurrentFiltered * currentscaller)/32768;\n\nmsg.payload.BattCurrentFiltered = battcurrent;\nmsg.payload.ArrayCurrentFiltered = arraycurrent;\nmsg.payload.ChargeCurrentFiltered = chargecurrent;\n\nreturn msg;","outputs":1,"noerr":0,"x":550,"y":1780,"wires":[["161d2477.92bbbc","eccf6c5c.1d1e3"]]},{"id":"161d2477.92bbbc","type":"modbus-response","z":"51f463cd.dae60c","name":"","registerShowMax":20,"x":790,"y":1700,"wires":[]},{"id":"eccf6c5c.1d1e3","type":"debug","z":"51f463cd.dae60c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","x":770,"y":1820,"wires":[]},{"id":"fc5193e2.1655d","type":"modbus-client","z":"","name":"SolarChargeController","clienttype":"tcp","bufferCommands":true,"stateLogEnabled":false,"tcpHost":"192.168.88.253","tcpPort":"502","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","reconnectOnTimeout":true,"reconnectTimeout":"2000","parallelUnitIdsAllowed":true}]
```