Page 1 of 1

I'm trying to trigger on SoC level, help needed

Posted: Mon Jun 17, 2024 7:14 pm
by marcus
I'm hoping someone can help, I thought this would work after testing in the templates page but hasn't triggered.

Background for goal:
I've had automations setting the work mode based on the tariffs, so at the start of the peak rate I switch to Feed-In Priority, at the end of peak I switch back to Self use. Now with the ability to Force Discharge I edited this to get even more at the peak export rate starting at 4pm. I only wanted to discharge to a set SoC though, so I set the number.min_soc and number.min_soc_on_grid to something that would see us to the next day.

Of course you reach the Min SoC, you are in Force Discharge mode, the system starts consuming from the grid (at the peak rate).

So I thought of this, if the SoC gets to that level in Force Discharge mode, I trigger this changing the mode to something else (Self Use or Feed In) and set the Min SoC to a lower level to use battery and prevent any grid consumption.

didn't trigger though, Any ideas?

Code: Select all

trigger:
  - platform: template
    value_template: >-
      "{{  states('sensor.battery_soc') | int(0) <=
      states('input_number.min_soc_peak') | int(0) }}"
here's the full automation

Code: Select all

alias: "Energy: Battery target Force Discharge SoC level achieved "
description: >-
  Sets the Min SoC to lower 'day time' level and work mode back to Feed-In
  Priority
trigger:
  - platform: template
    value_template: >-
      "{{  states('sensor.workshop_battery_soc') | int(0) <=
      states('input_number.min_soc_peak') | int(0) }}"
    variables:
      minSoC: "{{ float(states('input_number.min_soc_day')) }}"
      workmode: Feed-In Priority
condition:
  - condition: template
    value_template: "{{ states('select.workshop_work_mode') == 'Force Discharge' }}"
action:
  - service: number.set_value
    target:
      entity_id: number.workshop_min_soc
    data:
      value: "{{ minSoC }}"
  - service: number.set_value
    target:
      entity_id: number.workshop_min_soc_on_grid
    data:
      value: "{{ minSoC }}"
  - service: select.select_option
    target:
      entity_id: select.workshop_work_mode
    data:
      option: "{{ workmode }}"
mode: single
thanks!

Re: I'm trying to trigger on SoC level, help needed

Posted: Tue Jun 18, 2024 9:10 am
by Dave Foster
I can’t test it but the logic looks ok, but as a trigger I think that template test will only ‘trigger’ when the test changes i.e. your battery soc would have to drop below or go above you input number - but it won’t trigger if it is already above or below it.

The best way to handle it is to change it from the trigger, instead trigger on time pattern every 5 minutes ‘/5’ and move the template down to conditions - that way it will trigger every 5 minutes, test the conditions and if they are true it will continue to the actions.

I’d suggest adding a logbook entry to the actions, that way it will be much easier to see when it fires.

Code: Select all


service: logbook.log
data:
  message: MinSoC at or below 
  name: Force Discharge Battery Check

Re: I'm trying to trigger on SoC level, help needed

Posted: Tue Jun 18, 2024 6:52 pm
by marcus
thanks Dave,

The polling every 5 minutes against a condition works a treat, great idea! :idea: I don't think the trigger was firing at all on the state...

If it helps anyone else trying to achieve similar this is what I've gone with
Note: tweak vars with entity "workshop" and introduce input_number.min_soc_peak and input_number.min_soc_day similar to max SoC automation

Code: Select all

alias: "Energy: Battery target Force Discharge SoC level achieved"
description: >-
  Sets the Min SoC to lower 'day time' level and work mode back to Feed-In First
  - it 'polls' every 5 minutes during the 16th, 17th & 18th hours to check
  condition
trigger:
  - platform: time_pattern
    hours: 16
    minutes: /5
  - platform: time_pattern
    hours: 17
    minutes: /5
  - platform: time_pattern
    hours: 18
    minutes: /5
condition:
  - and:
      - condition: template
        value_template: "{{ states('select.workshop_work_mode') == 'Force Discharge' }}"
      - condition: template
        value_template: >-
          {{ states('sensor.workshop_battery_soc')|float(0) <=
          states('input_number.min_soc_peak')|float(0) }}
action:
  - variables:
      minSoC: "{{ float(states('input_number.min_soc_day')) }}"
      workmode: Feed-in First
  - service: number.set_value
    target:
      entity_id: number.workshop_min_soc
    data:
      value: "{{ minSoC }}"
  - service: number.set_value
    target:
      entity_id: number.workshop_min_soc_on_grid
    data:
      value: "{{ minSoC }}"
  - service: select.select_option
    target:
      entity_id: select.workshop_work_mode
    data:
      option: "{{ workmode }}"
mode: single

trace.png
cheers