Документация

Описание устройства

Протокол передачи данных

Для связи с устройством используется встроенный модуль связи ESP8266 модель ESP-07. Для обмена данных используется порт 8888 и сетевой протокол передачи данных UDP. Для обменом информации между устройством и клиентом пользователя используется внутренний протокол устройства основанный на JSON:

Устройство связи принимает команды трех типов: GET, POST, INFO:

Команды типа GET позволяют делать запрос на получения данных от устройства.

Синтаксис команд: все команды отправляются только в строчном виде. В устройстве присутствует внутренний валидатор запросов, однако проверки на валидность параметров не предусмотрено, и вся валидация параметров должна происходить на стороне клиента, поэтому при разработке необходимо учитывать этот момент. Так как использование не валидных параметров может вызвать неоднозначную работу устройства.

Формат команд 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_CH08W",
            "m_t": 10,
            "m_t_se": 4,
            "min_t": 1600,
            "max_t": 3500
        }
    }
  • "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

Команды 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": "timer_daily_state",
	"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_min_st": [45, 0, 0, 0, 0, 0, 0, 0],
		"ht_min_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:

В данный момент запросы формата INFO используются только для внутренней передачи данных между Arduino и модулем связи ESP8266. В частности используется ESP8266 для передачи своего состояния и логирования процессов. Использование внешними клиентами в данной версии не предусмотрено.

Пример отправки логов WIFI соединения на устройство:

{
	"status": "info",
	"message": "wifi_log",
	"log": ""
} 

  • FAQ

    Можно ли собрать контроллер без материнской платы? Можно. В принципе вы можете подключить Arduino напрямую...

  • Главный экран и меню

    При включении питания происходит инициализация микроконтроллера и запуск программы прошивки как...

  • Настройка WiFi

    Контроллер модели AQ_CH08W содержит модуль связи для удаленной настройки и управления устройством. Для удаленной работы с...

  • Общие сведения

    Акваконтроллер предназначен для управления электрооборудованием аквариума. Содержит до восьми...

  • Основные функции

    Часы. Индикация даты и времени. Управление аквариумными нагрузками от 4 до 8 каналов. До 10...

Яндекс.Метрика