Automation updating erractically

I’m playing around with an ESL, which should get updated every 2h (except at night).
Sometimes it updates correctly (Last update + graph), sometimes it shows old data.

I tried to fix the automation with the help of Copilot, but as expected, this was a total waste of time.

Any hints how to make this automation work correctly and show graph + Last update at the times specified are much appreciated!

alias: Kühlschranktemperatur ESL 5.83
description: Zeichnet Grafik via OpenEPaperLink
triggers:
  - trigger: time
    at:
      - "00:05:00"
      - "01:05:00"
      - "08:05:00"
      - "10:05:00"
      - "12:05:00"
      - "14:05:00"
      - "16:05:00"
      - "18:05:00"
      - "20:05:00"
      - "22:05:00"
conditions: []
actions:
  - action: open_epaper_link.drawcustom
    metadata: {}
    target:
      device_id: 53b73eb6e8da7497ae925767b29ca1df
    data:
      rotate: 270
      dither: 2
      ttl: 0
      refresh_type: "0"
      dry-run: false
      payload:
        - type: text
          value: Kühlschranktemperatur
          x: 20
          "y": 8
          size: 28
          font: rbm.ttf
          anchor: lt
        - type: text
          value: Last update {{ update_time }}
          x: 572
          "y": 15
          size: 16
          font: rbm.ttf
          anchor: rt
        - type: text
          value: "{{ states('sensor.atc_6e8695_batterieprozentsatz') | int }}%"
          x: 615
          "y": 15
          size: 16
          font: rbm.ttf
          anchor: rt
        - type: icon
          value: >
            {% set b = states('sensor.atc_6e8695_batterieprozentsatz') | int %}
            {% if b >= 100 %} battery-100 {% elif b >= 90 %} battery-90 {% elif
            b >= 80 %} battery-80 {% elif b >= 70 %} battery-70 {% elif b >= 60
            %} battery-60 {% elif b >= 50 %} battery-50 {% elif b >= 40 %}
              battery-40 {% elif b >= 30 %} battery-30 {% elif b >= 20 %}
              battery-20 {% else %} battery-10 {% endif %}
          x: 610
          "y": 5
          size: 32
          color: >
            {% set b = states('sensor.atc_6e8695_batterieprozentsatz') | int %}
            {{ 'red' if b <= 20 else 'black' }}
        - type: plot
          data:
            - entity: sensor.indoor_outdoor_meter_763d_temperatur
              color: red
              width: 2
            - entity: sensor.kuhlschrank_temperatur
              color: black
              width: 2
          ylegend:
            width: -1
            size: 16
            color: black
          yaxis:
            width: 2
            tick_width: 1
            tick_every: 1
            color: grey
            grid_style: dashed
          xlegend:
            width: 18
            size: 16
            format: "%H"
            interval: 7200
            color: black
          xaxis:
            width: 1
            tick_width: 1
            tick_length: 6
            tick_every: 60
            color: grey
            grid_style: dashed
          x_start: 14
          y_start: 46
          x_end: 630
          y_end: 475
          low: 0
          duration: 86400
          font: ppb.ttf
      background: white
variables:
  update_time: "{{ now().strftime('%H:%M') }}"
mode: restart

Post traces when it doesn’t work properly. You will have a trace for each time listed above.

Three errors today:
Trigger → displayed
16:05 → 12:05
18:05 → 14:05
20:05 → 12:05

Trace of the automation triggered at 20:05, but the display shows 12:05:

{
  "trace": {
    "last_step": "action/0",
    "run_id": "40a6178198f5ae168c60603fa4ebe602",
    "state": "stopped",
    "script_execution": "finished",
    "timestamp": {
      "start": "2026-07-15T18:05:00.160007+00:00",
      "finish": "2026-07-15T18:05:16.803515+00:00"
    },
    "domain": "automation",
    "item_id": "1780162895535",
    "trigger": "time",
    "trace": {
      "trigger/0": [
        {
          "path": "trigger/0",
          "timestamp": "2026-07-15T18:05:00.160250+00:00",
          "changed_variables": {
            "this": {
              "entity_id": "automation.kuhlschranktemperatur_esl_5_83",
              "state": "on",
              "attributes": {
                "id": "1780162895535",
                "last_triggered": "2026-07-15T16:05:00.323624+00:00",
                "mode": "restart",
                "current": 0,
                "friendly_name": "Kühlschranktemperatur ESL 5.83"
              },
              "last_changed": "2026-07-13T20:15:56.332072+00:00",
              "last_reported": "2026-07-15T16:05:12.560041+00:00",
              "last_updated": "2026-07-15T16:05:12.560041+00:00",
              "context": {
                "id": "01KXK8CT7GKAQVABNYWESQCS8S",
                "parent_id": null,
                "user_id": null
              }
            },
            "trigger": {
              "id": "0",
              "idx": "0",
              "alias": null,
              "platform": "time",
              "now": "2026-07-15T20:05:00.159848+02:00",
              "description": "time",
              "entity_id": null
            },
            "update_time": "20:05"
          }
        }
      ],
      "action/0": [
        {
          "path": "action/0",
          "timestamp": "2026-07-15T18:05:00.160511+00:00",
          "changed_variables": {
            "context": {
              "id": "01KXKF85BZYJY6Q4PG4D9G4W8B",
              "parent_id": null,
              "user_id": null
            }
          },
          "result": {
            "params": {
              "domain": "open_epaper_link",
              "service": "drawcustom",
              "service_data": {
                "rotate": 270,
                "dither": 2,
                "ttl": 0,
                "refresh_type": "0",
                "dry-run": false,
                "payload": [
                  {
                    "type": "text",
                    "value": "Kühlschranktemperatur",
                    "x": 20,
                    "y": 8,
                    "size": 28,
                    "font": "rbm.ttf",
                    "anchor": "lt"
                  },
                  {
                    "type": "text",
                    "value": "Last update 20:05",
                    "x": 572,
                    "y": 15,
                    "size": 16,
                    "font": "rbm.ttf",
                    "anchor": "rt"
                  },
                  {
                    "type": "text",
                    "value": "72%",
                    "x": 615,
                    "y": 15,
                    "size": 16,
                    "font": "rbm.ttf",
                    "anchor": "rt"
                  },
                  {
                    "type": "icon",
                    "value": "battery-70",
                    "x": 610,
                    "y": 5,
                    "size": 32,
                    "color": "black"
                  },
                  {
                    "type": "plot",
                    "data": [
                      {
                        "entity": "sensor.indoor_outdoor_meter_763d_temperatur",
                        "color": "red",
                        "width": 2
                      },
                      {
                        "entity": "sensor.kuhlschrank_temperatur",
                        "color": "black",
                        "width": 2
                      }
                    ],
                    "ylegend": {
                      "width": -1,
                      "size": 16,
                      "color": "black"
                    },
                    "yaxis": {
                      "width": 2,
                      "tick_width": 1,
                      "tick_every": 1,
                      "color": "grey",
                      "grid_style": "dashed"
                    },
                    "xlegend": {
                      "width": 18,
                      "size": 16,
                      "format": "%H",
                      "interval": 7200,
                      "color": "black"
                    },
                    "xaxis": {
                      "width": 1,
                      "tick_width": 1,
                      "tick_length": 6,
                      "tick_every": 60,
                      "color": "grey",
                      "grid_style": "dashed"
                    },
                    "x_start": 14,
                    "y_start": 46,
                    "x_end": 630,
                    "y_end": 475,
                    "low": 0,
                    "duration": 86400,
                    "font": "ppb.ttf"
                  }
                ],
                "background": "white",
                "device_id": [
                  "53b73eb6e8da7497ae925767b29ca1df"
                ]
              },
              "target": {
                "device_id": [
                  "53b73eb6e8da7497ae925767b29ca1df"
                ]
              }
            },
            "running_script": false
          }
        }
      ]
    },
    "config": {
      "id": "1780162895535",
      "alias": "Kühlschranktemperatur ESL 5.83",
      "description": "Zeichnet Grafik via OpenEPaperLink",
      "triggers": [
        {
          "trigger": "time",
          "at": [
            "00:05:00",
            "01:05:00",
            "08:05:00",
            "10:05:00",
            "12:05:00",
            "14:05:00",
            "16:05:00",
            "18:05:00",
            "20:05:00",
            "22:05:00"
          ]
        }
      ],
      "conditions": [],
      "actions": [
        {
          "action": "open_epaper_link.drawcustom",
          "metadata": {},
          "target": {
            "device_id": "53b73eb6e8da7497ae925767b29ca1df"
          },
          "data": {
            "rotate": 270,
            "dither": 2,
            "ttl": 0,
            "refresh_type": "0",
            "dry-run": false,
            "payload": [
              {
                "type": "text",
                "value": "Kühlschranktemperatur",
                "x": 20,
                "y": 8,
                "size": 28,
                "font": "rbm.ttf",
                "anchor": "lt"
              },
              {
                "type": "text",
                "value": "Last update {{ update_time }}",
                "x": 572,
                "y": 15,
                "size": 16,
                "font": "rbm.ttf",
                "anchor": "rt"
              },
              {
                "type": "text",
                "value": "{{ states('sensor.atc_6e8695_batterieprozentsatz') | int }}%",
                "x": 615,
                "y": 15,
                "size": 16,
                "font": "rbm.ttf",
                "anchor": "rt"
              },
              {
                "type": "icon",
                "value": "{% set b = states('sensor.atc_6e8695_batterieprozentsatz') | int %} {% if b >= 100 %} battery-100 {% elif b >= 90 %} battery-90 {% elif b >= 80 %} battery-80 {% elif b >= 70 %} battery-70 {% elif b >= 60 %} battery-60 {% elif b >= 50 %} battery-50 {% elif b >= 40 %}\n  battery-40 {% elif b >= 30 %} battery-30 {% elif b >= 20 %}\n  battery-20 {% else %} battery-10 {% endif %}\n",
                "x": 610,
                "y": 5,
                "size": 32,
                "color": "{% set b = states('sensor.atc_6e8695_batterieprozentsatz') | int %} {{ 'red' if b <= 20 else 'black' }}\n"
              },
              {
                "type": "plot",
                "data": [
                  {
                    "entity": "sensor.indoor_outdoor_meter_763d_temperatur",
                    "color": "red",
                    "width": 2
                  },
                  {
                    "entity": "sensor.kuhlschrank_temperatur",
                    "color": "black",
                    "width": 2
                  }
                ],
                "ylegend": {
                  "width": -1,
                  "size": 16,
                  "color": "black"
                },
                "yaxis": {
                  "width": 2,
                  "tick_width": 1,
                  "tick_every": 1,
                  "color": "grey",
                  "grid_style": "dashed"
                },
                "xlegend": {
                  "width": 18,
                  "size": 16,
                  "format": "%H",
                  "interval": 7200,
                  "color": "black"
                },
                "xaxis": {
                  "width": 1,
                  "tick_width": 1,
                  "tick_length": 6,
                  "tick_every": 60,
                  "color": "grey",
                  "grid_style": "dashed"
                },
                "x_start": 14,
                "y_start": 46,
                "x_end": 630,
                "y_end": 475,
                "low": 0,
                "duration": 86400,
                "font": "ppb.ttf"
              }
            ],
            "background": "white"
          }
        }
      ],
      "variables": {
        "update_time": "{{ now().strftime('%H:%M') }}"
      },
      "mode": "restart"
    },
    "blueprint_inputs": null,
    "context": {
      "id": "01KXKF85BZYJY6Q4PG4D9G4W8B",
      "parent_id": null,
      "user_id": null
    }
  },
  "logbookEntries": [
    {
      "name": "Kühlschranktemperatur ESL 5.83",
      "message": "triggered by time",
      "source": "time",
      "entity_id": "automation.kuhlschranktemperatur_esl_5_83",
      "context_id": "01KXKF85BZYJY6Q4PG4D9G4W8B",
      "domain": "automation",
      "when": 1784138700.1603343
    }
  ]
}

Yes, the dates/times in the backend are UTC timezone. The offset is normal.

The automation fired correctly, this is likely an issue with your device. Verify there are no errors in your logs around the trigger time.

It is highly unlikely that this behaviour is caused by the device, i.e. the display, since it only displays what HA sends it.

No errors found in HA core and Supervisor logs.

Based on the trace you provided it seems like what HA sent it is correct… the automation says it fired at 20:05 local time and the text value in the payload was “Last update 20:05”.

If the display isn’t updating properly it could be that it’s not receiving reliably or there could be an issue with the construction of your action call.

Well, the trace shows it worked and you don’t have errors. It’s either a bug in the integration or device.

You could make that:

value: >-
    battery-{{ (((states('sensor.atc_6e8695_batterieprozentsatz')|int)/100) |
    round(1) *100) | int}}

But regarding the automation.
I know my tags sometimes drop off the network.

Also if the tag already has data that is the same then it will not display the new.
But since you have update time on it, it should not happen. But that being said, it has happened to me.
I believe if there is a glitch that the AP receives the data but does not send it to the tag then you get a miss match between them and it refuses any upcoming transmissions with the same data.