• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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]
 
Сверху Снизу