Fronius Modbus-TCP Dashboard
Fronius Modbus TCP Example
This example shows how to retrieve data from a Fronius Inverter (e.g. Fronius Symo). Raw data is converted to json and sent to dashboard controls.
The Modbus node polls every 10 seconds for the MPPT values (DC side) to get voltage, current and power of the two available photovoltaic strings.
In contrast to the existing Fronius REST API you can retrieve data via Modbus TCP every few seconds.
The dashboard visualization is just an example, you could also send the json object directly to a time series database or add a threshold detector or ...
Note that the example just reads the registers for the MPPT (I160). There are plenty more registers to read. For further information visit the Fronius web site at Modbus RTU/TCP
[{"id":"a4d82553.cd3d48","type":"modbus-flex-connector","z":"8436a552.ae1f78","name":"Fronius","maxReconnectsPerMinute":4,"emptyQueue":false,"showStatusActivities":true,"showErrors":true,"server":"bcc4229c.180ac","x":180,"y":80,"wires":[["a0000c28.d199a"]]},{"id":"a0000c28.d199a","type":"debug","z":"8436a552.ae1f78","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":440,"y":80,"wires":[]},{"id":"30de671d.2435c8","type":"modbus-read","z":"8436a552.ae1f78","name":"MPPT I160","topic":"40263","showStatusActivities":false,"logIOActivities":false,"showErrors":false,"unitid":"1","dataType":"HoldingRegister","adr":"40263","quantity":"50","rate":"10","rateUnit":"s","delayOnStart":false,"startDelayTime":"","server":"bcc4229c.180ac","useIOFile":false,"ioFile":"","useIOForPayload":false,"emptyMsgOnFail":false,"x":200,"y":220,"wires":[["302e8d50.c56a52"],[]]},{"id":"255b273d.f50898","type":"debug","z":"8436a552.ae1f78","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":610,"y":460,"wires":[]},{"id":"302e8d50.c56a52","type":"function","z":"8436a552.ae1f78","name":"RAW to JSON","func":"var data = msg.payload;\nvar raw = {\n 'ID' : data[0],\n 'L' : data[1],\n 'DCA_SF' : data[2],\n 'DCV_SF' : data[3],\n 'DCW_SF' : data[4],\n 'DCWH_SF' : data[5],\n 'Evt' : data[6],\n 'N' : data[8],\n 'TmsPer' : data[9],\n \n 'S1_ID' : data[10],\n //'S1_IDStr' : data[11],\n 'S1_DCA' : data[19],\n 'S1_DCV' : data[20],\n 'S1_DCW' : data[21],\n 'S1_DCWH' : data[22],\n 'S1_Tms' : data[24],\n 'S1_Tmp' : data[26],\n 'S1_DCSt' : data[27],\n 'S1_DCEvt' : data[28],\n \n 'S2_ID' : data[30],\n //'S2_IDStr' : data[31],\n 'S2_DCA' : data[39],\n 'S2_DCV' : data[40],\n 'S2_DCW' : data[41],\n 'S2_DCWH' : data[42],\n 'S2_Tms' : data[44],\n 'S2_Tmp' : data[46],\n 'S2_DCSt' : data[47],\n 'S2_DCEvt' : data[48],\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}\n\nmsg.payload = {\n data : data,\n raw : raw,\n result : result\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":400,"y":220,"wires":[["255b273d.f50898","a50bcc5f.74716"]]},{"id":"6f620ab9.a84d74","type":"ui_gauge","z":"8436a552.ae1f78","name":"UDC1","group":"69e015f0.4b91cc","order":1,"width":0,"height":0,"gtype":"gage","title":"UDC(1)","label":"V","format":"{{value | number:1}} V","min":0,"max":"1200","colors":["#b30000","#e6e600","#43cb3a"],"seg1":"","seg2":"","x":850,"y":60,"wires":[]},{"id":"a50bcc5f.74716","type":"function","z":"8436a552.ae1f78","name":"Split Values","func":"var msg1V = {\n payload : msg.payload.result.S1_V\n}\n\nvar msg1A = {\n payload : msg.payload.result.S1_A\n}\n\nvar msg1W = {\n //payload : msg.payload.result.S1_W\n payload : msg.payload.result.S1_V * msg.payload.result.S1_A\n}\n\nvar msg1WH = {\n payload : msg.payload.result.S1_WH\n}\n\nvar msg1T = {\n payload : msg.payload.result.S1_T\n}\n\nvar msg1State = {\n payload : msg.payload.result.S1_State\n}\n\n\n\nvar msg2V = {\n payload : msg.payload.result.S2_V\n}\n\nvar msg2A = {\n payload : msg.payload.result.S2_A\n}\n\nvar msg2W = {\n // payload : msg.payload.result.S2_W\n payload : msg.payload.result.S2_V * msg.payload.result.S2_A\n}\n\nvar msg2WH = {\n payload : msg.payload.result.S2_WH\n}\n\nvar msg2T = {\n payload : msg.payload.result.S2_T\n}\n\nvar msg2State = {\n payload : msg.payload.result.S2_State\n}\n\nreturn [ msg1V, msg1A, msg1W, msg1WH, msg1T, msg1State, msg2V, msg2A, msg2W, msg2WH, msg2T, msg2State ];","outputs":12,"noerr":0,"initialize":"","finalize":"","x":630,"y":220,"wires":[["6f620ab9.a84d74","4b69da6d.13b104"],["39e14bd0.8c6804","cb98a7a9.ca4b28"],["214b4eb5.4eae72","73a0b626.706be8"],["408c6e9e.0c47f","1f36de4e.15a022"],[],["57597b0f.6c18e4"],["9da54ce7.4235f","322d3c7c.bc05e4"],["dbecdd8f.91b48","2a154232.4c4a2e"],["47893d49.a7ec34","840abb38.e18808"],["1616e9c7.212536","980a166c.936678"],[],["af08792b.c27fb8"]]},{"id":"9da54ce7.4235f","type":"ui_gauge","z":"8436a552.ae1f78","name":"UDC2","group":"aa17fe94.fdd7b","order":1,"width":0,"height":0,"gtype":"gage","title":"UDC(2)","label":"V","format":"{{value | number:1}} V","min":0,"max":"1200","colors":["#b30000","#e6e600","#00b500"],"seg1":"","seg2":"","x":850,"y":360,"wires":[]},{"id":"39e14bd0.8c6804","type":"ui_gauge","z":"8436a552.ae1f78","name":"ADC1","group":"69e015f0.4b91cc","order":1,"width":0,"height":0,"gtype":"gage","title":"ADC(1)","label":"A","format":"{{value | number:2}} A","min":0,"max":"10","colors":["#b30000","#e6e600","#00b500"],"seg1":"","seg2":"","x":850,"y":100,"wires":[]},{"id":"dbecdd8f.91b48","type":"ui_gauge","z":"8436a552.ae1f78","name":"ADC2","group":"aa17fe94.fdd7b","order":2,"width":0,"height":0,"gtype":"gage","title":"ADC(2)","label":"A","format":"{{value | number:2}} A","min":0,"max":"10","colors":["#b30000","#e6e600","#00b500"],"seg1":"","seg2":"","x":850,"y":400,"wires":[]},{"id":"214b4eb5.4eae72","type":"ui_gauge","z":"8436a552.ae1f78","name":"WDC1","group":"69e015f0.4b91cc","order":1,"width":0,"height":0,"gtype":"gage","title":"WDC(1)","label":"W","format":"{{value | number:1}} W","min":0,"max":"5000","colors":["#b30000","#e6e600","#43cb3a"],"seg1":"","seg2":"","x":850,"y":140,"wires":[]},{"id":"408c6e9e.0c47f","type":"ui_gauge","z":"8436a552.ae1f78","name":"WHDC1","group":"69e015f0.4b91cc","order":1,"width":0,"height":0,"gtype":"gage","title":"WHDC(1)","label":"WH","format":"{{value | number:1}} WH","min":0,"max":"60","colors":["#b30000","#e6e600","#00b500"],"seg1":"","seg2":"","x":860,"y":180,"wires":[]},{"id":"47893d49.a7ec34","type":"ui_gauge","z":"8436a552.ae1f78","name":"WDC2","group":"aa17fe94.fdd7b","order":3,"width":0,"height":0,"gtype":"gage","title":"WDC(2)","label":"W","format":"{{value | number:1}} W","min":0,"max":"5000","colors":["#b30000","#e6e600","#00b500"],"seg1":"","seg2":"","x":850,"y":440,"wires":[]},{"id":"1616e9c7.212536","type":"ui_gauge","z":"8436a552.ae1f78","name":"WHDC2","group":"aa17fe94.fdd7b","order":4,"width":0,"height":0,"gtype":"gage","title":"WHDC(2)","label":"A","format":"{{value | number:1}} WH","min":0,"max":"60","colors":["#b30000","#e6e600","#00b500"],"seg1":"","seg2":"","x":860,"y":480,"wires":[]},{"id":"4b69da6d.13b104","type":"ui_chart","z":"8436a552.ae1f78","name":"","group":"25f342d6.5b01ee","order":4,"width":0,"height":0,"label":"VDC","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"700","removeOlder":"7","removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"outputs":1,"x":1010,"y":60,"wires":[[]]},{"id":"cb98a7a9.ca4b28","type":"ui_chart","z":"8436a552.ae1f78","name":"","group":"25f342d6.5b01ee","order":4,"width":0,"height":0,"label":"ADC","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"10","removeOlder":"7","removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"outputs":1,"x":1010,"y":100,"wires":[[]]},{"id":"73a0b626.706be8","type":"ui_chart","z":"8436a552.ae1f78","name":"","group":"25f342d6.5b01ee","order":4,"width":0,"height":0,"label":"WDC","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"700","removeOlder":"7","removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"outputs":1,"x":1010,"y":140,"wires":[[]]},{"id":"1f36de4e.15a022","type":"ui_chart","z":"8436a552.ae1f78","name":"","group":"25f342d6.5b01ee","order":4,"width":0,"height":0,"label":"WHDC","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"","removeOlder":"7","removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"outputs":1,"x":1010,"y":180,"wires":[[]]},{"id":"322d3c7c.bc05e4","type":"ui_chart","z":"8436a552.ae1f78","name":"","group":"f883f269.2b701","order":4,"width":0,"height":0,"label":"VDC","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"700","removeOlder":"7","removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"outputs":1,"x":1010,"y":360,"wires":[[]]},{"id":"2a154232.4c4a2e","type":"ui_chart","z":"8436a552.ae1f78","name":"","group":"f883f269.2b701","order":4,"width":0,"height":0,"label":"ADC","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"10","removeOlder":"7","removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"outputs":1,"x":1010,"y":400,"wires":[[]]},{"id":"840abb38.e18808","type":"ui_chart","z":"8436a552.ae1f78","name":"","group":"f883f269.2b701","order":4,"width":0,"height":0,"label":"WDC","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"700","removeOlder":"7","removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"outputs":1,"x":1010,"y":440,"wires":[[]]},{"id":"980a166c.936678","type":"ui_chart","z":"8436a552.ae1f78","name":"","group":"f883f269.2b701","order":4,"width":0,"height":0,"label":"WHDC","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"","removeOlder":"7","removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"outputs":1,"x":1010,"y":480,"wires":[[]]},{"id":"57597b0f.6c18e4","type":"ui_text","z":"8436a552.ae1f78","group":"69e015f0.4b91cc","order":4,"width":0,"height":0,"name":"","label":"ST1","format":"{{msg.payload}}","layout":"row-spread","x":850,"y":220,"wires":[]},{"id":"af08792b.c27fb8","type":"ui_text","z":"8436a552.ae1f78","group":"aa17fe94.fdd7b","order":5,"width":0,"height":0,"name":"","label":"ST2","format":"{{msg.payload}}","layout":"row-spread","x":850,"y":520,"wires":[]},{"id":"58258253.66816c","type":"comment","z":"8436a552.ae1f78","name":"String 1 Visualization","info":"","x":900,"y":20,"wires":[]},{"id":"98f4d3e8.85285","type":"comment","z":"8436a552.ae1f78","name":"String 2 Visualization","info":"","x":900,"y":280,"wires":[]},{"id":"1a2224ad.fca19b","type":"comment","z":"8436a552.ae1f78","name":"Conversion from Modbus Data to JSON","info":"","x":390,"y":180,"wires":[]},{"id":"da0b1d23.2cb9b","type":"comment","z":"8436a552.ae1f78","name":"Optional for seeing the status","info":"","x":240,"y":40,"wires":[]},{"id":"bcc4229c.180ac","type":"modbus-client","z":"","name":"Fronius","clienttype":"tcp","bufferCommands":true,"stateLogEnabled":false,"queueLogEnabled":false,"tcpHost":"fronius.fritz.box","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},{"id":"69e015f0.4b91cc","type":"ui_group","z":"","name":"String 1","tab":"14e13d07.f345c3","order":1,"disp":true,"width":"6","collapse":false},{"id":"aa17fe94.fdd7b","type":"ui_group","z":"","name":"String 2","tab":"14e13d07.f345c3","order":2,"disp":true,"width":"6","collapse":false},{"id":"25f342d6.5b01ee","type":"ui_group","z":"","name":"String1 Series","tab":"14e13d07.f345c3","order":3,"disp":true,"width":"10","collapse":false},{"id":"f883f269.2b701","type":"ui_group","z":"","name":"String2 Series","tab":"14e13d07.f345c3","order":4,"disp":true,"width":"10","collapse":false},{"id":"14e13d07.f345c3","type":"ui_tab","z":"","name":"Home","icon":"dashboard","disabled":false,"hidden":false}]