SOC_Setpoint list_only currentSoC price_level price minSoc text dropDebugPrint soc_action_info action_list priceOfHour battery_kwh_costs price_list_48h tibber_prices_today_ids level_list_48h max_price tibber_prices_tomorrow_ids current_soc min_price soc_min_limit battery_min_soc_id_write_W solar_estimation_today soc_max_limit ID_tibber_current_total solar_estimation_tomorrow i soc_negativ_price_limit solar_estimation_today_id min_soc_cheap solar_estimation_tomorrow_id tibber_level_today_ids min_soc_expensive price_delta k solar_kwh_threshold battery_min_soc_id_read_N tibber_starts_at_tomorrow_id tibber_level_tomorrow_ids ID_tibber_current_level enableCharge set_battery_minSOC Beschreibe diese Funktion … EDIT MinimumSocLimit: mqtt-client.0.W.<YOUR VICTRON ID>.settings.0.Settings.CGwacs.BatteryLife.MinimumSocLimit Set the topic to your min soc limit list_only false FALSE Object ID battery_min_soc_id_write_W TRUE {"value": 50 SOC_Setpoint 20 soc_min_limit 100 soc_max_limit } 0 decideTheAction Beschreibe diese Funktion … soc_action_info Pending AND LTE price 0 GT price MULTIPLY 1 battery_kwh_costs -1 Energy is free. Idle battery list_only list_only LTE val Object ID ID_tibber_current_total MULTIPLY 1 battery_kwh_costs -1 costs are less then charging costs Charging earns money. Charging. list_only soc_action_info soc_negativ_price_limit soc_negativ_price_limit list_only Read solar estimation solar_estimation_today val Object ID solar_estimation_today_id solar_estimation_tomorrow val Object ID solar_estimation_tomorrow_id OR GTE solar_estimation_today solar_kwh_threshold GTE solar_estimation_tomorrow solar_kwh_threshold Solar threshold reached. Disabled price compensation log Preisdelta rechtfertigt Akkunutzung Solar estimation totay is 2 3.1234 solar_estimation_today kWh and tomorrow: 2 3.1234 solar_estimation_tomorrow kWh. soc_action_info soc_min_limit soc_min_limit list_only Calculate price delta price_delta 0 max_price -5 min_price 5 price_delta MINUS 1 max_price 1 min_price Price delta high enough for charging from grid GT price_delta battery_kwh_costs High price delta of: 2 3.1234 price_delta with min price of 2 3.1234 min_price and a max price of 2 3.1234 max_price list_only LT battery_kwh_costs MINUS 1 max_price 1 price current delta > battery costs allows charging enableCharge TRUE enableCharge FALSE Always allow compensation of expensive and very expensive hours to use solar yield AND EQ price_level CHEAP enableCharge soc_action_info min_soc_cheap Price cheap. Charging list_only min_soc_cheap list_only AND EQ price_level VERY_CHEAP enableCharge soc_action_info soc_max_limit Price very cheap. Charging to max limit list_only soc_max_limit list_only EQ price_level EXPENSIVE soc_action_info min_soc_expensive min_soc_expensive list_only Price expensive. Battery discharging list_only EQ price_level VERY_EXPENSIVE soc_action_info soc_min_limit soc_min_limit list_only Price very expensive. Battery discharging to min limit list_only Battery not used. soc_action_info currentSoC list_only Price normal. Battery not used. list_only soc_action_info generateActionList Beschreibe diese Funktion … action_list price_list_48h level_list_48h current_soc ROUND 3.1 50 value val Object ID battery_min_soc_id_read_N 20 soc_min_limit 100 soc_max_limit To see the behaviour in advance, a action list is generated i tibber_prices_today_ids INSERT LAST price_list_48h val Object ID i i tibber_level_today_ids INSERT LAST level_list_48h val Object ID i TRUE < 12:00 val Object ID tibber_starts_at_tomorrow_id log Prices for tomorrow available i tibber_prices_tomorrow_ids INSERT LAST price_list_48h val Object ID i i tibber_level_tomorrow_ids INSERT LAST level_list_48h val Object ID i log Prices for tomorrow not available k 1 10 level_list_48h 1 INSERT LAST action_list current_soc GET FROM_START level_list_48h k GET FROM_START price_list_48h k TRUE log test JOIN action_list , soc_action_list JOIN action_list , false FALSE javascript.0.soc_action_list TRUE JOIN action_list , 0 tibber_price_list JOIN price_list_48h , false FALSE javascript.0.tibber_price_list TRUE JOIN price_list_48h , 0 decrease_min_soc Beschreibe diese Funktion … Decrease the minSOC to discharge the battery will only decrease the minSOC to prevent charge LTE minSoc current_soc minSoc list_only increase_min_soc Beschreibe diese Funktion … Increases the minSOC to charge the battery it will only increase, to prevent discharge GT minSoc current_soc minSoc list_only list_only get_min_max_prices Beschreibe diese Funktion … priceOfHour tibber_prices_today_ids LT max_price val priceOfHour max_price val priceOfHour GT min_price val priceOfHour min_price val priceOfHour priceOfHour tibber_prices_tomorrow_ids LT max_price val priceOfHour max_price val priceOfHour GT min_price val priceOfHour min_price val priceOfHour idle_battery Beschreibe diese Funktion … Idle the battery by setting the minSOC to the current SOC current_soc list_only debugOutput Beschreibe diese Funktion … dropDebugPrint log test text User Input Area battery_kwh_costs 0.12 limits to keep battery in healthful states and to preserve buffer to charge from solar soc_min_limit 20 soc_max_limit 95 SOC limits for cheap, expensive and negativ prices min_soc_cheap 75 min_soc_expensive 40 soc_negativ_price_limit 100 Threshold to disable charging from grid (Summer mode) solar_kwh_threshold 9 EDIT the object ids need to be changed to your ids tibberconnect.0.Homes.<YOURTIBBERID>.CurrentPrice.level ID_tibber_current_level tibberconnect.0.Homes.7870.CurrentPrice.level tibberconnect.0.Homes.<YOURTIBBERID>.CurrentPrice.total ID_tibber_current_total tibberconnect.0.Homes.7870.CurrentPrice.total tibberconnect.0.Homes.<YOURTIBBERID>.PricesTomorrow.0.startsAt tibber_starts_at_tomorrow_id tibberconnect.0.Homes.7870.PricesTomorrow.0.startsAt channel[state.id=tibberconnect.0.Homes.<YOURTIBBERID>.PricesToday.*.total] tibber_prices_today_ids channel[state.id=tibberconnect.0.Homes.7870.PricesToday.*.total] channel[state.id=tibberconnect.0.Homes.<YOURTIBBERID>.PricesToday.*.level] tibber_level_today_ids channel[state.id=tibberconnect.0.Homes.7870.PricesToday.*.level] channel[state.id=tibberconnect.0.Homes.<YOURTIBBERID>.PricesTomorrow.*.total] tibber_prices_tomorrow_ids channel[state.id=tibberconnect.0.Homes.7870.PricesTomorrow.*.total] channel[state.id=tibberconnect.0.Homes.<YOURTIBBERID>.PricesTomorrow.*.level] tibber_level_tomorrow_ids channel[state.id=tibberconnect.0.Homes.7870.PricesTomorrow.*.level] mqtt-client.0.N.<YOURVICTRONID>.vebus.276.Soc battery_min_soc_id_read_N mqtt-client.0.N.93ffff3451112.vebus.276.Soc mqtt-client.0.W.<YOURVICTRONID>.vebus.276.Soc battery_min_soc_id_write_W mqtt-client.0.W.93ffff3451112.vebus.276.Soc pvforecast.<YOURPVCASTID>.summary.energy.today solar_estimation_today_id pvforecast.1.summary.energy.today pvforecast.<YOURPVCASTID>.summary.energy.tomorrow solar_estimation_tomorrow_id pvforecast.1.summary.energy.tomorrow generateActionList is optional. * * * * * Calulation area save current soc current_soc ROUND 3.1 50 value val Object ID battery_min_soc_id_read_N 20 soc_min_limit 100 soc_max_limit Check if price is negative current_soc val Object ID ID_tibber_current_level val Object ID ID_tibber_current_total FALSE TRUE */60 * * * *