В рубриці DOU Labsми запрошуємо IT-компанії ділитись досвідом власних цікавих розробок та внутрішніх технологічних ініціатив. Питання і заявки на участь надсилайте на editors@dou.ua.
Офіси зазвичай оснащені кулерами для води. В ElifTechвін також є, донедавна цілком пересічний: бутель з водою, дві кнопки для подачі води — гарячої та холодної — і жодних гарантій на те, що вода не закінчиться прямо перед твоєю чашкою. Ми взялися вдосконалити пристрій у рамках внутрішнього експерименту SmartOffice. Тож читайте що з цього вийшло.
Ідея
Ідея експерименту виникла під час командного мозкового штурму, у ході розмови про проекти розумних будинків і автоматизовані побутові прилади. Вирішили надати додаткових можливостей нашому офісному пристрою аби випробувати технології Internet of Things. Кулер — один з найпопулярніших за використанням девайсів, тож він і став пілотним проектом. Ми його назвали «Smart Water Cooler».
Команда розробників
Концепція Smart Water Cooler
У випадку зі звичайним приладом вода у офіс замовляється нерегулярно, доставка відбувається із затримкою. Через це часто-густо колектив залишається без питної води. Smart Water Cooler слідкує за запасом води та завчасно замовляє наступну партію через SMS-повідомлення, процес не потребує втручання людей. Колектив отримує у корпоративний чат нотифікацію від системи — щось на зразок «залишилось води лише на 3 горнятка чаю». Проте якщо людська істота все ж бажає втрутитись, рівень та температуру води можна перевірити з будь-якої точки світу.
Реалізація
Реалізацію розумного кулера ми здійснили у три етапи: дослідили, як влаштовано базову модель; розробили апаратне рішення та запрограмували його, інтегрувавши з Amazon Web Services.
Процеси здійснювали у такій послідовності:
- аналіз рішень для визначення рівня води;
- аналіз платформ та MCU (Micro Controller Unit) для реалізації проекту;
- дослідження будови піддослідного кулера;
- реалізація POC (Proof of Concept) з мінімальним втручанням у апаратну частину;
- розробка ПЗ для мікроконтролера;
- дооснащення Smart Water Cooler;
- розробка ПЗ для моніторингу;
- розробка UI.
Інтеграція визначення рівня води
Ми визначили три кандидати: поплавковий рівень, лічильник протоку рідин та сенсор ваги.
Проаналізувавши їх, відкинули перший, оскільки він потребує втручання у ємність з водою. Другий варіант, лічильник витрат рідини Arduino Water Meter, також потребує контакту з питною водою, до того ж його не так просто купити. Переможцем став сенсор ваги: знаючи показники повного і порожнього бутля, можна вирахувати залишок рідини.
Серед протестованих екземплярів найкраще себе показав масив з
Аналіз платформ та MCU (Micro Controller Unit) для реалізації проекту
Тут ми також мали трьох кандидатів: Tessel 2, Arduino + Ethernet/Wifi shield та ESP8266. Tessel 2 — надто потужне рішення для нашої задачі. Arduino Nano + Ethernet/WiFi shield поступився ESP8266, оскільки той має на борту Wi-Fi, потужний процесор і достатню кількість портів, при цьому його розміри та ціна мінімальні. У якості базової прошивки для MCU використали NodeMCU — це дало змогу вивчити нову мову програмування.
Дослідження будови піддослідного кулера
Кулер виявився, на диво, простим приладом, має багато вільного місця — це дало широкі можливості для апгрейду.
Реалізація POC (Proof of Concept)
Аби перевірити концепції, ми розробили мінімальне ПЗ для MCU. Дані передавали на локальний MQTT broker Mosquitto за допомогою поширеного у IoT стандарту MQTT. Швидкоруч прилаштували MCU у кулер і підключили термосенсор до ємності з водою.
У якості UI виступав MQTT Dashboard Android application, за допомогою якого ми бачимо на графіку зміну температури у реальному часі.
Розробка ПЗ для мікроконтролера
Дані отримуються із двох цифрових датчиків: температурного ds18b20 та датчика ваги через HX711. Передаються вони у JSON-форматі за допомогою протоколу MQTT через Wi-Fi підключення. Скрипти написали на мові Lua, вони виконуються NodeMCU firmware. Через обмеженість MCU, а саме неможливість використати криптографію та сертифікати, ми запустили у локальній мережі окремий MQTT broker у режимі мосту, що підписує повідомлення сертифікатом AWS та передає дані у AWS IoT.
SmartCooler/NodeMCU/cooler.lua на GitHub
Дооснащення Smart Water Cooler
Для спрощення монтажу скомпонували плату-перехідник та разом із додатковим блоком живлення інтегрували у кулер. Згодом підʼєднали датчики ваги і температури.
Розробка ПЗ для моніторингу
У AWS IoT налаштували Rule Action, що зберігає отримані від MCU дані у базу даних DynamoDB.
ПЗ для моніторингу реалізовано у вигляді Serverless Lambda function, що викликається за допомогою AWS CloudWatch із заданим інтервалом часу. Lambda перевіряє актуальний запис у DynamoDB та вирішує, які дії потрібно виконати.
SmartCooler/SupervisorLambda/index.js на GitHub
Lambda надсилає повідомлення у відповідну тему AWS SNS (Simple Notification Service), їх отримують Lambda-функції — так здійснюється нотифікація. Для доставки повідомлення у месенджер одна з Lambda-функцій використовує Slack Webhooks, а інша працює з сервісом Twilio для надсилання SMS.
Розробка UI
Web UI ми розробили на AngularJS та розмістили на AWS S3 у ролі хостингу.
Backend для UI імплементовано у вигляді AWS Lambda, що викликається через AWS API Gateway за допомогою звичайних REST запитів. Таким чином, вся програмна складова працює у Managed Cloud Environment, не потребуючи оренди серверу/VPC та додаткового адміністрування. Кількість використаних ресурсів повністю вписується у AWS Free Tier і фактично не потребує плати за використання.
Tech Stack
- NodeMCU та мова програмування Lua;
- Сервіс Twilio;
- AWS IoT;
- AWS DynamoDB;
- AWS Lambda;
- AWS SNS;
- AWS CloudWatch;
- AWS API Gateway.
Розробкою команда займалась близько місяця у вільний від проектів час. Окрім отриманого фану та пізнання нових технологій, проект спростив роботу офіс-менеджера та урятував офіс від ймовірної засухи.
Вже маємо на прикметі кілька SmartOffice проектів: автоматизація офісної сигналізації для автоматичного керування світлом і автоматизація опалення та кондиціювання повітря у офісі.