Предложение MQTT Dash для Android

Pavlo

New member
Решение, которое я нахожу - это люди 1 раз в секунду публицируют текущее состояние светодиода.
Т.е., в даном случае, статус обновится максимум через секунду.

Я вот тут подумал... А было бы здорово, если бы при старте приложения на мобильном устройстве (допустим того же "MQTT Dash"), можно было бы автоматически оповещать какие-либо топики о том, что "эй-я-новый-клиент-дай-состояния-которые-я-должен-отобразить".
И в ответ, допустим моя бы ESP-шка, которая подписана на топик "эй-я-тут", публиковала бы повторно текущее состояние светодиода.
 

ByTE

Member
Да, трюк есть. Отправлять сообщения с флагом retained. Тогда при подключении клиент получит последнее актуальное сообщение.
 

Pavlo

New member
Да, трюк есть. Отправлять сообщения с флагом retained. Тогда при подключении клиент получит последнее актуальное сообщение.
Эх, не стать мне изобретателем колеса :D
Спасибо огромное!

[off]Если кому то будет интересно, то нашел вот такую русскоязычную документацию Использование MQTT-клиента микроброкера IBM Lotus Expeditor для публикации сообщений
Сигнатура метода для публикации сообщения - int publish(String, MqttPayload, byte, Boolean). Ниже подробно рассматриваются эти четыре параметра:
  • String. Тип параметра темы - строковой (string), и эта строка используется брокером для сопоставления публикации и интересов подписчиков (указываемых при помощи описанного ранее синтаксиса подписки на темы).
  • MqttPayload. Второй параметр - это объект MqttPayload. Объект MqttPayload содержит и данные приложения, и любые заголовки протокола для этой публикации. Предусмотрен сдвиг (offset), чтобы приложения могли определить, где в MqttPayload начинаются данные. Это обеспечивает доступ к нижележащему байтовому массиву без создания дополнительных копий после записи данных в сети. Кроме того, обеспечивается доступ для прямого манипулирования полезными данными после создания объекта и до передачи.
  • Byte. Третий параметр, byte, - это качество сервиса (Quality of Service, QoS) для этой публикации. У QoS три допустимых значения: 0, 1 или 2:
    • QoS, равное 0, означает, что публикатор и брокер пытаются выполнить однократную доставку сообщения, но не предпринимают шаги, кроме предусмотренных TCP/IP, чтобы убедиться в том, что сообщение доставлено. Этот уровень иногда называют "выстрелил и забыл", так как сообщение отправляется адресату без проверки получения.
    • При QoS, равном 1, доставка сообщения брокеру проверяется; однако его разрешается доставлять более одного раза.
    • Значение QoS, равное 2, приказывает MQTT доставлять сообщения один и только один раз.
    Каждое увеличение уровня QoS приводит к дополнительной нагрузке на процессор и сеть. Выбор QoS может повлиять на общие возможности масштабирования вашего решения по обмену сообщениями, а также создаёт дополнительную нагрузку на клиент, связанную с хранением недоставленных сообщений. Следовательно, нужно правильно выбрать соответствующий уровень QoS для каждого опубликованного сообщения. Как правило, следует использовать более низкие значения QoS, если только не требуется более жёсткая гарантия доставки сообщений. Значение QoS, указанное для сообщения, определяет качество сервиса для публикации между клиентом и брокером. Кроме того, это значение устанавливает максимальный уровень QoS, который брокер использует для доставки этого сообщения своим подписчикам.
    Подписчики могут указать максимальное значение QoS для доставки сообщений на основе темы, поэтому сообщение, опубликованное с уровнем QoS 2, может быть и не доставлено подписчикам. Подписчик может запросить пониженный уровень QoS для получаемых им сообщений. Хотя может показаться странным, что публикатор не полностью управляет качеством сервиса своих сообщений, в результате увеличивается гибкость для потребителей сообщений. Когда опубликованное сообщение отправляется подписчику, брокер доставляет публикацию либо с максимальным значением QoS, указанным подписчиком во время процесса подписки, либо со значением QoS опубликованного сообщения, если оно ниже. Например, сообщение, опубликованное с QoS = 2 для подписчика, указавшего QoS = 1 для данной темы, доставляется с QoS = 1. Сообщение с QoS = 0, опубликованное для того же подписчика по этой же теме, отправляется подписчику с QoS = 0.
  • Boolean. Четвёртый параметр, булев флаг (Boolean flag), определяет, является ли эта публикация задержанной. Задержанная публикация удерживается в брокере как последнее полученное сообщение по данной теме. Задержанные публикации позволяют следующим подписчикам получать самые последние сообщения по какой-либо теме, как только они на неё подпишутся, даже если подключение произойдёт после того, как сообщение будет опубликовано. Эта возможность очень полезна для наполнения данными отображающего информацию приложения сразу после его запуска и последующего обновления этой информации при её изменении. Если значение этого флага - false, сообщение получат только подписчики, в данный момент подписанные на эту тему. В примере, приведённом в листинге 2, используется незадержанная публикация.
[/off]
 

traverrr

New member
Господа, а как выцепить в mqtt dash из стринга несколько параметров?
Строка:
{"tec": { "a":0}, "info": { "num" : "001", "value": 10, "status": 1"}}
А нужно из нее показания value и status.
 

ByTE

Member
Если оба значения нужны в одной метрике, то использовать JavaScript. Парсить JSON, доставать значения и делать с ними что-то или показывать.
А если для каждого значения своя метрика, то использовать JSONPath: $.info.value в одной метрике и $.info.status в другой.
 

telobezumnoe

New member
@ByTE не подскажете, есть ли возможность публиковать данные сразу в несколько топиков? а вообще сэкономило бы место на экране возможность на одной плитке добавлять несколько топиков для публикации в них каких каких либо действий, или указывать значение и топик(и) в каждом из меню выпадающего списка. на пример режим охрана в списке мультивыбора (отправляет данные в топик на включение камеры наблюдения и в то же время на отключение подачи воды, или выключение света) конечно это можно все прописать в скетчах, но для этого надо шить все устройства.
з.ы. еще вопрос по поводу rgb, в десятичном виде я получаю число, но не совсем понятно как его интерпретировать, в основном используют вид rgb(255,255,255) можно как то подобным образом распарсить данные передаваемые вашим виджетом?
 
Последнее редактирование:

ByTE

Member
есть ли возможность публиковать данные сразу в несколько топиков?
JavaScript в обработчике ON TAP

в десятичном виде я получаю число, но не совсем понятно как его интерпретировать
В Java это "Color.parseColor()". В других языках - не знаю.
 

Луша

New member
Помогите как настроить управление RGB.
Принимаю такую строку.
json {"system":{"hostname":"Test","uptime":830,"rssi":-61,"freemem":30568},"sensors":{},"pwm":{"0":255,"1":223,"2":255}}
Какие нужно сделать настрой, что бы принимать и отправлять цвет.
 

ByTE

Member
Принимаю такую строку.
json {"system":{"hostname":"Test","uptime":830,"rssi":-61,"freemem":30568},"sensors":{},"pwm":{"0":255,"1":223,"2":255}}
Какие нужно сделать настрой, что бы принимать и отправлять цвет.
В данном случае для отображения можно использовать JavaScript - в On Receive парсить JSON, доставать значения каждого канала RGB, и сконвертировать в HEX.
Для отправки из скрипта можно построить JSON и отправить его, но значение может быть задано только из скрипта. Выбор цвета пользователем реализовать не получится.
 

Луша

New member
А для чего тогда поле ввода цвета? И подскажите какие именно скрипты нужно подставить. или хотя бы где про это можно почитать?
 
Последнее редактирование:

Encrypt

Member
Как можно сделать метрику в 5ть строк, и разного цвета каждая строка?
 

ByTE

Member
А для чего тогда поле ввода цвета? И подскажите какие именно скрипты нужно подставить. или хотя бы где про это можно почитать?
Для отображения и отправки цвета. В общепринятом формате HEX, а не в том, что у вас.
Как можно сделать метрику в 5ть строк, и разного цвета каждая строка?
К сожалению никак.
 

Pavlo

New member
Подскажите, а что-то похожее для iphone планируется?
Или может кто-то подскажет толковую аппсу?

И еще, планируется ли функция таймера?
 

Encrypt

Member
Не правда ) Просто работа идет медленно
ОК, подкину несколько идей:

+ вынесение отдельных метрик в виджеты, для быстрого доступа.
+ нотификаци по событиям(иконка в статусной строке, иногда со звуком), на случай грабежа, пожара, потопа лучше хоть как-то уведомить.
+ расширить возможность форматирования текста в метрике, кол-во строк, стиль, цвет. Вобще было бы здорово применять html/css чтобы угодить сразу всем). Также менять размер каждой метрики отдельно, ширина/высота.
+ группировать несколько кнопок(метрик) в более компактном виде. Для для 2х,3х клавишного включателя в комнате (однотипные квадратные метрики по каждому чиху, не дают покоя%)
+ отладочный лог, для удобного просмотра и тестов, входящих/исходяших данных прямо со смартфона.
 

Pavlo

New member
А есть какой то элемент для жалюзей?

Хорошо бы иметь элемент, который при нажатии "раскрывался", скажем вниз, и появлялся вертикальный слайдер и, скажем еще 3 кнопки "вверх"/"вниз"/"стоп".
 
Последнее редактирование:

telobezumnoe

New member
Подскажите, как настроить голосовое управление.
получилось это сделать по помощи таскера, там есть плагин для mqtt и плагин autovoice, на нужное словосочитание публикует значение в необходимый топик, или же озвучивает полученные данные из топика
 
Сверху Снизу