Skip to content

Commit

Permalink
+
Browse files Browse the repository at this point in the history
  • Loading branch information
badhitman committed Aug 3, 2023
1 parent ef9cdbf commit 2b207a7
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 30 deletions.
72 changes: 43 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
@@ -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
...
Expand All @@ -46,9 +56,6 @@
### Ручной доступ к портам
...

### Доступ к USB камерам сервера
...

## Вопросы и ответы
### Конфидициальность/Безопасность
Использование шифрования трафика MQTT парольной фразой обеспечит достаточную анонимнось что бы ни кто не мог увидеть данные, которые ходят между серверной частью и удалённым клиентом. В то же время: серверная часть так же как и удалённый клиент Все данные открыто хранят в своей локлаьной БД. Если злоумышленник получит доступ локальному диску сервера или клиента - он получит доступ в том числе и к логинам/паролям MQTT, что позволит получить полный доступ к данному программному решению. Следует иметь ввиду, что удалённый клиент хранит у себя только настройки MQTT, а всё остальное для него проходит в режиме онлайн через MQTT транспорт.
Expand All @@ -60,7 +67,7 @@
В качестве СУБД используется SQLite. Это касается как удалённого клиента так и сервера. В то же время: удалённый клиент хранит у себя только настройки подключения к MQTT, а остальные настройки хранятся в БД серверной части.

### Использование MQTT
Вы можете использовать любой MQTT сервер, в т.ч. свой собственный локальный. Единственное требование, что бы была поддержка MQTT протокола пятой версии.
Вы можете использовать любой MQTT сервер, в т.ч. свой собственный. Единственное требование, что бы была поддержка протокола MQTT v.5.

### Особенности и ограничения использования бесплатного MQTT hivemq.cloud
На данный момент бесплатный тарифный план имеет следующие ограничения:
Expand All @@ -71,4 +78,11 @@
> 10 гигабайт в месяц - это довольно много, но если вдруг у вас кончится трафик, то вы можете просто удалить и заново создать сервер в личном кабинете hivemq.cloud и счётчик начнётся с нуля. В таком случае вам конечно потребуется сменить настройки сервера и удалённых клиентов. На удалённых клиентах настройки меняются только локально, а серверная часть в дополнении к локлаьному изменению имеет возможнсоть менять эти настрйоки через Telegram.
### Изоляция нескольких контуров в рамках одного сервера MQTT (префиксы топиков)
Если у вас один единственный сервер MQTT, то по умолчанию все клиенты и сервер вместе с ними находятся в едином контуре. Т.е. имена MQTT топиков и подписки на них в рамках одного сервера будут разносить данные из разных контекстов в единую кучу. Избежать этого позволяет использование префиксов MQTT топиков. Благодаря префиксам имена топиков становятся уникальными в зависимости от рабочего контура. Таким образом разные группы пользователей могут работать не мешаю друг другу.
Если у вас один единственный сервер MQTT, то по умолчанию все клиенты и сервер вместе с ними находятся в едином контуре. Т.е. имена MQTT топиков и подписки на них в рамках одного сервера будут разносить данные из разных контекстов в единую кучу. Избежать этого позволяет использование префиксов MQTT топиков. Благодаря префиксам имена топиков становятся уникальными в зависимости от рабочего контура. Таким образом разные группы пользователей могут работать не мешаю друг другу.

### Предыдущие версии
Это третья версия подобного решения моего авторства.
* Первая версия представляла из себя сервер под Android (Xamarin), а удалённый доступ предоставлялся через TelegramBot. Проект закрыт.
* Вторая версия приложения работала как под андроидом так и под Windows, Mac и Linux. В роли транспортного протокола использовался IMAP. Проект закрыт.
> Первые версии имели ряд критических недостатков (прежде всего в силу выбранных архитектурных решений/подходов и были окончательно закрыты). Идея хоститься на Android изначально мне очень нравилась, но надёжность хостинга в службах на этих устройствах была непредсказуема/недостаточна. На устройствах некотрых производителей Android устройств (прежде всего Xiaomi и другие китайфоны) работа OS жёстко ограничена и в погоне за максимальной производительностью службы (*Foreground services*) там могли быть внезапно остановлены вопреки ожидаемому поведению, которое официально задукоментировано Android.
Использование протокола IMAP как транспортного так же показало свою ненадёжность в зависимости от почтового хостинга.
Loading

0 comments on commit 2b207a7

Please sign in to comment.