Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

IoT Manager - сообщаем о багах

Тема в разделе "IoT Manager – мобильное приложение", создана пользователем Victor, 13 фев 2016.

Метки:
  1. Mоnk

    Mоnk Читатель

    Сообщения:
    130
    Симпатии:
    8
    @Victor,
    А можно ли в скетче №2 (новом) вместо, или вместе с
    if (WiFi.status() == WL_CONNECTED)
    пинговать какой либо ресурс в сети, чтобы устройство понимало, что интернет доступен, и можно работать с облаком.
    Эксперименты показали, что при пропадании мобильного интернета (думаю что и с проводным то же самое), программа видит ВиФи от роутера, пытается обмениваться информацией, не получает ответ, и жутко тормозит.
     
  2. Mоnk

    Mоnk Читатель

    Сообщения:
    130
    Симпатии:
    8
    И как установить IoT Manager на 6-ю иОС? Валяется 3-й аЙфон без дела...
     
  3. Victor

    Victor Administrator Команда форума

    Сообщения:
    2.212
    Симпатии:
    387
    лучше проверять коннект с брокером, поставить счетчик на неудачный коннект и перезапускать ESP после 3 неудач. Но ваш вариант тоже можно сделать, хотя кода будет больше
    минимум iOS 7 требуется IoT-Manager on the App Store и поддерживатеся только WebSockets
     
  4. Mоnk

    Mоnk Читатель

    Сообщения:
    130
    Симпатии:
    8
    Бесполезное Яблоко...
    Ткните носом в пример... Мне почему-то только АТ команды попадаются.
     
  5. Victor

    Victor Administrator Команда форума

    Сообщения:
    2.212
    Симпатии:
    387
  6. Victor

    Victor Administrator Команда форума

    Сообщения:
    2.212
    Симпатии:
    387
    кстати тормоза вполне могут быть из-за таймаутов в DNS, поэтому попробуйте по IP адресам сделать
     
  7. Mоnk

    Mоnk Читатель

    Сообщения:
    130
    Симпатии:
    8
    Не, не помогло. Ping сам по себе тормозит. Секунд от трёх до шести. Вычеркиваем.
     
  8. Uhma

    Uhma Новичок

    Сообщения:
    10
    Симпатии:
    1
    То есть Вы предлагаете создать еще один топик с единым конфигом для всех виджитов или подтопики с кучей конфигов при этом оставив и текущий вариант с последовательным обменом конфигами дабы не потерять совместимость ? Мне кажется это какие то костыли получаются, если не затруднить опишите идею поподробней , а также почему не нравится вариант с сохранением конфига в андройд приложении ? это же логичней ,кому надо поставил галку сохранить и не обновлять конфиги, кому не надо пусть грузит каждый раз, хотя к чему вообще их каждый раз грузить , только лишний раз интерфейс перерисовывать при неудачной случайной прокрутки экрана в низ (кто то ранее уже высказывал недовольство по этому поводу), это же нужно только на этапе отладки и построения системы, я бы вообще вынес функцию получения конфигурации от устройств отдельной кнопкой куда нибудь в настройки.
     
  9. Victor

    Victor Administrator Команда форума

    Сообщения:
    2.212
    Симпатии:
    387
    да, подтопики. т.е. сейчас мы используем /IoTmanager/+/+/status и /IoTmanager/+/+/control и добавляем /IoTmanager/+/+/config, т.е. отдельный конфиг для каждого виджета в свой топик - тогда без проблем можно будет отправлять конфиги с retain флагом. Добавить это в код - пара пустяков. При этом по-старому тоже будет работать.
    Вариант с сохранением тоже возможен, но кода существенно больше (сейчас все операции завязаны на прием конфига - придется пересматривать всю логику работы, а это и отладка и возможные глюки)
    в настройках просто отключите pull to refresh
    я вас понимаю, но и вы поймите: сколько людей - столько и мнений. То, что нравится одним - может не понравится другим. Поэтому я стараюсь не изменять сути существующей логики, а расширять возможности без потери совместимости. Поэтому посмотрите в сторону профилей - это средство было сделано как раз для того, чтобы не отправлять конфиги с девайсов вообще. Рисование интерфейса на телефоне как в Blynk мне было всегда не по душе, поэтому есть внешний загружальщик JSON файлов, которые можно поправить в любом текстовом редакторе. Идея в том, что со временем сделать онлайн визуальный редактор виджетов, возможность поделиться виджетами с другими пользователями и т.д.
    Сейчас на профили к сожалению нет документации (только краткая инструкция на английском), но это связано большей частью с тем, что русскоязычная часть пользователей не сильно рвется стать тестировщиками новых функций и большая часть моего общения с пользователями происходит по почте на английском. Если бы тестирование и обсуждение новых функций происходило здесь на форуме, то это бы сняло часть вопросов по функционированию новых фич.
     
  10. Uhma

    Uhma Новичок

    Сообщения:
    10
    Симпатии:
    1
    Ваша идея понятна, я то как раз и предлагаю максимально полностью сохранить текущую логику работы и протокол обмена именно с точки зрения написания скетчей, так как для тех кому эта функция не нужна просто не будут ей пользоватся ивсе останется как было, Вы же предлагаете создать два варианта отправки конфигирации ,что создаст лишнюю путаницу и добавит глючности.
    Закрытасть и ограниченость Blynk мне тоже не по душе, именно за широту возможности и гибкость я для своих поделок выбрал IoT Manager , а вот изучение JSON сильно повышает планку вхождения в проект для новичков и уж совсем не входило в мои планы...
    Честно говоря как использовать профили я не понял вообще, было бы описание на русском хотя бы принцип без подробностей ,не как создать и применить , а именно сам механизм.
    Это отличная идея !
     
  11. Victor

    Victor Administrator Команда форума

    Сообщения:
    2.212
    Симпатии:
    387
    да не, там все предельно просто (уж попроще Arduino JSON это точно)
    вот виджет в JSON в профайле
    Код (Text):
    1. [{
    2.     "name": "My home",
    3.     "id": 1,
    4.     "pages": [{
    5.         "pageId": 1,
    6.         "pageName": "Kitchen"
    7.     }],
    8.     "widgets": [{
    9.         "descr": "Temp",
    10.         "id": 1,
    11.         "idx": 100,
    12.         "pageId": 1,
    13.         "widget": "anydata",
    14.         "topic": "domoticz/out",
    15.         "class1": "item no-border",
    16.         "style2": "font-size:20px;float:left",
    17.         "style3": "font-size:40px;font-weight:bold;float:right"
    18.     }],
    19.     "active": true
    20. }]
    21.  
    это и есть JSON, а именно такие конфиги вы и собираете в скетчах, только приходится высчитывать кавычки и т.д., т.к. в Arduino это делать неудобно.
    А тут редактируем обычный файл в любом текстовом редакторе.
    Есть еще такое такое решение легкого конструирования конфигов. Идея была как раз снизить порог вхождения в тему.

    Рассказываю про профайлы.
    Изначально тоже была идея снизить порог вхождения, чтобы IoT Manager можно было использовать вообще без программирования. Оказалось вполне такое возможно. Есть такая прошивка ESPEasy (позволяет подключить кучу разных сенсоров прямо через свой веб интерфейс - скетчи править не надо)
    И хотим отображать данные с устройств, которые шлют в MQTT одно сообщение (например, температуру) и нельзя настроить логику отправки конфига по HELLO. (это не только ESPEasy, а любой сенсор, совместимый с Domoticz)

    Берем за основу протокол DomoticzMQTT, смысл которого заключается в отправке сообщений вида {"idx":100, "svalue": 22} в топик domoticz/in, IoT Manager подписывается на этот топик и перехватывает сообщения. Теперь нужно эти данные оформить в виджет. Можно конфиг заранее загрузить "со стороны". Вот profiler именно это и делает: отправляет через MQTT в IoT Manager конфиги наших виджетов. IoT Manager их хранит, между ними можно переключаться (активировать один или несколько профилей). Т.е. профиль это набор виджетов, которые мы прорисовываем при старте, а когда прилетят данные, то вставляем их в виджет в соответствии с заданным в конфиге оформлением. Т.е. вы можете отправлять профиль и вручную через любой MQTT клиент, но profiler проверяет валидность конфига и освобождает от ручных операций. У меня есть один пользователь из Испании, который написал для себя в несколько строчек утилиту на python, которая делает почти тоже самое (только не проверяет вроде)
    А сами файлы конфигов вы делаете в любом текстовом редакторе (я делаю в Sublime Text 3 - он раскрашивает и выравнивает для красоты и читабельности).

    Вот и предлагаю: раз механизм хранения конфигов уже есть в IoT Manager (с включением/выключение групп виджетов, т.е. профилей), то попробуйте его использовать
     
    Uhma нравится это.
  12. Victor

    Victor Administrator Команда форума

    Сообщения:
    2.212
    Симпатии:
    387
    @Uhma, оказывается Gerardo Vaquerizo Fernandez тоже читает наш форум и предложил мне попробовать убедить вас использовать профили :)
    Кстати, Gerardo Vaquerizo Fernandez является автором переводов IoT Manager на испанский и немецкий.
    Привожу текст его письма целиком (легко переводится в Google Translate, если вы не хотите читать на английском) и скрипт на python, который он прислал
     

    Вложения:

  13. Uhma

    Uhma Новичок

    Сообщения:
    10
    Симпатии:
    1
    Виктор, благодарю за столь развернутый и подробный ответ, похоже действительно профили это то что мне нужно, к сожалению запустить оба iotManagerProfilerа не удалось , хотя я установил node-v6.9.1 и python-3.5.2. (вылетают с ошибкой).
    Попробовал в ручную отправить строку конфига типа :{"id":"1","page":"ADC","descr":"COUNT","widget":"small-badge","topic":"/IoTmanager/dev01 ESP8266 test/COUNT","badge":"badge-balanced"} в топик /IoTmanager/exchange/output или domoticz/in, так IoT Manager ругается "Bad data from Domoticz" или не реагирует , подскажите последовательность действий для ручной загрузки профиля и пример простейшего рабочего профиля в виде строки для отправки на MQTT.
     
  14. Victor

    Victor Administrator Команда форума

    Сообщения:
    2.212
    Симпатии:
    387
    может я вам помогу profiler запустить - это будет намного проще, чем вручную, уж поверьте...

    1. скачиваем с гитхаба zip https://github.com/4refr0nt/iot-manager-profiler/archive/master.zip и распаковываем в корень диска C
    2. запускаем Пуск - Программы - Выполнить cmd.exe
    3. в командной строке вводим cd \iot-manager-profiler-master
    4. затем npm i - тут пройдет какое-то время (скачивает нужные пакеты)
    5. в любом текстовом редакторе открываете config.js из папки iot-manager-profiler-master и заполняете своими данными host, port, username, password (теми же, что прописаны в IoT Manager)
    6. Загрузим example1.json в IoT Manager (IoT Manager должен быть запущен на телефоне, подключен к брокеру и быть на переднем плане) вводим команду node main.js -c ./config -s ./profiles/example1.json
    7. На телефоне должно выйти предупреждение о том, что мы загружаем профили из внешнего источника (другие сохраненные профили перезапишутся), мы жмем YES
    8. Профили загружены (1 профиль и в нем 1 виджет), переходим на главную
    9. Вручную с компьютера отправьте в топик domoticz/in следующие данные { "idx": 100, "svalue": 10} или прошейте ESPEasy добавьте любой датчик и присвойте ему idx 100.
     
    Uhma нравится это.
  15. Uhma

    Uhma Новичок

    Сообщения:
    10
    Симпатии:
    1
    Еще раз огромное спасибо, все получилось. Я просто не думал что это все с командной строки работает, надеялся что есть какая то оболочка, уж больно хотелось скорее увидеть какой то результат , теперь буду вникать.
     
    Victor нравится это.
  16. Victor

    Victor Administrator Команда форума

    Сообщения:
    2.212
    Симпатии:
    387
    так уж сложилось, что IoT Manager это приложение больше для гиков (и членов их семей в режиме EndUser mode), чем для обычных людей
     
  17. Mоnk

    Mоnk Читатель

    Сообщения:
    130
    Симпатии:
    8
    Недостаточное знание предмета очень угнетает.
    Продолжаем борьбу с зависанием в отсутсвии интернета.
    Перенес кусок кода
    вот этот (раскрыть)
    Код (C):
    1.   if (WiFi.status() == WL_CONNECTED)
    2.   {
    3.       lcd.setCursor(23, 0);
    4.       lcd.write(244);
    5.  
    6.     if (!client.connected())
    7.     {
    8.       bool success;
    9.       if (mqttuser.length() > 0)
    10.       {
    11.         success = client.connect( MQTT::Connect( deviceId ).set_auth(mqttuser, mqttpass) );
    12.       }
    13.       else
    14.       {
    15.         success = client.connect( deviceId );
    16.       }
    17.       if (success)
    18.       {
    19.         pubConfig();
    20.         client.set_callback(onMessageArrived);
    21.  
    22.         client.subscribe(prefix);                 // for receiving HELLO messages
    23.         client.subscribe(prefix + "/ids");        // for receiving IDS  messages
    24.         client.subscribe(prefix + "/" + deviceId + "/+/control");   // for receiving GPIO control messages for ALL widgets
    25.       }
    26.       else
    27.       {
    28.         delay(300);
    29.       }
    30.     }
    31.  
    32.     if (client.connected())
    33.     {
    34.       if (needPubConfig)
    35.       {
    36.         pubConfig();
    37.       }
    38.  
    39.   yield();
    40.  
    41.       if (needControlGPIO)
    42.       {
    43.         controlGPIO();
    44.       }
    45.  
    46.   // ========================== publish =============================
    47.  
    48.         client.publish(sTopic[3] + "/status", "{\"status\":\"" + String(analogRead(pin[3]) * 0.09765625)+ " %\"}" );  // widget 3
    49.         client.publish(sTopic[4] + "/status", "{\"status\":\"" + DHT22_tS + " °C\"}" );         // widget 4
    50.         client.publish(sTopic[5] + "/status", "{\"status\":\"" + DHT22_hS + "  %\"}" );         // widget 5
    51.         check_sT6();
    52.  
    53.       client.loop();
    54.     }
    55.   }
    56.   else
    57.   {
    58.       lcd.setCursor(23, 0);
    59.       lcd.write(16);
    60.   }

    из loop() в отдельную функцию, которая запускается раз в 10 секунд. В промежутках между работой client.loop(); (где то прочитал, что она еще и облако попутно пингует) появилась возможность в отсутствии интернета при подключенном ВиФи управлять ЕСПэшкой с помощью подключенных к ней кнопок.
    Скажите, а в "рабочем" скетче №2 функция
    Код (C):
    1. // send confirmation
    2. void pubStatus(String t, String payload)
    3. {
    4.     if (client.publish(t + "/status", payload))
    5.     {
    6.        //Serial.println("Publish new status for " + t + ", value: " + payload);
    7.     }
    8.     else
    9.     {
    10.        //Serial.println("Publish new status for " + t + " FAIL!");
    11.     }
    12.   delay(PUB_DELAY);
    13. }
    нужна?
     
  18. Uhma

    Uhma Новичок

    Сообщения:
    10
    Симпатии:
    1
    Однако профили не решили задачу, все уперлось в другое ограничение ( профильные виджиты работают только с одним входящим топиком domoticz/in и получить несколько значений с retain флагом не могут ),какая то ущербная схема.
    Возможность прописывать в профильных настройках еще и входящий топик решило бы проблему.
    Или же я в чем то не разобрался:(?
    Вот эту бы эту функцию в профили добавить.
    И вообще зачем было профили так жестко привязывать к формату domoticz ?
     
  19. Victor

    Victor Administrator Команда форума

    Сообщения:
    2.212
    Симпатии:
    387
    Не совсем понял ваш вопрос. Если в коде есть ее вызов, то нужна, а если вызовов нет, значит можно и без нее :)
    чтобы снизить порог "вхождения в тему" - берем любое Domoticz-совместимое решение и получаем данные на телефоне.
    Давайте вместе сформулируем что нужно и я это запилю в следующей версии. Пока предварительно 2 варианта:
    1. Добавить подписку на /IoTmanager/device/sensor/config в существующий протокол (на мой взгляд вполне норм решение)
    2. В профили добавить возможность указывать топик (мне это решение пока нравится меньше, т.к. у нативного MQTT клиента пока много недоработок и подписка/отписка на топики - одна из них, с WebScokets клиентом все ок)
    Ну и совместно давайте сделаем пример с deep sleep
     
  20. Uhma

    Uhma Новичок

    Сообщения:
    10
    Симпатии:
    1
    Не понимаю, что такое "нативный клиент", проблем с подпиской/отпиской вроде пока не замечал.
    Меня как бы устроит любой вариант, хотя и не совсем понимаю алгоритма первого варианта решения, и как при этом будет обеспечена совместимость со старым протоколом. Могу предположить что , при первичном включении андройд обменяется с esp конфигами по старинке по HELLO и в соответствии с полученными данными подпишется на дополнительные топики /IoTmanager/+/+/config , далее будет их парсить , так?
    Получается как то сложно выполнимо если учесть , что обмен будет сильно разнесен по времени и первичное включение надо делать с обоими устройствами в сети и потом как то отличать эти состояния, пробуждение из сна ESP это по сути перезагрузка. Так же и со стороны андройда , он же не помнит на какие дополнительные подтопики ему надо подписаться, значит тоже надо хранить на брокере ,это еще один топик со списком сенсоров делать или какую то особую команду?
    Вариант с профилем решил бы эту проблему проще так как заранее будет известно какие топики парсить , и это ни как не нарушит работу с domoticz.
    Я предлагаю добавит в профиль возможность указывать входящий и исходящий топик для каждого виджета , если к примеру не указывать то по умолчанию будет стандартно для domoticz.
    А в идеале хорошо бы если допустим в профиле не указывать параметр "idx" то этот виджет работает в формате команд IoTmanager ( status ,control) соответственно прописываем только родительский топик /IoTmanager/+/+/ ,a если указать то в формате domoticz со всеми вытекающими, как Вам такой вариант?
    Я как бы Ваши примеры пока ковыряю, да и в конце кода добавить [ ESP.deepSleep(600*1000000); // секунды*1000000] и кинуть перемычку с GPIO16 на RST думаю каждый и без примеров сможет.
    К тому же в режимах WAKE_RF_DEFAULT, WAKE_RFCAL, WAKE_NO_RFCAL, WAKE_RF_DISABLED я еще не разобрался.
     

Поделиться этой страницей