IoT Manager: виджет отображает descr, но не показывает значение

Browny

New member
Всех приветствую!
Модифицирую прошивку автора Theo Arends (Sonoff-MQTT-OTA-Arduino) с гитхаба.
Прикрутил реле - всё нормально. Дошло дело до датчиков, возникла проблема: виджет виден (видно его descr), а значение из status может 2-3 минуты не отображаться, в то время, как по mqtt данные идут (видно в т.ч. в логе IoT manager'а).

Конфиг виджета такой:
topic: /IoTmanager/DVES_06FD8A/config
Код:
{"id":11,"page":"LivingRoom","pageId":10,"topic":"/IoTmanager/DVES_06FD8A/sensor6","widget":"display-value","class1":"item no-border","class2":"balanced","style2":"font-size:14px;float:left","descr":"Влажность","class3":"balanced","style3":"font-size:14px;font-weight:bold;float:right;color:#52FF00;inactive_color:#52FF00;digits_count:6"}
Статус отдаю так:
topic: /IoTmanager/DVES_06FD8A/sensor6/status
payload: {"status":"46.1"}

Конфиг виджета отдаётся всегда за запрос "request" по страницам. Всего сейчас виджетов три: реле (toggle), температура (display-value), влажность (display-value). Информационные виджеты имеют идентичную настройку, за исключением идентификаторов.
Отображается descr (сразу), работает vibro, alert - а символы, отображающие значение (в т.ч. фоновые) включаются нестабильно, через определённое время - когда у одного виджета, когда у другого... Пока не могу понять причину... Есть мнения?

Спасибо!
 

Сергей_Ф

Moderator
Команда форума
@Browny так проблемы в получении, скорее всего, а не в отображении. Может у автора тайм-аут на обновление стоит?
 

Browny

New member
Сергей_Ф, дело в том, что я мониторю mqtt сообщения одновременно в MQTT Spy и логах IoT manager'а. Видно, что на топик /IoTmanager/DVES_06FD8A/sensor6/status приходит сообщение {"status":"46.1"}. Виджет также к тому времени уже загружен, т.к. значение descr отображается сразу при обновлении page. Интервал 10 секунд. Предположить ошибочный парсинг виджета тоже не могу, т.к. через продолжительное время виджет всё же начинает отображать данные, причём обновляет их с правильным интервалом (10 секунд). Нормально работает до следующего обновления всей страницы.
 

Victor

Administrator
Команда форума
Может у автора тайм-аут на обновление стоит?
нет
в то время, как по mqtt данные идут (видно в т.ч. в логе IoT manager'а).
было бы неплохо посмотреть лог
это один из первых виджетов, возможно в нем есть проблемы с обновлением данных при получении (т.е. данные он получает, но рендер не делает)
Попробуйте, как вариант, status отдавать и в config тоже, т.е.
Код:
{"id":11,"status":"46.1","page":"LivingRoom","pageId":10,"topic":"/IoTmanager/DVES_06FD8A/sensor6","widget":"display-value","class1":"item no-border","class2":"balanced","style2":"font-size:14px;float:left","descr":"Влажность","class3":"balanced","style3":"font-size:14px;font-weight:bold;float:right;color:#52FF00;inactive_color:#52FF00;digits_count:6"}
 

Browny

New member
@Victor, спасибо! Попробую в ближайшее время. Пока же могу сказать, что steel и anydata отображают данные своевременно. Вернул display-value и снова воспроизвёл задержку.
Могу также присоединить странное отображение steel, хотя, возможно, имеет смысл вынести это в отдельный топик.
Телефон: Redmi 3, MIUI Global 7.2, Android 5.1.1
Виджет:
Код:
"widget":"steel","class1":"item no-border","style2":"font-size:14px;float:left","descr":"Температура","class3":"balanced","style3":"font-size:14px;font-weight:bold;float:right","widgetConfig":{"width":"auto","height":100,"type":"Linear","titleString":"Температура,t","unitString":"temp C","threshold":40}
Скрин:
Screenshot_2017-02-18-21-25-10_ru.esp8266.iotmanager.png
 

Browny

New member
@Victor, если позиция в JSON при парсинге не принимается во внимание и "0.0" не является игнорируемым значением (думаю, так и есть), то не сработало :( Отдал статус:
Код:
"\"widget\":\"display-value\",\"status\":\"0.0\",
Тот же результат. Примерно через две минуты всё же обновилось значение у одного из двух виджетов.
Лог предоставлю чуть позже, там много - думаю, надо его почистить и сгенерировать фрагмент, относящийся к ситуации.
Тем не менее, за информацию о передаче статуса в момент конфига - огромное спасибо, учту.
За приложение огромное спасибо, пожалуйста, не бросайте его разработку! Вещь крайне перспективная и удобная!
 

vgkcom

New member
@Victor, спасибо, это решило вопрос с отображением steel.
Добрый день! Подскажите пожалуйста новичку как передать значение виджету steel, и в какой функции этот код встатвить.

создал так, на экране отображается, а как передать значения незнаю

// widget3
JsonObject& root3 = jsonBuffer.createObject();
sTopic[3] = prefix + "/" + deviceID + "/steel";
root3["id"] = 3;
root3["descr"] ="Steel 1";
root3["widget"] ="steel";
root3["width"] ="auto";
root3["height"] =50;
root3["type"] = "Linear";
root3["titleString"] = "Thermometer 1";
root3["unitString"] = "temp C";
root3["threshold"] = 90;
root3.printTo(thing_config[3]);
 
Последнее редактирование:

Victor

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

vgkcom

New member
Просто отправьте в нужный топик числовой status, как в этом примере iot-manager-demo/linear.js at master · 4refr0nt/iot-manager-demo · GitHub
т.е. внутри JSON именно число (это [inline]123[/inline] ), а не строка, например так [inline]{"status":123}[/inline]
Спасибо большое за ответ, но мне трудно разобраться и понять алгоритм действий. Я работаю в среде Arduino IDE с JS не знаком.
Написал запрос - client.publish(sub.topic + '/steel', JSON.stringify({"status":123})); выдает ошибку

Arduino: 1.6.4 (Windows 8.1), Плата"NodeMCU 1.0 (ESP-12E Module), 80 MHz, 115200, 4M (3M SPIFFS)"
MQTT_simple-btn_widget_demo.ino: In function 'void callback(const MQTT::publish&)':
MQTT_simple-btn_widget_demo:222: error: invalid use of member function (did you forget the '()' ?)
MQTT_simple-btn_widget_demo:222: error: 'JSON' was not declared in this scope
MQTT_simple-btn_widget_demo:222: error: expected '}' before ':' token
MQTT_simple-btn_widget_demo:222: error: expected ')' before ':' token
MQTT_simple-btn_widget_demo:222: error: expected ';' before '}' token
MQTT_simple-btn_widget_demo.ino: At global scope:
MQTT_simple-btn_widget_demo:222: error: expected unqualified-id before ')' token
MQTT_simple-btn_widget_demo:223: error: expected declaration before '}' token
Multiple libraries were found for "PubSubClient.h"

По моему я не правильно обращаюсь к топику, подскажите пожалуйста как нужно. И где можно почитать документацию. По виджетам вроде понятно, а по конфигурации как обратится информации найти не могу. За ранее большое спасибо.

Готов материально помочь проекту.
 
Последнее редактирование:
Сверху Снизу