Skip to content

Instantly share code, notes, and snippets.

@danielolsson100
Last active December 2, 2023 23:40
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danielolsson100/4ee739d864dc90dac144e4d026ae090f to your computer and use it in GitHub Desktop.
Save danielolsson100/4ee739d864dc90dac144e4d026ae090f to your computer and use it in GitHub Desktop.
ferroamp - charge or discharge battery sensor with home assistant and nordpool
binary_sensor:
- platform: template
sensors:
bs_charge_ferroamp_battery:
friendly_name: Charge Ferroamp Battery
value_template: >-
{% set today=state_attr('sensor.nordpool_kwh_se4_sek_2_10_025','today') %}
{% if ((state_attr('sensor.nordpool_kwh_se4_sek_2_10_025','tomorrow') | count) == 0) or (state_attr('sensor.nordpool_kwh_se4_sek_2_10_025','tomorrow')[0] == None) %}
{% set array = today %}
{% else %}
{% set tomorrow=state_attr('sensor.nordpool_kwh_se4_sek_2_10_025','tomorrow') %}
{% set array = today + tomorrow %}
{% endif %}
{% set current_price=states('sensor.nordpool_kwh_se4_sek_2_10_025') %}
{% set max=state_attr('sensor.nordpool_kwh_se4_sek_2_10_025','max') %}
{% set min=state_attr('sensor.nordpool_kwh_se4_sek_2_10_025','min') %}
{% set five_lowest_bp=(array | sort)[4] %}
{% if ((current_price | float) <= (five_lowest_bp | float)) %}
True
{% else %}
False
{% endif %}
bs_discharge_ferroamp_battery:
friendly_name: Discharge Ferroamp Battery
value_template: >-
{% set easee_cons_daily=(states('sensor.easee_energy_daily'))|float%}
{% set easee_cons_hourly=(states('sensor.easee_energy_hourly'))|float%}
{% set energy_cons_daily=(states('sensor.load_energy_consumed_daily'))|float %}
{% set energy_cons_hourly=(states('sensor.load_energy_consumed_hourly'))|float %}
{% set easee_cons_daily_lp=(state_attr('sensor.easee_energy_daily','last_period'))|float %}
{% set easee_cons_hourly_lp=(state_attr('sensor.easee_energy_hourly','last_period'))|float %}
{% set energy_cons_daily_lp=(state_attr('sensor.load_energy_consumed_daily','last_period'))|float %}
{% set energy_cons_hourly_lp=(state_attr('sensor.load_energy_consumed_hourly','last_period'))|float %}
{% set batt_soc=states('sensor.ferroamp_eso_19110078_state_of_charge')|float %}
{% set current_hour=(now().hour)|int %}
{% set hours_left=(24-now().hour)|int %}
{% set usable_battery_energy=((states('sensor.ferroamp_eso_19110078_state_of_charge')|float - 10)/100 * 10) | round(1) %}
{% set calc_battery_time=(usable_battery_energy/(((energy_cons_daily - easee_cons_daily)/current_hour + ((energy_cons_daily_lp - easee_cons_daily_lp)/24))/2))|round(0,'ceil') %}
{% set nordpool_today=state_attr('sensor.nordpool_kwh_se4_sek_2_10_025','today') %}
{% set current_price=states('sensor.nordpool_kwh_se4_sek_2_10_025') %}
{% if usable_battery_energy <=0 %}
False
{% else %}
{% if (hours_left-calc_battery_time) > 0 %}
{% set price_breakpoint=(nordpool_today[current_hour:24]|sort)[(nordpool_today[current_hour:24]|count-calc_battery_time)] %}
{% else %}
{% set price_breakpoint=(nordpool_today[current_hour:24]|sort)[0] %}
{% endif %}
{% if (current_price | float) >= (price_breakpoint | float) %}
True
{% else %}
False
{% endif %}
{% endif %}
#-------------------------------------------
#easee_cons_daily......................: {{easee_cons_daily}}
#easee_cons_hourly.....................: {{easee_cons_hourly}}
#energy_cons_daily.....................: {{energy_cons_daily}}
#energy_cons_hourly....................: {{energy_cons_hourly}}
#easee_cons_daily_lp...................: {{easee_cons_daily_lp}}
#easee_cons_hourly_lp..................: {{easee_cons_hourly_lp}}
#energy_cons_daily_lp..................: {{energy_cons_daily_lp}}
#energy_cons_hourly_lp.................: {{energy_cons_hourly_lp}}
#batt_soc..............................: {{batt_soc}}
#current_hour..........................: {{current_hour}}
#hours_left............................: {{hours_left}}
#usable_battery_energy.................: {{usable_battery_energy}}
#calc_battery_time.....................: {{calc_battery_time}}
#current_price.........................: {{current_price}}
#price_breakpoint......................: {{price_breakpoint}}
#nordpool_today........................: {{nordpool_today}}
#nordpool_today[current_hour:24........: {{nordpool_today[current_hour:24]}}
#(nordpool_today[current_hour:24)|sort.: {{(nordpool_today[current_hour:24])|sort}}
@danielolsson100
Copy link
Author

This binary sensor now requires integrations from Easee/NordPool/Ferroamp and the use of utility meter in HomeAssistant to work
use at own risk ;)

utility_meter:
  easee_energy_hourly:
    source: sensor.easee_lifetime_energy
    cycle: hourly
  easee_energy_daily:
    source: sensor.easee_lifetime_energy
    cycle: daily
  easee_energy_monthly:
    source: sensor.easee_lifetime_energy
    cycle: monthly
  load_energy_consumed_hourly:
    source: sensor.ferroamp_load_energy_consumed
    cycle: hourly
  load_energy_consumed_daily:
    source: sensor.ferroamp_load_energy_consumed
    cycle: daily
  load_energy_consumed_monthly:
    source: sensor.ferroamp_load_energy_consumed
    cycle: monthly

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment