Mqtt dash ошибка соединения

Wiren Board Support

Загрузка…

As an extension of this question and based on the answers, I am using websockets to connect to MQTT broker using dash_mqtt taking this app script as a reference. But I am not able to send or receive data with the configuration in the below app.py.

import dash_mqtt
import dash
from dash.dependencies import Input, Output, State
import dash_html_components as html
import dash_core_components as dcc
import flask
import json
import paho.mqtt.client as mqtt



TEST_SERVER = '172.17.0.2'
TEST_SERVER_PORT = 1883
TEST_SERVER_PATH = 'mqtt'
MESSAGE_OUT_TOPIC = 'testtopic'
MESSAGE_IN_TOPIC = 'testtopic'

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

server = flask.Flask(__name__)
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
app.config.suppress_callback_exceptions = True



app.layout = html.Div([
    dash_mqtt.DashMqtt(
        id='mqtt',
        broker_url=TEST_SERVER,
        broker_port = TEST_SERVER_PORT,
        broker_path = TEST_SERVER_PATH,
        topics=[MESSAGE_IN_TOPIC]
    ),
    html.H1('MQTT echo'),
    html.P('MQTT echo server to ' + TEST_SERVER + ' on port ' + str(TEST_SERVER_PORT)),
    dcc.Input(
        id='message_to_send',
        placeholder='message to send',
        debounce = True),
    html.Button('Send',id='send'),
    html.Div(id='return_message')
])


@app.callback(
        Output('mqtt', 'message'),
        Input('send', 'n_clicks'),
        State('message_to_send', 'value')
    )
def display_output(n_clicks, message_payload):
    if n_clicks:
        return {
            'topic': MESSAGE_OUT_TOPIC,
            'payload' : message_payload
        }
    return dash.no_update

if __name__ == '__main__':
    app.run_server(host='0.0.0.0',port=8050,debug=True) 

In brief,

  1. I am trying to connect to eclipse mqtt broker which is running
    in a docker container associated with the IP address
    172.17.0.2 listening to the port 1883.
  2. Dash app is running in another docker container with the port 8050.

All the basic configuration to the mosquitto.config file is done so that it listens and responds to external communications. Also, this app runs successfully without errors in the log but cannot communicate with the MQTT broker.

What configuration changes should I have to make to connect to the broker?

Thank you

Edit: The browser console saysWebSocket connection to 'ws://172.17.0.2:1883/mqtt' failed:

mosquitto.conf

# Config file for mosquitto

# =================================================================
# Listeners
# =================================================================

# listener port-number [ip address/host name/unix socket path]
listener 1883

# =================================================================
# Persistence
# =================================================================

persistence True

# =================================================================
# Security
# =================================================================

# Defaults to false, unless there are no listeners defined in the configuration
# file, in which case it is set to true, but connections are only allowed from
# the local machine.
allow_anonymous True

В процессе инсталляции «умного дома» мы установили интеллектуальные выключатели, розетки, много датчиков и т.д. Но всем этим надо управлять, получать с этих устройств информацию. Данная статья о том как управлять умным домом через протокол MQTT с мобильного телефона или планшета, отправлять и получать сообщения с сервера.

Практически каждый производитель оборудования имеет свое фирменное приложение для установки на мобильные устройства: Broadlink — приложение с аналогичным названием, Sonoff — программу eWelink. Что мы имеем в результате:

1.-Кучу программ на смартфоне, которые занимают место

2.-Неудобство в использовании для выполнения разных действий приходится открывать несколько приложений.

3.-Кроме всего — подключение к иностранным серверам, которые в нашем постоянно меняющимся мире всегда можно отключить для определенной страны. Сейчас мы наблюдаем как это делается при помощи санкций.

Выгоднее иметь одно приложение, которое подключается к российскому серверу и управляет всеми устройствами и получает с них телеметрию. На данный момент популярный протокол MQTT обеспечивает передачу команд между разными устройствами «Умного дома». Его преимущества по отношению к другим протоколам:

— низкое потребление трафика;

— соединение между клиентом и сервером всегда открыто;

— не нагружает интернет канал;

— отсутствие задержек в передаче данных;

— удобная система подписок на топики;

Эта система управления состоит из двух частей:

-Сервера, как правило одного. Сервер MQTT можно создать свой Например на микрокомпьютере Raspberry установить mosquitto или использовать посторонние сервисы. Сервер служит как бы посредником при передачи и получении данных между клиентами. Если вы желаете получать данные и управлять устройствами в любой точке мира то надо использовать внешний сервер. Я использую WQTT.RU. Можно использовать два сервера MQTT — локальный и внешний, в этом случае необходимо установить между ними сетевой мост.

-Клиентов, которых может быть много.

Описывать подробно работу протокола MQTT не буду, про это достаточно много есть информации в интернете. Нас интересует настройка самого приложения для мобильных устройств MQTT Dash.

Клиентов-приложений под Android большое количество, с разными возможностями. Есть с ограниченными возможностями, платные и т.д. Из всех приложений мне понравился клиент MQTT Dash. Скачать можно по ссылке. Для скачивания включайте VPN.

GooglePlay скачиваем MQTT Dash

С установкой думаю не возникнет ни каких проблем. После инсталляции запускаем программу и переходим к настройке приложения. В верху экрана щелкаем по кнопке +

Добавление сервера MQTT Dash
прописываем параметры сервера MQTT
настройка сервера MQTT Dash

Данные — логин, пароль (password), номер порта. Данные для настройки берем с панели управления брокера

параметры сервера на Broker

Немного о следующих настройках — Идентификатор ставится автоматически. Размер плиток выбираем по желанию, потом можно поменять. После ввода настроек сохраняемся нажав на значок дискеты в верхней части экрана. Приложение позволяет устанавливать связь с разными серверами. То есть при сбое связи одного сервера Вы можете переключиться на другой и «умный дом» продолжит выполнять свои функции.

Входим в созданное нами соединение и подключаем клиента (client) к серверу. Если не получаем ни каких уведомлений — то подключение к серверу установлено. Если получаем уведомления необходимо возвратиться назад в настройки соединения. Самая распространенная ошибка — при копировании параметров в настройках прописываются лишние знаки пробела и соединение не устанавливается. Зайдя в соединения щелкаем по «+» получаем вот такое меню.

меню сервера MQTT Dash

Рассмотрим кратко пункты меню:

Текст Имя может быть любым, в том числе и на русском. Ниже название топика ( Topic), так как в данном случае мы только получаем данные публикацию не включаем. Поля «Префикс» и «Постфикс» служат для ввода дополнительной информации. Показывая мгновенные потребления тока при помощи «Постфикса» показывает единицу измерения — а (ампер). После введения информация не забываем сохраниться. Если надо вывести много параметров то для простоты создания виджетов их можно клонировать, для этого нажать пальцем на виджете и подержать. Появится меню: выбираем копировать.

Топик Текст MQTT Dash

Переключатель/кнопка Используется для включения выключения различного оборудования, например освещения.

Топик кнопка MQTT Dash
Топик переключатель MQTT Dash

Выбираем нужную картинку для отображения на экране и нужный цвет. Также можно изменять цвет выводимого текста.

Обращаю внимание — подпункты «Вкл» и «Выкл» должны прописываться точно так как на сервере. Если сервере прописано включение «1», а в приложение вы прописали «ON» работать не будет

Диапазон/прогресс Работает как поле «Текст», но кроме этого выводит графический диапазон значения. Выглядит примерно так — виджет в самом низу показывает напряжение

Топик диапазон MQTT Dash

С остальными пунктами меню тоже особых проблем нет, пробуйте. Аппетит приходит во время еды. Думаю, что примеры выше помогут вам в настройках. Вопросы лучше задавать через форму связи на моем сайте

Подключение к mqtt серверу.

Тема в разделе «ESP8266, ESP32», создана пользователем a1000, 21 фев 2021.


  1. a1000

    a1000
    Гуру

    Пробую поиграться с MQTT. В качестве сервера выбрал https://clusterfly.ru. В качестве приложения на смартфон установил mqtt dash. Всё как-бы удалось и запустилось. Прикрутил к ESP DS18b20 — всё работает, данные отправляются. На слудующий день попробовал запустить mqtt dash на другом смартфоне. Настройки внёс те-же самые, перепроверял раз десять, но результата нет. Не соеденяется с брокером и всё. В то-же время на первом смартфоне всё нормально, данные приходят и обновляются. На сервере написано — «Кол-во подключений не ограничено.» В чём может быть проблема?


    a1000,
    21 фев 2021

    #1


  2. parovoZZ

    parovoZZ
    Гуру

    Есть подозрение, что вся эта халява складируется в одном месте не просто так. Сколько потом будет стоить база данных с привязкой к соц. сетям?


    parovoZZ,
    22 фев 2021

    #2


  3. KindMan

    KindMan
    Гуру

    Да, там и рефералка была на али. Бесплатно ведь :)


    KindMan,
    22 фев 2021

    #3


  4. SergeiL

    SergeiL
    Оракул
    Модератор

    Имена подключаемых устройств разные? Они не должны совпадать.


    SergeiL,
    22 фев 2021

    #4


  5. a1000

    a1000
    Гуру

    Разобрался. Второй телефон сильно умным оказался. После точки самомтоятельно вставлял пробел. Поэтому адрес сервера был неверным. Поубирал пробелы, всё заработало.


    a1000,
    23 фев 2021

    #5


  6. chumaty

    chumaty
    Нуб

    Если вопрос еще актуальный, то нисколько не будет стоит.


    chumaty,
    7 окт 2021

    #6

(Вы должны войти или зарегистрироваться, чтобы ответить.)

Показать игнорируемое содержимое

Ваше имя или e-mail:
У Вас уже есть учётная запись?
  • Нет, зарегистрироваться сейчас.
  • Да, мой пароль:
  • Забыли пароль?

Запомнить меня


Амперка / Форум

  • Вики
  • Видео
  • Форум

В качестве расширения этого вопроса и на основе ответов я использую websockets для подключения к MQTT-брокеру с помощью dash_mqtt использования этого скрипта приложения в качестве ссылка. Но я не могу отправлять или получать данные с конфигурацией ниже app.py.

import dash_mqtt
import dash
from dash.dependencies import Input, Output, State
import dash_html_components as html
import dash_core_components as dcc
import flask
import json
import paho.mqtt.client as mqtt



TEST_SERVER = '172.17.0.2'
TEST_SERVER_PORT = 1883
TEST_SERVER_PATH = 'mqtt'
MESSAGE_OUT_TOPIC = 'testtopic'
MESSAGE_IN_TOPIC = 'testtopic'

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

server = flask.Flask(__name__)
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
app.config.suppress_callback_exceptions = True



app.layout = html.Div([
    dash_mqtt.DashMqtt(
        id='mqtt',
        broker_url=TEST_SERVER,
        broker_port = TEST_SERVER_PORT,
        broker_path = TEST_SERVER_PATH,
        topics=[MESSAGE_IN_TOPIC]
    ),
    html.H1('MQTT echo'),
    html.P('MQTT echo server to ' + TEST_SERVER + ' on port ' + str(TEST_SERVER_PORT)),
    dcc.Input(
        id='message_to_send',
        placeholder='message to send',
        debounce = True),
    html.Button('Send',id='send'),
    html.Div(id='return_message')
])


@app.callback(
        Output('mqtt', 'message'),
        Input('send', 'n_clicks'),
        State('message_to_send', 'value')
    )
def display_output(n_clicks, message_payload):
    if n_clicks:
        return {
            'topic': MESSAGE_OUT_TOPIC,
            'payload' : message_payload
        }
    return dash.no_update

if __name__ == '__main__':
    app.run_server(host='0.0.0.0',port=8050,debug=True) 

Вкратце,

  1. Я пытаюсь подключиться к работающему брокеру eclipse mqtt в контейнере докера, связанном с IP-адресом 172.17.0.2 прослушивает порт 1883.
  2. Приложение Dash работает в другом док-контейнере с портом 8050.

Вся базовая конфигурация файла mosquitto.config выполняется таким образом, чтобы он прослушивал внешние сообщения и отвечал на них. Кроме того, это приложение успешно работает без ошибок в журнале, но не может обмениваться данными с брокером MQTT.

Какие изменения конфигурации мне нужно внести, чтобы подключиться к брокеру?

Спасибо

Изменить: консоль браузера говорит WebSocket connection to 'ws://172.17.0.2:1883/mqtt' failed:

mosquitto.conf

# Config file for mosquitto

# =================================================================
# Listeners
# =================================================================

# listener port-number [ip address/host name/unix socket path]
listener 1883

# =================================================================
# Persistence
# =================================================================

persistence True

# =================================================================
# Security
# =================================================================

# Defaults to false, unless there are no listeners defined in the configuration
# file, in which case it is set to true, but connections are only allowed from
# the local machine.
allow_anonymous True

1 ответ

Как указано в комментариях,

Вы не можете использовать один и тот же порт для Native MQTT через TCP и MQTT через Websockets, поэтому вам нужно добавить второго прослушивателя в mosquitto.conf

Например

listener 1884
protocol websockets

И измените порт в своем приложении на 1884.


0

hardillb
19 Июл 2021 в 18:24

  • Mqsvc exe ошибка приложения
  • Mql5 код ошибки 4756
  • Mount and blade warband ошибка 0xc000007b
  • Mount and blade warband nova aetas ошибка
  • Mount and blade 2 ошибка application crash