Files
lighthub/documentation/Sprinkler_module.md

12 KiB
Raw Blame History

Данный модуль реализует многозональную систему полива

Система состоит из следующих компонент:

  • Накопительный водяной бак. Снабжен двумя поплавками. Максимум воды и минимум воды. Заведены на входы 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 - текущее время или обьем полива данной зоны