Бездротова інтелектуальна система охоронної сигналізації для котеджного містечка

Виконав студент групи ПП-32
Філоненко Олексій Вячеславович

Науковий керівник: Сайко Володимир Григорович

Актуальність теми

Актуальність теми зумовлено важливістю забезпечення безпеки домашніх господарств, таких як котеджні містечка, без необхідності фізичної присутності власників.

Більшість систем є або застарілі, або занадто ресурсоємні, або не підтримують розпізнавання руху. Найкращі охоронні системи, на жаль, є здебільшого з закритим вихідним кодом і є платними за підпискою.

Такі системи мають бути доступні великій аудиторії користувачів, і (бажано) працювати на малопотужних пристроях, наприклад, Raspberry Pi. Це дозволить домашнім господарствам зберегти час та кошти.

Задачі курсової роботи

  • Вивчити і порівняти основні існуючі системи для моніторингу
  • Визначити їх переваги та недоліки
  • Вивчити теоретичні засади побудови систем моніторингу
  • Описати технічне завдання для виконання
  • Застосувати новітні технології та принципи в процесі розробки
  • ​Створити прототип веб-застосунку і серверної частини ​

Основні відмінності системи від аналогів

  • Не займає багато ресурсів (може бути запущена на малопотужних пристроях)
  • Використовує сучасні протоколи інтерсерверної комунікації (WebSockets, JSON-RPC)
  • Невразлива до випадкових помилок (зависання ОС, помилка кодування тощо)
  • Не прив'язана до веб-серверів конкретних учасників кластеру
  • HTML-сторінки можуть бути переглянуті як JSON REST API
  • Легка в розвертанні та адміністрації завдяки NixOS Linux та Docker

Схема бази даних

Tailwind CSS - невеликий CSS-фреймворк, який дозволяє описати велику кількість дизайну сайту, використовуючи лише HTML-класи.

Такий підхід дозволяє не витрачати час на переписування стандартних стилів з фреймворків на кшталт Bootstrap, а зосередитись на власному баченні.

Весь (нехай простий) дизайн застосунку створено за допомогою Tailwind CSS, без жодного рядку CSS.
Elixir - функційна мова програмування загального призначення з сильною (strongly typed) динамічною типізацією.

Код програми виконується в легких потоках. Потоки ізольовані і не мають спільного стану. Передача даних можлива тільки через обмін повідомленнями.

Elixir побудований на віртуальній машині Erlang (BEAM), що надає застосункам таких властивостей, як підтримка розподіленості, кластеризації та невразливості до помилок.
Rust - системна мова програмування зі строгою типізацією, розроблена в Mozilla. Основна ціль мови - надати середовище для розробки потужних, швидких, безпечних в контексті пам'яті та потоків (на відміну від C/C++) застосунків будь-якого напрямку.

Rust надає зручні засоби для інтеграції з іншими мовами, наприклад, як зовнішні нативні функції для Erlang. Транскодування форматів, що не підтримуються багатьма браузерами (WebM, MKV) в застосунку виконане саме цим способом.

Shinobi - проект на NodeJS, який дозволяє використовувати IP-камери через зручний API.

Кожна камера має один чи більше відеопотоків, якими керує API Shinobi. Саме ними і користується застосунок. Кожний учасник кластеру може приєднати до кластеру власний інстанс Shinobi зі своїми камерами або користуватися камерами з інших інстансів.

Використання даного проекту дозволило значно зменшити витрати часу на розробку розпізнавання руху, підтримку більшості форматів відео тощо.

Висновки

У результаті виконаної курсової роботи розроблено програмну систему «Моніторинг камер».

Для дослідження теоретичних основ було взято існуючі програмні забезпечення та теоретичні відомості про оперування охоронних систем та сформовано функціонал, який відповідає цим відомостям.

В процесі написання роботи я набув навичок роботи з розподіленими та високо-оптимізованими системами,
інструментами дизайну, механізмами кодування відео.

Демо-версія на https://cctv.brightone.space