Разработка системы управления и опроса сети датчиков с использованием технологии LoraWAN
ВВЕДЕНИЕ
С развитием технологий интернета вещей появилось большое количество различных сетевых протоколов, ориентированных на системы интернета вещей. В частности, появилось множество протоколов передачи данных физического уровня, разработанные специально для применения в Iot системах. Появились протоколы проводной передачи данных, такие как knx. Однако наибольший интерес представляют технологии беспроводной передачи данных, такие как ZigBee, Z-Wave и LoraWAN. Помимо протоколов физического уровня также появляются новые протоколы уровня приложений. Один из таких протоколов, это MQTT. Данный протокол позволяет создавать системы с асинхронной связью составляющих ее компонентов с типом связи M2M.Одним из потенциальных способов применения протокола MQTT является внедрение в систему умных датчиков. Это позволит создать информационную систему, рассчитанную на большой поток данных, работа которой основывается на архитектуре управляемой событиями.
ОГЛАВЛЕНИЕ
ОБОЗНАЧЕНИЯ И СОКРАЩЕНИЯ
ХАРАКТЕРИСТИКА ОРГАНИЗАЦИИ
ВВЕДЕНИЕ
АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ
РАЗВОРАЧИВАННИЕ MQTT СЕТИ
ОПИСАНИЕ АРХИТЕКТУРЫ СИСТЕМЫ СБОРА ДАННЫХ
ДЕМОНСТРАЦИЯ РАБОТЫ СИСТЕМЫ
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
Что такое сеть LoraWAN и как она помогает делать бизнес цифровым – URL: https://iot-ertelecom.ru/chto-takoe-set-lorawan-i-kak-ona-pomogaet-delat-biznes-cifrovym/
Технология LoRa в вопросах и ответах 2019. – URL: https://wireless-e.ru/standarty/tehnologiya-lora-v-voprosah-i-otvetah/Анализ временных рядов 2014. – URL: https://chaos.phys.msu.ru/loskutov/PDF/Lectures_time_series_analysis.pdfClickHouse: очень быстро и очень удобно 2017. – URL: https://habr.com/ru/post/322724/Об одном подходе к обработке временных рядов 2015. – URL: https://cyberleninka.ru/article/n/ob-odnom-podhode-k-obrabotke-vremennyh-ryadov/viewerFast API Documentation. – URL: https://fastapi.tiangolo.com//
Модуль для записи в СУБД ClickHouse оказался не таким тривиальным. Все дело в том, что в отличие от классических реляционных СУБД , например Postgres, ClickHouse, хоть и может в какой угодно момент времени достаточно быстро отдать выборку данных большого объема и отфильтрованную по любому признаку, данная СУБД не рассчитана на частое выполнение операций записей. Слишком частый вызов операций записи (чаще, чем одна запись в 2 секунды) может привести к потери записываемых данных. Поэтому при написании клиента ClickHouse пришлось прибегнуть к не тривиальным решениям. Принцип работы клиента таков, что для каждой сущности в базе данных создается отдельный экземпляр класса ClickHouseWriter. Это класс, в свою очередь, наследует класс ClickHouseDriver, который создает корутину clickhouse_query_executor. Данная корутина непосредственно занимается отправкой sql комманд на СУБД. В системе может выполнятся только одна корутина clickhouse_query_executor, которая создается самым первым экземпляром ClickHouseDriver. Все остальные экземпляры подключаются к уже существующей корутине через глобальную очередь сообщений. Помимо прочего, для каждого экземпляра ClickHouseDriver создается корутина writer_checker, которая занимается мониторингом записываемых данных и решает когда эти данные нужно передать в clickhouse_query_executor для записи данных в базу данных. Таким образом организовывается механизм буферизации данных. Данные, переданные в ClickHouseWriter не отправляются прямиком в базу данных, а хранятся локально в буфере до тех пор, пока условия для записи не будут выполнены (условиями для записи могут быть таймаут или переполнения буфера).