DESS Reactive Strategy Homeassistant Template

Hi folks,

here is a little Easter present for Homeassistant users: a template that maps DESS reactive strategy (from current BETA Venus OS!!) to it’s meaning as defined in systemcalc/dynamicess.py

All you need to do is to adjust “unique_id” and the source state (sensor.mp2_dess_reactive_strategy in my case) to your liking…

- sensor:
  - name: "DESS Strategy"
    unique_id: "mp2_dess_reactive_strategy_txt"
    state: >
      {% set mapper = {
        '1': 'SCHEDULED_SELFCONSUME',
        '2': 'SCHEDULED_CHARGE_ALLOW_GRID',
        '3': 'SCHEDULED_CHARGE_ENHANCED',
        '4': 'SELFCONSUME_ACCEPT_CHARGE',
        '5': 'IDLE_SCHEDULED_FEEDIN',
        '6': 'SCHEDULED_DISCHARGE',
        '7': 'SELFCONSUME_ACCEPT_DISCHARGE',
        '8': 'IDLE_MAINTAIN_SURPLUS',
        '9': 'IDLE_MAINTAIN_TARGETSOC',
        '10': 'SCHEDULED_CHARGE_SMOOTH_TRANSITION',
        '11': 'SCHEDULED_CHARGE_FEEDIN',
        '12': 'SCHEDULED_CHARGE_NO_GRID',
        '13': 'SCHEDULED_MINIMUM_DISCHARGE',
        '14': 'SELFCONSUME_NO_GRID',
        '15': 'IDLE_NO_OPPORTUNITY',
        '16': 'UNSCHEDULED_CHARGE_CATCHUP_TARGETSOC',
        '17': 'SELFCONSUME_INCREASED_DISCHARGE',
        '18': 'KEEP_BATTERY_CHARGED',
        '19': 'SCHEDULED_DISCHARGE_SMOOTH_TRANSITION',
        '92': 'DESS_DISABLED',
        '93': 'SELFCONSUME_UNEXPECTED_EXCEPTION',
        '94': 'SELFCONSUME_FAULTY_CHARGERATE',
        '95': 'UNKNOWN_OPERATING_MODE',
        '96': 'ESS_LOW_SOC',
        '97': 'SELFCONSUME_UNMAPPED_STATE',
        '98': 'SELFCONSUME_UNPREDICTED',
        '99': 'NO_WINDOW'} %}
      {% set state =  states('sensor.mp2_dess_reactive_strategy') %}
      {{ mapper[state] if state in mapper else 'Unknown' }}

The MQTT sensor looks like this:

- sensors:
  - unique_id: mp2_dess_reactive_strategy
    name: "DESS Strategy num"
    state_topic: "venus/N/SECRET_SERIAL/system/0/DynamicEss/ReactiveStrategy"
    value_template: "{{ value_json.value }}"
    device:
       name: "mp2"
       identifiers: "mp2"

(SECRET_SERIAL needs to be replaced with your actual value)

3 Likes

Awesome! Funny as well. Just last week I made my own version, which looks almost identical to yours. Here are both strategy + reactivestrategy.

mqtt:
    sensor:
      # DESS strategy
      - name: "DESS Strategy"
        unique_id: "DESS_strategy"
        device_class: enum
        state_topic: "victron/N/SERIAL/system/0/DynamicEss/Strategy"
        value_template: >
          {% set mapper =  {
              0 : 'TARGETSOC',
              1 : 'SELFCONSUME',
              2 : 'PROBATTERY',
              3 : 'PROGRID'} %}
              
          {{ mapper.get(value_json.value,  'Unknown') }}

      # DESS reactive strategy
      - name: "DESS Reactive Strategy"
        unique_id: "DESS_reactive_strategy"
        device_class: enum
        state_topic: "victron/N/SERIAL/system/0/DynamicEss/ReactiveStrategy"
        value_template: >
          {% set mapper =  {
              1 : 'SCHEDULED_SELFCONSUME',
              2 : 'SCHEDULED_CHARGE_ALLOW_GRID',
              3 : 'SCHEDULED_CHARGE_ENHANCED',
              4 : 'SELFCONSUME_ACCEPT_CHARGE',
              5 : 'IDLE_SCHEDULED_FEEDIN', 
              6 : 'SCHEDULED_DISCHARGE',
              7 : 'SELFCONSUME_ACCEPT_DISCHARGE',
              8 : 'IDLE_MAINTAIN_SURPLUS',
              9 : 'IDLE_MAINTAIN_TARGETSOC',
              10 : 'SCHEDULED_CHARGE_SMOOTH_TRANSITION',
              11 : 'SCHEDULED_CHARGE_FEEDIN',
              12 : 'SCHEDULED_CHARGE_NO_GRID',
              13 : 'SCHEDULED_MINIMUM_DISCHARGE',
              14 : 'SELFCONSUME_NO_GRID',
              15 : 'IDLE_NO_OPPORTUNITY',
              16 : 'UNSCHEDULED_CHARGE_CATCHUP_TARGETSOC',
              17 : 'SELFCONSUME_INCREASED_DISCHARGE',
              18 : 'KEEP_BATTERY_CHARGED',
              19 : 'SCHEDULED_DISCHARGE_SMOOTH_TRANSITION',
              92 : 'DESS_DISABLED',
              93 : 'SELFCONSUME_UNEXPECTED_EXCEPTION',
              94 : 'SELFCONSUME_FAULTY_CHARGERATE',
              95 : 'UNKNOWN_OPERATING_MODE',
              96 : 'ESS_LOW_SOC',
              97 : 'SELFCONSUME_UNMAPPED_STATE',
              98 : 'SELFCONSUME_UNPREDICTED',
              99 : 'NO_WINDOW'} %}
              
          {{ mapper.get(value_json.value,  'Unknown') }}

Works very well!

You do not happen to know how to setup the MQTT bridge to the Cerbo if it is running the secure profile ? Username and password via plain text is easy, but I was never able to get ssl to work </different topic>

Unfortunately no, I haven’t tried that. I am using the username & pw method.

Is there a description somewhere of what all these strategies exactly mean?

Nope. All you can do is read the source code
… There are also some comments.

@HansDampf, seems like good addition. Already requested by user of my Victron mqtt integration: Could you maybe expose DESS settings? · Issue #68 · tomer-w/ha-victron-mqtt

For better exposure maybe it is good idea to submit a PR for those as described [here](victron_mqtt/extending-victron-support.md at main · tomer-w/victron_mqtt). I can try to add this one but for future work, I think we will get better overall mapping of topics if they will all be in this central repository.

Just implemented this in the latest version of the integration. Feel free to suggest more interesting topics.