Fronius Symo Gen 24 plus Batteries

I see in the example from the manual I need to set the InWRTw = -50% but when I try to inject negative values I get error “RangeError: The value of “value” is out of range. It must be >= 0 and <= 65535. Received -5000”

So how does one do to send negative values?

image

I have made the following Node-RED test setup but I don’t get it to charge from the power grid or discharge to the power grid.

[{"id":"39a3ea19badb7a7f","type":"tab","label":"Fronius","disabled":false,"info":"","env":[]},{"id":"f75297d93960df81","type":"group","z":"39a3ea19badb7a7f","name":"Check Battery info","style":{"label":true},"nodes":["0b901412575e77de","025e55e4cd9d8bb2","a28d80d962da8e74"],"x":34,"y":659,"w":592,"h":82},{"id":"24ca5fdbc91db29f","type":"group","z":"39a3ea19badb7a7f","style":{"stroke":"#3a3a3a","stroke-opacity":"1","fill":"#1e1e1e","fill-opacity":"0.5","label":true,"label-position":"nw","color":"#cccccc"},"nodes":["777c42f0e984e8c8","ca8ddbbf183247be","bbbed64d84c3e57c","814f2404114806e9","7ca251d534666024","00ba5db7448fe338","1611cb73f11453da","a5a577e982c10fa3","79b2e232f28181df","cb475883eacf824e","143db3428fa337ce","e44cdc136ef05cd0","290c98a0ee7f62ff","99f5ccb527936a73","47907f82d4b0d24f","bb7e4e3771e109e1","619f3f5cef3e3acf","d2ed4f29c2ddb272","b94439aaa72d2c0e"],"x":34,"y":19,"w":872,"h":522},{"id":"0326af1f3381f0d2","type":"group","z":"39a3ea19badb7a7f","name":"Check Battery info RW only","style":{"label":true},"nodes":["4a3f86cd842388ab","37f2edd293b98175","0f748ebda2d8ea29"],"x":34,"y":559,"w":592,"h":82},{"id":"0b901412575e77de","type":"modbus-read","z":"39a3ea19badb7a7f","g":"f75297d93960df81","name":"Battery info","topic":"40354","showStatusActivities":false,"logIOActivities":false,"showErrors":false,"unitid":"1","dataType":"HoldingRegister","adr":"40353","quantity":"26","rate":"10","rateUnit":"m","delayOnStart":false,"startDelayTime":"","server":"bcc4229c.180ac","useIOFile":false,"ioFile":"","useIOForPayload":false,"emptyMsgOnFail":false,"x":150,"y":700,"wires":[["a28d80d962da8e74"],[]]},{"id":"025e55e4cd9d8bb2","type":"debug","z":"39a3ea19badb7a7f","g":"f75297d93960df81","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":530,"y":700,"wires":[]},{"id":"a28d80d962da8e74","type":"function","z":"39a3ea19badb7a7f","g":"f75297d93960df81","name":"RAW to JSON","func":"var data = msg.payload;\nvar raw = {\n    'ID': data[0],\n    'L': data[1],\n    'WChaMax': data[2],\n    'WChaGra': data[3],\n    'WDisChaGra': data[4],\n    'StorCtl_Mod': data[5],\n    'VAChaMax': data[6],\n    'MinRsvPct': data[7],\n    'ChaState': data[8],\n    'StorAval': data[9],\n    'InBatV': data[10],\n    'ChaSt': data[11],\n    'OutWRte': data[12],\n    'InWRte': data[13],\n    'InOutWRte_WinTms': data[14],\n    'InOutWRte_RvrtTms': data[15],\n    'InOutWRte_RmpTms': data[16],\n    'ChaGriSet': data[17],\n    'WChaMax_SF': data[18],\n    'WChaDisChaGra_SF': data[19],\n    'VAChaMax_SF': data[20],\n    'MinRsvPct_SF': data[21],\n    'ChaState_SF': data[22],\n    'StorAval_SF': data[23],\n    'InBatV_SF': data[24],\n    'InOutWRte_SF': data[25],\n}\n\n\nvar VFactor = 0.01;\nvar AFactor = 0.01;\nvar WFactor = 0.01;\nvar WHFactor = 1;\n\n\nvar result = {\n    'S1_V': VFactor * raw.S1_DCV,\n    'S1_A': AFactor * raw.S1_DCA,\n    'S1_W': WFactor * raw.S1_DCW,\n    'S1_WH': WHFactor * raw.S1_DCWH,\n    'S1_TimeStamp': raw.S1_Tms,\n    'S1_T': raw.S1_Tmp,\n    'S1_State': raw.S1_DCSt,\n\n    'S2_V': VFactor * raw.S2_DCV,\n    'S2_A': AFactor * raw.S2_DCA,\n    'S2_W': WFactor * raw.S2_DCW,\n    'S2_WH': WHFactor * raw.S2_DCWH,\n    'S2_TimeStamp': raw.S2_Tms,\n    'S2_T': raw.S2_Tmp,\n    'S2_State': raw.S2_DCSt,\n}\nmsg.payload = {\n    data : data,\n    raw : raw,\n    result : result\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":340,"y":700,"wires":[["025e55e4cd9d8bb2"]]},{"id":"777c42f0e984e8c8","type":"modbus-flex-write","z":"39a3ea19badb7a7f","g":"24ca5fdbc91db29f","name":"Fronius-Storage","showStatusActivities":true,"showErrors":true,"server":"bcc4229c.180ac","emptyMsgOnFail":true,"keepMsgProperties":true,"x":600,"y":60,"wires":[["814f2404114806e9"],[]]},{"id":"ca8ddbbf183247be","type":"function","z":"39a3ea19badb7a7f","g":"24ca5fdbc91db29f","name":"OutWRte=","func":"msg.payload = { \n    'value': msg.payload,\n    'fc': 6,\n    'unitid': 1,\n    'address': 40365,\n    'quantity': 1\n} \n\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":330,"y":60,"wires":[["777c42f0e984e8c8"]]},{"id":"bbbed64d84c3e57c","type":"inject","z":"39a3ea19badb7a7f","g":"24ca5fdbc91db29f","name":"10000","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payload":"10000","payloadType":"num","x":130,"y":60,"wires":[["ca8ddbbf183247be"]]},{"id":"814f2404114806e9","type":"modbus-response","z":"39a3ea19badb7a7f","g":"24ca5fdbc91db29f","name":"","registerShowMax":20,"x":790,"y":60,"wires":[]},{"id":"7ca251d534666024","type":"inject","z":"39a3ea19badb7a7f","g":"24ca5fdbc91db29f","name":"0","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payload":"0","payloadType":"num","x":130,"y":100,"wires":[["ca8ddbbf183247be"]]},{"id":"00ba5db7448fe338","type":"function","z":"39a3ea19badb7a7f","g":"24ca5fdbc91db29f","name":"InWRte=","func":"msg.payload = { \n    'value': msg.payload,\n    'fc': 6,\n    'unitid': 1,\n    'address': 40366,\n    'quantity': 1\n} \n\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":320,"y":180,"wires":[["777c42f0e984e8c8"]]},{"id":"1611cb73f11453da","type":"inject","z":"39a3ea19badb7a7f","g":"24ca5fdbc91db29f","name":"10000","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payload":"10000","payloadType":"num","x":130,"y":180,"wires":[["00ba5db7448fe338"]]},{"id":"a5a577e982c10fa3","type":"inject","z":"39a3ea19badb7a7f","g":"24ca5fdbc91db29f","name":"0","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payload":"0","payloadType":"num","x":130,"y":220,"wires":[["00ba5db7448fe338"]]},{"id":"79b2e232f28181df","type":"function","z":"39a3ea19badb7a7f","g":"24ca5fdbc91db29f","name":"StorCtl_Mod=","func":"msg.payload = { \n    'value': msg.payload,\n    'fc': 6,\n    'unitid': 1,\n    'address': 40358,\n    'quantity': 1\n} \n\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":340,"y":300,"wires":[["777c42f0e984e8c8"]]},{"id":"cb475883eacf824e","type":"inject","z":"39a3ea19badb7a7f","g":"24ca5fdbc91db29f","name":"0x03 = 3","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payload":"3","payloadType":"num","x":140,"y":420,"wires":[["79b2e232f28181df"]]},{"id":"143db3428fa337ce","type":"function","z":"39a3ea19badb7a7f","g":"24ca5fdbc91db29f","name":"InOutWRte_RvrtTms=","func":"msg.payload = { \n    'value': msg.payload,\n    'fc': 6,\n    'unitid': 1,\n    'address': 40368,\n    'quantity': 1\n} \n\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":460,"wires":[["777c42f0e984e8c8"]]},{"id":"e44cdc136ef05cd0","type":"inject","z":"39a3ea19badb7a7f","g":"24ca5fdbc91db29f","name":"0","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payload":"0","payloadType":"num","x":130,"y":460,"wires":[["143db3428fa337ce"]]},{"id":"290c98a0ee7f62ff","type":"inject","z":"39a3ea19badb7a7f","g":"24ca5fdbc91db29f","name":"0","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payload":"0","payloadType":"num","x":130,"y":300,"wires":[["79b2e232f28181df"]]},{"id":"99f5ccb527936a73","type":"inject","z":"39a3ea19badb7a7f","g":"24ca5fdbc91db29f","name":"-10000","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payload":"-10000","payloadType":"str","x":130,"y":140,"wires":[["ca8ddbbf183247be"]]},{"id":"47907f82d4b0d24f","type":"inject","z":"39a3ea19badb7a7f","g":"24ca5fdbc91db29f","name":"5000","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payload":"5000","payloadType":"num","x":130,"y":260,"wires":[["00ba5db7448fe338"]]},{"id":"bb7e4e3771e109e1","type":"inject","z":"39a3ea19badb7a7f","g":"24ca5fdbc91db29f","name":"1","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payload":"1","payloadType":"num","x":130,"y":340,"wires":[["79b2e232f28181df"]]},{"id":"619f3f5cef3e3acf","type":"inject","z":"39a3ea19badb7a7f","g":"24ca5fdbc91db29f","name":"2","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payload":"2","payloadType":"num","x":130,"y":380,"wires":[["79b2e232f28181df"]]},{"id":"d2ed4f29c2ddb272","type":"function","z":"39a3ea19badb7a7f","g":"24ca5fdbc91db29f","name":"ChaGriSet=","func":"msg.payload = { \n    'value': msg.payload,\n    'fc': 6,\n    'unitid': 1,\n    'address': 40370,\n    'quantity': 1\n} \n\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":330,"y":500,"wires":[["777c42f0e984e8c8"]]},{"id":"b94439aaa72d2c0e","type":"inject","z":"39a3ea19badb7a7f","g":"24ca5fdbc91db29f","name":"1","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payload":"1","payloadType":"num","x":130,"y":500,"wires":[["d2ed4f29c2ddb272"]]},{"id":"4a3f86cd842388ab","type":"modbus-read","z":"39a3ea19badb7a7f","g":"0326af1f3381f0d2","name":"Battery info","topic":"40354","showStatusActivities":false,"logIOActivities":false,"showErrors":false,"unitid":"1","dataType":"HoldingRegister","adr":"40353","quantity":"26","rate":"10","rateUnit":"m","delayOnStart":false,"startDelayTime":"","server":"bcc4229c.180ac","useIOFile":false,"ioFile":"","useIOForPayload":false,"emptyMsgOnFail":false,"x":150,"y":600,"wires":[["0f748ebda2d8ea29"],[]]},{"id":"37f2edd293b98175","type":"debug","z":"39a3ea19badb7a7f","g":"0326af1f3381f0d2","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":530,"y":600,"wires":[]},{"id":"0f748ebda2d8ea29","type":"function","z":"39a3ea19badb7a7f","g":"0326af1f3381f0d2","name":"RAW to JSON","func":"var data = msg.payload;\nvar raw = {\n    'StorCtl_Mod': data[5],\n    'MinRsvPct': data[7],\n    'OutWRte': data[12],\n    'InWRte': data[13],\n    'InOutWRte_RvrtTms': data[15],\n    'ChaGriSet': data[17],\n}\n\n\nvar VFactor = 0.01;\nvar AFactor = 0.01;\nvar WFactor = 0.01;\nvar WHFactor = 1;\n\n\nvar result = {\n    'S1_V': VFactor * raw.S1_DCV,\n    'S1_A': AFactor * raw.S1_DCA,\n    'S1_W': WFactor * raw.S1_DCW,\n    'S1_WH': WHFactor * raw.S1_DCWH,\n    'S1_TimeStamp': raw.S1_Tms,\n    'S1_T': raw.S1_Tmp,\n    'S1_State': raw.S1_DCSt,\n\n    'S2_V': VFactor * raw.S2_DCV,\n    'S2_A': AFactor * raw.S2_DCA,\n    'S2_W': WFactor * raw.S2_DCW,\n    'S2_WH': WHFactor * raw.S2_DCWH,\n    'S2_TimeStamp': raw.S2_Tms,\n    'S2_T': raw.S2_Tmp,\n    'S2_State': raw.S2_DCSt,\n}\nmsg.payload = {\n    data : data,\n    raw : raw,\n    result : result\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":340,"y":600,"wires":[["37f2edd293b98175"]]},{"id":"bcc4229c.180ac","type":"modbus-client","name":"Fronius","clienttype":"tcp","bufferCommands":true,"stateLogEnabled":false,"queueLogEnabled":false,"failureLogEnabled":false,"tcpHost":"192.168.5.182","tcpPort":"502","tcpType":"DEFAULT","serialPort":"/dev/ttyUSB","serialType":"RTU-BUFFERD","serialBaudrate":"9600","serialDatabits":"8","serialStopbits":"1","serialParity":"none","serialConnectionDelay":"100","serialAsciiResponseStartDelimiter":"","unit_id":200,"commandDelay":1,"clientTimeout":1000,"reconnectOnTimeout":true,"reconnectTimeout":2000,"parallelUnitIdsAllowed":true}]'