Опрос


Что для Вас Умный Дом?


Результаты


Реклама


Использование Wi-Fi точек UniFi в качестве датчика присутствия

07/01/2017 20:02:47

В своем доме я использую точки доступа UniFi, которые обеспечивают надежное покрытие всей площади жилища и уверенный прием в огороде. Всего у меня четыре таких точки - по одной на каждом этаже и точка за пределами дома. Мобильные устройства автоматически и незаметно переподключаются ближайшей точке, что всегда гарантирует высокую скорость доступа в Сеть. Web-приложение UniFi Controller позволяет полностью контролировать работу системы, настраивать точки доступа, видеть какие мобильные гаджеты подключены к сети и к каким именно точкам.

И тут я задался вопросом, а можно ли использовать эту информацию? В самом деле, в современном мире мобильный телефон не просто постоянный спутник человека, а пожалуй уже часть его тела. "Без телефона, как без рук" - говорим мы все чаще и испытываем сильный дискомфорт и тоску, когда любимый гаджет выключается из-за разряженной батареи. Стало быть, регистрация мобильного девайса в Wi-Fi сети с большой долей вероятности говорит и о наличии человека в доме. И, соответственно, наоборот - отсутствие устройства в сети означает, что в доме скорее всего нет и его владельца.

Как это можно использовать. Несколько примеров из реальной жизни.
1. Системы безопасности и охраны. Система Умного Дома может самостоятельно включать режим "охрана", когда в доме нет зарегистрированных устройств. В отличие от человека, она не забудет это сделать, и ей не будет "лень". Одновременно с этим система в зависимости от настроек может выключить свет, закрыть краны, снизить температуру.
2. Если в доме никого нет, а люди сидят в саду / на заднем дворе, и в калитку позвонили (а у меня SIP-домофон), система сможет автоматически "просигнализировать" не в доме, а в саду или даже прислать SMS.
3. Когда мобильные устройства после долгого отсутствия регистрируются в сети, соединяясь с точкой, расположенной рядом с центральным входом, система может поприветствовать всех домочадцев по имени (а у меня для этих целей в прихожей установлена Raspberry Pi с колонками) и в зависимости от того, кто именно пришел, заранее включить свет в нужных комнатах.
4. Работая совмесно с ИК-извещателями, система с высокой долей вероятности сможет определять местоположение людей в доме, автоматически управляя освещением.
5. В отсутствии людей можно запускать сервисные функции системы водоподготовки: обратная промывка засыпных фильтров, регенерация каталитических наполнителей.
6. Запуск в работу роботов-пылесосов

Можно придумать массу других интересных решений, которые сделают пребывание в доме комфортнее и веселее.

Главный вопрос, как получить нужные данные от контроллера UniFi. Очень просто.
Следующий shell-скрипт будет соединяться с контроллером, считывать данные в формате JSON и сохранять их в указанном файле.

#!/bin/bash
username=user
password=password
baseurl=https://192.168.0.250:8443
cookie=/tmp/unifi_cookie
curl_cmd="curl --tlsv1 --silent --cookie ${cookie} --cookie-jar ${cookie} --insecure "
#login
${curl_cmd} --data "{'username':'$username', 'password':'$password'}" $baseurl/api/login > /dev/null 2>&1
${curl_cmd} $baseurl/api/s/default/stat/sta > /var/www/scripts/unifi-users.json
#logout
${curl_cmd} $baseurl/logout > /dev/null 2>&1

Разумеется username, password и baseurl нужно указать свои.
Данный скрипт можно вызывать из cron каждые 1-2 минуты.
В файле unifi-users.json у нас будут сохраняться следующие данные: устройства, их MAC-адреса, время пребывания в сети, адреса точек, которым подключены устройства и другая полезная информация.

Теперь остается только использовать эту информацию там, где это необходимо.
Для наглядности я приведу пример PHP-скрипта, который выводит информацию о присутствующих в Web-интерфейсе Умного Дома.

<?
// Точки доступа и их наименования
$aps = array (
"24:a4:1c:de:03:5c" => "Подвал",
"24:a4:1c:da:8a:17" => "1 этаж",
"24:a4:1c:de:03:6a" => "2 этаж",
"04:12:d6:9e:f1:23" => "Сад",
);

// Устройства, которые мы отслеживаем.
// Здесь мы указываем персональные устройства, так как помимо мобильных телефонов
// в системе могут быть зарегистрированы блоки автоматики, планшеты
// и другие устройства, отслеживание которых не имеет практического смысла.
$clients = array (
"f0:db:f2:b4:79:11" => "Наташа",
"90:fd:62:0c:ce:9c" => "Элен",
"08:70:42:2d:7d:41" => "Мари",
"28:ed:6b:a2:c7:52" => "Пьер"
"28:e2:11:d6:a4:31" => "Андрей"
);

$users_file = "/var/www/scripts/unifi-users.json";
$users = fopen($users_file, "r");
$users_json = fread($users, filesize($users_file));
fclose($users);

echo "<h3>Кто дома?</h3>";

$users_a = json_decode($users_json, TRUE);
for ( $i = 0; $i < count($users_a['data']); $i++ )
{
    if (array_key_exists($users_a['data'][$i]['mac'], $clients))
    {
        $uptime = gmdate("j", $users_a['data'][$i]['uptime']) - 1;
        if ( $uptime == 0 ) $uptime = ""; else $uptime .= " день ";
        $uptime .= gmdate("H:i:s", $users_a['data'][$i]['uptime']);
        echo $clients[$users_a['data'][$i]['mac']]." (".$aps[$users_a['data'][$i]['ap_mac']].") [$uptime]<br>";
    }
}
?>

Выглядеть это может примерно так. Отображается пользователь, его местоположение, а также время, в течение которого он находится дома.

Можно написать отдельный скрипт, который, вызываясь из cron, фиксировал бы в базе данных другую полезную информацию: когда пользователь последний раз уходил из дома, с какого времени находится дома. Алгоритмы, примеры которых я привел в начале статьи, имеют большой потенциал для использования в системах домашней автоматизации. А этот потенциал, как вы понимаете, ограничен только фантазией администратора системы и стоящими перед ним задачами.

Таким образом W-Fi точки доступа могут быть интегрированы в общую систему - не только выполнять функцию раздачи беспроводного Интернета, но и стать частью Умного Дома.

 

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



Добавить комментарий:



Сортировка комментариев: Последние сверху | Первые сверху