Multiple Inverters with Zero Feed-In Dashboard

Represented below is a sample Dashboard for multiple inverters, not necessarily of the same make, configured for Zero Feed-In. It features several elements - the top-bar buttons display the live power for both the solar and the grid, as well as the total generation/consumption for both; graphs for the cumulative and average load and solar generation; a bar graph for the site prosumption; and select live inverter parameters for both inverters along with bar graphs for individual inverter generation.

The following is the code for the Multiple Inverters with Zero Feed-In Dashboard as represented above, which can be uploaded to your EMS account. This dashboard can be used as is for two inverters, but is also easily modifiable for more inverters once it has been loaded onto the EMS, as has been explained in the Dashboard Designer section. However, since it does feature some custom HTML (in the inverter data widget), it will require some adjustment for one particular value, as is explained below the code.

inverters-zf-dashboard.json
[
    {
        "widget_type_id": "57",
        "width": "12",
        "icon": "none",
        "title": "SITE NAME",
        "status": "1",
        "widget_order": "-3",
        "access_level": "0",
        "show_border": "0",
        "show_title": "0",
        "widget_name": "Custom HTML",
        "widget_description": "Add Custom HTML Code",
        "content": "custom_html",
        "company_id": "0",
        "has_controller": "1",
        "userwidth": "12",
        "parameters": {
            "css_style": "white-space:nowrap;overflow:hidden;",
            "custom_html": "<div style='margin:0 auto;width:100px;display:table'><h1 style='font-size:50px;font-weight:semibold'>{{user_device.description}}<\/h1>\n<\/div>",
            "has_panel": "1"
        }
    },
    {
        "widget_type_id": "60",
        "width": "6",
        "icon": "none",
        "title": "Last Update",
        "status": "1",
        "widget_order": "-2",
        "access_level": "0",
        "show_border": "0",
        "show_title": "0",
        "widget_name": "Last Update",
        "widget_description": "Display the latest updated time for a device",
        "content": "widget_lastupdate",
        "company_id": "0",
        "has_controller": "1",
        "userwidth": "12",
        "parameters": []
    },
    {
        "widget_type_id": "54",
        "width": "12",
        "icon": "none",
        "title": "Date Range",
        "status": "1",
        "widget_order": "1",
        "access_level": "0",
        "show_border": "0",
        "show_title": "0",
        "widget_name": "DateRange",
        "widget_description": "",
        "content": "widget_daterange",
        "company_id": "0",
        "has_controller": "1",
        "userwidth": "8",
        "parameters": {
            "counter": "1634",
            "counter2": "1633",
            "show_day_buttons": "1",
            "show_month_buttons": "0"
        }
    },
    {
        "widget_type_id": "59",
        "width": "12",
        "icon": "none",
        "title": "Buttons",
        "status": "1",
        "widget_order": "2",
        "access_level": "0",
        "show_border": "1",
        "show_title": "1",
        "widget_name": "Topbar Buttons",
        "widget_description": "Buttons with Icons and Variable Values",
        "content": "topbar_buttons",
        "company_id": "0",
        "has_controller": "1",
        "userwidth": "12",
        "parameters": {
            "num_variables": "4",
            "variable0": "{\"vartype\":2,\"bgcolor\":\"#FFFFFF\",\"varcolor\":\"#73879c\",\"format\":2,\"title\":\"Solar Power\",\"icon\":\"fa-flash\",\"subtitle\":\"Current Solar Generation\",\"varname\":\"\",\"text\":\"VALUE('inverter1_AC_Active_Power')\/1000+VALUE('inverter2_AC_Active_Power')\/1000\",\"variable_id\":0,\"func\":0,\"scale\":1,\"ignore_neg\":0,\"unit\":\"kW\"}",
            "variable1": "{\"vartype\":1,\"bgcolor\":\"#FFFFFF\",\"varcolor\":\"#73879c\",\"format\":2,\"title\":\"Grid Power\",\"icon\":\"fa-plug\",\"subtitle\":\"Current Grid Import (positive) \/ Export (negative)\",\"varname\":\"meter1_AC_Active_Power\",\"text\":\"\",\"variable_id\":0,\"func\":0,\"scale\":1,\"ignore_neg\":0,\"unit\":\"kW\"}",
            "variable2": "{\"vartype\":2,\"bgcolor\":\"#FFFFFF\",\"varcolor\":\"#73879c\",\"format\":2,\"title\":\"Solar Generation\",\"icon\":\"fa-cubes\",\"subtitle\":\"Solar Generation for selected period\",\"varname\":\"\",\"text\":\"DIFF('inverter1_kWh_Total_Active',5)+DIFF('inverter2_kWh_Total_Active',5)\",\"variable_id\":0,\"func\":0,\"scale\":1,\"ignore_neg\":0,\"unit\":\"kWh\"}",
            "variable3": "{\"vartype\":2,\"bgcolor\":\"#FFFFFF\",\"varcolor\":\"#73879c\",\"format\":2,\"title\":\"Grid Electricity\",\"icon\":\"fa-plug\",\"subtitle\":\"Net Import\/Export for selected period\",\"varname\":\"\",\"text\":\"DIFF('meter1_kWh_Total_Import',5)-DIFF('meter1_kWh_Total_Export',5)\",\"variable_id\":0,\"func\":0,\"scale\":1,\"ignore_neg\":0,\"unit\":\"kWh\"}"
        }
    },
    {
        "widget_type_id": "55",
        "width": "12",
        "icon": "none",
        "title": "Cumulative Load and Solar Generation",
        "status": "1",
        "widget_order": "4",
        "access_level": "0",
        "show_border": "1",
        "show_title": "1",
        "widget_name": "Graph",
        "widget_description": "Graph View of Variables",
        "content": "widget_graph",
        "company_id": "0",
        "has_controller": "1",
        "userwidth": "6",
        "parameters": {
            "graph_type": "1",
            "has_panel": "1",
            "height": "0",
            "interval": "30",
            "num_variables": "3",
            "opacity": "0.2",
            "period": "0",
            "variable0": "{\"vartype\":2,\"varcolor\":\"#FABF73\",\"title\":\"Cumulative Solar\",\"varname\":\"\",\"text\":\"DIFF('inverter1_kWh_Total_Active',8)+DIFF('inverter2_kWh_Total_Active',8)\",\"variable_id\":0,\"type\":0,\"func\":2,\"scale\":1,\"maxval\":1000,\"minval\":-1000,\"unit\":\"kWh\"}",
            "variable1": "{\"vartype\":2,\"varcolor\":\"#8A9E9B\",\"title\":\"Cumulative Load\",\"varname\":\"\",\"text\":\"DIFF('meter1_kWh_Total_Import',8)-DIFF('meter1_kWh_Total_Export',8)DIFF('inverter1_kWh_Total_Active',8)+DIFF('inverter2_kWh_Total_Active',8)\",\"variable_id\":0,\"type\":0,\"func\":2,\"scale\":1,\"maxval\":1000,\"minval\":-1000,\"unit\":\"kWh\"}",
            "variable2": "{\"vartype\":2,\"varcolor\":\"#800921\",\"title\":\"Nett Import\/Export\",\"varname\":\"\",\"text\":\"DIFF('meter1_kWh_Total_Import',8)-DIFF('meter1_kWh_Total_Export',8)\",\"variable_id\":0,\"type\":0,\"func\":0,\"scale\":1,\"maxval\":1000,\"minval\":-1000,\"unit\":\"kWh\"}",
            "zero_offset": "1"
        }
    },
    {
        "widget_type_id": "55",
        "width": "12",
        "icon": "none",
        "title": "Average Load and Solar Generation",
        "status": "1",
        "widget_order": "4",
        "access_level": "0",
        "show_border": "0",
        "show_title": "0",
        "widget_name": "Graph",
        "widget_description": "Graph View of Variables",
        "content": "widget_graph",
        "company_id": "0",
        "has_controller": "1",
        "userwidth": "6",
        "parameters": {
            "graph_type": "1",
            "has_panel": "1",
            "height": "0",
            "interval": "5",
            "num_variables": "2",
            "opacity": "0.2",
            "period": "0",
            "variable0": "{\"vartype\":2,\"varcolor\":\"#EBBA57\",\"title\":\"Solar Generation\",\"varname\":\"\",\"text\":\"(VALUE('inverter1_AC_Active_Power',6)+VALUE('inverter2_AC_Active_Power',6))\/1000\",\"variable_id\":0,\"type\":0,\"func\":0,\"scale\":1,\"maxval\":100,\"minval\":-100,\"unit\":\"kW\"}",
            "variable1": "{\"vartype\":2,\"varcolor\":\"#989B9C\",\"title\":\"Load\",\"varname\":\"\",\"text\":\"(VALUE('inverter1_AC_Active_Power',6)+VALUE('inverter2_AC_Active_Power',6))\/1000+VALUE('pwrmeter_active_power',6)\",\"variable_id\":0,\"type\":0,\"func\":0,\"scale\":1,\"maxval\":100,\"minval\":-100,\"unit\":\"kW\"}",
            "zero_offset": "0"
        }
    },
    {
        "widget_type_id": "55",
        "width": "12",
        "icon": "none",
        "title": "Prosumption",
        "status": "1",
        "widget_order": "5",
        "access_level": "0",
        "show_border": "1",
        "show_title": "1",
        "widget_name": "Graph",
        "widget_description": "Graph View of Variables",
        "content": "widget_graph",
        "company_id": "0",
        "has_controller": "1",
        "userwidth": "12",
        "parameters": {
            "graph_type": "0",
            "has_panel": "1",
            "height": "0",
            "interval": "0",
            "num_variables": "1",
            "opacity": "0.2",
            "period": "7",
            "variable0": "{\"vartype\":2,\"varcolor\":\"#A3CF4C\",\"title\":\"Prosumption\",\"varname\":\"\",\"text\":\"(DIFF('inverter1_kWh_Total_Active',6)+DIFF('inverter2_kWh_Total_Active',6))*100\/(DIFF('inverter1_kWh_Total_Active',6)+DIFF('inverter2_kWh_Total_Active',6)+DIFF('meter1_kWh_Total_Import',6)-DIFF('meter1_kWh_Total_Export',6))\",\"variable_id\":0,\"type\":0,\"func\":0,\"scale\":1,\"maxval\":250,\"unit\":\"%\"}",
            "zero_offset": "1"
        }
    },
    {
        "widget_type_id": "57",
        "width": "12",
        "icon": "none",
        "title": "Inverter Data",
        "status": "1",
        "widget_order": "6",
        "access_level": "0",
        "show_border": "1",
        "show_title": "1",
        "widget_name": "Custom HTML",
        "widget_description": "Add Custom HTML Code",
        "content": "custom_html",
        "company_id": "0",
        "has_controller": "1",
        "userwidth": "6",
        "parameters": {
            "css_style": "",
            "custom_html": "<h2>Inverter 1 Data<\/h2>\n<table class='table table-striped'>\n<tr><td>Total kWh<\/td><td>{{ajaxData.latest_data['inverter1_kWh_Total_Active']}} kWh<\/td><\/tr>\n<tr><td>Power (AC)<\/td><td>{{ajaxData.latest_data['inverter1_AC_Active_Power']\/1000|number:1}} kW<\/td><\/tr>\n<tr><td>Power (DC)<\/td><td>{{ajaxData.latest_data['inverter1_DC_Active_Power']\/1000|number:1}} kW<\/td><\/tr>\n<tr><td>Voltage Phase 1<\/td><td>{{ajaxData.latest_data['inverter1_AC_Voltage_AN']|number:1}} V<\/td><\/tr>\n<tr><td>Voltage Phase 2<\/td><td>{{ajaxData.latest_data['inverter1_AC_Voltage_BN']|number:1}} V<\/td><\/tr>\n<tr><td>Voltage Phase 3<\/td><td>{{ajaxData.latest_data['inverter1_AC_Voltage_CN']|number:1}} V<\/td><\/tr>\n<tr><td>Frequency<\/td><td>{{ajaxData.latest_data['inverter1_AC_Frequency_A']|number:1}} Hz<\/td><\/tr>\n<tr><td>Array 1 DC Voltage<\/td><td>{{ajaxData.latest_data['inverter1_DC_Voltage_1']|number:1}} V<\/td><\/tr>\n<tr><td>Array 2 DC Voltage<\/td><td>{{ajaxData.latest_data['inverter1_DC_Voltage_2']|number:1}} V<\/td><\/tr>\n<tr><td>Status Code<\/td><td><span ng-show=\"ajaxData.latest_data['inverter1_Status_Code']==2\" class='label label-success'>Operating Normally<\/span>\n<span ng-show=\"ajaxData.latest_data['inverter1_Status_Code']==4\" class='label label-danger'>Error<\/span>\n<span ng-show=\"ajaxData.latest_data['inverter1_Status_Code']==1\">Starting<\/span>{{ajaxData.latest_data['inverter1_Status_Code']}}\n<\/td><\/tr>\n<\/table>\n\n",
            "has_panel": "1"
        }
    },
    {
        "widget_type_id": "55",
        "width": "12",
        "icon": "none",
        "title": "Inverter 1 Generation",
        "status": "1",
        "widget_order": "8",
        "access_level": "0",
        "show_border": "1",
        "show_title": "1",
        "widget_name": "Graph",
        "widget_description": "Graph View of Variables",
        "content": "widget_graph",
        "company_id": "0",
        "has_controller": "1",
        "userwidth": "6",
        "parameters": {
            "graph_type": "2",
            "has_panel": "1",
            "height": "0",
            "interval": "60",
            "num_variables": "1",
            "opacity": "0.2",
            "period": "0",
            "variable0": "{\"vartype\":1,\"varcolor\":\"#D9903D\",\"title\":\"Inverter 1\",\"varname\":\"inverter1_kWh_Total_Active\",\"text\":\"\",\"variable_id\":0,\"type\":0,\"func\":2,\"maxval\":500,\"scale\":1,\"unit\":\"kWh\"}",
            "zero_offset": "1"
        }
    },
    {
        "widget_type_id": "57",
        "width": "12",
        "icon": "none",
        "title": "Inverter 2 Data",
        "status": "1",
        "widget_order": "9",
        "access_level": "0",
        "show_border": "1",
        "show_title": "1",
        "widget_name": "Custom HTML",
        "widget_description": "Add Custom HTML Code",
        "content": "custom_html",
        "company_id": "0",
        "has_controller": "1",
        "userwidth": "6",
        "parameters": {
            "css_style": "",
            "custom_html": "<h2>Inverter 2 Data<\/h2><table class='table table-striped'>\n<tr><td>Total kWh<\/td><td>{{ajaxData.latest_data['inverter2_kWh_Total_Active']}} kWh<\/td><\/tr>\n<tr><td>Power (AC)<\/td><td>{{ajaxData.latest_data['inverter2_AC_Active_Power']\/1000|number:1}} kW<\/td><\/tr>\n<tr><td>Power (DC)<\/td><td>{{ajaxData.latest_data['inverter2_DC_Active_Power']\/1000|number:1}} kW<\/td><\/tr>\n<tr><td>Array 1 DC Voltage<\/td><td>{{ajaxData.latest_data['inverter2_DC_Voltage_1']|number:1}} V<\/td><\/tr>\n<tr><td>Array 2 DC Voltage<\/td><td>{{ajaxData.latest_data['inverter2_DC_Voltage_1']|number:1}} V<\/td><\/tr>\n<tr><td>Status Code<\/td><td><span ng-show=\"ajaxData.latest_data['inverter2_Status_Code']==2\" class='label label-success'>Operating Normally<\/span>\n<span ng-show=\"ajaxData.latest_data['inverter2_Status_Code']==4\" class='label label-danger'>Error<\/span>\n<span ng-show=\"ajaxData.latest_data['inverter2_Status_Code']==1\">Starting<\/span>\n<\/td><\/tr>\n<\/table>",
            "has_panel": "1"
        }
    },
    {
        "widget_type_id": "55",
        "width": "12",
        "icon": "none",
        "title": "Inverter 2 Generation",
        "status": "1",
        "widget_order": "10",
        "access_level": "0",
        "show_border": "1",
        "show_title": "1",
        "widget_name": "Graph",
        "widget_description": "Graph View of Variables",
        "content": "widget_graph",
        "company_id": "0",
        "has_controller": "1",
        "userwidth": "6",
        "parameters": {
            "graph_type": "0",
            "has_panel": "1",
            "height": "0",
            "interval": "60",
            "num_variables": "1",
            "opacity": "0.2",
            "period": "0",
            "variable0": "{\"vartype\":1,\"varcolor\":\"#806541\",\"title\":\"Inverter 2\",\"varname\":\"inverter2_kWh_Total_Active\",\"text\":\"\",\"variable_id\":0,\"type\":0,\"func\":2,\"maxval\":50,\"minval\":0,\"scale\":1,\"unit\":\"kWh\"}",
            "zero_offset": "1"
        }
    }
]

In the sample code above, the Inverter Data widgets feature custom HTML, which allows for the scaling of values, adding units, and in the case of the Status Codes, converting a numeric value to an actual status symbol. While all the other values will work across all inverter brands, the Status Code values differ between models, and therefore will need to be adjusted based on the details shared by the manufacturer.

The Status Codes above are currently set to match that of the Delta RPI inverter. To be made compatible with a different inverter, you will need to modify the status code as per the inverter manual and enter those in lieu of the 0 below :

<tr><td>Status Code</td><td><span ng-show="ajaxData.latest_data['inverter1_Status_Code']==0" class='label label-success'>Operating Normally</span>
<span ng-show="ajaxData.latest_data['inverter1_Status_Code']==0" class='label label-danger'>Error</span>
<span ng-show="ajaxData.latest_data['inverter1_Status_Code']==0">Starting</span>
</td></tr>