I have had my solar panels now for one year. I have posted some reflections about this before. When I started to do this there were no Fronius integration in HACS but since then it is. I would really recommend you to use this. Especially if you have a smartmeter installed. You will get tons of info. I have Fronius but you might have another brand like Ferroamp. I think you will still be able to use some of the info below. The sensors might not be the same but still you can get some inspiration about Lovelace cards. So let´s get started.
First of all I would like to thank Nilrog who has given me a lot of inspiration and made most sensors work the way I want them. There is a discussion going on here at the Home Assistant Community about Fronius. Read it. I have tried to make this post a little bit more simple so beginners can make Dashboards as well.
Prerequirements
Hardware
Fronius Inverter and smartmeter (optional but nice)
Raspberry PI for Home Assistant (or any other server)
Software
Home Assistant
HACS (you will install all of the below from HACS)
Integrations
Fronius component
Lovelace cards
Barcard
Bignumber card
Mini graph card
Piechart card
Power Wheel card
Synthwave Theme
Card mod
Auto-entities
You will need this as the 80s has the best colors for your Lovelace. It looks great.
I won’t go through all the steps how to setup Home Assistant. There are so many good guides so just use the setup instructions on the official site.
HACS
What is Hacs? It is a repository or a marketplace to install all kind of things. Integrations, themes or cards. It will make everything so much easier. To install HACS or Home Assistant Community Store you will need.
- Home Assistant version 0.98.0 or higher.
- A GitHub account
Download the latest HACS release file from here
Extract it into custom_components/hacs inside your Home Assistant configuration folder
To enable Themes in HACS add the following to your configuration.yaml
themes: !include_dir_merge_named themes
Restart Home Assistant
Hacs should now be visible for you.
So lets install all of the integrations, plugins and themes above. Search for them and press install like in the image below.
Notice that you will have to press “add to lovelace” so that the components are added to the configuration. Since 0.107 or something they have been moved so you can see them if you press configuration->Lovelace dashboards and resources. After you have added them you can verify that they exists here.
Configure the Fronius component.
You will need to add this to your configuration.yaml. In my case I have it my sensors.yaml. Notice that yours might be different. Read the manual at the repository for the Fronius integration. Restart Home Assistant.
- platform: fronius_inverter ip_address: YOURIP powerflow: true units: kWh power_units: W smartmeter: true smartmeter_device_id: 0
I did create a separate dashboard in configuration -> lovelace dashboards and called i lab. I put all my non finished testcards here and eventually moved them to a solar overview view when I was happy with them.
First we start off with the new installed auto-entities card. We do this because when you installed the Fronius component you did get a lot of new sensors. It might be easy to miss any of theese so we just want to see all the sensors we have about Fronius. Create a manual card like this. Press the plus icon and choose manual. Paste the code.
card: show_header_toggle: false title: Fronius type: entities filter: include: - entity_id: '*fronius*' type: 'custom:auto-entities'
The card might look something like this but more entities.
What we will use
When you install the Fronius integration you will get a lot of sensors. They are read directly from the inverter and smartmeter via API calls. However there might other data you want that do not exists here that we will need to use Home Assistant for. We will use the platforms or integrations below to create som more sensors.
Influx – To download historic data from your Influx database. If you are using Influx?
Template – To calculate some sensors
Utility meter – To schedule daily, monthly and yearly data. The utility meter is far from perfect but might be nice to have.
Integration – To convert
Templates
The two templates below might not be perfect and accurate but will give you some indication and can be fun to have. The first will calculate the amount of energy in kWh your solar panels have produced and take this time the amount of money you normally pay for each kWh. You might pay different depending of the time of the day or you might get more money for selling and in this case use an average value you think is correct.
The second one takes the energy sold today (a utility meter from the sensor sensor.fronius_smartmeter_energy_ac_sold) and multiples with what you get payed and returns the amount of money you have sold for today. You could replace the * 0.9 with a sensor from example Tibber accrual price if the price varies during the day.
- platform: template sensors: time_until_payed: value_template: '{{ ((states.sensor.fronius_total_energy.state | float * 0.9 - REPLACEWITHWHATYOUPAYED)) | round(0) }}' friendly_name: 'Time until payed' unit_of_measurement: 'kr' today_sold_energy_in_sek: value_template: '{{ ((states.sensor.grid_sold_energy_day.state | float * 0.9 )) | round(0) }}' friendly_name: 'Sold energy today' unit_of_measurement: 'kr'
I will add some more Lovelacecards later with the second sensor but with the first we can create one using the barcard we installed earlier.
time_until_payed: value_template: '{{ ((states.sensor.fronius_total_energy.state | float * 0.9 - 180000)) | round(0) }}' friendly_name: 'Kvar till avbetalt' unit_of_measurement: 'kr'
It will look something like this.
The smartmeter and sensor house load below is negative when you buy energy and positive when you export energy. It will be hard to use this in Home Assistant. So we use the template to convert and get a sensor that is always positive. We will use this later on.
# convert house load to positive current_consumed_positive: friendly_name: 'Förbrukad effekt' unit_of_measurement: 'W' value_template: '{{ states("sensor.fronius_house_load") | float * -1 }}'
We want to calculate what we sell to the grid.
# sold to grid current_sold_grid: friendly_name: 'Sold effect' unit_of_measurement: 'W' value_template: > {% if states("sensor.fronius_grid_usage") | float < 0 -%} {{ states("sensor.fronius_grid_usage") | float * -1 }} {%- else -%} {{ 0 | float }} {%- endif %}
I also want to know how much we use the solar panels in percent. We do this by taking the panel status and divide this by the max effect of our installation. Mine is 13.3 kW
# solar panel utilization solar_panel_utilization: friendly_name: 'Usage of panels in percent' unit_of_measurement: '%' value_template: > {{ (states("sensor.fronius_panel_status") | float * 100 / 13300) | round(1) }}
Integrations
The integrations below converts from used to hour. We will use them later in the utility sensor. And as you might see some sensors are still missing. We will add them later on as utility sensors. There is some documentation about this here. I had some hard times understanding why this sensor was giving me strange values. It turned out that I had to recreate the sensor as the old one was storing some data. Even if I removed it and created it again the old values appeared again.
# convert house power consumption to energy - platform: integration source: sensor.current_consumed_positive name: energy_used_hour unit_prefix: k unit_time: h round: 2 method: left
Converts consumed grid power to energy. How many W you are using from the grid converted to kWh per hour. The source is the Fronius grid usage.
# convert consumed grid power to energy - platform: integration source: sensor.fronius_grid_usage name: energy_grid_consumed_hour unit_prefix: k unit_time: h round: 2 method: left
And how much have you sold the last hour. This takes the source from the template sensor.
# convert sold grid power to energy - platform: integration source: sensor.current_sold_grid name: energy_grid_sold_hour unit_prefix: k unit_time: h round: 2 method: left
Convert net grid power to energy (difference between consumed and sold)
- platform: integration source: sensor.fronius_grid_usage name: energy_grid_net_hour unit_prefix: k unit_time: h round: 2 method: left
Convert panel power to energy (needed for monthly calculations)
- platform: integration source: sensor.fronius_panel_status name: energy_panel_hour unit_prefix: k unit_time: h round: 2 method: left
Utility Meters
Utility meters can be used to track consumptions over time. It can be quite handy. There are some issues when something goes wrong. You might have to clear the sensor and reset it sometimes. If you have a meter that is for example yearly you might have to wait one year in order to get it right. The meters below was made by Nilrog and I have just used them in my setup. Just add them like this in your configuration.yaml. They will be used for the other integration sensors above as well to create some Lovelace cards later.
utility_meter: ### daily data ### # calculate daily energy used house_energy_day: source: sensor.energy_used_hour cycle: daily # calculate daily energy consumed from grid grid_consumed_energy_day: source: sensor.fronius_smartmeter_energy_ac_consumed cycle: daily # calculate daily energy sold to grid grid_sold_energy_day: source: sensor.fronius_smartmeter_energy_ac_sold cycle: daily ### monthly data ### # calculate monthly energy used house_energy_month: source: sensor.energy_used_hour cycle: monthly # calculate monthly energy consumed from grid grid_consumed_energy_month: source: sensor.fronius_smartmeter_energy_ac_consumed cycle: monthly # calculate monthly energy sold to grid grid_sold_energy_month: source: sensor.fronius_smartmeter_energy_ac_sold cycle: monthly # calculate monthly panel production since that is not available from the inverter fronius_month_energy: source: sensor.energy_panel_hour cycle: monthly ### yearly data ### # calculate yearly energy used house_energy_year: source: sensor.energy_used_hour cycle: yearly # calculate yearly energy consumed from grid grid_consumed_energy_year: source: sensor.fronius_smartmeter_energy_ac_consumed cycle: yearly # calculate yearly energy sold to grid grid_sold_energy_year: source: sensor.fronius_smartmeter_energy_ac_sold cycle: yearly
Influx
If you are storing your data to an influx database you can query it via Home Assistant. Setting up Influx is not very hard. There are guides how to do this. Add the code below to your configuration.yaml
- platform: influxdb host: !secret influxdb_host username: !secret influxdb_user password: !secret influxdb_pass As well as this.
queries: # max effect from the panels today (00:00 - 23:59) - name: Fronius Panel Status Max Day database: home unit_of_measurement: 'W' value_template: '{{ value | round(0) }}' group_function: max where: '"entity_id" = ''fronius_panel_status'' > {{(as_timestamp(now()) - (now().hour * 3600) - (now().minute * 60) - (now().second)) | round(0)}}s' field: value measurement: 'W' # max effect from panels the latest 7 days - name: Fronius Panel Status Max Week database: home unit_of_measurement: 'W' value_template: '{{ value | round(0) }}' group_function: max # todo: only query for 7 day values, not 168h back from now where: '"entity_id" = ''fronius_panel_status'' and time > now() - 168h' field: value measurement: 'W' # max effect since panels was installed - name: Fronius Panel Status Max Ever database: home unit_of_measurement: 'W' value_template: '{{ value | round(0) }}' group_function: max where: '"entity_id" = ''fronius_panel_status'' and time > ''2019-03-01''' field: value measurement: 'W'
Ok, We are done setting up all the sensors and other stuff. Restart Home Assistant. Check the Auto-entities card you created in the lab dashboard.
Many new sensors should be there now. You might want to add another basic card just checking that the other sensors works as well. You may want to
log in to solar.webb and make sure you get the same info in Home Assistant that you get there. It could be information like daily consumption and usage.
Dashboards and Lovelace cards
Now we can start to add some cards. We have already added one. The time until payed. So let’s go crazy
Powerwheel card
This card will create a nice overview of your production and consumption. The exaple blow is quite simple but the card offers many other settings. Jsut paste the below code in a manual card.
grid_icon: 'mdi:flash' grid_power_entity: sensor.fronius_grid_usage home_energy_entity: sensor.fronius_house_load production_is_positive: false solar_icon: 'mdi:white-balance-sunny' solar_power_entity: sensor.fronius_panel_status title: Solar Power type: 'custom:power-wheel-card'
Big number card
This card can be used in many different ways. With a bar like below or just a number. Or with severity colors. I wanted a card showing the most important things like Solar production, House load and solar today. This was placed in a vertical stack card.
cards: - entity: sensor.fronius_panel_status from: left max: 15300 min: 0 scale: 30px severity: - style: '#ffcc00' value: 0 - style: '#ff1155' value: 4000 - style: '#ff0000' value: 15300 title: Solar Power type: 'custom:bignumber-card' - entity: sensor.current_consumed_positive from: left max: 15000 min: 0 scale: 30px severity: - style: var(--label-badge-green) value: 0 - style: var(--label-badge-yellow) value: 3000 - style: var(--label-badge-red) value: 15000 title: House load type: 'custom:bignumber-card' - entity: sensor.fronius_day_energy from: left max: 100 min: 0 scale: 30px severity: - style: var(--label-badge-red) value: 5 - style: var(--label-badge-yellow) value: 20 - style: var(--label-badge-green) value: 80 title: Solar Today type: 'custom:bignumber-card' type: vertical-stack
Mini-graph & Bignumber
Bignumber card again. Together with the mini graph card. I made it pink to match the retrostyle of the synthwave theme. It is a lot of info here and I am not really sure I will use it like this. However it shows the potential.
The top bignumber code looks like this.
cards: - entity: sensor.house_energy_day scale: 25px style: | ha-card { background: {% if states('sensor.house_energy_day') | float < states('sensor.grid_sold_energy_day') | float %} #e929a5 {% else %} #00c800 {% endif %}; } title: Usage Today type: 'custom:bignumber-card' - entity: sensor.fronius_day_energy scale: 25px style: | ha-card { background: {% if states('sensor.fronius_day_energy') | float > states('sensor.house_energy_day') | float %} #e929a5 {% else %} #00c800 {% endif %}; } title: Produced today type: 'custom:bignumber-card' - entity: sensor.grid_consumed_energy_day scale: 25px style: | ha-card { background: {% if states('sensor.fronius_grid_usage') | float < 0 %} #e929a5 {% else %} #00c800 {% endif %}; } title: Bought today type: 'custom:bignumber-card' - entity: sensor.grid_sold_energy_day scale: 25px style: | ha-card { background: {% if states('sensor.grid_sold_energy_day') | float > states('sensor.grid_consumed_energy_day') | float %} #e929a5 {% else %} #00c800 {% endif %}; } title: Sold today type: 'custom:bignumber-card' type: horizontal-stack
The minigraphcards looks like this in Lovelace.
cards: - decimals: 0 entities: - color: '#00ff00' entity: sensor.fronius_panel_status name: Solarpanels show_points: false show_state: true - color: '#ff00cc' entity: sensor.current_consumed_positive name: House load show_points: false show_state: true - aggregate_func: min color: gray entity: binary_sensor.night name: Night show fill: true show legend: false show_line: false show_points: false show_state: false smoothing: false y_axis: secondary hour24: true hours_to_show: 72 line_width: 1 lower_bound_secondary: 0 name: From solar panels points_per_hour: 12 show: extrema: true labels: false labels_secondary: false smoothing: false state_map: - label: Day value: 'off' - label: Night value: 'on' type: 'custom:mini-graph-card' upper_bound_secondary: 1 - color_thresholds: - color: '#ff0000' value: 0 - color: '#00ff00' value: -20000 color_thresholds_transition: hard decimals: 0 entities: - entity: sensor.fronius_grid_usage color: '#ff00cc' name: Grid show_points: false - aggregate_func: min color: gray entity: binary_sensor.night name: Night show fill: true show legend: false show_line: false show_points: false show_state: true smoothing: false y_axis: secondary hour24: true hours_to_show: 72 line_width: 1 lower_bound_secondary: 0 name: From grid points_per_hour: 12 show: extrema: true labels: false labels_secondary: false smoothing: false state_map: - label: Day value: 'off' - label: Night value: 'on' type: 'custom:mini-graph-card' upper_bound_secondary: 1 type: horizontal-stack
Maybe you just wan something more simple? The minigraphcard below gives you the solar generation and the house consumption.
The code looks like this.
entities: - color: '#27ae60' entity: sensor.fronius_panel_status name: Solar Gen - color: '#e74c3c' entity: sensor.current_consumed_positive name: House Usage show_state: true - aggregate_func: min color: gray entity: binary_sensor.night name: Night Time show fill: true show legend: false show_line: false show_points: false show_state: true smoothing: false y_axis: secondary hours_to_show: 3 name: Solar & Consumption points_per_hour: 10 show: extrema: false labels: false labels_secondary: false smoothing: false state_map: - label: Day value: 'off' - label: Night value: 'on' type: 'custom:mini-graph-card'
Piechart
The pie chart might be good in some cases. This is most likely not a very good example.
The code looks like this.
entities: - entity: sensor.fronius_panel_status name: Solar panel status title: Panel Status unknownText: Out of 13.3kWp total_amount: 13300 type: 'custom:pie-chart-card'
The final dashboard may look something like this. Some values are wrong, cards and Home Assistant gets updates that breaks your configuration.
Watts changes to kW and Kw changes to mW and this will make some of your sensors unusable. Consider the dashboard and cards as a complement to your other
I suppose this will never be finished…
Hi! You are using the entity “binary_sensor.night” where do you get that from?
This was very helpful, thanks a lot. BTW: You have some chars in the code, which needs to be replaced like “>” turned into “
&amp;amp;amp;amp;amp;amp;amp;gt;"
this could confuse some people.Oh and I think you’re right: the Pie Chart could really be useful e.g. to show total consumption of a time period and which part was used by what devices (smart plugs could deliver this data and now we know how to convert the W in kWh since you gave the example).
Also nice: Bars which shows Consumption and what part was directly consumed solarenergy and another one showing production with self consumption in % for the day, like the fronius portal.
Now I know why you said this will never be finished 🙂
Oh and one question if you don’t mind… I would like to show a bar for every month of the year with total length=expected and filled=produced energy. How to get this data back from influxdb? If I understand this correctly now that i have influxdb all my data that is defined to be recorded, will be stored there forever, which gives some nice possibilities to graphically compare years (influx dashboard).
This is like a candy store xD
Thanks. I have fixed the code. I switched code plug-in and some errors popped up.I think you can use the https://github.com/kalkih/mini-graph-card and Bar chart. I did try that and got most values from the Influx database. However I think the peresentation were better i Grafana compared to Lovelace. But try.
It can look something like this:
Found a way to read String1 and String2 + Inverter data, but it is not included in the fronius component of homeassistant :-/
Also found this php script that collects the data: https://github.com/grann0s/_pushPVStringData.php/blob/master/_pushPVStringData.php