New template device tracker migration issue

Is there a known limitation in the new template tracker?

I transfered my old device.see automation to a new template tracker, but now I only get straigt horizontal and vertical lines. Before, theye were diagional as well.

left new, right old

Both values are changing, here an example old and new status.

And I see, that the attributes in the new template sensor is in more info details view is rounded to two digits.But this migh be only a display topic. The above are from developer tools.

New template

    conditions:
      - condition: template
        value_template: >
          {{
          states('sensor.rasenmaher_gps_breitengrad').split('°')[0]|float(default=0) > 0
            and states('sensor.rasenmaher_gps_langengrad').split('°')[0]|float(default=0) > 0 }}
      - condition: template
        value_template: >
          {% if this is defined and this.attributes is defined and this.attributes.last_triggered is defined %}
            {% set last_triggered = this.attributes.last_triggered %}
          {% else %}
            {% set last_triggered = none %}
          {% endif %}
          {% if last_triggered is none %}
            True 
          {% else %}
            {% set vergangen =
              as_timestamp(now()) -
              as_timestamp(last_triggered)
            %}
            {% if states('sensor.rasenmaher_status_lesbar')
                  in ['Lädt', 'Parkt', 'Schläft'] %}
              {{ vergangen > 900 }}
            {% else %}
              {{ vergangen > 15 }}    
            {% endif %}
          {% endif %}
    device_tracker:
      - name: Rasenmäher GPS Tracker
        unique_id: rasenmaher_tracker
        default_entity_id: device_tracker.rasenmaher_tracker
        icon: mdi:robot-mower
        picture: /local/330x_icon.png
        latitude: >-
          {{
          states('sensor.rasenmaher_gps_breitengrad').split('°')[0]|float(default=0)
          + states('sensor.rasenmaher_gps_breitengrad').split('°')[1].split(' ')[0]|float(default=0)/60 }}
        longitude: >-
          {{
          states('sensor.rasenmaher_gps_langengrad').split('°')[0]|float(default=0)
          + states('sensor.rasenmaher_gps_langengrad').split('°')[1].split(' ')[0]|float(default=0)/60 }}
        location_accuracy: 0
        attributes:
          last_triggered: >
            {{ now().isoformat() }}

old automation

conditions:
  - condition: template
    value_template: |
      {% if states('sensor.rasenmaher_status_lesbar') == 'Lädt' 
          or states('sensor.rasenmaher_status_lesbar') == 'Parkt' 
          or states('sensor.rasenmaher_status_lesbar') == 'Schläft' %}
        {{ (as_timestamp(now()) -
        as_timestamp(state_attr("automation.variablenaktualisierung_rasenmaher_tracker",
        "last_triggered") | default(0)) | int > 900 ) }}
      {% else %}
        {{ (as_timestamp(now()) -
        as_timestamp(state_attr("automation.variablenaktualisierung_rasenmaher_tracker",
        "last_triggered") | default(0)) | int > 15 ) }}    
      {% endif %}
  - condition: template
    value_template: >
      {{
      states('sensor.rasenmaher_gps_breitengrad').split('°')[0]|float(default=0)
      > 0
        and states('sensor.rasenmaher_gps_langengrad').split('°')[0]|float(default=0) > 0 }}
actions:
  - data:
      dev_id: rasenmaher_tracker
      gps:
        - >-
          {{
          states('sensor.rasenmaher_gps_breitengrad').split('°')[0]|float(default=0)
          + states('sensor.rasenmaher_gps_breitengrad').split('°')[1].split('
          ')[0]|float(default=0)/60 }}
        - >-
          {{
          states('sensor.rasenmaher_gps_langengrad').split('°')[0]|float(default=0)
          + states('sensor.rasenmaher_gps_langengrad').split('°')[1].split('
          ')[0]|float(default=0)/60 }}
    action: device_tracker.see

trigger in both

triggers:
  - entity_id:
      - sensor.rasenmaher_gps_breitengrad
      - sensor.rasenmaher_gps_langengrad
    trigger: state

This is because you’re attaching both as triggers. You should only update the location if you get 2 triggers in a small window together. You can do this by adding a condition to check the other entities last updated state. If the other entity hasn’t updated within a period of time, don’t update the template sensor.

This will make it so the 2nd trigger in 2 rapid fire triggers will be the only seen trigger and you’ll have angled lines instead of stepped lines.

This existed with device_tracker.see too. It depends on how you wrote the previous automation.

The old automation is above and exatcly the same and didn’t have the problem.

I will give it a try anyway to only update if both are changed.

I don’t know how you avoided it. I’ve helped multiple people over the past 10 years with this issue using device tracker see.

This does not work in the template section (with triggers). It only works in the entity level condition that was added in 2026.9

It seems to work now with this proposed additional condition

    conditions:
      - condition: template
        value_template: >
          {{
          states('sensor.rasenmaher_gps_breitengrad').split('°')[0]|float(default=0) > 0
            and states('sensor.rasenmaher_gps_langengrad').split('°')[0]|float(default=0) > 0 }}
      - condition: template
        value_template: >
          {% if state_attr('device_tracker.rasenmaher_tracker','last_triggered') %}
            {% set last_triggered = state_attr('device_tracker.rasenmaher_tracker','last_triggered') %}
          {% else %}
            {% set last_triggered = none %}
          {% endif %}
          {% if last_triggered is none %}
            True
          {% else %}
            {% set vergangen =
              as_timestamp(now()) -
              as_timestamp(last_triggered)
            %}
            {% if states('sensor.rasenmaher_status_lesbar')
                  in ['Lädt', 'Parkt', 'Schläft'] %}
              {{ vergangen > 900 }}
            {% else %}
              True
            {% endif %}
          {% endif %}
      - condition: template
        value_template: >
          {% set new_lat =
            states('sensor.rasenmaher_gps_breitengrad').split('°')[0]|float(0)
            + states('sensor.rasenmaher_gps_breitengrad').split('°')[1].split(' ')[0]|float(0) / 60
          %}
          {% set new_lon =
            states('sensor.rasenmaher_gps_langengrad').split('°')[0]|float(0)
            + states('sensor.rasenmaher_gps_langengrad').split('°')[1].split(' ')[0]|float(0) / 60
          %}
          {% set old_lat = state_attr('device_tracker.rasenmaher_tracker', 'latitude') | float(0) %}
          {% set old_lon = state_attr('device_tracker.rasenmaher_tracker', 'longitude') | float(0) %}
          {{ new_lat != old_lat and new_lon != old_lon }}