Closed popsodav closed 5 years ago
@popsodav Спасибо за вклад в общее дело! А давайте оптимизируем
сделайте 1 топик: mqtt_topic, а в его подтопики отсылайте уже данные. Тогда можно будет быстро масштабировать кол-во параметров. Поля можно взять из JSON, чтобы не сочинять. https://github.com/dontsovcmc/waterius/blob/master/Export.md#%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B-http-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0
Что скажете? Допишите?
Да, исправлю. По второму пункту не совсем понял. В PubSub клиенте устанавливается уникальный ID клиента на основе MAC-адреса. это не то?
Отлично, спасибо!
Уникальный ID клиента недостаточно для безопасности. Мак адреса у 1 производителя могут отличаться на несколько цифр. важно видеть с какого устройства пришел топик и чтобы никто не смог вместо нас отослать данные. Можно токен в clientID записать. Тогда увидим, с какого клиента мы получаем данные. Я не видел,чтобы так делали, но я мало видел систем.
Позвольте вставиться свои пять копеек, в sdk esp есть system_get_chip_id() возвращает ID устройства, пишут на форумах что уникальный, по факту часть MAC адреса Можно его использовать для идентификации устройства. К сожалению у attiny ничего похожего на id или серийный номер нет, а то получилась бы совсем уникальная связка.
На примере Blynk аутентификация и авторизация устройства осуществляется только по токену
Идея в чем: у вас MQTT Брокер и 20 устройств. Вы безусловно отличите их по MAC адресу. Но если мы говорим, что никто не должен знать токен (фактически пароль), то нам нужно его сделать длинным. Это решает токен. А МАС адрес можно перебрать. Я бы взял в пример решения thingspeak, amazon - у них же mqtt для железок. у них там есть логин, пароль и т.п.. @popsodav посмотрите, пожалуйста. гиганты плохого не посоветуют. Пофлексить их решение всегда можно.
Т.е. хотите включить токен в название топика? Наверно это юзер может сам сделать, если захочет. Например, забьёт в настройка топик вида: /waterius/тут_токен/
Кстати, да. Окей
Супер!
Только есть ошибка с указателями логина/пароля.. Когда char*, то туда надо передавать либо null, либо целую строку.
Потому что в коде будет подобная проверка if(user != NULL)
и пустой логин ее пройдет (String(sett.mqtt_login).c_str()
).
я сейчас это исправлю.
@popsodav проверьте пожалуйста с логином/паролем и без. В ближайшие дни не смогу проверить с платой. Я думаю надо по дефалту test.mosquitto.org вписать. Конечно, нужно написать в документации, что это открытый брокер и только для тестирования. Что скажете?
Проверка доступа: в Ватериусе указываем:
mqtt хост: 192.168.1.5
mqtt порт: 1883
mqtt топик: waterius/6901727/
mqtt логин: test // если нужна авторизация
mqtt пароль: test // если нужна авторизация
Если нужна авторизация по логину и паролю инструкция:
Создаем файл с разрешенными логинами и паролями
mosquitto_passwd -b <полный путь>/pass.txt user password
в конфигурации mosquitto.conf:
allow_anonymous false
password_file <полный путь>/pass.txt
в конфигурации mosquitto.conf:
bind_address 192.168.1.5 // говорим, чтобы работал на локальном ip
Запускаем локальный брокер с файлом конфигурации: mosquitto -c mosquitto.conf
Подписываемся на топики:
mosquitto_sub -h 192.168.1.5 -t "waterius/#" -u "test" -P "test" -v
Запускаем Ватериус и видим данные:
waterius/6901727/ch0 0.00
waterius/6901727/ch1 0.00
waterius/6901727/delta0 0
waterius/6901727/delta1 0
waterius/6901727/voltage 2.95
waterius/6901727/resets 0
waterius/6901727/good 1
waterius/6901727/boot 8
waterius/6901727/imp0 0
waterius/6901727/imp1 0
waterius/6901727/version 5
waterius/6901727/version_esp 0.7
Поддержка протокола MQTT для Waterius