• Система автоматизации с открытым исходным кодом на базе 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 но по-быстрому не получится. Еще неделю потрачу...
 
Сверху Снизу