#Error in my automation with datetime

1 messages · Page 1 of 1 (latest)

serene violet
#

Hello everyone.
I have this variables in my automation :

  current_level: |
    {{ states('sensor.polestar_6015_battery_charge_level') | float(0)}}
  battery_capacity: |
    {{ (states('sensor.polestar_6015_battery_capacity') | float(69) * 1000)}}
  target_level: 90
  time1: >
    {{ now().replace(hour=state_attr('input_datetime.ems_morning_time', 'hour')
    | int(0), minute=state_attr('input_datetime.ems_morning_time', 'minute') |
    int(0), second=0) }}
  time: |
    {{ (time1 + timedelta(days=1)) if time1 < now() else time1 }}
  hours_left: |
    {{ (((time - now()).total_seconds() / 3600) | max(0.1)) | round(1) }}
  energy_needed: |
    {{ (((target_level - current_level) / 100) * battery_capacity) | round(0) }}
  amp_needed: |
    {{ (((energy_needed / hours_left) / 230) | int) }}
  amp_final: |
    {{ [6, [amp_needed, 32] | min] | max }}

I have this error :
Erreur : TypeError: '<' not supported between instances of 'str' and 'datetime.datetime'

What's the problem ?
Thx 🙂

sour bronze
#

Variables don't hold datetime objects (they're converted to datetime strings) so time1 < now() and time1 + timedelta(days=1) don't make sense.

You either need to use as_datetime at each step or do all the time math in one place:

  hours_left: |
    {% set hour = state_attr('input_datetime.ems_morning_time', 'hour')
    | int(0) %}
    {% set minute = state_attr('input_datetime.ems_morning_time', 'minute') |
    int(0) %}
    {% set time1 = now().replace(hour=hour, minute=minute,second=0) %}
    {% set time = (time1 + timedelta(days=1)) if time1 < now() else time1 %}
    {{ (((time - now()).total_seconds() / 3600) | max(0.1)) | round(1) }}
serene violet
#

ho i see. I didn't know about this. thank you ! I will test this week-end.