Спасибо, получилось вот так. Протестировал в симуляторе, вроде все работает, но кое-что не могу доделать.
Вот что имеется:
switch_on-off - физический переключатель, имеет только два состояния, если выключено, то система не запускается, если включено то запускается.
remote_cmd - удаленное вкл/выкл через ESP, по идее сюда будет записыватся значение выхода start_cmd, по типу как сейчас sw_start (он же switch_on-off), чтобы отображать статус на стороне ESP.
schedule_cmd - вкл/выкл по недельному таймеру
sensors_cmd - датчики дыма/газа
system_status - статус системы (наличие ошибок/аварий)
start_cmd - команда на запуск, будет записыватся в енергонезависимую переменную.
Это практически все что мне нужно, только кое-что нужно доработать, не могу разобратся как и в каком месте это лучше вставить.
1. Если система включена, срабатывает датчик дыма, она отключается до того времени, пока датчик не подаст 0 на вход. Если в этот момент я запускаю принудительно через remote_cmd или switch_on-off, система запустится и будет работать, хотя по датчику на входе 1, то есть она должна отключится (или не запускатся). Думаю нужно вот так, если включаю систему и при этом по датчику есть 1, то нужно запустить таймер, если за указанное время 1 не изменится на 0, то опять выключить систему. То есть как будто сбрасывается значение датчика и по истечению времени снова проверяется.
2. Та же ситуация и с недельным таймером. Если по графику система выключена и в этот момент сработает датчик дыма, то ничего не произойдет. Но если система включится по графику и по датчику будет 1, то система будет работать. Тут также нужно включать только на время и потом выключать (как в п.1).
То есть получается любой из сигналов включения должен учитывать состояние датчика, если запускать систему принудительно, но в это же время датчик показывает 1, то система отключится через заданное время.
Screenshot_1.png
Screenshot_2.png