Не помогло
В чем проблема - периодически отваливается питание реле и датчиков после перезагрузки контроллера.
Не работает датчик температуры 1W.
Недоступен виджет Discrete I/O и соответствующие топики.
Проблема в том, что даже если мы задаем
listener 1883
allow_anonymous true
то после добавления пользователя в acl файл /etc/mosquitto/acl/default.conf
user mqtt_secured_user
topic readwrite #
topic readwrite $SYS/#
mqtt не позволяет коннектится. Проверяю через программу MQTT Explorer.
Точнее коннект происходит, а топики не отдаются. Отдаются, если только заполнить логин и пароль в настройках коннекта MQTT Explorer.
Соответственно, перестают работать и внутренние процессы, так как не могут авторизоваться в брокере, несмотря на allow_anonymous true
Подскажите, как корректно создать конфиг mosquitto, чтобы работали все внутренние процессы и при этом он не был открыт снаружи?
Еще вопрос к разработчикам внутреннего ПО касательно блока с вебсокет:
# Default Websockets listener.
#
# It is used by Wiren Board Web interface.
#
# It allows anonymous listeners by default to be compatible with
# old Wiren Board mosquitto configuration.
#
# It is recommended to add password authentication for security.
# Changed to localhost-only for security reasons for now
listener 18883 lo
protocol websockets
allow_anonymous true
acl_file /etc/mosquitto/acl/default.conf
password_file /etc/mosquitto/passwd/default.conf
Он же тоже перестает работать, когда добавляется юзер в acl файл, и приходится городить костыль в виде пары логин/пароль в веб-интерфейсе, хотя стоит allow_anonymous true и в инструкции строго настрого так написано оставлять. Если вебсокет слушает только lo-интерфейс, а вы к нему проксируете доступ через nginx, то какой смысл тут использовать строки
Мне кажется, что более корректным было бы вообще закоментить эти строки и по 1883 и по вебсокет порту.
Кто захочет - добавит слушателей на 1884 и 18884 порты с доступом по паролю и аксесс-листу извне.
Кто захочет запаролить вебинтерфейс - тот одной командой авторизации на nginx закроет доступ к /mqtt и не надо будет каждый раз вводить пароль/логин для подключения к вебсокетам в вебинтерфейсе контроллера.
По умолчанию с завода открыт доступ на 1883 и на :80/mqtt через прокси nginx
Добавлением 127.0.0.1 закрывается доступ к 1883, но к вебсокетам он остается открыт через конфиг nginx
Sep 10 15:29:56 wirenboard-AGLPZPUI mosquitto[8078]: 1757518196: New connection from 127.0.0.1:47282 on port 1883.
Sep 10 15:29:56 wirenboard-AGLPZPUI mosquitto[8078]: 1757518196: New client connected from 127.0.0.1:47282 as wb-gpio (p2, c0, k60).
Sep 10 15:29:56 wirenboard-AGLPZPUI mosquitto[8078]: 1757518196: Bad socket read/write on client wb-gpio: Quota exceeded
Sep 10 15:29:57 wirenboard-AGLPZPUI mosquitto[8078]: 1757518197: New connection from 127.0.0.1:47286 on port 1883.
Sep 10 15:29:57 wirenboard-AGLPZPUI mosquitto[8078]: 1757518197: New client connected from 127.0.0.1:47286 as wb-gpio (p2, c0, k60).
Sep 10 15:29:57 wirenboard-AGLPZPUI mosquitto[8078]: 1757518197: Bad socket read/write on client wb-gpio: Quota exceeded
Проверил.
Сбросил контроллер к заводским, используя 202508111043_wb-2507_bullseye_wb7x.fit
выполнил следующее сразу после перезагрузки: (добавил пользователя, слушателя не менял)
root@wirenboard-AGLPZPUI:~# mosquitto_sub -v -h 127.0.0.1 -t /# -C 3
/devices/wb-gpio/meta {"driver":"wb-gpio","title":{"en":"Discrete I/O"}}
/devices/wb-gpio/meta/driver wb-gpio
/devices/wb-gpio/meta/name Discrete I/O
root@wirenboard-AGLPZPUI:~# ^C
root@wirenboard-AGLPZPUI:~# mosquitto_passwd -c /etc/mosquitto/passwd/default.conf testuser
Password:
Reenter password:
Warning: File /mnt/data/etc/mosquitto/passwd/default.conf owner is not root. Future versions will refuse to load this file.To fix this, use `chown root /mnt/data/etc/mosquitto/passwd/default.conf`.Warning: File /mnt/data/etc/mosquitto/passwd/default.conf group is not root. Future versions will refuse to load this file.root@wirenboard-AGLPZPUI:~# nano /etc/mosquitto/acl/default.conf
root@wirenboard-AGLPZPUI:~# nano /etc/mosquitto/acl/default.conf
root@wirenboard-AGLPZPUI:~# cat /etc/mosquitto/acl/default.conf
user testuser
topic readwrite #
topic readwrite $SYS/#
root@wirenboard-AGLPZPUI:~# systemctl restart mosquitto
root@wirenboard-AGLPZPUI:~# mosquitto_sub -v -h 127.0.0.1 -t /# -C 3
^Croot@wirenboard-AGLPZPUI:~# mosquitto_sub -v -h 127.0.0.1 -p 1883 -u testuser -P test -t /# -C 4
/rpc/v1/db_logger/history/get_values 1
/rpc/v1/db_logger/history/get_channels 1
/rpc/v1/wb_logs/logs/List 1
/rpc/v1/wb_logs/logs/Load 1
root@wirenboard-AGLPZPUI:~#
То есть, просто добавляя testuser в acl файл, не меняя конфиг слушателя, поведение ломается. Диагностический файл прилагаю.
приложен диагностический архив, доступен только сотрудникам поддержки
Да, отличный вариант.
Я сначала хотел комментить строки в 10listeners и добавлять в него же своих запароленных слушателей, но с вашим решением это сделать гораздо проще.
Тем более, что можно у себя подготовить
/etc/mosquitto/acl/external.conf
/etc/mosquitto/passwd/external.conf
/etc/mosquitto/conf.d/11listeners_ext.conf и просто копировать их на контроллер при инсталляции вместе с другими файлами
Sep 10 15:52:46 wirenboard-AGLPZPUI mosquitto[4569]: 1757519566: Config loaded from /etc/mosquitto/mosquitto.conf.
Sep 10 15:52:46 wirenboard-AGLPZPUI mosquitto[4569]: 1757519566: Error: Invalid line in acl_file "/etc/mosquitto/acl/default.conf": testuser.
Sep 10 15:52:46 wirenboard-AGLPZPUI mosquitto[4569]: 1757519566: Error opening acl file "/etc/mosquitto/acl/default.conf".
Sep 10 15:52:46 wirenboard-AGLPZPUI systemd[1]: mosquitto.service: Main process exited, code=exited, status=3/NOTIMPLEMENTED
А что за запись такая в файле?
У меня что-то создается впечатление что редактируете файлы какой-то странной командой, причем по сети и с хоста на котором ужасно настроена кодировка. Лучше так не надо делать…
А где оригниальные, дефолтные разрешения описанные в файле?
это запись когда я по ошибке написал вместо “user testuser” просто “testuser” в первой строке acl файла. Естественно, mosquitto не запустился, я ее исправил и он стартанул.
Редактирую я командой nano через putty с виндовса.
Что вы имеете в виду? файл /etc/mosquitto/acl/default.conf ?
Его вывод приведен выше, могу его повторить тут:
он совпадает с тем, что указан в вашей инструкции и отличается от оригинального после прошивки только строкой “user testuser”.
Я специально сделал сброс на заводские настройки, и все действия, что я сделал это добавил пользователя и задал его в /etc/mosquitto/acl/default.conf по вашей инструкции.
Вопроса у меня теперь два:
Почему у вас работает gpio при добавлении user testuser, а у меня даже после сброса не работает? Я могу предоставить доступ к контроллеру через облако. Эта ситуация у меня случалась и с другими контроллерами, поэтому я хотел бы понять, в чем дело.
Если при добавлении user testuser перед топиками закрывает к ним доступ, согласно документации mosquitto, несмотря на анонимный доступ, то стоит обновить инструкцию, и управлять доступом через отдельные файлы, как это делает Korden