Custom logging done right

I’ve found a code snippet to setup a custom logging into the database.
I setup recorder:

# recorder
db_url: !secret recorder_maria_db
purge_keep_days: 7
include:
  entity_globs:
    - sensor.energy_*
    - sensor.fritz_box_7690_*
    - sensor.pv_*
    - sensor.solakon_*
    - sensor.user_log

I defined this template in template.yaml:

# TRIGGER-BASIERTER LOG-SENSOR
- trigger:
    - platform: event
      event_type: custom_log
  sensor:
    - name: "User Log"
      unique_id: sensor.user_log
      state: "{{ trigger.event.data.message }}"
      attributes:
        channel: "{{ trigger.event.data.channel }}"
        level: "{{ trigger.event.data.level }}"
        timestamp: "{{ now().isoformat() }}"

And basically it works:


Unfortunately, it doesn’t work reliably.
I’m working on automation for Solakon One.
Some logs are recorded correctly, others are not, even though the branches are processed correctly.

The project is not yet complete. So far, only the first two modes have been implemented.
The image shows that the switch to PV protect mode was logged, but the log from lines 237 onwards should also have appeared, as the switch from 600 W to 0 also took place.

alias: Solakon One Steuerung
description: Solakon One Steuerung
mode: restart
triggers:
  - trigger: state
    entity_id: sensor.energy_power_current_demand
  - trigger: state
    entity_id: sensor.solakon_one_remote_timeout_countdown
  - trigger: state
    entity_id: sensor.solakon_one_battery_soc
trigger_variables:
  # max house grit feed-in power
  max_active_power: 800
  # max power when charging from grid
  max_grid_charge: 600
  max_remote_timeout: 60
  # min value we want to consume from grid
  min_net_power: 5
  # below this value the Solakon One seems to have wrong data, there is not enough power to charge battery or house feed-in
  min_pv_charge_power: 40
  # absolute minimum value of SOC, start charging with any available power to get back to a healthy level
  min_soc: 10
  # minimum value of SOC to be kept if PV available, no house feed-in below that value
  min_soc_pv_charge: 20
variables:
  current_demand: "{{ states('sensor.energy_power_current_demand') | int(0) }}"
  current_pv: "{{ states('sensor.solakon_one_total_pv_power') | int(0) }}"
  current_soc: "{{ states('sensor.solakon_one_battery_soc') | int(0) }}"
  current_timeout: "{{ states('sensor.solakon_one_remote_timeout_countdown') | int(0) }}"
#  soc_above_threshold: "{{ current_soc > min_soc }}"
conditions: [ ]
actions:
  - choose:
      # active CHARGE mode with grid energy if SOC is below minimum
      - conditions:
          - condition: template
            value_template: >
              {{ current_soc < min_soc
                 and states('input_select.solakon_one_charge_mode') != 'safety_charge' }}
        sequence:
          - action: input_select.select_option
            target:
              entity_id: input_select.solakon_one_charge_mode
            data:
              option: safety_charge
          - event: custom_log
            event_data:
              level: debug
              channel: solakon
              message: "SOC < {{ min_soc }}% -> (Grid) charge mode enabled"

  - choose:
      # use PV to charge the battery without exporting to the home grid
      - conditions:
          - condition: template
            value_template: >
              {{ current_soc >= min_soc + 5
                 and current_soc < min_soc_pv_charge
                 and states('input_select.solakon_one_charge_mode') != 'pv_protect' }}
        sequence:
          - action: input_select.select_option
            target:
              entity_id: input_select.solakon_one_charge_mode
            data:
              option: pv_protect
          - event: custom_log
            event_data:
              level: debug
              channel: solakon
              message: "SOC between {{ min_soc + 5 }}% and {{ min_soc_pv_charge }}% -> PV protect mode enabled"

  - choose:
      # exporting PV into the home grid
      - conditions:
          - condition: template
            value_template: >
              {{ current_soc >= min_soc_pv_charge
                 and states('input_select.solakon_one_charge_mode') != 'eco_feed'
                 and states('input_select.solakon_one_charge_mode') != 'power_boost' }}
        sequence:
          - action: input_select.select_option
            target:
              entity_id: input_select.solakon_one_charge_mode
            data:
              option: eco_feed
          - event: custom_log
            event_data:
              level: debug
              channel: solakon
              message: "SOC >= {{ min_soc_pv_charge }}% -> ECO feed mode enabled"

  - choose:
      # disabling Power Boost
      - conditions:
          - condition: template
            value_template: >
              {{ current_soc < 30
                 and states('input_select.solakon_one_charge_mode') == 'power_boost' }}
        sequence:
          - action: input_select.select_option
            target:
              entity_id: input_select.solakon_one_charge_mode
            data:
              option: eco_feed
          - event: custom_log
            event_data:
              level: debug
              channel: solakon
              message: "SOC < 30% -> Power Boost mode disabled"

  - choose:
      # set remote timer if necessary
      - conditions:
          - condition: template
            value_template: "{{ current_timeout < (max_remote_timeout / 2) }}"
        sequence:
          - action: number.set_value
            target:
              entity_id: number.solakon_one_remote_timeout_set
            data:
              value: "{{ max_remote_timeout }}"
          - event: custom_log
            event_data:
              level: debug
              channel: solakon
              message: "set timeout -> {{ max_remote_timeout }}"

  - choose:
      # configure Solakon One for safety_charge mode
      - conditions:
          - condition: template
            value_template: "{{ states('input_select.solakon_one_charge_mode') == 'safety_charge' }}"
        sequence:
          # ensure PV-priority charge mode (set only if necessary)
          - choose:
              - conditions:
                  - condition: template
                    value_template: "{{ states('select.solakon_one_remote_control_mode') != 'INV Charge (PV Priority)' }}"
                sequence:
                  - action: select.select_option
                    target:
                      entity_id: select.solakon_one_remote_control_mode
                    data:
                      option: INV Charge (PV Priority)

          # ensure no discharge (set only if necessary)
          - choose:
              - conditions:
                  - condition: template
                    value_template: "{{ states('number.solakon_one_battery_max_discharge_current') | float(0) != 0 }}"
                sequence:
                  - action: number.set_value
                    target:
                      entity_id: number.solakon_one_battery_max_discharge_current
                    data:
                      value: 0

          # decide grid usage based on PV power
          - choose:
              # PV sufficient -> no grid power
              - conditions:
                  - condition: template
                    value_template: "{{ current_pv > min_pv_charge_power }}"
                sequence:
                  - condition: template
                    value_template: "{{ states('number.solakon_one_remote_active_power') | int(0) != 0 }}"
                  - action: number.set_value
                    target:
                      entity_id: number.solakon_one_remote_active_power
                    data:
                      value: 0
                  - event: custom_log
                    event_data:
                      level: debug
                      channel: solakon
                      message: "safety_charge: PV {{ current_pv }} W -> grid 0 W"

              # PV not sufficient -> use grid assist
              - conditions:
                  - condition: template
                    value_template: "{{ current_pv <= min_pv_charge_power }}"
                sequence:
                  - condition: template
                    value_template: "{{ states('number.solakon_one_remote_active_power') | int(0) != max_grid_charge }}"
                  - action: number.set_value
                    target:
                      entity_id: number.solakon_one_remote_active_power
                    data:
                      value: "{{ max_grid_charge }}"
                  - event: custom_log
                    event_data:
                      level: debug
                      channel: solakon
                      message: "safety_charge: PV {{ current_pv }} W -> grid {{ max_grid_charge }} W"

  - choose:
      # configure Solakon One for pv_protect mode
      - conditions:
          - condition: template
            value_template: "{{ states('input_select.solakon_one_charge_mode') == 'pv_protect' }}"
        sequence:
          # ensure PV-priority charge mode (set only if necessary)
          - choose:
              - conditions:
                  - condition: template
                    value_template: "{{ states('select.solakon_one_remote_control_mode') != 'INV Charge (PV Priority)' }}"
                sequence:
                  - action: select.select_option
                    target:
                      entity_id: select.solakon_one_remote_control_mode
                    data:
                      option: INV Charge (PV Priority)

          # ensure no discharge (set only if necessary)
          - choose:
              - conditions:
                  - condition: template
                    value_template: "{{ states('number.solakon_one_battery_max_discharge_current') | float(0) != 0 }}"
                sequence:
                  - action: number.set_value
                    target:
                      entity_id: number.solakon_one_battery_max_discharge_current
                    data:
                      value: 0

          # ensure no grid usage (set only if necessary)
          - choose:
              - conditions:
                  - condition: template
                    value_template: "{{ states('number.solakon_one_remote_active_power') | int(0) != 0 }}"
                sequence:
                  - action: number.set_value
                    target:
                      entity_id: number.solakon_one_remote_active_power
                    data:
                      value: 0
                  - event: custom_log
                    event_data:
                      level: debug
                      channel: solakon
                      message: "pv_protect: PV {{ current_pv }} W -> grid 0 W"