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

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

Mоnk

Member
25 16:45:40 GMT+0300 (MSK) Parsing config data from device "Home-20-1", widget id=51
26 16:45:40 GMT+0300 (MSK) Update config for device: Home-20-1, widget id: 51
27 16:45:40 GMT+0300 (MSK) Parsing: all steps done.
28 16:45:40 GMT+0300 (MSK) Parsed status: for widget id=51 from /Eagle-owl/Home-20-1/DHT22_t/status -> {"status":"+24.7 °C"
29 16:45:40 GMT+0300 (MSK) Parsing config data from device "Home-20-1", widget id=61
30 16:45:40 GMT+0300 (MSK) Update config for device: Home-20-1, widget id: 61
31 16:45:40 GMT+0300 (MSK) Parsing: all steps done.
32 16:45:40 GMT+0300 (MSK) Parsed status: for widget id=61 from /Eagle-owl/Home-20-1/DHT22_tZ/status -> {"status":"+23.8 °C"
33 16:45:41 GMT+0300 (MSK) Parsing config data from device "Home-20-1", widget id=51
34 16:45:41 GMT+0300 (MSK) Update config for device: Home-20-1, widget id: 51
35 16:45:41 GMT+0300 (MSK) Parsing: all steps done.
36 16:45:41 GMT+0300 (MSK) Parsed status: for widget id=51 from /Eagle-owl/Home-20-1/DHT22_t/status -> {"status":"+24.7 °C"
37 16:45:41 GMT+0300 (MSK) Parsing config data from device "Home-20-1", widget id=61
38 16:45:41 GMT+0300 (MSK) Update config for device: Home-20-1, widget id: 61
39 16:45:41 GMT+0300 (MSK) Parsing: all steps done.
40 16:45:41 GMT+0300 (MSK) Parsed status: for widget id=61 from /Eagle-owl/Home-20-1/DHT22_tZ/status -> {"status":"+23.8 °C"
41 16:45:41 GMT+0300 (MSK) Parsing config data from device "Home-20-1", widget id=51
42 16:45:41 GMT+0300 (MSK) Update config for device: Home-20-1, widget id: 51
43 16:45:41 GMT+0300 (MSK) Parsing: all steps done.
44 16:45:41 GMT+0300 (MSK) Parsed status: for widget id=51 from /Eagle-owl/Home-20-1/DHT22_t/status -> {"status":"+24.7 °C"
45 16:45:41 GMT+0300 (MSK) Parsing config data from device "Home-20-1", widget id=61
46 16:45:41 GMT+0300 (MSK) Update config for device: Home-20-1, widget id: 61
47 16:45:41 GMT+0300 (MSK) Parsing: all steps done.
Почему то {"status":"+24.7 °C" не имеет закрывающей фигурной скобки.
 

Mоnk

Member
@Victor, а можно во второй пример IDS вернуть? У меня образования не хватает.
#include <WiFiClientSecure.h>
.....................
const char* host = "onesignal.com";
WiFiClientSecure httpClient;
const int httpsPort = 443;
String url = "/api/v1/notifications";

void push(String msg)
{
if (ids.length() == 0)
{
//Serial.println("PUSH: ids not received, push failed");
return;
}
if (!httpClient.connect(host, httpsPort))
{
//Serial.println("PUSH: connection failed");
return;
}
String data = "{\"app_id\": \"8871958c-5f52-11e5-8f7a-c36f5770ade9\",\"include_player_ids\":[\"" + ids + "\"],\"android_group\":\"IoT Manager\",\"contents\": {\"en\": \"" + msg + "\"}}";
httpClient.println("POST " + url + " HTTP/1.1");
httpClient.print("Host:");
httpClient.println(host);
httpClient.println("User-Agent: esp8266.Arduino.IoTmanager");
httpClient.print("Content-Length: ");
httpClient.println(data.length());
httpClient.println("Content-Type: application/json");
httpClient.println("Connection: close");
httpClient.println();
httpClient.println(data);
httpClient.println();
}
.....................
client.subscribe(prefix + "/ids");
......................
где то в коде втавил:
String msg = "Вентиляция " + String(newValue) + ")";
push(msg);

Не хватает чего-то типа:
(sub.topic() == prefix + "/ids")
ids = sub.payload_string();
 

Mоnk

Member
@Victor
У меня во втором примере не получается "на лету" менять
descr [0] = "Что-то"; на descr [0] = "Другое что-то";
На экране показывается только "Что-то" из дефолта.
Код:
  id        [0] = "5";      // ===== строка в менеджере
  page      [0] = room;
  pageId    [0] = 2;        // ===== закладка в менеджере
  descr     [0] = "Свет";
  widget    [0] = "toggle";
  pin       [0] = 12;       // ===== Свет
  defaultVal[0] = OFF;
  inverted  [0] = true;
  sTopic    [0] = prefix + "/" + deviceId + "/light0";
  color     [0] = "\"color\":\"green\"";               // black, blue, green, orange, red, white, yellow (off - grey)
  iconStyle [0] = "\"iconStyle\":\"display:none\"";
 

Victor

Administrator
Команда форума
У меня во втором примере не получается "на лету" менять
Во-первых не все виджеты поддерживают измение на "лету" (к сожалению, все виджеты я не тестировал именно в таком контексте). Те виджеты, которые точно поддерживают, содержат упоминание об этом в документации
Во-вторых обязательно передавать ID вместе с этим "другое что-то"
 

Mоnk

Member
Во-вторых обязательно передавать
Ну да, ну да...
Только сейчас сообразил, что надо не только менять содержимое descr [0], но и обновлять thing_config[0], который затем необходимо публиковать.
Спасибо, заработало!
А как насчет Push уведомлений?
 

Etrubin

New member
Добрый день!
пробую разобраться с примером Heater.
Если в PlatformIO запускаю загрузить , то все нормально. Если разархивирую екзешники в \platformio\heater\prebuild\bin и он начинает билдить виджеты заново, то получаю половину потеряных в мобильном приложении(как на картинке). В логах мобильного приложения появляются такие сообщения. (видимо на месте где он пытается подгрузить виджет)
12:15:33 Error parsing JSON arrived message from /IoTmanager/heater/config
что я не доделал?
Спасибо
 

Вложения

Victor

Administrator
Команда форума
что я не доделал?
я на всякий случай пересобрал это приложение и проверил - все ок (на показания не обращайте внимание - не подключен датчик)
Screenshot_2017-01-25-02-50-19.jpg
попробуйте удалить все в папке [inline]prebuild/temp[/inline] и включить тему с темным фоном
 

Mоnk

Member
И на "двушке" можно творить чудеса. Но упаришься.
Код:
  id        [6] = "55";      // ===== строка в менеджере
  page      [6] = room;
  pageId    [6] = 50;        // ===== закладка в менеджере
  //descr     [6] = "Минус";
  widget    [6] = "simple-btn";
  sTopic    [6] = prefdev + "/B_Minus";
  //badge     [3] = "\"badge\":\"badge-calm\"";                  // see http://ionicframework.com/docs/components/#colors
  class1    [6] = "\"class1\":\"item no-border col-xs-4\"";
  style1    [6] = "\"style1\":\"\"";
  class2    [6] = "\"class2\":\"balanced\"";
  style2    [6] = "\"style2\":\"font-size:20px;float:left;padding-top:10px;font-weight:bold;\"";
  class3    [6] = "\"class3\":\"button button-balanced icon ion-minus\"";
  style3    [6] = "\"style3\":\"height:70px;\"";

  id        [4] = "56";      // ===== строка в менеджере
  page      [4] = room;
  pageId    [4] = 50;        // ===== закладка в менеджере
  //descr     [4] = "Нагревать до";
  widget    [4] = "anydata";
  sTopic    [4] = prefdev + "/setpoint";
  badge     [4] = "\"badge\":\"badge-calm\"";                  // see http://ionicframework.com/docs/components/#colors
  class1    [4] = "\"class1\":\"item no-border col-xs-4\"";
  class3    [4] = "\"class3\":\"text-center\"";
  style3    [4] = "\"style3\":\"font-size:40px;font-weight:bold;line-height:2em;height:70px;\"";
  //style     [4] = "\"style\":\"font-size:150%;\"";

  id        [3] = "57";      // ===== строка в менеджере
  page      [3] = room;
  pageId    [3] = 50;        // ===== закладка в менеджере
  //descr     [3] = "Плюс";
  widget    [3] = "simple-btn";
  sTopic    [3] = prefdev + "/B_Plus";
  //badge     [3] = "\"badge\":\"badge-calm\"";                  // see http://ionicframework.com/docs/components/#colors
  class1    [3] = "\"class1\":\"item no-border col-xs-4\"";
  style1    [3] = "\"style1\":\"\"";
  class2    [3] = "\"class2\":\"balanced\"";
  style2    [3] = "\"style2\":\"font-size:20px;float:left;padding-top:10px;font-weight:bold;\"";
  class3    [3] = "\"class3\":\"button button-balanced icon ion-plus\"";
  style3    [3] = "\"style3\":\"height:70px;\"";
  thing_config[3] = "{\"id\":\"" + id[3] + "\",\"page\":\"" + page[3] + "\",\"pageId\":\"" + pageId[3] + "\",\"descr\":\"" + descr[3] + "\",\"widget\":\"" + widget[3] + "\",\"topic\":\"" + sTopic[3] + "\"," + class1[3] + "," + style1[3] + "," + class2[3] + "," + style2[3] + "," + class3[3] + "," + style3[3] + "}";  // DS18B20
  thing_config[4] = "{\"id\":\"" + id[4] + "\",\"page\":\"" + page[4] + "\",\"pageId\":\"" + pageId[4] + "\",\"descr\":\"" + descr[4] + "\",\"widget\":\"" + widget[4] + "\",\"topic\":\"" + sTopic[4] + "\"," + badge[4] + "," + class1[4] + "," + class3[4] + "," + style3[4] + "}";  // setpoint
  thing_config[6] = "{\"id\":\"" + id[6] + "\",\"page\":\"" + page[6] + "\",\"pageId\":\"" + pageId[6] + "\",\"descr\":\"" + descr[6] + "\",\"widget\":\"" + widget[6] + "\",\"topic\":\"" + sTopic[6] + "\"," + class1[6] + "," + style1[6] + "," + class2[6] + "," + style2[6] + "," + class3[6] + "," + style3[6] + "}";  // DS18B20
И проблема при отработке двойного нажатия кнопки.
Screenshot_2017-01-26-23-44-31.png
Выскакивает оповещение об обновлении.
 

Victor

Administrator
Команда форума
И проблема при отработке двойного нажатия кнопки.
это вроде как не баг, а фича :)
Двойной тач (или удерживание? - я уже забыл) включает доп. инфо: сколько времени прошло с момента приема последнего сообщения этого виджета. Просто виджет здесь сильно узкий - всё не входит по ширине.
 

Mоnk

Member
Ибо...
Читаем мануал:
Виджет simple-btn
Это простой, но очень мощный виджет для создания кнопок, имеющий множество настроек. Виджет поддерживает одиночные нажатия, двойные и “длинные” (удерживание кнопки).
Я думал, что счастье есть!
Или все-таки есть? Тогда как обрабатывать двойные и длинные нажатия?
 

Mоnk

Member
Что-то сделал не так с display-value
Код:
String stat         [nWidgets];
String sTopic       [nWidgets];
String color        [nWidgets];
String class1       [nWidgets];
String class2       [nWidgets];
String class3       [nWidgets];
String style        [nWidgets];
String style1       [nWidgets];
String style2       [nWidgets];
String style3       [nWidgets];
String badge        [nWidgets];
String widget       [nWidgets];
String descr        [nWidgets];
String page         [nWidgets];
String pageId       [nWidgets];
String thing_config [nWidgets];
String id           [nWidgets];
String iconStyle    [nWidgets];
String inactive_color       [nWidgets];
String height       [nWidgets];
String digits_count [nWidgets];
int    pin          [nWidgets];
int    defaultVal   [nWidgets];
bool   inverted     [nWidgets];

  id        [4] = "54"; 
  page      [4] = room;
  pageId    [4] = 50;
  //descr     [4] = "Нагревать до";
  widget    [4] = "display-value";
  sTopic    [4] = prefdev + "/setpoint";
  class1    [4] = "\"class1\":\"item no-border col-xs-4\""; // Размер колонки
  style1    [4] = "";
  class2    [4] = "\"class2\":\"assertive\"";
  style2    [5] = "\"style2\":\"font-size:20px;float:left;font-weight:bold;\"";
  class3    [4] = "";
  style3    [4] = "\"style3\":\"float:right;\"";
  height    [4] = "\"height\":\"20\"";
  color    [4] = "\"color\":\"#F10014\"";
  inactive_color    [4] = "\"inactive_color\":\"#414141\"";
  digits_count    [4] = "\"digits_count\":4";
 
  thing_config[4] = "{\"id\":\"" + id[4] + "\",\"page\":\"" + page[4] + "\",\"pageId\":\"" + pageId[4] + "\",\"descr\":\"" + descr[4] + "\",\"widget\":\"" + widget[4] + "\",\"topic\":\"" + sTopic[4] + "\"," + class1[4] + "," + style1[4] + "," + class2[4] + "," + style2[4] + "," + class3[4] + "," + style3[4] + "," + color[4] + "," + height[4] + "," + inactive_color[4] + "," + digits_count[4] + "}";  // setpoint
Цифры не хочет показывать...
Screenshot_2017-01-27-13-35-56.png
 

Mоnk

Member
нужен валидный JSON и
Подскажите, как должна выглядеть строчка без JSON
Код:
widgetConfig : {
  width  : "auto",
  height : 100,
  type   : "Linear",
  titleString: "Thermometer 1",
  unitString : "temp C",
  threshold: 90
}
Пробую
Код:
  id        [0] = "50";
  page      [0] = room;
  pageId    [0] = 50;
  descr     [0] = "Температура";
  stat      [0] = setStatus(DHT22_tS + " °C");
  widget    [0] = "steel";
  sTopic    [0]   = prefdev + "/DHT22_t";
  badge     [0] = "\"badge\":\"badge-calm\"";
  style     [0]   = "\"style\":\"font-size:150%;\"";
- термометр появляется.
Добавляю
Код:
widgetConfig [0] = "\"widgetConfig\":\"{width: \"auto\", height: 100, type: \"Linear\", titleString: \"Thermometer 1\", unitString : \"temp C\", threshold: 90}\"";

  thing_config[0] = "{\"id\":\"" + id[0] + "\",\"page\":\"" + page[0] + "\",\"pageId\":\"" + pageId[0] + "\",\"descr\":\"" + descr[0] + "\",\"widget\":\"" + widget[0] + "\",\"topic\":\"" + sTopic[0] + "\"," + badge[0] + "," + style[0] + "," + widgetConfig[0] + "}";
- термометр пропадает.
 

Victor

Administrator
Команда форума
термометр пропадает
попробуйте вместо
Код:
widgetConfig [0] = "\"widgetConfig\":\"{width: \"auto\", height: 100, type: \"Linear\", titleString: \"Thermometer 1\", unitString : \"temp C\", threshold: 90}\"";
вот так
Код:
widgetConfig [0] = "\"widgetConfig\":{width:\"auto\", height: 100, type: \"Linear\", titleString: \"Thermometer 1\", unitString : \"temp C\", threshold: 90}";
если не получится, то так
Код:
widgetConfig [0] = "\"widgetConfig\":{\"width\":\"auto\", \"height\": 100, \"type\": \"Linear\", \"titleString\": \"Thermometer 1\", \"unitString\" : \"temp C\", \"threshold\": 90}";
,
 
Сверху Снизу