blueprint: name: evcharge_process description: Manage charging process between two charging points with Charged Energy calculation domain: automation author: Tiziano Trabattoni input: evcharge_entity1: name: Charge via 'Controlled Plug1' description: Identifies the Switch1 (eg EVcharge-front) selector: entity: filter: - domain: switch evcharge_entity2: name: Charge via 'Controlled Plug2' description: Identifies the Switch2 (eg EVcharge-back) selector: entity: filter: - domain: switch use_entity1: name: Enable charge via 'Controlled Plug1' description: Identifies the input flag for charging on 'Controlled Plug1' (eg EVcharge_front_request) selector: entity: filter: - domain: input_boolean use_entity2: name: Enable charge via 'Controlled Plug2' description: Identifies the input flag for charging on 'Controlled Plug2' (eg EVcharge_back_request) selector: entity: filter: - domain: input_boolean start_button: name: start_button description: Identifies the button to start EVcharge process selector: entity: filter: - domain: input_button triggers: - trigger: state # Want to trigger start now entity_id: !input start_button id: start_now - trigger: time # Start at F3 start tome at: input_datetime.evcharge_good_time_start id: start_at_good_time # for time being let's do sequential charge for Plug1 and then Plug2 mode: single # here we could stop immediately if sensor.pw_load_power is above 5000W but lets decide after conditions: [] variables: evcharge_entity1_var: !input evcharge_entity1 evcharge_entity2_var: !input evcharge_entity2 evcharge_entity1_power_var: >- {% from 'template_library.jinja' import getpower_id %} {{ getpower_id(evcharge_entity1_var) }} evcharge_entity2_power_var: >- {% from 'template_library.jinja' import getpower_id %} {{ getpower_id(evcharge_entity2_var) }} evcharge_entity1_energy_var: >- {% from 'template_library.jinja' import getenergy_id %} {{ getenergy_id(evcharge_entity1_var) }} evcharge_entity2_energy_var: >- {% from 'template_library.jinja' import getenergy_id %} {{ getenergy_id(evcharge_entity2_var) }} use_entity1_var: !input use_entity1 use_entity2_var: !input use_entity2 # here list of mobile APP to be notified recipient_list_notification: - notify.mobile_app_tiziano_iphone15pro - notify.mobile_app_emanuele_s24 recipient_list_gmail: title: "EVcharge Process" target: - "tiziano.trabattoni@gmail.com" #- "ema.trabattoni@gmail.com" actions: - if: - or: - condition: template value_template: "{{ is_state(evcharge_entity1_var, 'on') }}" # value_template: "{{ false }}" # TEST ONLY - condition: template value_template: "{{ is_state(evcharge_entity2_var, 'on') }}" # value_template: "{{ false }}" # TEST ONLY then: # charge already active, send message email and terminate sequence: - repeat: for_each: "{{ recipient_list_notification }}" sequence: - action: "{{ repeat.item }}" metadata: {} data: message: >- "EVcharge process is ALREADY RUNNING" title: "EV Charge process ERROR" else: sequence: - if: - condition: template value_template: "{{ is_state(use_entity1_var, 'on') }}" then: # EVcharge entity_1 (eg front) charge is requested sequence: - repeat: # send message to all recipient-list members for_each: "{{ recipient_list_notification }}" sequence: - action: "{{ repeat.item }}" metadata: {} data: message: >- "EVcharge process on {{ evcharge_entity1_var }} has started" title: EV Charge process - action: notify.tiziano_trabattoni_gmail_com data: title: "EVcharge process on {{ evcharge_entity1_var }} has started" target: "{{ recipient_list_gmail['target'] }}" message: >- "EVcharge process on {{ evcharge_entity1_var }} has started" # take energy counter before charging - variables: energy1_before: "{{ states(evcharge_entity1_energy_var) | float | round(2) }}" # Start plug1 and wait until power measured is below input_number.evcharge_no_charge_threshold for 10 minutes = 600 seconds - action: switch.turn_on entity_id: !input evcharge_entity1 # entity_id: switch.presa_smart_1 # TEST ONLY # need to wait car to start charging - delay: 120 # - delay: 10 # TEST ONLY # Wait for charging to complete - repeat: until: "{{ ( states(evcharge_entity1_power_var) | int ) < ( states('input_number.evcharge_no_charge_threshold') | int ) }}" # until: "{{ ( states('input_number.test_evcharge_front') | int) < (states('input_number.evcharge_no_charge_threshold') | int) }}" # TEST ONLY sequence: - delay: 120 # - delay: 10 # TEST ONLY # take energy counter after charging - variables: energy1_after: "{{ states(evcharge_entity1_energy_var) | float | round(2) }}" # turn off evcharge_entity1 - action: switch.turn_off entity_id: !input evcharge_entity1 # entity_id: switch.presa_smart_1 # TEST ONLY - delay: 10 - action: switch.turn_off entity_id: !input evcharge_entity1 - repeat: # send message to all recipient-list members for_each: "{{ recipient_list_notification }}" sequence: - action: "{{ repeat.item }}" metadata: {} data: message: >- "EVcharge process on {{ evcharge_entity1_var }} has ended: {{ ( energy1_after - energy1_before ) | round(2) }} kW/h charged" title: EV Charge process - action: notify.tiziano_trabattoni_gmail_com data: title: "EVcharge process on {{ evcharge_entity1_var }} has ended: {{ ( energy1_after - energy1_before ) | round(2) }} kW/h charged" target: "{{ recipient_list_gmail['target'] }}" message: >- "EVcharge process on {{ evcharge_entity1_var }} has ended: {{ ( energy1_after - energy1_before ) | round(2) }} kW/h charged" # wait couple of minutes before starting charge on plug2 - delay: 120 # - delay: 10 # TEST ONLY - if: - condition: template value_template: "{{ is_state(use_entity2_var, 'on') }}" then: sequence: # then start plug2 and wait until power measured is below input_number.evcharge_no_charge_threshold for 10 minutes = 600 seconds - repeat: # send message to all recipient-list members for_each: "{{ recipient_list_notification }}" sequence: - action: "{{ repeat.item }}" metadata: {} data: message: >- "EVcharge process on {{ evcharge_entity2_var }} has started" title: EV Charge process - action: notify.tiziano_trabattoni_gmail_com data: title: "EVcharge process on {{ evcharge_entity2_var }} has started" target: "{{ recipient_list_gmail['target'] }}" message: >- "EVcharge process on {{ evcharge_entity2_var }} has started" # take energy counter before charging - variables: energy2_before: "{{ states(evcharge_entity2_energy_var) | float | round(2) }}" # turn_on evcharge_entity2 - action: switch.turn_on entity_id: !input evcharge_entity2 # entity_id: switch.presa_smart_2 # TEST ONLY # need to wait car to start charging - delay: 120 # - delay: 10 # TEST ONLY # Wait for charging to complete - repeat: until: "{{ ( states(evcharge_entity2_power_var) | int ) < ( states('input_number.evcharge_no_charge_threshold') | int) }}" # until: "{{ ( states('input_number.test_evcharge_back') | int) < ( states('input_number.evcharge_no_charge_threshold') | int) }}" # TEST ONLY sequence: - delay: 120 # - delay: 10 # TEST ONLY # take energy counter after charging - variables: energy2_after: "{{ states(evcharge_entity2_energy_var) | float | round(2) }}" # turn off evcharge_entity2 - action: switch.turn_off entity_id: !input evcharge_entity2 # entity_id: switch.presa_smart_2 # TEST ONLY - delay: 10 - action: switch.turn_off entity_id: !input evcharge_entity2 - repeat: # send message to all recipient-list members for_each: "{{ recipient_list_notification }}" sequence: - action: "{{ repeat.item }}" metadata: {} data: message: >- "EVcharge process on {{ evcharge_entity2_var }} has ended: {{ ( energy2_after - energy2_before ) | round(2) }} kW/h charged" title: EV Charge process - action: notify.tiziano_trabattoni_gmail_com data: title: "EVcharge process on {{ evcharge_entity2_var }} has ended: {{ ( energy2_after - energy2_before ) | round(2) }} kW/h charged" target: "{{ recipient_list_gmail['target'] }}" message: >- "EVcharge process on {{ evcharge_entity2_var }} has ended: {{ ( energy2_after - energy2_before ) | round(2) }} kW/h charged" - if: - and: - condition: template value_template: "{{ is_state(use_entity1_var, 'off') }}" - condition: template value_template: "{{ is_state(use_entity2_var, 'off') }}" then: - repeat: # send message to all recipient-list members for_each: "{{ recipient_list }}" sequence: - action: "{{ repeat.item }}" metadata: {} data: message: >- "EVcharge process activation ERROR, select what to charge" title: EV Charge process ERROR