12 KiB
Данный модуль реализует многозональную систему полива
Система состоит из следующих компонент:
- Накопительный водяной бак. Снабжен двумя поплавками. Максимум воды и минимум воды. Заведены на входы wMax и wMin
- Насос полива высокого давления. Запитан из бака. Включается реле, подключенным к выходу rPump. Датчик тока для контроля того, что насос включен, заведен на вход fbPump
- Набор клапанов зон полива. Подключены через оптореле к выходам, заданным в параметре pin соответствующей зоны полива.
- Клапан налива из водопровода. Подключен через оптореле к выходу vIn
- Насос дренажного колодца. Приоритетный источник для наполнения бака полива. Когда система полива находится в ждущем или активном режиме, бак пытается максимально наполнится из дренажного колодца. Насос дренажа имеет поплавковый выключатель, отключающий насос при осушении дренажного колодца. Насос включается реле, которое подключено к выходу rDren. Для контроля того, что насос включен и момента осушения колодца, используется датчик тока, который подключен в входу fbDren
- Опциональный водосчетчик. Контакты подключены к входу wCtr
Система налива воды реализована при помощи конечного автомата со следующими состояниями:
- SP_UNKNOWN
- SP_OFF
- SP_DREN_ON - дренажный насос включен
- SP_DREN_OPERATE - дренажный насос работает
- SP_DREN_EMPTY - дренажный насос выключился встроенным поплавком - колодец пуст
- SP_VIN - включено наполнение из водопровода
- SP_FULL - бак наполнен
граф переходов конечного автомата системы налива воды
| Состояние SP_* | Условие перехода | перейти в состояние | выполнить при переходе |
|---|---|---|---|
| INIT | true | OFF | выключить клапана и насосы |
| OFF | vMax && !FREEZE | FULL | выключить vIN, rDren |
| OFF | ! vMax && !FREEZE | DREN_ON | включить rDren |
| DREN_ON | fbDren (насос дренажа реально работает) | DREN_OPERATE | |
| DREN_ON | таймаут 10 сек | DREN_EMPTY | |
| DREN_EMPTY | включен цикл полива и бак не полон | VIN | включить клапан vIN для набора бака из водопровода |
| DREN_OPERATE | fbDren (насос дренажа более не работает) | DREN_EMPTY | |
| VIN | fbDren | DREN_OPERATE | вылючить клапан vIN для набора бака из водопровода |
| VIN, DREN_OPERATE | vMax | FULL | выключить vIN, rDren |
| VIN | таймаут 1200 сек | FAULT_VIN | выключить vIN |
| DREN_OPERATE | таймаут 1200 сек | FAULT_DREN |
Конфигурирование:
"items":
{
"sprinkler":[23,
{
"":{
"vIn:7,
"wMax":15,
"wMin:17,
"rDren":6,
"fbDren":12,
"rPump":5,
"fbPump":11,
"wCtr":19
},
"garden":{"pin":13,"set":60,"val":15,"cmd":2},
"backyard":{"pin":14,"set":60,"val":15,"cmd":2},
"trees":{"pin":15,"set":60,"val":15,"cmd":2}
}]
}
Алгоритм работы
в настройки зон полива задаем интенсивность для каждой зоны.
Это можно сделать как в конфиге так динамически, (стандартными механизмами управления по MQTT, HTTP, CAN)
Рассмотрим на примере MQTT:
топик root/name/sprinkler/garden/set -> 60
Задаем обьем полива 60 отсчетов счетчика воды (если счетчик не сконфигурирован - 60 секунд)
Контроллер должен передать это значение в выходной топик root/name/s_out/sprinkrer/garden/set и оно будет восстановлено при перезагрузке контроллера
отработанный обьем воды или время будет сохраняться в параметре "val" каждой зоны (параметр будет автоматически увеличиваться при работе зоны, передаваться в соответствующий зоне топик для мониторинга и восстановления в случае перезагрузки контроллера)
Пример топика: root/s_out/sprinkler/garden/val
Когда данный параметр достигнет значения, заданного в параметре "set" контроллер завершит полив данной зоны и перейдет к следующей.
Для сброса счетчиков можно использовать как непосредственную установку значения параметра "val" для каждой зоны так и команду RESET, отправленную в нужную зону или в объект sprinkler через суффикс /cmd.
В последнем случае, контроллер итерационно сбросит счетчики в значение 0 для каждой зоны полива.
Пример: root/name/sprinkler/cmd -> RESET
Управление
Включение/выключение полива конкретной зоны:
Включить root/name/sprinkler/garden/cmd -> ON
Выключить root/name/sprinkler/garden/cmd -> OFF
Включение/выключение цикла полива:
Включить root/name/sprinkler/cmd -> ON
Система начнет или продолжит цикл полива, переходя от зоны к зоне по мере завершения работы с каждой предыдущей зоной. После завершения работы со всеми зонами, sprinkler перейдет в состояние OFF
Перед включением полива, система убедится что бак наполнен или до-наполнит его до максимума из водопровода.
Выключить root/name/sprinkler/cmd -> OFF
Система немедленно остановит текущий цикл полива (закроет клапаны зон, выключит насос полива)
Аналогично, будут работать команды XON и XOFF, с одним исключением, что команда XON может быть запрещена и игнорироваться если активирован режим DISABLE. Это базовая функция контроллера и не относится к функционалу данного модуля. Но может быть использована, например, для запрета полива на определенное время после выпадения осадков
Пример
root/name/sprinkler/ctrl -> DISABLE
root/name/sprinkler/cmd -> XON //Будет проигнорировано
root/name/sprinkler/ctrl -> ENABLE
root/name/sprinkler/cmd -> XON //А вот теперь сработает
Даже в выключенном состоянии (OFF) , система полива работает в дежурном режиме, поддерживая максимальный уровень воды в баке за счет немедленной перекачки из дренажного колодца
При попытке включения системы после завершения дневного задания по поливу всех зон (параметр val для всех зон достиг параметра set), система сразу перейдет в состояние OFF
Полная блокировка системы полива (в зимнее время)
Ддя перевода канала полива в полностью заблокированное состояние и обратно импользуется системная команда FREEZE/UNFREEZE соответственно
В режиме FREEZE полностью заблокирована обработка всех команд, кроме UNFREEZE, заблокирован автомат пополнения бака из дренажного насоса и выключены насосы и все клапана
Рекомендуется задать флаг FREEZE в конфигурации канала (см документ ...) , чтобы избежать разблокировки при утере значений топика /clrl и перезагрузки системы
Также, на вход /val обЪекта sprinkler можно подать значение уличной температуры. И если значения будут ниже нуля, система автоматически перейдет в режим FREEZE
Пример
root/name/sprinkler/ctrl -> FREEZE
root/name/sprinkrer/cmd -> ON //Будет проигнорировано
root/name/sprinkler/ctrl -> UNFREEZE
root/name/sprinkrer/cmd -> ON //А вот теперь сработает
root/name/sprinkler/val -> -1 //система перейдет в режим FREEZE
Передача статусных значений
Примеры выдачи в топики:
root/s_out/sprinkler/$fbPump - ON/OFF признак того, что включен основной насос (от датчика тока)
root/s_out/sprinkler/$fbDren - ON/OFF признак того, что включен дренажный насос (от датчика тока)
root/s_out/sprinkler/$state - состояние конечного автомата Системы налива воды
root/s_out/sprinkler/$wMax - ON/OFF достигнут максимум воды в баке (от поплавкового датчика)
root/s_out/sprinkler/$wMin - ON/OFF достигнут минимум воды в баке (от поплавкового датчика)
root/s_out/sprinkler/$rDren - ON/OFF включено реле дренажного насоса
root/s_out/sprinkler/$rPump - ON/OFF включено реле основного насоса
root/s_out/sprinkler/set - значение счетчика воды (восстанавливается при перезагрузке из данного топика)
root/s_out/sprinkler/$vIN - ON/OFF - признак открытия клапана налива бака из водопровода
root/s_out/sprinkler/garden/set - требуемый обьем (или время) полива зоны
root/s_out/sprinkler/garden/cmd - ON или OFF - признак включения полива зоны
root/s_out/sprinkler/garden/$state - ON или OFF - признак того что зона поливается в настоящее время
root/s_out/sprinkler/garden/val - текущее время или обьем полива данной зоны