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

Mоnk

Member
Попробовал, не помогло. Пошел путем кривым и непонятным.
Взял AnydataToggle, заставил его работать с виджетом steel, посмотрел в терминале, что модуль "плюёт" в сторону брокера.
Код:
 /Eagle-owl/ADT/config
{
  "id"          : "2",
  "descr"       : "Kitchen lamp",
  "page"        : "Kitchen",
  "pageId"      : 10,
  "widget"      : "steel",
  "topic"       : "/Eagle-owl/ADT/steel1",
  "widgetConfig" : {
  "width"  : "auto",
  "height" : 100,
  "type"   : "Linear",
  "titleString": "Thermometer 1",
  "unitString" : "temp C",
  "threshold": 90
}
}
В ручную набил строчку
Код:
  thing_config[0] = "{ \"id\" : \"2\", \"descr\" : \"Температура\", \"page\" : \"Стенд\", \"pageId\" : 50, \"widget\" : \"steel\", \"topic\" : \"/Eagle-owl/Termometr/DHT22_t\", \"widgetConfig\" : { \"width\" : \"auto\", \"height\" : 100, \"type\" : \"Linear\", \"titleString\" : \"Температура\", \"unitString\" : \"°C\", \"threshold\": 10, \"minValue\" : -30, \"maxValue\" : 30 } }";
И о! Чудо!Screenshot_2017-01-31-12-55-46.png
Из всего этого процесса делаю выводы:
1. Нет ничего не возможного.
2. Намеки на правильный путь помогают только людям с головой.
3. Надо быть очень внимательным и неторопливым, смешивая стили (ибо нехватка экранов, кавычек и запятых вызывает у парсера смех и нежелание работать).
Третий тезис я частично отношу к примеру номер РАЗ widgets/steel/...
 

Victor

Administrator
Команда форума
Надо быть очень внимательным и неторопливым, смешивая стили (ибо нехватка экранов, кавычек и запятых вызывает у парсера смех и нежелание работать).
Это трудно и для меня тоже, и особенно противно высчитывать кавычки.
Поэтому я сделал вот этот пример, где виджеты собираются сами из читабельного json и превращаются в .h файл, который вы просто подключаете к проекту
iot-manager-demo/platformio/heater at master · 4refr0nt/iot-manager-demo · GitHub
смотрите папку [inline]prebuild/json[/inline]
 

Mоnk

Member
смотрите папку
Ну да, собственно она одинаковая с подопытным кроликом AnydataToggle...
Просто в примере steel
Код:
{
id     :"1",
descr  :"Steel 1",
widget :"steel",
topic  :prefix + "/" + deviceID + "/steel1",
widgetConfig : {
  width  : "auto",
  height : 100,
  type   : "Linear",
  titleString: "Thermometer 1",
  unitString : "temp C",
  threshold: 90
}
все названия без кавычек. И topic гонит "как есть": prefix + "/" + deviceID + "/steel1" Я кавычки поставил, topic прописал вручную, прогнал скриптом, посмотрел выхлоп в сторону брокера в терминале, ну и по образу и подобию второго примера набил строчку в эскиз. Теперь хоть пришло понимание, как это работает.
Кстати, скрипт ругается на отсутствие msys-1.0.dll, но работает.
Я путь то прописал до папки bin, но машинку не перезагружал.
Но знаний все равно не хватает. Почему цифры влево и вверх уползают при увеличении значения height в виджете display-value?
Screenshot_2017-01-31-16-59-27.png
Код:
  id        [3] = "53";      // ===== строка в менеджере
  page      [3] = room;
  pageId    [3] = 50;        // ===== закладка в менеджере
  //descr     [3] = "Минус";
  widget    [3] = "simple-btn";
  sTopic    [3] = prefdev + "/B_Minus";
  //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-calm button-fab button-outline icon ion-minus\"";
  style3    [3] = "\"style3\":\"height:80px;width:80px;\"";

  id        [4] = "54";
  page      [4] = room;
  pageId    [4] = 50;
  stat      [4] = setStatus(String(setpoint) + "°");
  widget    [4] = "display-value";
  sTopic    [4] = prefdev + "/setpoint";
  class1    [4] = "item no-border col-xs-4"; // Размер колонки
  class3    [4] = "text-center";
  style3    [4] = "float:right;";

  id        [5] = "55";      // ===== строка в менеджере
  page      [5] = room;
  pageId    [5] = 50;        // ===== закладка в менеджере
  //descr     [5] = "Плюс";
  widget    [5] = "simple-btn";
  sTopic    [5] = prefdev + "/B_Plus";
  //badge     [5] = "\"badge\":\"badge-calm\"";                  // see http://ionicframework.com/docs/components/#colors
  class1    [5] = "\"class1\":\"item no-border col-xs-4\""; // Размер колонки
  style1    [5] = "\"style1\":\"\"";
  class2    [5] = "\"class2\":\"balanced\"";
  style2    [5] = "\"style2\":\"font-size:20px;float:right;padding-top:10px;font-weight:bold;\"";
  class3    [5] = "\"class3\":\"button button-assertive button-fab button-outline icon ion-plus\"";
  style3    [5] = "\"style3\":\"height:80px;width:80px;\"";

  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] + "}";  // Минус
  thing_config[4] = "{\"id\":\"" + id[4] + "\",\"page\":\"" + page[4] + "\",\"pageId\":" + pageId[4] + ",\"widget\":\"" + widget[4] + "\",\"topic\":\"" + sTopic[4] + "\",\"class1\":\"" + class1[4] + "\",\"class3\":\"" + class3[4] + "\",\"style3\":\"" + style3[4] + "\",\"height\":\"60\",\"color\":\"#F10014\",\"inactive_color\":\"#414141\",\"digits_count\":2}"; // setpoint
  thing_config[5] = "{\"id\":\"" + id[5] + "\",\"page\":\"" + page[5] + "\",\"pageId\":\"" + pageId[5] + "\",\"descr\":\"" + descr[5] + "\",\"widget\":\"" + widget[5] + "\",\"topic\":\"" + sTopic[5] + "\"," + class1[5] + "," + style1[5] + "," + class2[5] + "," + style2[5] + "," + class3[5] + "," + style3[5] + "}";  // Плюс
 

Victor

Administrator
Команда форума
все названия без кавычек
потому что там не JSON, а объект JavaScript - там мягче правила (даже запятую после последнего элемента можно не убирать
Почему цифры влево и вверх уползают при увеличении значения height в виджете display-value
ну вот такой вот загадочный HTML. Когда используете "float" там всякое бывает. Я здесь по HTML все смотрю
 

Mоnk

Member
Урок прошел удачно.
Screenshot_2017-02-01-17-06-44.png
Код:
  id        [3] = "53";
  page      [3] = room;
  pageId    [3] = 50;
  widget    [3] = "simple-btn";
  sTopic    [3] = prefdev + "/B_Minus";
  class1    [3] = "item no-border col-xs-4"; // Размер колонки
  class2    [3] = "balanced";
  class3    [3] = "button button-calm button-fab button-outline icon ion-minus";
  style3    [3] = "height:80px;width:80px;";

  id        [4] = "54";
  page      [4] = room;
  pageId    [4] = 50;
  stat      [4] = setStatus(String(setpoint) + "°");
  widget    [4] = "display-value";
  sTopic    [4] = prefdev + "/setpoint";
  class1    [4] = "item no-border col-xs-4"; // Размер колонки 
  style1    [4] = "position: relative; height: 80px;"; // Основной блок
  class3    [4] = "text-center";
  style3    [4] = "position: absolute; left: 0px; top: 29px;"; // Цифры

  id        [5] = "55";
  page      [5] = room;
  pageId    [5] = 50;
  widget    [5] = "simple-btn";
  sTopic    [5] = prefdev + "/B_Plus";
  class1    [5] = "item no-border col-xs-4"; // Размер колонки
  style1    [5] = "text-align: right;";
  class2    [5] = "balanced";
  class3    [5] = "button button-assertive button-fab button-outline icon ion-plus";
  style3    [5] = "height:80px;width:80px;";
А Steel Radial будет?
 

Mоnk

Member
Проблема у меня какая то с anydata.
Код:
  id        [0] = "50";
  page      [0] = room;
  pageId    [0] = 50;
  descr     [0] = "Температура";
  stat      [0] = setStatus(DHT22_tS + " °C");
  widget    [0] = "anydata";
  sTopic    [0] = prefdev + "/DHT22_t";
  class1    [0] = "item rounded";
  style2    [0] = "font-size:16px;float:left";
  class3    [0] = "";
  style3    [0] = "font-size:30px;text-align: right;";
По событию меняю, публикую,
Код:
  class1    [0] = "item assertive-bg rounded";
  thing_config[0] = "{\"id\":\"" + id[0] + "\",\"page\":\"" + page[0] + "\",\"pageId\":" + pageId[0] + ",\"widget\":\"" + widget[0] + "\",\"descr\":\"" + descr[0] + "\",\"topic\":\"" + sTopic[0] + "\",\"class1\":\"" + class1[0] + "\",\"style1\":\"" + style1[0] + "\",\"class2\":\"" + class2[0] + "\",\"style2\":\"" + style2[0] + "\",\"class3\":\"" + class3[0] + "\",\"style3\":\"" + style3[0] + "\"}";  // Плюс
  client.publish(MQTT::Publish(prefdev + "/config", thing_config[0]).set_qos(1));
а на экране строчка не меняет цвет, пока в неё пальцем не ткнёшь. Любой "тык" в экран сбрасывает цвет этой строчки. Где я опять накосячил?
 

Victor

Administrator
Команда форума
а на экране строчка не меняет цвет, пока в неё пальцем не ткнёшь. Любой "тык" в экран сбрасывает цвет этой строчки.
В Ionic все элементы имеют фокус - поэтому такой эффект. Попробуйте явно задать основной цвет и цвет фона как до события, так и после.
 

Mоnk

Member
anydata
<div style="style1" class="class1">
<div style="style2" class="class2">descr</div>
<div style="style3" class="class3">last status message</div>
</div>
Меняю в лёт class2 и class3 - работает смена цвета фона. class1 показывает свой истинный цвет только при таче.
Может дело в непонятном для меня item? Убрал item и вот что получилось.
Screenshot_2017-02-02-22-23-53.png
Смена class1 явно работает, цвет меняется, а вот с разметкой что-то не так.
 

Victor

Administrator
Команда форума
Смена class1 явно работает, цвет меняется, а вот с разметкой что-то не так.
[inline]item[/inline] нужен, он как раз отвечает за разметку - это элемент списка
попробуйте до события [inline]class1="light dark-bg"[/inline]
и после [inline]class1="dark assertive-bg"[/inline], т.е. указать цвет текста и цвет фона
 

Mоnk

Member
Пробовал вчерась, не помогло.
Вы правы, дело в "фокусе". Если ткнуть в строчку, и она допустим позеленела, и не трогать экран, после события она краснеет или зеленеет. Проблема наверное в элементе списка.
Плюнул. Растащил размеры второго и третьего уровня. Меняю классы по событию. Работает.
 

Mоnk

Member
Про "скрыть виджет, послав в конфиге только id"
Если не указать еще и page, в "многостраничном" режиме появляется пустая закладка, которая пропадает, если отправить полный конфиг.
Screenshot_2017-02-24-00-26-141.png
 

Victor

Administrator
Команда форума
Про "скрыть виджет, послав в конфиге только id"
Если не указать еще и page, в "многостраничном" режиме появляется пустая закладка, которая пропадает, если отправить полный конфиг.
да, все верно. Если используются страницы, то [inline]page[/inline] тоже нужен. Если есть другие виджеты на этой странице, то можно вместо [inline]page[/inline] отправить [inline]pageId[/inline]
 

Mоnk

Member
Что-то опять пошло не так.
Пример в чистом виде работает. Внедряю в свой, затыкается на строчке
Код:
if (!client.connect(host, httpsPort))
Модуль перезагружается. Даже до return; не доходит. Думал пересекается с другими библиотеками. Вставил в образец все используемые библиотеки. Не мешают.
"Перечитывал пэйджер, много думал..."
 

Victor

Administrator
Команда форума
Модуль перезагружается
[inline]client[/inline], [inline]host[/inline] и [inline]httpsPort[/inline] - это отдельные переменные, которые не должны пересекаться с MQTT настройками или другими. Лучше сделать [inline]pushClient[/inline], [inline]pushHost[/inline] и [inline]pushPort[/inline]
 
Сверху Снизу