API Options
Опция обеспечивает доступ к параметрам контроллера из внешних программ или систем через GET-запросы или MQTT.
Настройки опции
В целях безопасности по-умолчанию установлено ограничение функций API.
Если галочка "только API конструктора строк (linesdesigner)" установлена, то через API запросы будут доступны только операции чтения и записи строк в модуле конструктора строк (функционал соответствует вкладке Designer_lines в веб интерфейсе).
На практике группа linesdesigner
часто применяется для управления выводом информации на дисплеи.
Подробнее примеры установки данных на светодиодное табло рассмотрены в разделе LED PLC API.
Внимание!
Если используется полный функционал API и галочка "только API конструктора строк (linesdesigner)" снята, то без дополнительной защиты возможен доступ ко всем настройкам в открытом виде, включая пароли!
Будьте внимательны включая опцию "API Options" в прошивке!
Эта опция даёт широкие возможности по чтению и изменению параметров.
Список доступных групп параметров зависит от конфигурации прошивки.
Для защиты от несанкционированных операций чтения или записи параметров крайне рекомендуется ограничить доступ к веб-интерфейсу контроллера или к локальной сети, к которой подключен контроллер. Также возможно установить пароль на вкладке Main
и обязательно установить галочку Full Security
!
Управление через GET запросы
Чтение настроек
http://[ip_adr]/jsonoptions?select=XXXXX
, где XXXXX - имя группы настроек (main, hardware, servers и прочие... all - выведет все настройки). Как правило имя группы настроек соответствует названиям вкладок в веб-интерфейсе. В ответ контроллер пришлёт настройки группы в формате JSON.
Пример 1:
http://192.168.100.1/jsonoptions?select=thermostat
- выдаст содержимое настроек термостата.
Пример 2:
http://192.168.100.1/jsonoptions?select=all
- выдаст содержимое всех настроек модуля.
Запись настроек
http://[ip_adr]/jsonoptions?write=XXXXX
, где XXXXX параметры в формате JSON (можно отправлять только параметры, которые требуется изменить). После отправки покажет OK и число измененных параметров. Параметры должны быть сгруппированы по группам.
Чтобы верно сформировать JSON-строку, удобно сначала прочитать содержимое нужной группы, исправить нужные поля и записать исправленную строку обратно.
Пример 3:
http://192.168.100.1/jsonoptions?write={"hardware":{"interval":2,"i2c":{"scl":5,"sda":4},"ds18b20":{"en":1,"gpio":13}}}
- установит настройки группы hardware.
Ограничения по использованию
Опция экспериментальная. При попытке чтения или отправки чрезмерно большого пакета данных возможен отказ или сбой в работе прошивки.
При чтении желательно использовать вместо all
чтение каждой группы отдельно, а при записи указывать только изменяемые параметры.
Управление через MQTT
При включенной опции контроллер подписывается на MQTT-топик вида: login/hostname[/set]/optionsget
и login/hostname[/set]/optionsset
и публикует ответы в топик login/hostname/optionsdata
.
Если в топик login/hostname[/set]/optionsget
отправить 0, в ответ в топик login/hostname/optionsdata
в формате JSON придет список групп, доступных для конфигурации.
Если в топик login/hostname[/set]/optionsget
отправить название группы, в ответ в топик login/hostname/optionsdata
в формате JSON придет список параметров данной группы и их текущие значения.
Если в топик login/hostname[/set]/optionsset
отправить настройки в формате JSON (аналогичном полученным на предыдущем шаге), настройки будут изменены. Допускается публикация только тех параметров, значения которых должны быть изменены.
Примечание. Рекомендуется в прошивке в настройках MQTT включать "отдельный топик на запись". В этом случае в топиках на запись добавляется секция
/set
Поддерживаемые группы параметров
Набор доступных параметров зависит от конфигурации прошивки.
Чтобы узнать какие группы поддерживаются для конкретного контроллера, можно выполнить GET-запрос вида http://[ip_adr]/jsonoptions
(без параметров), либо отправить 0 в топик вида login/hostname[/set]/optionsget
и получить в топике login/hostname/optionsdata
список.
Возможна поддержка следующих групп:
- main (не реализована установка времени)
- servers (настройка серверов)
- hardware
- gpiomode (режимы работы GPIO: out, outinv, input, inputev, outf, outinvf)
- interrupt (прерывания, режимы: counter, activesend, key, timekey)
- linesdesigner (конструктор строк)
- thermostat
- ping (ping тест)
- phoneaccess (список доступа телефонов для GSM control)
- ipsecurity
- display (Работа с дисплеями)
- vgpio
- vsens
- template (sms/email шаблоны)
- wol
- mp3 (mp3 uart конструктор фраз)
- scheduler (планировщик задач)
- promode (активация ключа)
- ddns (myddns.ru)
- logic2 (Логический модуль 2, не отображается в секции all, ограничено до 5 шагов)
- notifications (настройки уведомлений от gsm и sms сервисов)
- emailnotice (email уведомления)
- gsmcontrol
- pwm
- irrec (ИК приемник)
- rcrec (RCswitch приемник)
- mcpgpio (MCP23017 только одна микросхема)
- mcp8gpio (MCP23008 только одна микросхема)
- narodmonget (Narodmon GET)
- telegram
- webkey
- Interpreter
- gpiokeys
- pid (не все параметры записываются)
- d2d
- cron
- domoticz
- camera
Пример JSON пакета настроек
Прошивка выдает и принимает JSON только одной строкой. Ниже приведён текст с форматированием для удобства.
Чтобы упаковать JSON в одну строку, можно применить один из онлайн-сервисов, которые можно найти в интернете по ключевым словам "JSON Minifier".
{
"main": {
"hostname": "esptest",
"admin": {
"login": "",
"passw": "",
"security": 0
},
"wifi": {
"apname": "megarouter",
"appassw": "20100100",
"apmode": 0,
"ip": "192.168.1.200",
"gw": "192.168.1.1",
"staticip": 1
},
"ntp": {
"utc": 3,
"ip": "85.114.26.194"
}
},
"hardware": {
"interval": 2,
"i2c": {
"scl": 5,
"sda": 4
},
"ds18b20": {
"en": 1,
"gpio": 13
}
},
"servers": {
"mjd": {
"en": 1,
"ip": "192.168.1.154",
"interval": 300
},
"narodmon": {
"en": 1,
"interval": 5
},
"flymon": {
"en": 1
},
"mqtt": {
"en": 0,
"interval": 60,
"server": "mqtt.wifi-iot.com",
"port": 1883,
"login": "maksms",
"passw": "pass"
}
},
"promode": {
"en": 1,
"key": "78J7941000"
},
"gpiomode": {
"0": "",
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "out"
},
"display": {
"mode": "oled",
"backlight": 1,
"dislogo": 0
},
"phoneaccess": {
"1": "79091441234",
"2": ""
},
"interrupt": {
"divider": 10,
"mode": "neg",
"1": {
"intgpio": 0,
"keygpio": 5,
"mode": "",
"timeforkey": 10
},
"2": {
"intgpio": 0,
"keygpio": 193,
"mode": "key"
},
"3": {
"intgpio": 255,
"keygpio": 2,
"mode": ""
},
"4": {
"intgpio": 255,
"keygpio": 2,
"mode": ""
}
},
"scheduler": {
"1": {
"hour": 6,
"min": 0,
"week": "1,2",
"mode": "display",
"num": 1,
"state": 1
},
"2": {
"hour": 22,
"min": 0,
"week": "1,2,3,4,5,6,7",
"mode": "display",
"num": 0,
"state": 0
}
},
"linesdesigner": {
"1": "_DSW1_ !! _VDD_ ! _GPIO16_ !",
"2": "_CNT1I_",
"3": "Сегодня _DATE_ _WEEK_ . дома _DSW1_ градусов",
"4": "_DATE_ _WEEK_"
},
"ping": {
"en": 0,
"ip": "8.8.8.8",
"gpio": 255
},
"ipsecurity": {
"en": 1,
"homeen": 1,
"ipaccess": {
"1": "192.168.1.255",
"2": "109.194.190.101",
"3": "255.255.255.255",
"4": "192.168.100.255",
"5": "255.255.255.255"
}
},
"vgpio": {
"20": 154,
"40": 170,
"60": 177
},
"vsens": {
"1": {
"ip": "192.168.1.177",
"sens": {
"1": 2,
"2": 3,
"3": 7,
"4": 5,
"5": 6
}
},
"2": {
"ip": "192.168.1.153",
"sens": {
"1": 2,
"2": 3,
"3": 0,
"4": 0,
"5": 0
}
},
"3": {
"ip": "255.255.255.255",
"sens": {
"1": 31,
"2": 31,
"3": 31,
"4": 31,
"5": 31
}
}
},
"notifications": {
"interrupt": 0,
"pingalarm": 1,
"gsmen": 1,
"fone": "79005123456"
},
"emailnotice": {
"emailen": 1,
"mailfrom": "mail@wifi-iot.ru",
"server": "smtp-devices.yandex.com",
"port": 25,
"login": "mail@wifi-iot.ru",
"passw": "12345",
"mailto": "mail@ya.ru"
},
"template": {
"1": {
"txt": "DS: _DSW1_ VS: _VS11_ IP: _IP_",
"cmd": "cmd1"
},
"2": {
"txt": "no sms text",
"cmd": "cmd2"
},
"3": {
"txt": "no sms text",
"cmd": "cmd3"
}
},
"mp3": {
"1": "0,0,41,T111",
"2": "0",
"3": "0"
}
}