Volvo2Mqtt: Connect your AAOS Volvo 🚙

I was hoping to get this more refined before sharing, but since I’m in the US and Volvo shut off our API access, I can’t get it better, but I thought someone else might like it.

I was using the volvo2mqtt in conjunction with the wallbox evse to control the rate of charging my 2022 C40. I could set a departure time and a target charge level and it would adjust the amps provided by the wallbox to get the C40 to my target charge just as I wanted to leave. This would help make my batteries nice and warm. I also had it crank up the amps if I turned on the climate controls. It’s my first shot at a complicated automation so I know it is ruff. I’m also new to posting things here so if there’s a better place for something like this, let me know.

alias: c40 Above Target Charge
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.wallbox_portal_status_description_2
    from: null
    id: wallbox_state
  - platform: state
    entity_id:
      - sensor.volvo_??????_battery_charge_level
    id: c40_battery_level_change
  - platform: state
    entity_id:
      - input_number.c40_target_charge
    id: c40_target_charge_change
  - platform: device
    device_id: ??????
    domain: device_tracker
    entity_id: ????
    type: leaves
    zone: zone.home
    id: c40 left home
  - platform: device
    device_id: ????
    domain: device_tracker
    entity_id: ???????
    type: enters
    zone: zone.home
    id: c40 arrives home
  - platform: device
    type: turned_on
    device_id: ?????
    entity_id: ??????
    domain: switch
    id: c40_ac_on
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - wallbox_state
          - condition: state
            entity_id: sensor.wallbox_portal_status_description_2
            state: Ready
        sequence:
          - device_id: ????
            domain: number
            entity_id: ???
            type: set_value
            value: 48
          - type: turn_on
            device_id: ???
            entity_id: ????
            domain: switch
      - conditions:
          - condition: or
            conditions:
              - condition: trigger
                id:
                  - c40_battery_level_change
              - condition: trigger
                id:
                  - c40_target_charge_change
          - condition: device
            device_id: ?????
            domain: device_tracker
            entity_id: ????
            type: is_home
          - condition: template
            value_template: >-
              {{ (states('sensor.volvo_??????_battery_charge_level')
              | float ) >= ( states('input_number.c40_target_charge') | float )
              }}
          - condition: numeric_state
            entity_id: sensor.volvo_??????_battery_charge_level
            above: input_number.c40_target_charge
            enabled: false
          - condition: state
            entity_id: sensor.wallbox_portal_status_description_2
            state: Charging
            enabled: false
        sequence:
          - type: turn_off
            device_id: ?????
            entity_id: ?????
            domain: switch
      - conditions:
          - condition: or
            conditions:
              - condition: trigger
                id:
                  - c40_battery_level_change
              - condition: trigger
                id:
                  - c40_target_charge_change
          - condition: device
            device_id: ?????
            domain: device_tracker
            entity_id: ?????
            type: is_home
          - condition: numeric_state
            entity_id: sensor.volvo_?????_battery_charge_level
            below: input_number.c40_target_charge
          - condition: device
            type: is_off
            device_id: ????
            entity_id: ?????
            domain: switch
            enabled: false
        sequence:
          - variables:
              c40_target_amp: >-
                {{ (((75 * (((states('input_number.c40_target_charge')|int) -
                (states('sensor.volvo_??????_battery_charge_level')|int))/100))*1000)
                / ((((as_timestamp(states('input_datetime.c40_departure'))) -
                now().timestamp())/60)/60))/210 }}
          - service: notify.mobile_app_pixel_8_pro
            data:
              message: "{{ c40_target_amp }}"
            enabled: false
          - service: number.set_value
            data:
              value: "{{ c40_target_amp }}"
            target:
              entity_id: number.wallbox_portal_max_charging_current_2
          - type: turn_on
            device_id: ????
            entity_id: ?????
            domain: switch
          - service: input_number.set_value
            data: {}
            target:
              entity_id: input_number.thor_target_amp
            enabled: false
      - conditions:
          - condition: trigger
            id:
              - c40 left China
        sequence:
          - service: input_number.set_value
            data:
              value: 60
            target:
              entity_id: input_number.c40_target_charge
          - device_id: ??????
            domain: number
            entity_id: ????
            type: set_value
            value: 48
          - type: turn_on
            device_id: ???
            entity_id: ????
            domain: switch
      - conditions:
          - condition: trigger
            id:
              - c40 arrives home
        sequence:
          - device_id: ????
            domain: number
            entity_id: ????
            type: set_value
            value: 6
      - conditions:
          - condition: trigger
            id:
              - c40_ac_on
          - condition: device
            device_id: ???
            domain: device_tracker
            entity_id: ????
            type: is_home
        sequence:
          - type: turn_on
            device_id: ????
            entity_id: ????
            domain: switch
          - device_id: ????
            domain: number
            entity_id: ?????
            type: set_value
            value: 48
          - service: input_number.set_value
            data:
              value: 100
            target:
              entity_id: input_number.c40_target_charge
          - service: input_datetime.set_datetime
            data: {}
            target:
              entity_id: input_datetime.c40_departure
trace:
  stored_traces: 20
mode: single
1 Like