Написал стрёмный формат конфига для вентиляторов и его интерпретатор и сижу довольный.
Пока в голове пара улучшений для sub-rules:
- поддержка hours: from, to
- консистентные minutes: from, to
- да и в rules можно вынести from-to в секцию time
Ещё бы код обобщить для rules и sub-rules который определяет, работает ли сейчас правило или нет.
Концепция action прикольной получилась, просто прозрачно последовательно пробрасывается в mqtt как topic=$devicename$topic, payload=value.
vakiobusy:
before_work:
from: '09:00'
to: '09:15'
action:
state: on
workmode: recuperator
speed: 4
at_work:
from: '09:15'
to: '18:00'
sub_rules:
before_meetings:
hours:
- 12
- 13
- 14
- 15
from_minute: 55
to_minute: 59
action:
speed: 7
meetings:
hours:
- 12
- 13
- 14
- 15
from_minute: 0
to_minute: 15
action:
speed: 1
not_meetings:
from_minute: 16
to_minute: 54
action:
speed: 3
fallback:
action:
speed: 3
after_work:
from: '18:00'
to: '22:59'
action:
speed: 3
night:
from: '23:00'
to: '08:59'
action:
state: off
vakiorest:
before_sleep:
from: '20:00'
to: '21:59'
action:
state: on
speed: 3
max_vent_before_sleep:
from: '22:00'
to: '22:15'
action:
speed: 7
sleep:
from: '22:15'
to: '19:00'
action:
state: off
А так, написал демонюгу, который раз в минуту выискивает в конфиге действующие правила и подправила и выполняет их, в случае если локальная копия состояния девайса отличается.
@strizhechenko мне кажется, с таким уровнем сложности правил проще было бы кодом их задавать. Хотя бы на том же питоне, чтобы раз в минуту запускался просто, проверял условия и выдавал нужное состояние.