MYCSS

2024-12-22

Моніторинг температури та сповіщення про критичні значення. Оновлення проєкту. Python.

Metrics of temperature and alerts.

 Вступ

До складних часів, коли було ще де і ради чого жити, я поступово впроваджував елементи розумного будинку

Одним із таких кроків стала інтеграція Bluetooth BLE термометрів Xiaomi Mijia (LYWSD03MMC), прошитих альтернативною прошивкою для зручності взаємодії через MQTT брокер.


Перша версія проєкту

До часів навчання на курсах Python Developer я створив невеликий консольний проєкт (v.0.1.0). Хоча спершу я не повністю розумів внутрішню логіку, проєкт дозволяв збирати інформацію про температуру, використовуючи ноутбук як локальний сервер.

Мотивація для оновлення

З набуттям нових знань та навичок під час навчання я почав сприймати код по-новому. А тут ще й зима настала: овочі на балконі потрібно було вчасно заносити до кімнати, щоб уникнути їх промерзання. Заморозки наближалися, тому я вирішив вдосконалити проєкт, додавши функцію сповіщень про критичні температури.

Оновлення проєкту

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

У новій версії додано:

  • Консольне логування для відстеження змін температури.
  • Локальні сповіщення операційної системи.
  • Віддалені сповіщення через платформу Discord.

Особливості реалізації

Для Windows виникла проблема: стандартні сповіщення зникають через певний час і не зберігаються в історії. У macOS також не вдалося знайти універсальне мультиплатформне рішення. Всупереч цьому, кожна платформа отримала свою оптимізацію.

Висновок

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

Випустив на сьогодні версію 0.3.1 ось основні зміни:

  • Перероблений код для використання класів: Оригінальний код (версія 0.1.0) було переписано з використанням принципів об'єктноорієнтованого програмування (ООП), з використанням класів для кращої структури та зручності супроводу.
  • Підтримка асинхронної роботи з asyncio: Значна частина коду була перероблена для використання асинхронного програмування з asyncio з метою підвищення продуктивності, особливо для обробки завдань, пов'язаних з вводом/виводом.   
  • Система сигналізації: Додано систему сигналізації з настроюваними пороговими значеннями низької та високої температури. Сповіщення спрацьовують, коли температура перевищує або опускається нижче цих порогових значень.
  • Модулі сповіщень: Інтегровано набір модулів сповіщень для сповіщення користувачів про тривожні події. Система сповіщень підтримує різні методи виводу, включаючи консоль, ведення журналу та повідомлення Discord.
  • Багато платформні сповіщення: Додано підтримку систем сповіщень для різних платформ:
    • Windows: Використовує тости windows для власних сповіщень із підтримкою історії за допомогою winrt-windows.UI.Notifications.
    • macOS: Використовує pync, обгортку для термінального сповіщувача, для забезпечення базової функціональності сповіщень.
    • Linux: Інтегрує пакет plyer для сповіщень (ще не повністю протестовано).
  • Шаблони проєктування для сповіщень: Використано патерни проєктування для визначення декількох методів для сповіщень та виводу, що робить систему більш гнучкою та розширюваною.
  • Асинхронний вивід через завдання черги: Модулі виводу тепер підтримують асинхронну обробку за допомогою завдань черги, що дозволяє більш ефективно обробляти дані.
  • Синхронізація логування: Модуль логування використовує завдання черги для асинхронного виводу і синхронізується з модулем виводу за допомогою блокування, щоб забезпечити безпеку асинхронних операцій.
  • Параметри, що налаштовуються через консоль: Додано параметри, якими можна керувати за допомогою командного рядка під час запуску консольної програми. Загальні параметри тепер можна зчитувати з середовища або з файлу .env, що робить процес конфігурації більш гнучким і специфічним для конкретного середовища.
  • Windows і macOS .exe компіляція: Наявні скрипти включено для створення .exe-версії програми. Процес збірки було протестовано як на Windows, так і на macOS, що полегшує запуск інструменту на цих платформах без використання середовища Python.
  • Poetry для керування пакунками: Проєкт використовує Poetry для управління залежностями та пакування, забезпечуючи узгодженість середовищ для розробки та виробництва.

Проєкт оформлений в репозиторії  Show temperature from BLE ADV ATC MiThermometer де доданий реліз 0.3.1 де доданні компільовані версії для операційних систем: Windows та macOS x86_64 (Intel).

Приклади роботи

macOS. Output and system notification.

Параметри програми:
usage: MiTermometerPVVX.exe [-h] [-n NAMES [NAMES ...]] [-lt ALERT_LOW_THRESHOLD] [-ht ALERT_HIGH_THRESHOLD] [-st SENT_THRESHOLD_TEMP] [-dtp] [-m {auto,passive,active}]
                            [-nf {logger,discord,system,none} [{logger,discord,system,none} ...]] [-d] [-v]

Show temperature and humidity from BLE ADV 'ATC MiThermometer' and alarm on temperature.

options:
  -h, --help            show this help message and exit
  -n NAMES [NAMES ...], --names NAMES [NAMES ...]
                        Define custom names in the format KEY=VALUE, where KEY can match with end of device name (e.g., 12345="OUTSIDE"). Default is not used.
  -lt ALERT_LOW_THRESHOLD, --alert-low-threshold ALERT_LOW_THRESHOLD
                        Set the temperature alert threshold less than (e.g., 5.0 for 5°C). Use 'None' to disable. Default is None.
  -ht ALERT_HIGH_THRESHOLD, --alert-high-threshold ALERT_HIGH_THRESHOLD
                        Set the temperature alert threshold higher than (e.g., 40.0 for 40°C). Use 'None' to disable. Default is None.
  -st SENT_THRESHOLD_TEMP, --sent_threshold_temp SENT_THRESHOLD_TEMP
                        Set the delta temperature alert threshold for send next notification. Default is 1.0.
  -dtp, --disable_text_pos
                        Used when need to disable use text position and use plain print. Default is enabled.
  -m {auto,passive,active}, --mode {auto,passive,active}
                        Select scan mode. Default is 'auto'.
  -nf {logger,discord,system,none} [{logger,discord,system,none} ...], --notification {logger,discord,system,none} [{logger,discord,system,none} ...]
                        Select notification mode individually or multiple, separated by space. Default is 'logger'.
  -d, --debug           Enable debug output. Default is disabled.
  -v, --version         Show the version of the application

Сповіщення:

Windows notification history.

Discord message notification


Немає коментарів:

Коли забув ти рідну мову, біднієш духом ти щодня...
When you forgot your native language you would become a poor at spirit every day ...

Д.Білоус / D.Bilous
Рабів до раю не пускають. Будь вільним!

ipv6 ready