Статьи

розумний будинок | Блог ІТшніка

Average Rating 0 out of 5 stars. 0 votes.

Завдання визначення господарів будинку вже більш менш вирішена. Підключивши майже будь-який пристрій до Majordomo через модуль "Прості пристрої" можна виставити настройку "Зміна означає активність в приміщенні".

Що б активність спрацьовувала, потрібно вибрати приміщення де працює девайс. Це робиться в випадаючому списку «Позиціонування».

Але ми ж хочемо наблизиться що б у нас була не домашня автоматизація, а розумний будинок. Але будинок дійсно буде розумним коли навчиться елементарно відрізняти вас від іншого члена сім'ї. Для людини це досить просте завдання, а ось з машину все трохи складніше. Я спробував вирішити це питання, хто і де саме з користувачів "розумного будинку" знаходиться в даний момент. Вирішивши цю задачу можна буде зробити сценарії більш інтелектуальними.

Отже, що нам може допомогти на ранньому етапі вирішити цю задачу? Перше ніж можна скористатися це індикатор підключення особистого телефону до домашньої мережі. Як правило роутери привласнюють один і той же IP адреса одному і тому ж пристрою в момент з'єднання по WI-FI. Якщо це не так у вашому середовищі, то погуглити як переконфигурировать ваш роутер. Що б заробила ця схема йдемо в розділ "Пристрої Online" і додаємо туди все особисті пристрої та їх IP адреси.

Далі в розділі "Об'єкти" знаходимо клас "Users" і додаємо туди всіх членів сім'ї. У всіх буде автоматично створено властивість "atHome". Якщо воно дорівнює "1", то Majoedomo вважає що користувач перебуває вдома. Тому повертаємося в розділ "Пристрої Online" вибираємо телефон, вибираємо "Код" для пункту "Дія при переході в Online" і вставляємо туди команду:

sg ( "admin.atHome", 1);
Для "Дія при переході в Offline", вставляємо:

sg ( "admin.atHome", 0);
Таку ж процедуру проробляємо з усіма пристроями, не забуваючи замінити "admin" на ім'я користувача з класу "Users".

Далі я раджу поставити модуль "Статуси системи". У розділі "Пристрої" ви побачите всі ваші додані телефони. Для кожного з них вибираєте жовтий статус і вписуєте текст, який буде відображатися в лівому верхньому кутку головної сторінки. У моєму випадку якщо моє пристрій буде офлайн, то буде відображатися текст "Телефон Алекс У літаку».

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

Друге що мені спало на думку це NFC мітки. Що це таке і як працює я розповідати не буду. Ютуб в допомогу. Розповім лише застосування цієї технології для вирішення моєї завдання. Я маю на увазі що у всіх хто користується "розумним будинком" є телефон з модулем NFC. Встановлюємо будь-який додаток, яке вміє відправляти HTTP запити при сполученні з NFC міткою. Наприклад "Trigger writer" під Android. Далі приклеюєте на двосторонній скотч NFC мітки всюди де ви часто залишаєте телефон. У мене в наявності було 2 мітки і я одну приклеїв під робочий стіл, а другу на тумбочку біля ліжка. Потім в додатку створив 2 NFC події. Що б при спрацьовуванні на кожну мітку в мажордомом вирушав HTTP запит, який говорить хто і де знаходиться. Ось приклад запиту для користувача admin, який знаходиться в спальні:

http://192.168.1.101:80/objects/?op=set&object=Bedroom&p=User&v=admin

Тепер нам потрібно обробляти цей HTTP запит. У класі "User" додаємо властивості: "Location" і "LocateUpdated", а в класі "Rooms" додаємо метод "CheckUser", потім додаємо властивість: "User" і виставляємо налаштування запускати метод "CheckUser" на зміну якості "User". У вихідний код методу "CheckUser" вставляємо:

$ ObjectsRooms = getObjectsByClass ( "Rooms");
$ Time = date ( 'H: i');
foreach ($ objectsRooms as $ obj) {
$ User = getGlobal ($ obj [ 'TITLE']. ". User");
$ Location = getGlobal ($ obj [ 'TITLE']. ". Title");
if ($ user == "admin") {
sg ( "admin.Location", $ location);
sg ( "admin.LocateUpdated", $ time);
cm ($ obj [ 'TITLE']. ". onActivity");
sg ($ obj [ 'TITLE']. ". User", "");
SetTimeOut ( "ClearAdminLocation", "sg ( 'admin.Location', '');", 10 * 60);
SetTimeOut ( "ClearAdminLocateUpdated", "sg ( 'admin.LocateUpdated', '');", 10 * 60);
}
else if ($ user == "Vika") {
sg ( "Vika.Location", $ location);
sg ( "Vika.LocateUpdated", $ time);
cm ($ obj [ 'TITLE']. ". onActivity");
sg ($ obj [ 'TITLE']. ". User", "");
SetTimeOut ( "ClearVikaLocation", "sg ( 'Vika.Location', '');", 10 * 60);
SetTimeOut ( "ClearVikaLocateUpdated", "sg ( 'Vika.LocateUpdated', '');", 10 * 60);
}
}

Додаєте стільки блоків "else if", скільки у вас користувачів, ну і замініть імена в блоці порівняння. Імена повинні збігатися з тими, які ви передаєте в HTTP запиті з мобільного додатка і ті що у вас в класі "User".
В результаті, після того як спрацює коннект з NFC міткою заповнюється властивість "admin.Location" і "admin.LocateUpdated". Тим самим мажордомом розуміє хто і де і коли знаходиться. Таку інформацію можна виводити в "State" (лівий верхній кут). Це можна робити наприклад ось так:

% Admin.fullName% -% Admin.Location% (% admin.LocateUpdated%)

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

І заключний четвертий і найкрутіший спосіб визначати користувача - це за допомогою нейронної мережі. Про це способі я знімав демонстраційний ролик . Поки у мене всього одна камера і вона може визначати користувача тільки в одному місці. Якщо ви хочете що б мажордомом змогло визначати ваше перебування у всіх приміщеннях, то вам знадобиться стільки камер, скільки у вас приміщень. Я купив ще одну камеру, чекаю доставки і буду пробувати інтегрувати її в свою логіку.
Алгоритм визначення користувача наступний. Додаю IP камеру через "Прості пристрої", так само додаємо будь-датчик руху або якщо можливо використовувати вбудований датчик руху в камеру. Як тільки спрацював датчик, робимо снепшот, зберігаємо його на файлової системи, запусків нейронну мережу і скармливаем їй фото. Результати роботи мережі відправляються в мажордомом в відео певного числа. Залежно від значення приймається рішення хто на фото. Якщо на фото є людина, яка є користувачем системи, то виставляємо властивості "Location", "atHome" і "LocateUpdated" як в прикладі з NFC. Великий мінус визначення особи в тому що він вимагає процесорний час і на малинку таку штуку особливо не інтегруєшся. До того ж мій спосіб використовує пітон, а це теж вимагає установки додаткового інтерпретатора.

Буду радий вислухати будь-які ваші пропозиції щодо вдосконалення і виправлення можливих помилок.

Average Rating 0 out of 5 stars. 0 votes.Отже, що нам може допомогти на ранньому етапі вирішити цю задачу?
Objects/?

Новости

Как создать фото из видео
Кризис заставляет искать дополнительные источники дохода. Одним из таких источников может стать торговля на валютном рынке Форекс. Но чтобы не потерять свои деньги необходимо работать с надежным брокером.

Как оформить группу в вконтакте видео
Дано хотел свой магазин в вк, но не знал с чего начать его делать. Так как хотелось не банальный магазин с кучей ссылок и фото, а красиво оформленный. С меню, с аватаркой. После просмотра видео создал

Как оформить диск малыш от рождения до года из фото и видео
Оформить диск "Малыш от рождения до года" из фото и видео можно совершенно разными способами! Кто-то для достижения данной цели идет на шоу-таланты, кто-то пользуется услугами профессионалов, а кто-то

Как создать видео без программ
Реклама - это один из видов деятельности, который помогает людям продвигать свои товары или услуги. Одним из таких видов рекламы является - раздача листовок или более современное название "флаеров". Раздача

Финансовые новости мира
Вернуться в раздел Профессия экономист Экономисты востребованы в компаниях, где требуется контролировать расходы, правильно рассчитывать средства, где необходим постоянный анализ экономической деятельности

Транспортное средство закон
Пункт 1.5. ПДД гласит: «Участники дорожного движения должны действовать таким образом, чтобы не создавать опасности для движения и не причинять вреда», а в пункте 1.2. указано: «Участник дорожного движения»

Квест кімната дніпро
Законопроект о запрете посещения квестов детьми младше 14 лет прокомментировал один из самых популярных в России квест-агрегаторов. Поправки в городской закон о мерах по предупреждению причинения вреда

Труба в изоляции Valsir Pexal
На сегодняшний день имеется масса самых разных отделочных материалов, которые можно использовать, как внутри, так и снаружи помещения в качестве декоративного элемента, однако большинство из них имеет

Роллы
От того, как и чем мы питаемся зависит очень многое. Это и самочувствие и внешность и общее состояние здоровья. Несмотря на широкое предложение, вопросы правильного и вкусного питания стоят очень остро.

Дешевая доставка суши
Суши можно не только запивать, но и заедать: хорошо с суши сочетаются тэмпура (обжаренные в специальном кляре ломтики овощей, грибы или морепродукты), а также мисо-суп (суп, заправленный бобовой пастой).