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

Очередной MQTT-клиент для android в виде приборной панели списком

heX

New member
@heX, А приложение сейчас развивается, принимаются ли пожелания по доработкам?
Не знаю.
Я устранил пару ошибок которые мешали мне.
Возможно постараюсь добавить незначительный но требуемый лично мне функционал. Но на этом все (меня связывает и отсутствие лицензии у исходника, и отсутствие свободного времени).
 

dao89

New member
ravend, я вижу после большой паузы, периодически выходят новые версии программы. Но, к сожалению, из версии в версию кочует неприятный баг. Постараюсь по-короче объяснить его суть.
Есть виджет Switch, у которого, к примеру, sub.topic равен status/hellFire, а pub.topic равен set/hellFire, on value равен 'on', off value равен 'off'.
Запускаем программу, к ней, к примеру, прилетает из status/hellFire значение 'off'. Я жму на переключатель, программа посылает в set/hellFire значение 'on' (виджет визуально переключается во включенное состояние), но контроллеру запрещено в данный момент разжигать адское пламя :) и он мгновенно отсылает в status/hellFire значение 'off'. Но вот незадача, виджет визуально так и остается положении 'on', хотя программе явно пришло в ответ от контроллера значение 'off'. Если переключиться между вкладками туда-сюда, то виджет отобразит правильно состояние ('off').
Также было бы здорово, если бы у всех виджетов, была возможность управлять retain флагом (в случае если настройки хранятся не на брокере, а в самих исполнительных устройствах (контроллерах), то навязанный в некоторых виджетах флаг retain доставляет проблемы).
 

heX

New member
навязанный в некоторых виджетах флаг retain доставляет проблемы).
Такая-же проблема.

В mosquito я столкнулся с совершенно идиотским глюком (это вроде фича, но я считаю что поведение по умолчанию должно быть другим):
1. мы публикуем retain переменную.
2. потом публикуем эту переменную с новым значением но без retain флага.
3. отключаемся от сервера.
4. подключаемся...
5. и он выдает _старое_ значение которое осталось от retain посылки! Хотя уже были публикации с новым значением (но без retain флага).
6. и теперь при подключении новых клиентов mosquito всем будет _сразу_ выдавать _старое_ значение (возможно очень старое - mosquito сохраняет retain в БД и они не исчезают даже после перезагрузки).
 

dao89

New member
mosquito сохраняет retain в БД и они не исчезают даже после перезагрузки).
Это отключается в конфиге брокера.
... потом публикуем эту переменную с новым значением но без retain флага.
.... и он выдает _старое_ значение которое осталось от retain посылки!
Это тоже, в принципе, решаемо. Если послать пустое сообщение с retain флагом в топик, то сохраненное на брокере сообщение удалится.

P.S. Так вот и получается, что автор подумал что он лучше всех знает нужен ли retain-флаг в виджетах, а пользователям программы приходится изголяться, чтобы как-то обойти трудности, которые у них возникают из-за такого решения. А ведь добавить опцию во все виджеты - несложно...
 

heX

New member
Это отключается в конфиге брокера.
Да, это отключается (но иногда полезно чтобы даже перезагрузка не сбрасывала состояния).
А вот как включить обновление/удаление retain записи при получении non-retain пакета?

Это тоже, в принципе, решаемо. Если послать пустое сообщение в топик с retain флагом, то сохраненное на брокере сообщение удалится.
Но кто его будет посылать?
(сейчас чищу руками: mosquitto_sub -h $1 -t "#" -v | while read line _; do mosquitto_pub -h $1 -t "$line" -r -n; done)

P.S. Так и придется писать Python скрипт который будет чистить retain сразу после их прибытия.
 
Последнее редактирование:

dao89

New member
heX, посылать его может, к примеру, то устройство, которое "слушает" этот топик. Если конечно есть возможность его перепрограммировать...
P.S. Я кстати как раз на питоне и тестировал механизм удаления retain-сообщений с брокера. Что-то в духе
client.publish('топик_в_котором_хотим_удалить', '', qos=0, retain=True)
должно работать.
P.P.S. Но это всё, в любом случае, костыли. Остается надеяться, что автор услышит просьбу и когда-нибудь таки исправит описанный выше баг и добавит возможность выбора retain во всех виджетах...
 

flash_br

New member
Автор, дружище!!!!!
Ты просто мужик!!!!!!! Сделать такое гибкое и классное приложение на безвозмездных началах это просто супер!!!!!!!!!!
У меня есть просьба, я думаю с ней согласятся многие, постараюсь объяснить:
1. не хватает постфиксов (ну или как их там) при добавлении "value", грубо говоря, если мы выводим число, пусть это будет температура, то хотелось бы добавить "*С", если проценты, то "%" ну и т.д.
2. звуковое оповещение, добавить условие в "value", например val(полученное значение) <лог. оператор> "с чем сравниваем" если true, то воспроизвести стандартный звук оповещения .... к примеру если температура больше какого-то значения, то сделать "бздынь"

Да, есть исходники и имея некоторое время для того, чтобы разобраться в них, можно это сделать и самому, тем более, что исходники я смотрел и в принципе там всё понятно, за что ещё один респект, не многие пишут понятный код, НО хотелось бы всё же видеть это в первоисточнике)))))

сорри за такую шпалеру, то этого оооочень не хватает))))))))))))))
 

RotaryF

New member
Может я пропустил, но
размер виджетов как регулируется?
Например, текстовая строка 40 символов в Value обрезается :(
 

vsvleo

New member
Проект похоже заглох, а жаль.. Так и не нашел в нем возможность парсинга JSON входных данных. Кто-нибудь может подсказать, как в JS извлечь значение из json данных, типа: {"value1":"key1","value2":"key2",....}
 

nikolz

Well-known member
один с поварешкой и семеро с ложкой.
-----------------
хороша каша, но не соленая.
Вы посолите ее
хороша каша, но масла мало
Вы масло положите.
хороша каша, но чая нет.
Налейте чая.
------------------------
Может пора и самим что-то сделать, чтобы каша была вкуснее?
 

vsvleo

New member
один с поварешкой и семеро с ложкой.

Может пора и самим что-то сделать, чтобы каша была вкуснее?
Полностью согласен!.. только зачем тогда этот форум и public приложение, где ТС выслушивает пользователей и что то предпринимает?
 

vlad072

New member
Автор приложение бросил, это очевидно. Но на github исходники оставил, так что есть надежда что кто то уже для себя исправил проблему с навязанными Retain и нерабочими push - уведомлениями в Android 8 +. Никто не в курсе?
 

switch002

New member
Всем привет. Прочитал тему до конца, прошу помощи у опытных по этой программе. Может даже и не по этой программе, а вообще, т.к. в разном софте проблема повторяется.
Итак имеем ардуину, которая по последовательному порту соединена с esp8266. Ардуина реализует работу с периферией и всю логику, Esp8266 чисто как транспорт mqtt сообщений. Почему так? потому что лениво размазывать логику, а я поместился в atmega168 плюс дисплей i2c, меню, статусы и прочее. Ну не суть.

Ардуина публикует состояния и изменения портов и периферии в топик sensors, команды принимает из топика commands. Таким образом информационные каналы разделены. Я в этой программе делаю переключатель. Топик подписки указываю из sensors , а топик публикации указываю commands. При получении команды ардуина меняет свое состояние и отражает его изменениями в sensors моментально и/или с задержкой и вообще периодически.

И вот в чем проблема: переключатель не отражает состояние. В консоли mosquitto я вижу какие данные приходят. В mosquitto_sub тоже все корректно. Ответы то простые - 0 или 1. Если я просто делаю не переключатель, а Value, то состояние отображается. Графики тоже отображают изменение. А вот переключатель и RGB_LED не отображают. Причем если то же самое отправлять в топик sensors средствами консоли mosquitto или сторонним MQTT спуфером то состояние отображается. Я разглядывал данные как мог так и не нашел отличия между нулем и единицей в разных клиентах...

Причем такое явление: клиентом или спуфером отправляю значение 1,:
mosquitto_pub -h localhost -p 1883 -u ХХХ -P УУУУ -t water/commands/OUT_VALV1 -m "1"

переключатель меняет значение. Через несколько секунд ардуина тоже самое значение отправляет и в linear переключатель сбрасывается!

Clip2net_200414223521.png
 

switch002

New member
Ребят, разобрался. Запустил терминал который отображает бинарные данные и увидел что стандартный serial.println() выдает на конце 0x0d 0x0a . Т.е два символа. На стороне esp сделал так:

//если перевод строки, считаем что ввод команды закончен
//if ( sym == '\n') {
if ( sym == 0x0D) {
//флаг что строка готова
stringComplete = true;
//в следующей итерации начинаем сначала
i=0;
break;
}

три дня ведь мучался ;) Стоит написать на форум так решение сразу находится

Автору спасибо за программу! Яб купил даже какую-то получше, но лучше ничего нету ;( Можно конечно самому накорябать на JS но по-быстрому не получится. Еще неделю потрачу...
 
Сверху Снизу