DOU Labs: як в ElifTech розробили розумний кулер для води

У рубриці 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.

Процеси здійснювали в такій послідовності:

Інтеграція визначення рівня води

Ми визначили три кандидати: поплавковий рівень, лічильник протоку рідин та сенсор ваги.
Проаналізувавши їх, відкинули перший, оскільки він потребує втручання у ємність з водою. Другий варіант, лічильник витрат рідини Arduino Water Meter, також потребує контакту з питною водою, до того ж його не так просто купити. Ставши Переможцем сенсор ваги: знаючий показники повного і порожнього бутля, можна вирахувати залишок рідини.

Серед протестованих екземплярів найкраще собі показавши масив з 4-х датчіків, що використовується у звичайних вагах, Scale Sensor Load OR Cell. Для під'єднання датчика до MCU ми використали плату HX711 (Load Cell Amplifier).

Аналіз платформ та 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-функції — так здійснюється нотифікація. Для доставки повідомлення у месенджер одна з Лямбда-функцій використовує 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

Розробкою команда займалась близько місяця у вільний від проектів годину. Окрім отриманого фану та пізнання нових технологій, проект спростив роботу офіс-менеджера та урятував офіс від ймовірної посухи.

Вже маємо на прикметі кілька SmartOffice проектів: автоматизація офісної сигналізації для автоматичного керування світлом і автоматизація опалення та кондиціювання повітря в офісі.

Опубліковано: 07/09/17 @ 07:00
Розділ Різне

Рекомендуємо:

Проблеми з трафіком або позиціями? Допоможемо визначити причину безкоштовно
DOU Проектор: Wake App In Peace — будильник та допомогу армії в одному додатку
«Місцеві» проти «понаїхали»
DevOps дайджест #15: як заробити на Jaguar Xf
«Як я провів літо-2017»: літні свята в українських IT-компаніях