Size: a a a

2021 May 29

IB

Ivan Bessarabov in Home Assistant
race condition
источник

IB

Ivan Bessarabov in Home Assistant
не всегда стреляет часто, но иногда может очень больно ударить
источник

IB

Ivan Bessarabov in Home Assistant
у меня нет уверенности что тут не может произойти гонка
источник

ДЦ

Дмитрий Цымбал... in Home Assistant
Ну я не программер. Я просто домохазяйка. И тыкаю кула попало. Но вот таких кейсов не попадалось
источник

IB

Ivan Bessarabov in Home Assistant
"не попадалось" это не то же самое что "это не может никогда случиться"
источник

ДЦ

Дмитрий Цымбал... in Home Assistant
))) вероятности просто разные, да
источник

ДЦ

Дмитрий Цымбал... in Home Assistant
А там может и ха загнется сразу после триггера и кондишн не проверит
источник

ДЦ

Дмитрий Цымбал... in Home Assistant
Страсти
источник

ДЦ

Дмитрий Цымбал... in Home Assistant
Но это и не означает, что такое возможно)
источник

IB

Ivan Bessarabov in Home Assistant
Да, такое может случиться, но это не особо страшно, так как ашен в этом случае не выполнится =)
источник

ДЦ

Дмитрий Цымбал... in Home Assistant
А кондишн?
источник

IB

Ivan Bessarabov in Home Assistant
что кондиш?
источник

ДЦ

Дмитрий Цымбал... in Home Assistant
Отработает?)
источник

IB

Ivan Bessarabov in Home Assistant
Я тебя не понял. Мой тезис — я считаю что вместо

- trigger:
 - platform: state
   entity_id: binary_sensor.0x00158d00044f4a8d_water_leak
 condition:
 - condition: state
   entity_id: binary_sensor.0x00158d00044f4a8d_water_leak
   state: 'on'

правильныее писать:

- trigger:
 - platform: state
   entity_id: binary_sensor.0x00158d00044f4a8d_water_leak
        to: 'on'

Во-первых так меньше строк. А во-вторых, тут с гораздо меньшеей вероятностью будет race condition (я не 100% уверен что он тут вообще возможен, но все-таки считаю что такая вероятность есть)

Либо если очень хочется написать именно condition, то, на мой взгляд нужно использовать переменную trigger:

- trigger:
 - platform: state
   entity_id: binary_sensor.0x00158d00044f4a8d_water_leak
 condition:
 - condition: template
   value_template: {{ trigger.to_state.state == 'on' }}
источник

S

Serg in Home Assistant
Я тоже за меньшее количество строк, но это не отменяет того факта, что между тригером и его условием ничего не происходит )
источник

IB

Ivan Bessarabov in Home Assistant
Да, я тебя слышу =) Мне бы хотелось самому в этом убедиться, а не принимать это на веру.
источник

S

Serg in Home Assistant
В доке, походу, нет.
В коде бегло посмотрел - потоки таки используются, но все вызовы коллбеков защищены thread_safe. Влом искать обработку автоматизаций, но если там проверка условий не будет защищена от параллельных потоков, я буду долго ржать )
источник

IB

Ivan Bessarabov in Home Assistant
Я код HA плохо умею читать, буду долго разбираться что там происходит. Я вот пытаюсь выдумать какой-то прмер как с помощью yaml конфига это подтверить/опровергруть, но пока никаких хороших мыслей у меня нет.
источник

S

Serg in Home Assistant
Сделай в еспхоум сенсор, который часто шлёт свой стейт. И нагрузи чем-то ХА, чтоб он тупил. Тогда вероятность изменений повысится. Если они не блокируются
источник

IB

Ivan Bessarabov in Home Assistant
это все понятно. это можно и без esphome сделать, а изнути HA долбать изменениями стейта какой-то сущности
источник