Open DmitriyKompaniets opened 6 months ago
Регистратор: homeassistant.helpers.script Источник: helpers/script.py:926 Первое сообщение: 9 мая 2024 г. в 23:53:54 (2 сообщений) Последнее сообщение: 04:02:43
While condition [{'alias': 'At least one of alert sensors is active', 'condition': 'template', 'value_template': Template<template=({% set ns = namespace(alert=false) %} {% for alert_sensor in alert_sensors %} {% set ns.alert = ns.alert or is_state(alert_sensor, 'on') %} {% endfor %} {{ ns.alert }}) renders=30354>}] in script AWTRIX Ukraine Alarm
looped 5000 times
While condition [{'alias': 'At least one of alert sensors is active', 'condition': 'template', 'value_template': Template<template=({% set ns = namespace(alert=false) %} {% for alert_sensor in alert_sensors %} {% set ns.alert = ns.alert or is_state(alert_sensor, 'on') %} {% endfor %} {{ ns.alert }}) renders=47204>}] in script AWTRIX Ukraine Alarm
looped 5000 times
Регистратор: homeassistant.helpers.script Источник: helpers/script.py:934 Первое сообщение: 05:26:59 (1 сообщений) Последнее сообщение: 05:26:59
While condition [{'alias': 'At least one of alert sensors is active', 'condition': 'template', 'value_template': Template<template=({% set ns = namespace(alert=false) %} {% for alert_sensor in alert_sensors %} {% set ns.alert = ns.alert or is_state(alert_sensor, 'on') %} {% endfor %} {{ ns.alert }}) renders=57204>}] in script AWTRIX Ukraine Alarm
terminated because it looped 10000 times
I think I understand why. HA recently implemented breaking change witch limits number of loops up to 10000. So that is basically 2(hours) 60(minutes) 60(seconds) + 46(minutes) * 60(seconds) + 40(seconds) = 2:46:40 = 10000.
Can we expect a solution to this problem?
Honestly, I wasn't able to find easy-fix solution. It's complicated as with blueprint you are limited with only 1 automation, so everything should be isolated and incapsulated in one place witch makes it difficult to read and debug it. I'll see if I'll find some workaround.
Пропоную після години роботи робити затримку не 1 секунду, а 60. Щось типу такого:
- alias: Repeat updating app untill alert is gone
repeat:
sequence:
- variables:
latest_change: >-
{% set ns = namespace(latest_change=timedelta(days=365)) %} {% for
alert_sensor in alert_sensors | select('is_state', 'on') | list
-%}
{% set current_change = now() - states[alert_sensor].last_changed %}
{% if current_change < ns.latest_change %}
{% set ns.latest_change = current_change %}
{% endif %}
{% endfor -%} {{ ns.latest_change.seconds }}
- data:
retain: false
topic: "{{ app_topic }}"
payload: |-
{
"icon": "{{ alert_icon }}",
"text":
{% if latest_change < 3600 %}
"{{ latest_change | timestamp_custom('%M:%S', False) }}"
{% else %}
"{{ latest_change | timestamp_custom('%H:%M', False) }}"
{% endif %},
"color": "{{ alert_color }}",
"wakeup": true
}
alias: Update alarm app (alert)
action: mqtt.publish
- alias: Delay before updating alarm app (alert)
delay:
seconds: |-
{% if latest_change < 3600 %}
{{ 1 }}
{% else %}
{{ 60 }}
{% endif %}
Треба перевірити чи буде працювати.
Треба перевірити чи буде працювати.
Есть идеи как сэмулировать сенсор для проверки?
Пропоную після години роботи робити затримку не 1 секунду, а 60. Щось типу такого:
- alias: Repeat updating app untill alert is gone repeat: sequence: - variables: latest_change: >- {% set ns = namespace(latest_change=timedelta(days=365)) %} {% for alert_sensor in alert_sensors | select('is_state', 'on') | list -%} {% set current_change = now() - states[alert_sensor].last_changed %} {% if current_change < ns.latest_change %} {% set ns.latest_change = current_change %} {% endif %} {% endfor -%} {{ ns.latest_change.seconds }} - data: retain: false topic: "{{ app_topic }}" payload: |- { "icon": "{{ alert_icon }}", "text": {% if latest_change < 3600 %} "{{ latest_change | timestamp_custom('%M:%S', False) }}" {% else %} "{{ latest_change | timestamp_custom('%H:%M', False) }}" {% endif %}, "color": "{{ alert_color }}", "wakeup": true } alias: Update alarm app (alert) action: mqtt.publish - alias: Delay before updating alarm app (alert) delay: seconds: |- {% if latest_change < 3600 %} {{ 1 }} {% else %} {{ 60 }} {% endif %}
Чуток поправил код т.к в первоначальном виде выдавало ошибку.
- alias: Repeat updating app untill alert is gone
repeat:
sequence:
- service: mqtt.publish
data:
retain: false
topic: "{{ app_topic }}"
payload: |-
{
"icon": "{{ alert_icon }}",
"text":
{% set ns = namespace(latest_change=timedelta(days=365)) %}
{% for alert_sensor in alert_sensors | select('is_state', 'on') | list -%}
{% set current_change = now() - states[alert_sensor].last_changed %}
{% if current_change < ns.latest_change %}
{% set ns.latest_change = current_change %}
{% endif %}
{% endfor -%}
{% if ns.latest_change.seconds < 3600 %}"{{ ns.latest_change.seconds | timestamp_custom('%M:%S', False) }}"
{% else %}"{{ ns.latest_change.seconds | timestamp_custom('%H:%M', False) }}"
{% endif %},
"color": "{{ alert_color }}",
"wakeup": true
}
alias: Update alarm app (alert)
- delay:
seconds: >-
{% if latest_change < 3600 %}
{{ 1 }}
{% else %}
{{ 60 }}
{% endif %}
Треба перевірити чи буде працювати.
Ну в мене працює. Єдине, що після відбою буде чекати хвилину. Но це, я важаю, не критично.
Есть идеи как сэмулировать сенсор для проверки?
Зробити Input boolean і перемикати вручну
Чуток поправил код т.к в первоначальном виде выдавало ошибку.
В мене зараз зроблено як автоматизація. Може у блюпрінті не розуміє variables. Хоча я не розумію, звідки у вашому коді взялась змінна latest_change?
Чуток поправил код т.к в первоначальном виде выдавало ошибку.
В мене зараз зроблено як автоматизація. Може у блюпрінті не розуміє variables. Хоча я не розумію, звідки у вашому коді взялась змінна latest_change?
Согласен,херню написал и запостил не проверив.Правил через ChatGPT т.к. ваш первоначальный код отказывался блюпринт принимать,правленый принял но не обновляется счетчик минут.Буду дальше смотреть.
upd Перевел в автоматизацию, ваш код работает.Жду пока тревога превысит 2:47 и отпишусь по результату upd2 Тревога уже 4:47 - зависло на 1:36
upd 29.10.2024 Тревога 4 часа и 8 минут - все ок, отображает нормально, думаю что можно в продакшн.Правда у меня как и у stast1 это автоматизация а не блюпринт.
upd тревога 3:25 - все ок
В общем спустя несколько дней тестирования отписываюсь что все ок.Сейчас тревога 5:39 - все работает.Но у меня не блюпринтом а автоматизацией.
You can check? If the alarm lasts more than 2:48, the clock counter stops....