diff --git a/README.md b/README.md index 123b20e3..dd32962e 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,48 @@ # AbLog v.3 -### предыдущие версии -Это третья версия подобного решения моего авторства. -* Первая версия представляла из себя сервер под Android (Xamarin), а удалённый доступ предоставлялся через TelegramBot. Проект закрыт. -* Вторая версия приложения работала как под андроидом так и под Windows, Mac и Linux. В роли транспортного протокола использовался IMAP. Проект закрыт. -> Первые версии имели ряд критических недостатков (прежде всего в силу выбранных архитектурных решений/подходов и были окончательно закрыты). Идея хоститься на Android изначально мне очень нравилась, но надёжность хостинга в службах на этих устройствах была непредсказуема/недостаточна. На устройствах некотрых производителей Android устройств (прежде всего Xiaomi и другие китайфоны) работа OS жёстко ограничена и в погоне за максимальной производительностью службы (*Foreground services*) там могли быть внезапно остановлены вопреки ожидаемому поведению, которое официально задукоментировано Android. -Использование протокола IMAP как транспортного так же показало свою ненадёжность в зависимости от хостинга. - ## Введение -Клиент-серверный вариант приложения для доступа к контроллерам умного дома [ab-log](https://ab-log.ru/) через MQTT сервер. Если быть точным, то это комплект из двух приложений (+ доступ через TelegramBot): -- *Серверная часть* **ASP NET6**. Поддерживаемые платформы: Linux, Windows, Mac. Серверная часть имеет полноценный WEB интерфейс и впринципе использование клиента не обязательно. -- *Доступ к серверу через TelegramBot*. Доступ не полноценный если сравнивать с клиентами, но в то же время удалённый доступ к серверным настройкам MQTT возможен только через него. Конечно же MQTT настройки можно настроить через WEB, но для удалённого редактиирования этих настроек пригоден только Telegram. Удалённый клиент не имеет доступ к эим настройкам. -- *Удалённый клиент* **.NET MAUIBlazor Hybrid** через промежуточный MQTT (в т.ч. бесплатный сервис [hivemq.cloud](https://console.hivemq.cloud/)). Поддерживаемые платформы: Windows, Android. Полноценный клиент, который ни чем не уступает локальному/серверному клиенту. Если быть точным, то это буквально один и тот же код Blazor с той лишь разницей, что серверный web клиент общается с сервером посредствам REST/API, а удалённый клиент делает то же самое через промежуточный MQTT сервер. Единственное ограничение в том, что удалённые клиенты не имеют возможности редактировать серверные настройки MQTT (для этого пригоден TelegramBot доступ) +Клиент-серверный вариант приложения для доступа к контроллерам умного дома [ab-log](https://ab-log.ru/). Если быть точным, то это комплект из двух приложений (+ доступ через TelegramBot): +- *Серверная часть* **ASP NET6**. Поддерживаемые платформы: Linux, Windows, Mac. Серверная часть имеет полноценный WEB интерфейс. Использование клиентов не обязательно. +- *Интерактиный доступ* к серверу через **TelegramBot**. Доступ не полноценный если сравнивать с штатным клиентом, но в то же время удалённый доступ к серверным настройкам MQTT возможен только через него. Конечно же MQTT настройки можно настроить через WEB, но для удалённого редактиирования этих настроек пригоден только Telegram. Удалённый клиент не имеет доступ к эим настройкам. +- *Удалённый клиент* **.NET MAUIBlazor Hybrid** через промежуточный MQTT (например через бесплатный сервис MQTT [hivemq.cloud](https://console.hivemq.cloud/)). Поддерживаемые платформы: Windows, Android. Полноценный клиент, который ни чем не уступает локальному/серверному web клиенту. Если быть точным, то это буквально одно и то же решение Blazor с той лишь разницей, что серверный web клиент общается с сервером посредствам REST/API, а удалённый клиент делает то же самое через промежуточный MQTT сервер. Единственное ограничение в том, что удалённые клиенты не имеют возможности редактировать серверные настройки MQTT (для этого пригоден TelegramBot доступ) + +## План +- [x] Локальный WEB клиент для серврной части +- [x] Клиент удалённого доступа к серверу +- [x] Интерактивный доступ к системе через TelegramBot +- [ ] Сценарии: пакеты команд с базовой логикой ветвления по условию +- [ ] Тригеры: автозапуск сценариев/команд по событию +- [ ] Доступ к USB камерам сервера средствами решения [FlashCap](https://github.com/kekyo/FlashCap) ## Настройка сервера -... -### MQTT conf -... - -### Email conf -... +### Требования +Серверная часть представляет из себя ASP.NET6 приложение (порт по умолчанию 5000) + клиентский Blazor UI. +Для Linux или Windows рекомендуется сконфигурировать работу приложения в качестве службы. +Есть рабочий [пример файла](https://github.com/badhitman/AbLog/blob/main/AbLogServer.Server/ab-log.service) демона под Linux, но вы можете сконфигурировать службу любым другим удобным способом. ### TelegramBot conf -... +Клиент Telegram (по сравнению с клиентами удалённого доступа) хоть и ограничен в плане функциональности, но имеет несколько важных преимуществ. +1. Удалённая настройка MQTT сервера возможна только через телегу. Штатные удалённые клиенты как и серверная часть кинфигурируют только своё персональное/локальное MQTT подключение. Для возможности удалённо настраивать MQTT для серверного приложения без доступа к нему локально - потребуется доступ через Телегу. +2. Отсутсвуют лимиты на трафик в отличие от MQTT, где такое ограничени может быть. Например предлагаемый [hivemq.cloud](https://console.hivemq.cloud/) в бесплатной версии ограничен 10GB в месяц. +3. Для телеги есть возможность разграничить права персонально для каждого клиента в то время как штатные клиенты удалённого доступа все равны между собой и имеют одинаковый полный доступ к удалённой системе. +4. Получение уведомлений от удалённой системы. Штатные клиенты удалённого доступа в этом плане пасивны. -## Настройка клиента -... +### MQTT conf +Для удалённого доступа клиентов к системе может быть использован Telegram, но функционал в нём не полноценный, хотя Телега всё таки имеет некоторые преимущества в сравнении с штатными удалёнными клиентами. +![Конфигурация MQTT серверной части.](/docs/img/mqtt-conf-server.png) +Помимо стандартных настроек: сервер, порт, логин и пароль существуют дополнительные: +* размер пакета (bytes max) - ограничение на максимальный размер одного сообщения MQTT +* идентификатор клиента - не для авторизации, а для персонализации логов. Серверная часть ведёт логи дейтсвий и для того что бы в этих логах можно было понять от чьего имени была выполнена та или иная команда рекомендуется каждому клиенту дать своё уникальное имя +* постоянное подключение - признак того, что подключение к MQTT должно быть запущено автоматически при старте программы +* шифрование - установка парольной фразы для шифрования всего трафика между серверной частью и удалёнными клиентами (за исключением Telegram). Каждое сообщение/пакет будет зашифровано методом AES/RFC2898 с применением вашей парольной фразы. *Эта настройка должна быть одинаковой для сервера и её клиентов* +* префикс MQTT - имена топиков будут модифицироваться/дополняться на лету, для того что бы разные группы пользователей могли подключаться к своим удалённым серверам не конфликтувя между собой. *Эта настройка должна быть одинаковой для сервера и её клиентов* -### Email conf -... +## Настройка клиента +Настройки клиента схожи с серверными. Префикс имён топиков, сервер и парольная фраза должны быть идентичными с серверными для согласованности, а логин/пароль могут быть персональными. Идентификатор клиента обязательно должен быть у каждого свой, иначе в логах будет не отличить усзлы друг от друга -### TelegramBot conf -... +### Требования +Приложение **.NET MAUIBlazor Hybrid** может быть установлено на Windows или Android устройство. ## Доступ к контроллерам AB Log ... @@ -46,9 +56,6 @@ ### Ручной доступ к портам ... -### Доступ к USB камерам сервера -... - ## Вопросы и ответы ### Конфидициальность/Безопасность Использование шифрования трафика MQTT парольной фразой обеспечит достаточную анонимнось что бы ни кто не мог увидеть данные, которые ходят между серверной частью и удалённым клиентом. В то же время: серверная часть так же как и удалённый клиент Все данные открыто хранят в своей локлаьной БД. Если злоумышленник получит доступ локальному диску сервера или клиента - он получит доступ в том числе и к логинам/паролям MQTT, что позволит получить полный доступ к данному программному решению. Следует иметь ввиду, что удалённый клиент хранит у себя только настройки MQTT, а всё остальное для него проходит в режиме онлайн через MQTT транспорт. @@ -60,7 +67,7 @@ В качестве СУБД используется SQLite. Это касается как удалённого клиента так и сервера. В то же время: удалённый клиент хранит у себя только настройки подключения к MQTT, а остальные настройки хранятся в БД серверной части. ### Использование MQTT -Вы можете использовать любой MQTT сервер, в т.ч. свой собственный локальный. Единственное требование, что бы была поддержка MQTT протокола пятой версии. +Вы можете использовать любой MQTT сервер, в т.ч. свой собственный. Единственное требование, что бы была поддержка протокола MQTT v.5. ### Особенности и ограничения использования бесплатного MQTT hivemq.cloud На данный момент бесплатный тарифный план имеет следующие ограничения: @@ -71,4 +78,11 @@ > 10 гигабайт в месяц - это довольно много, но если вдруг у вас кончится трафик, то вы можете просто удалить и заново создать сервер в личном кабинете hivemq.cloud и счётчик начнётся с нуля. В таком случае вам конечно потребуется сменить настройки сервера и удалённых клиентов. На удалённых клиентах настройки меняются только локально, а серверная часть в дополнении к локлаьному изменению имеет возможнсоть менять эти настрйоки через Telegram. ### Изоляция нескольких контуров в рамках одного сервера MQTT (префиксы топиков) -Если у вас один единственный сервер MQTT, то по умолчанию все клиенты и сервер вместе с ними находятся в едином контуре. Т.е. имена MQTT топиков и подписки на них в рамках одного сервера будут разносить данные из разных контекстов в единую кучу. Избежать этого позволяет использование префиксов MQTT топиков. Благодаря префиксам имена топиков становятся уникальными в зависимости от рабочего контура. Таким образом разные группы пользователей могут работать не мешаю друг другу. \ No newline at end of file +Если у вас один единственный сервер MQTT, то по умолчанию все клиенты и сервер вместе с ними находятся в едином контуре. Т.е. имена MQTT топиков и подписки на них в рамках одного сервера будут разносить данные из разных контекстов в единую кучу. Избежать этого позволяет использование префиксов MQTT топиков. Благодаря префиксам имена топиков становятся уникальными в зависимости от рабочего контура. Таким образом разные группы пользователей могут работать не мешаю друг другу. + +### Предыдущие версии +Это третья версия подобного решения моего авторства. +* Первая версия представляла из себя сервер под Android (Xamarin), а удалённый доступ предоставлялся через TelegramBot. Проект закрыт. +* Вторая версия приложения работала как под андроидом так и под Windows, Mac и Linux. В роли транспортного протокола использовался IMAP. Проект закрыт. +> Первые версии имели ряд критических недостатков (прежде всего в силу выбранных архитектурных решений/подходов и были окончательно закрыты). Идея хоститься на Android изначально мне очень нравилась, но надёжность хостинга в службах на этих устройствах была непредсказуема/недостаточна. На устройствах некотрых производителей Android устройств (прежде всего Xiaomi и другие китайфоны) работа OS жёстко ограничена и в погоне за максимальной производительностью службы (*Foreground services*) там могли быть внезапно остановлены вопреки ожидаемому поведению, которое официально задукоментировано Android. +Использование протокола IMAP как транспортного так же показало свою ненадёжность в зависимости от почтового хостинга. \ No newline at end of file diff --git a/RazorLib/Shared/settings/MqttConfigComponent.razor b/RazorLib/Shared/settings/MqttConfigComponent.razor index 6e67893d..e126a446 100644 --- a/RazorLib/Shared/settings/MqttConfigComponent.razor +++ b/RazorLib/Shared/settings/MqttConfigComponent.razor @@ -82,7 +82,7 @@ -
Для разделения разных серверов друг от друга в рамках одного общего MQTT сервера
+
Для разделения разных серверных приложений друг от друга в рамках одного общего MQTT сервера
diff --git a/docs/img/mqtt-conf-server.png b/docs/img/mqtt-conf-server.png new file mode 100644 index 00000000..68ebab37 Binary files /dev/null and b/docs/img/mqtt-conf-server.png differ