Контроллер предназначен для автоматизированного управления электрооборудованием. Содержит восемь каналов для подключения нагрузок, до 6А на канал, которые могут управляться как в ручном режиме, так и в автоматическом режиме используя таймеры. А так же содержит до 10 шим каналов для управление внешними LED драйверами. Имеет гибкую систему настройки. Любой выход контроллера можно подключить к любому таймеру или температурному датчику. Также можно запрограммировать на один выход несколько таймеров.
- Часы. Индикация даты и времени.
- Управление аквариумными нагрузками: 8 каналов.
- Управление 10 ШИМ каналами
- До 10 ежедневных программ таймера.
- До 10 ежечасных программ таймера. С диапазоном длительности работы до 60 минут.
- До 10 секундных разовых таймеров. С диапазоном длительности работы от 1 до 250 секунд.
- Поддержка до 4 цифровых датчиков температуры на 3-х проводной шине.
- Поддержка электродов рН и управление клапаном СО2. Точность измерения pH +/- 0,02.
- Измерение температуры в пределах -25…+85 градусов. Точность измерения 0,5°C. Возможность управления нагрузкой (обогревателем/охладителем) на любом из 8 каналов выхода.
- Аккумулятор для работы часов микроконтроллера. Сохранение хода часов.
- Автоматическое сохранение в энергонезависимой памяти всех настроек при полном отключении питания и разряде аккумулятора.
- Связь со смартфоном на ОС Android по Wi-Fi. Дополнительное программное обеспечение для быстрого программирования таймеров, термостата, синхронизации времени.
- Удаленное управление устройством по средствам Wi-Fi в локальной сети (либо сети Internet при определенной настройка сетевого оборудования).
- Самостоятельная синхронизация и корректировка даты и времени устройства при наличии доступа устройству в сеть Internet. Либо удаленная синхронизация через смартфон.
- Функция слежения за отклонением показаний датчиков от среднего установленного значения со звуковым оповещением и индикацией аварийного датчика.
- Функция слежения за отклонением показаний датчиков от среднего установленного значения со звуковым оповещением и индикацией аварийного датчика.
- Временное отключение нагрузки на произвольном канале на 5-30 минут.
Устройство питается от сети переменного тока 220V. Проводить любые манипуляции с подключением, отключением нагрузок или датчиков только с выключенным из сети устройством чтобы исключить возможность поражения электрическим током или выхода из строя устройства! Так как устройство используется для управления высоковольтными нагрузками, необходимо обеспечить безопасную установку устройства при которой будет невозможно попадание воды на устройство или внутрь него. Контроллер оснащен часами реального времени, которые имеют свой собственный, внутренний элемент питания литиевая батарея CR2032 3.3V. При падении напряжения на батарее менее чем 2.5V контроллер не сможет сохранять время при отключении питания. Со временем может понадобится замена батареи.
Для связи с устройством используется встроенный модуль связи по технологии WiFi. Для обмена данных используется порт 8888 и сетевой протокол передачи данных UDP. Для обменом информации между устройством и клиентом пользователя используется внутренний протокол устройства основанный на JSON: Устройство связи принимает команды трех типов: GET, POST, INFO: Команды типа GET позволяют делать запрос на получения данных от устройства. Синтаксис команд: все команды отправляются только в строчном виде. В устройстве присутствует внутренний валидатор запросов, однако проверки на валидность параметров не предусмотрено, и вся валидация параметров должна происходить на стороне клиента, поэтому при разработке необходимо учитывать этот момент. Так как использование не валидных параметров может вызвать неоднозначную работу устройства.
{
"status":"get",
"message":"device"
}
status - тип отправляемой команды: GET, POST, INFO
message - команда устройству:
- dev - информация об устройстве.
- c_s - информация об состоянии каналов устройства
- td_s - информация о ежедневных таймерах устройства
- th_s - информация о ежечасных таймерах устройства
- ts_s - информация о секундных таймерах устройства
- te_s - информация о температурных настройках устройства
- t_sen - информация о температурных датчиках устройства
data - дополнительный параметр для передачи параметров запроса, в запросе типа GET не используется.
На каждый запрос GET устройство шлет ответ в виде своего внутреннего JSON. Такие запросы и примеры таких ответов представлены ниже:
-
Запрос:
{ "status": "get", "message": "dev" }
-
Ответ:
{ "status":"success", "message":"dev", "data":{ "ver":"AQ_V2_ESP32", "firm":"200.bin", "update":0, "ip":"192.168.1.58", "m_t":10, "m_t_se":4, "min_t":1600, "max_t":3500, "time":"00:55:03" } }
-
"ver": "AQ_CH08W" - версия устройства
-
"m_t": 8 - максимальное количество таймеров (ежедневных, ежечасных, секундных)
-
"m_t_se": 4 - максимально возможное количество подключенных температурных датчиков
-
"min_t": 1600 - порог минимальной температуры
-
"max_t": 3500 - порог максимальной температуры
-
Запрос:
{ "status": "get", "message": "c_s" }
-
Ответ:
{ "status": "success", "message": "c_s", "data": { "cl": [2, 1, 1, 1, 1, 1, 1, 1], "c_t": [2, 3, 3, 3, 3, 3, 3, 3] } }
-
"cl": [2, 2, 1, 1, 1, 1, 1, 1] - состояние канала (1 - off, 2 - on, 3-daily, 4-hour, 5-sec, 6-temp)
-
"c_t": [3, 2, 1, 1, 1, 1, 1, 1] - настройки канала (1 - off, 2 - on, 3 - auto)
-
Запрос:
{ "status": "get", "message": "td_s" }
-
Ответ:
{ "status": "success", "message": "td_s", "data": { "dt_h_s": [0, 12, 12, 0, 0, 0, 0, 0, 0, 0], "dt_h_end": [0, 20, 21, 0, 0, 0, 0, 0, 0, 0], "dt_m_s": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "dt_m_e": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "dt_s": [0, 1, 1, 0, 0, 0, 0, 0, 0, 0], "dt_c": [0, 1, 2, 0, 0, 0, 0, 0, 0, 0] } }
-
"dt_h_s": [0, 0, 0, 0, 0, 0, 0, 0] - час включения таймера (0...23)
-
"dt_h_end": [0, 0, 0, 0, 0, 0, 0, 0] - час выключения таймера (0...23)
-
"dt_m_s": [0, 0, 0, 0, 0, 0, 0, 0] - минута включения таймера (0...59)
-
"dt_m_e": [0, 0, 0, 0, 0, 0, 0, 0] - минута выключения таймера (0...59)
-
"dt_s": [0, 0, 0, 0, 0, 0, 0, 0] - состояние таймера (0 - off, 1 - on)
-
"dt_c": [0, 0, 0, 0, 0, 0, 0, 0] - канал управляемый таймером (0...max_canal)
-
Запрос:
{ "status": "get", "message": "th_s" }
-
Ответ:
{ "status": "success", "message": "th_s", "data": { "ht_m_st": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "ht_m_sp": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "ht_s": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "ht_c": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } }
-
"ht_m_st": [0, 0, 0, 0, 0, 0, 0, 0] - минута включения таймера (0...59)
-
"ht_m_sp": [0, 0, 0, 0, 0, 0, 0, 0] - минута выключения таймера (0...59)
-
"ht_s": [0, 0, 0, 0, 0, 0, 0, 0] - состояние таймера (0 - off, 1 - on)
-
"ht_c": [0, 0, 0, 0, 0, 0, 0, 0] - канал управляемый таймером (0...max_canal)
-
Запрос:
{ "status": "get", "message": "ts_s" }
-
Ответ:
{ "status": "success", "message": "ts_s", "data": { "st_h_s": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "st_m_s": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "st_d": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "st_s": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "st_c": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } }
-
"st_h_s: [0, 0, 0, 0, 0, 0, 0, 0] - час включения таймера (0...23)
-
"st_m_s": [0, 0, 0, 0, 0, 0, 0, 0] - минута включения таймера (0...59)
-
"st_d": [0, 0, 0, 0, 0, 0, 0, 0] - длительность работы таймера в секундах (0...255)
-
"st_s": [0, 0, 0, 0, 0, 0, 0, 0] - состояние таймера (0 - off, 1 - on)
-
"st_c": [0, 0, 0, 0, 0, 0, 0, 0] - канал управляемый таймером (0...max_canal)
-
Запрос:
-
{ "status": "get", "message": "te_s" }
-
Ответ:
-
{ "status": "success", "message": "te_s", "data": { "tt_s": [0, 0, 0, 0], "tt_m_s": [0, 0, 0, 0], "tt_m_e": [76, 76, 76, 76], "tt_c": [1, 0, 0, 0] } }
-
"tt_s": [1, 0, 0, 0,] - состояние температурного таймера
-
"tt_m_s": [0, 0, 0, 0] - температура включения канала (min_temp...max_temp, кратна 50)
-
"tt_m_e": [76, 76, 0, 0] - температура выключения канала (min_temp...max_temp кратна 50)
-
"tt_c": [1, 0, 0, 0] - канала управляемый таймером (0...max_canal)
-
Запрос:
-
{ "status": "get", "message": "t_se" }
Ответ:
{ "status": "success", "message": "t_sen", "data": { "t_se": [4, 3, 0, 0] } }
-
"t_se": [4, 3, 0, 0] - температура датчиков (min_temp...max_temp)
Команды POST отличаются от команд GET только тем что в запросе необходимо в поле data указывать параметры запроса и поле status содержит параметр post. Формат данных для поля data аналогичен данным приходящим от устройства при запросе командой GET.
Примеры возможных запросов:
-
Запрос:
{ "status": "post", "message": "c_s", "data": { "c_t": [1, 0, 0, 0, 0, 0, 0, 0] } }
Обратите внимание для изменения настроек каналов, отправлять нужно только параметр c_t, параметр cl не предназначен для изменения, он отвечает только за текущее состояние канала в зависимости от настроек таймеров или ручных настроек.
-
Запрос:
{ "status": "post", "message": "td_s", "data": { "dt_h_s": [1, 0, 0, 0, 0, 0, 0, 0], "dt_h_end": [2, 0, 0, 0, 0, 0, 0, 0], "dt_m_s": [5, 0, 0, 0, 0, 0, 0, 0], "dt_m_e": [55, 0, 0, 0, 0, 0, 0, 0], "dt_s": [1, 0, 0, 0, 0, 0, 0, 0], "dt_c": [3, 0, 0, 0, 0, 0, 0, 0] } }
-
Запрос:
{ "status": "post", "message": "th_s", "data": { "ht_m_st": [45, 0, 0, 0, 0, 0, 0, 0], "ht_m_sp": [56, 0, 0, 0, 0, 0, 0, 0], "ht_s": [1, 0, 0, 0, 0, 0, 0, 0], "ht_c": [3, 0, 0, 0, 0, 0, 0, 0] } }
-
Запрос:
{ "status": "post", "message": "ts_s", "data": { "st_h_s": [5, 0, 0, 0, 0, 0, 0, 0], "st_m_s": [26, 0, 0, 0, 0, 0, 0, 0], "st_d": [125, 0, 0, 0, 0, 0, 0, 0], "st_s": [1, 0, 0, 0, 0, 0, 0, 0], "st_c": [2, 0, 0, 0, 0, 0, 0, 0] } }
-
Запрос:
{ "status": "post", "message": "te_s", "data": { "tt_s": [0, 0, 0, 0, 0, 0, 0, 0], "tt_m_s": [2200, 2250, 0, 0, 0, 0, 0, 0], "tt_m_e": [2700, 2850, 0, 0, 0, 0, 0, 0], "tt_c": [5, 0, 0, 0, 0, 0, 0, 0] } }
При POST запросе нет необходимости указывать все параметры в поле data. При передаче значений в устройство можно отправлять только те данные которые изменились на клиенте. На каждый выполненный POST запрос, ответом будет ответ аналогичный GET с тем же message параметром, но уже с измененными данными.
-
Запрос
-
{ "status": "post", "message": "c_s", "data": { "c_t": [1, 1, 1, 2, 3, 2, 2, 2] } }
-
Ответ
-
{ "status": "get", "message": "c_s", "data": { "cl": [1, 1, 1, 2, 1, 2, 2, 2], "c_t": [1, 1, 1, 2, 3, 2, 2, 2] } }
-
Обратите внимание что ответ на POST приходит всегда в полном виде независимо от тех параметров которые вы отправляете.
В данный момент запросы формата INFO используются только для внутренней передачи данных между Arduino и модулем связи ESP8266. В частности используется ESP8266 для передачи своего состояния и логирования процессов. Использование внешними клиентами в данной версии не предусмотрено.
{
"status": "info",
"message": "wifi_log",
"log": ""
}