• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

IoT Manager - предложения по расширению функционала

Browny

New member
@Victor, да, экранировал.
Брал сообщение из mqtt spy, чтобы исключить накладки.
Сообщение выглядит так:
Код:
{"id":11,"page":"LivingRoom","pageId":10,"topic":"/IoTmanager/DVES_06FD8A/sensor6","widget":"anydata","class1":"item no-border","style2":"font-size:18px;float:left","descr":"Влажность,%","class3":"balanced","style3":"font-size:18px;font-weight:bold;float:right;:before \{content:\"xxx\";\}"}
В логах по прежнему ошибка парсинга JSON.
 

pvvx

Активный участник сообщества
Возможна ли работа с IoT Manager c "AT" прошивками?
Модули с таким функционалом для частных одиночных заказов на али стоят уже менее 700 руб, а через другие магазины или малый опт. и значительно меньше...
 

Victor

Administrator
Команда форума
Возможна ли работа с IoT Manager c "AT" прошивками?
в принципе возможно, но сейчас это обычному пользователю слишком сложно (нужно вручную создать JSON файл со стилями оформления и загрузить в телефон специально программой - данный функционал есть, но не дорабатывается по причине невостребованности, а сделать сервис, который будет генерить нужные JSON файлы в визуальном редакторе слишком трудоемко для бесплатного проекта, а делать платный мне не хочется). Есть подробное описание процесса для ESPEasy (на англ)
 

pvvx

Активный участник сообщества
в принципе возможно, но сейчас это обычному пользователю слишком сложно (нужно вручную создать JSON файл со стилями оформления и загрузить в телефон специально программой - данный функционал есть, но не дорабатывается по причине невостребованности, а сделать сервис, который будет генерить нужные JSON файлы в визуальном редакторе слишком трудоемко для бесплатного проекта, а делать платный мне не хочется). Есть подробное описание процесса для ESPEasy (на англ)
JSON файлы ныне может выдавать (и по SSL запросам/ответам) и хранить нормальная "AT" прошивка (к примеру уже указанный модуль).
Так-же и что посылается и принимается и какие теги и прочее в MQTT/MQTTS. Нужна только настройка модуля для работы MQTT и IoT Manager.
Но с этим как раз не справиться - нет популярного описания. Те, что есть, либо не по русски, либо с неверными устаревшими ссылками... :)
Получается, чтобы что-то сделать с IoT Manager, необходимо к неделе изучения разного материала, совершенно не нужного для реализации на нем чего-либо.
К примеру у меня желания выкинуть неделю, ради пары кнопок на телефоне нет. Проще взять что другое и за вечер слепить рабочий вариант.
 
Последнее редактирование:

Victor

Administrator
Команда форума
нет популярного описания
Все описания я сделал на двух языках здесь Главная · IoT Manager (именно здесь все с учетом последних изменений)
Протоколы обмена описаны тут Протокол обмена · IoT Manager
Если на сайте какая-то страница открылась на английском - значит справа вверху жмем "Russian"
Остальное все в примерах тут GitHub - 4refr0nt/iot-manager-demo: Demo sketches for IoT Manager https://play.google.com/store/apps/details?id=ru.esp8266.iotmanager

Экран телефона условно разбит на виджеты (обычно виджет - это div элемент на всю ширину экрана, т.е. горизонтальный блок, но может быть и несколько виджетов в горизонтальном блоке - тогда применяется разметка bootstrap). У каждого виджета свой html код - он есть в описании. К этому коду можно применить HTML inline стили или готовые классы. Вы можете использовать стандартные классы цветов, классы полей, другие полезные классы и классы Bootstrap3 col-xs и col-xm для отображения виджетов в несколько колонок
Виджеты сгруппированы на вкладки (страницы). Когда на телефоне вы выбираете какую-то вкладку (страницу) то на список виджетов накладывается фильтр (или снимается, если выбираете страницу "Все").

Для языка С, где начинающим не комфортно работать со строками, собирая JSON строку конфигурации, предложен вариант генерации .h файлов с [inline]const char[/inline] массивами из текстовых удобочитаемых JSON файлов

Если использовать протокол v1, то от устройства потребуется отправка данных 2 раза: первый раз нужно отправить JSON строку с HTML классами и стилями (config) каждый раз, когда телефон подключается к брокеру и шлет [inline]HELLO[/inline] и далее периодически отправляем только данные. Данные с устройства отправляем в топик, указанный ранее в config, JSON строкой [inline]{"status":xxx}[/inline]. Не уверен, что такое получится реализовать на AT прошивке для RAK473, но этот вопрос я не изучал. Хотя, даже на bash c mosquitto_pub все работает.

Если использовать протокол v2, то придется поставить node.js и разобраться c импортом конфига в телефон, но данные с устройства можно будет отправлять по протоколу Domoticz (по сути это всего лишь [inline]{"idx"=xxx, "svalue"=yyy}[/inline]) и не обязательно периодически, а только тогда, когда придет запрос с телефона. Пример для v2 iot-manager-demo/demo1.js at master · 4refr0nt/iot-manager-demo · GitHub

у меня желания выкинуть неделю, ради пары кнопок на телефоне
Как видно, описание принципов работы уложилось в 3 абзаца, деталей конечно больше, но все документировано.
У пользователей основные трудности возникают с поднятием своих MQTT, настройкой и подключением. Используют не ту версию библиотеки MQTT в Arduino (хотя в каждом примере на нее есть ссылка) или бояться как огня Node.JS и не могут запустить простые примеры. Остальные трудности связаны с отсутствием понимания как устроен HTML.

Так что, я думаю что вы справитесь за пару часов или даже быстрее :)
 

pvvx

Активный участник сообщества
Нету простого пример как послать и сконфигурировать IoTmanager сообщениями.
Приходиться рыться в всяких исходниках, в которых этот поцесс завуалирован спецификой процедур, на кой модуль написано (а он один - ESP8266 :)).
Как не стараюсь - не проходит протокол. В телефоне пишет нет данных и псё. Хотя сам все отправляет и все логи во всех MQTT и даже в телефоне что-то принимают. Похоже какие-то проблемы с Pub-Topic и нигде внятного описания этого нет. :(
Остальное всё понятно - я сам могу расписать до бит в сети и как они кодируются, хоть на WiFi поканально... :)
Если использовать протокол v1, то от устройства потребуется отправка данных 2 раза: первый раз нужно отправить JSON строку с HTML классами и стилями (config) каждый раз, когда телефон подключается к брокеру и шлет [inline]HELLO[/inline] и далее периодически отправляем только данные. Данные с устройства отправляем в топик, указанный ранее в config, JSON строкой [inline]{"status":xxx}[/inline]. Не уверен, что такое получится реализовать на AT прошивке для RAK473, но этот вопрос я не изучал. Хотя, даже на bash c mosquitto_pub все работает.
Там, в RAK это всё делается просто. Есть даже софтина конфигурации, где наглядно можно отсылать/принимать данные MQTT(S) и т.д. Всё в MQTT передается и принимается, и остлеживается сторонними логерами, но вот полностью протокол что-то не идет. В том-же cloudmqtt есть Send message, но нет тупого примера как через них пустить IoTmanager, хотя-бы для теста...
 
Последнее редактирование:

pvvx

Активный участник сообщества
В общем дело оказалось в "пузырьках":
/IoTmanager
HELLO
/IoTmanager/dev-01/config
{"id": "1","page": "boiler","pageId":1,"widget":"anydata","class1":"item no-border","style2":"font-size:16px;float:left","descr":"Hello IoTmanager","topic":"/IoTmanager/dev-01/anydata1","class3":"assertive", "style3":"font-size:40px;font-weight:bold;float:right"}
/IoTmanager/dev-01/sensor1/status
{"status":"1"}
В примере стоят имена без кавычек [inline]"[/inline]: Виджет anydata · IoT Manager
Теперь вообще не ясно, где они нужны, а где нет :)
---------
Ну вот и тестовый прогон на "AT" прошивке :)
Код:
Welcome to RAK473 <--- Включение модуля --->
at+ascii=1
OK
at+auto_connect
OK
mac=34:C3:D2:69:86:6E
addr=192.168.1.151
mask=255.255.255.0
gw=192.168.1.1
dns1=192.168.1.1
dns2=0.0.0.0
at+mqtt_init=12345,100
OK
at+mqtt_auth=testrak473,testrak473
OK
at+mqtt_con=54.228.205.206,19912,0
OK20
at+mqtt_sub=/IoTmanager
OK
at+recv_data=20,19912,54.228.205.206,265,{"id": "1","page": "boiler","pageId":"1","widget":"anydata","class1":"item no-border","style2":"font-size:16px;float:left","descr":"Hello IoTmanager","topic":"/IoTmanager/dev-01/anydata1","class3":"assertive", "style3":"font-size:40px;font-weight:bold;float:right"}
<--- Ожидание HELLO --->
at+recv_data=20,19912,54.228.205.206,5,HELLO
at+mqtt_pub=/IoTmanager/dev-01/config,0
OK
at+send_data=20,0,0,265,{"id": "1","page": "boiler","pageId":"1","widget":"anydata","class1":"item no-border","style2":"font-size:16px;float:left","descr":"Hello IoTmanager","topic":"/IoTmanager/dev-01/anydata1","class3":"assertive", "style3":"font-size:40px;font-weight:bold;float:right"}
OK
at+mqtt_pub=/IoTmanager/dev-01/anydata1/status,0
OK
at+send_data=20,0,0,16,{"status":"100"}
OK
at+send_data=20,0,0,16,{"status":"101"}
OK
at+send_data=20,0,0,16,{"status":"102"}
OK
at+send_data=20,0,0,16,{"status":"103"}
OK
at+send_data=20,0,0,16,{"status":"104"}
OK
at+send_data=20,0,0,16,{"status":"105"}
OK
at+send_data=20,0,0,16,{"status":"106"}
OK
at+send_data=20,0,0,16,{"status":"107"}
OK
at+send_data=20,0,0,16,{"status":"108"}
OK
at+send_data=20,0,0,16,{"status":"109"}
OK
at+send_data=20,0,0,16,{"status":"110"}
OK
at+mqtt_discon=20
OK
iotmanager.ttl - файл макро-скрипта для терминальной программы "Tera Term"
Код:
    timeout = 0
    testdata = 100
    wait 'RAK473'
    beep 0
:new_start
    sendln 'at+ascii=1'
    timeout = 0
    wait 'OK' 'ERROR' 'RAK473'
    If result=3 goto new_start 
    If result=2 goto error_end
    mpause 500
:connet_ap
    timeout = 10
    sendln 'at+auto_connect'
    wait 'OK' 'ERROR' 'RAK473'
    If result=3 goto new_start 
    If result=1 goto start_mqtt
    if result=0 goto connet_ap
    pause 1
    If result=2 goto connet_ap
:start_mqtt
    timeout = 0
    sendln 'at+mqtt_init=12345,100'
    wait 'OK' 'ERROR' 'RAK473'
    If result=3 goto new_start 
    If result=2 goto start_mqtt
    sendln 'at+mqtt_auth=testrak473,testrak473'
    wait 'OK' 'ERROR' 'RAK473'
    If result=3 goto new_start 
    If result=2 goto start_mqtt
    sendln 'at+mqtt_con=54.228.205.206,19912,0'
    wait 'OK' 'ERROR' 'RAK473'
    If result=3 goto new_start 
    If result=2 goto error_mqtt
    sendln 'at+mqtt_sub=/IoTmanager'
    wait 'OK' 'ERROR' 'RAK473'
    If result=3 goto new_start 
    If result=2 goto error_mqtt
    wait 'HELLO' 'RAK473'
    If result=2 goto new_start 
:send_hello 
    timeout = 0
    beep 0
    sendln 'at+mqtt_pub=/IoTmanager/dev-01/config,0'
    wait 'OK' 'ERROR' 'RAK473'
    If result=3 goto new_start 
    If result=2 goto error_mqtt
    sendln 'at+send_data=20,0,0,265,{"id": "1","page": "boiler","pageId":"1","widget":"anydata","class1":"item no-border","style2":"font-size:16px;float:left","descr":"Hello IoTmanager","topic":"/IoTmanager/dev-01/anydata1","class3":"assertive", "style3":"font-size:40px;font-weight:bold;float:right"}'
    wait 'OK' 'ERROR' 'RAK473'
    If result=3 goto new_start 
    If result=1 goto send_data
:error_mqtt
    timeout = 0
    sendln 'at+mqtt_discon=20'
    wait 'OK' 'ERROR' 'RAK473'
    If result=3 goto new_start 
    If result=2 goto error_end
    goto start_mqtt 
:send_data
    timeout = 0
    sendln 'at+mqtt_pub=/IoTmanager/dev-01/anydata1/status,0'
    wait 'OK' 'ERROR' 'RAK473'
    If result=3 goto new_start 
    If result=2 goto error_end
:send_data1 
    timeout = 0
    sprintf 'at+send_data=20,0,0,16,{"status":"%d"}' testdata
    testdata = testdata + 1
    sendln inputstr
    wait 'OK' 'ERROR' 'RAK473'
    if testdata > 110 goto test_end
    If result=3 goto new_start 
    If result=2 goto error_end
    timeout = 3
    wait 'HELLO' 'RAK473'
    If result=1 goto send_hello
    If result=2 goto new_start 
    goto send_data1
:error_end
    beep 0
:test_end 
    sendln 'at+mqtt_discon=20'
Ситуация с [inline]"[/inline] не понятна - они нужны для увеличения объема отсылаемых данных?
 
Последнее редактирование:

Victor

Administrator
Команда форума
Теперь вообще не ясно, где они нужны, а где нет
Мы отправляем стандартную JSON пару [inline]key[/inline]-[inline]value[/inline] и, в классическом JSON, двойные кавычки вокруг [inline]key[/inline] обязательны. Однако, если потом мы эту строку обрабатываем в JS с помощью [inline]JSON.stringify[/inline], то кавычки не обязательны - [inline]stringify[/inline] добавит их автоматом (именно так и сделано во всех NodeJS примерах, а в примерах для Arduino, например, наоборот - везде двойные кавычки). Для [inline]value[/inline] кавычки используются только для передачи строковых данных: [inline]{"status":1}[/inline] передаст [inline]int 1[/inline], а [inline]{"status":"1"}[/inline] передаст строку [inline]1[/inline], независимо от того, в JS это или нет.
В документации IoT Manager примеры без кавычек, хотя не должно быть привязки к конкретному языку программирования (а по факту дан JS). Но, подразумевается, что пользователь знаком с основными принципами построения JSON и добавит кавычки сам, если его язык программирования не делает это автоматом.

JSON в С++ Запись данных в формате JSON
Библиотека ArduinoJSON GitHub - bblanchon/ArduinoJson: C++ JSON library for IoT. Simple and efficient.
В JS все немного запутанней для понимания (новички часто путают JS объекты и JSON, потому что они ведут себя очень похоже), зато проще с практической точки зрения - необязательны кавычки для [inline]key[/inline], после последнего элемента допускается запятая и т.д.
 

pvvx

Активный участник сообщества
Для [inline]value[/inline] кавычки используются только для передачи строковых данных: [inline]{"status":1}[/inline] передаст [inline]int 1[/inline], а [inline]{"status":"1"}[/inline] передаст строку [inline]1[/inline], независимо от того, в JS это или нет.
В документации IoT Manager примеры без кавычек, хотя не должно быть привязки к конкретному языку программирования (а по факту дан JS). Но, подразумевается, что пользователь знаком с основными принципами построения JSON и добавит кавычки сам, если его язык программирования не делает это автоматом.
Тогда где надо [inline]"[/inline] а где нет для чисел?
Это зависит от самого IoT Manager, но ни слова об этом нигде нет. Только гадать. :)
 

Victor

Administrator
Команда форума
Тогда где надо " а где нет для чисел?
Должно быть без разницы, т.к. IoT Manager сам, там где требуется, пытается сделать [inline]parseInt[/inline] для строковых данных.
А вообще зависит от виджета. [inline]anydata[/inline] отображает данные как есть и ему без разницы строка там или число. А вот chart ожидает что прилетит [inline]int[/inline] или массив из [inline]int[/inline]
 

pvvx

Активный участник сообщества
Обычно интерпретатор смотрит, если ему нужно числовой аргумент, а переменная строковая, то переводит в числовое значение. Там тоже не всё гладко – формат числа бывает разный (например восьмеричный). Кароче понаписали кривых языков с неявным синтаксисом. :)
Printfв C/C++ тоже любит издеваться над пользователями – “\0x12abcdef” воспринимается по разному, и только в последние годы стали вписывать для конкретного компилятора как он это сожрет :)
 
Последнее редактирование:

Victor

Administrator
Команда форума
Кароче понаписали кривых языков с неявным синтаксисом.
Да уж, но есть и еще проблема. IoT Manager исполняется в Android WebView (у Apple тоже есть аналогичная штука), которых тысячи реализаций в зависимости от версии Android и модели смартфона, поэтому могут даже не все функции JS поддерживаться (т.е. ситуация намного хуже, чем с браузерами). Частично эти проблемы я решаю подключением полифиллов, но и это закрывает не все проблемы.
 

roiksv

Member
Если есть-не пинайте и скажите где и как. Отображение виджета в закладке, но не на общей станице. Или нужна отдельная страница например "Настройки" куда валить виджеты, которые не хочешь постоянно видеть (например есть датчик DHT11, данные влажности с которого влияют на работу вытяжки. Двумя виджетами я могу задать верхний-нижний пороги срабатывания вытяжки, но я не хочу видеть эти виджеты постоянно)
 

Victor

Administrator
Команда форума
но я не хочу видеть эти виджеты постоянно
В настройках приложения отключите отображение страницы "Все" и раскидайте виджеты на 2 страницы - первая для параметров, которые нужны постоянно, а вторая, как вы и предлагали, "настройки"
хотелось бы получить форматный вывод значения для виджета anydata
Пробуйте в новой бета-версии Анонсы новых версий IoT Manager
 

Browny

New member
Зашёл сказать спасибо за before и after!
Заливаю прошивку, запускаю IoTmanager - и тут анонс новой версии! before и after!!! Ура! :)
 

Browny

New member
Протестировал, работает!
Код:
{"id":2,"page":"LivingRoom","pageId":10,"topic":"/IoTmanager/DVES_06FD8A/sensor1","widget":"anydata","status":"0.00","after":"C","class1":"item no-border","style2":"font-size:18px;float:left","descr":"Sensor A","class3":"balanced","style3":"font-size:18px;font-weight:bold;float:right"}
Screenshot_2017-03-14-00-09-22_ru.esp8266.iotmanager[1].png
 

Browny

New member
@Victor, а можно ли в status или before/after вставить представление unicode-символа? Очень хочется использовать символ градуса, да и других востребованных символов хватает...
 
Сверху Снизу