Бывала ли у вас такая ситуация, когда утром выходишь, как обычно, на работу, а там вас ждет неприятный сюрприз в виде километровых пробок? Неприятно, да? Кто же знал, что нужно было выйти из дома на пол часа раньше, чтобы не опоздать на работу. К счастью, современные технологии позволяют нам избежать подобных проблем, ну, или хотя бы максимально сгладить неприятные сценарии развития событий.
Для того, чтобы умный дом знал дорожную обстановку и вовремя нас об этом предупредил, добавим информацию об интенсивности дорожного движения в Domoticz, для этого создадим виртуальный сенсор:
Далее необходимо настроить обновление информации датчика. Заходим на нашу малинку (как это сделать можно прочитать здесь, для MacOS и Linux - просто открываем стандартную программу "Терминал" и вводим "ssh pi@raspberry.local", далее нажимаем ввод и, после приглашения системы, вводим пароль своей учетной записи на raspberry pi), создаем в папке для скриптов файл jams.php, для этого вводим:
nano jams.php
Вставляем туда следующее содержание:
#!/usr/bin/php <?php $data_file='https://export.yandex.ru/bar/reginfo.xml'; $xml = simplexml_load_file($data_file); $ch = curl_init("http://raspberry.local:8080/json.htm?type=command¶m=udevice&idx=315&svalue=".$xml->traffic->region->level); curl_exec($ch); curl_close($ch); ?>
Меняем idx устройства, полученное нами ранее на свое. Сохраняем (ctrl O), выходим (ctrl X), даем файлу права на исполнение командой в терминале sudo chmod x jams.php. В случае необходимости, устанавливаем дополнительные компоненты для работы скрипта:
sudo apt install php-xml sudo apt install php-curl
Информация о местоположении определяется автоматически, на основе IP адреса. В случае некорректного срабатывания автоопределения (например, если вы подключены к сети по VPN), информацию о регионе можно передать в запрос с помощью параметра ?region=<номер региона>. Узнать свой номер региона можно в службах яндекс, зайдя на сервис яндекс.пробки (номер региона будет виден в адресной строке).
Периодическое обновление информации в системе оповещения реализуем с помощью скрипта в системе Domoticz. Для этого заходим в настройки -> События, нажимаем создать событие и выбираем язык DzVents.
return { on = { timer = { 'at 07:15 on mon,tue,wed,thu,fri', 'every 30 minutes' } }, execute = function(domoticz, triggeredItem, info) domoticz.utils.osExecute('/home/pi/script/jams.php') if (domoticz.time.matchesRule('at 07:15') and domoticz.devices('Jams').state > 3) then domoticz.notify('Система безопаности', 'Сегодня на улице пробки, нужно выходить пораньше!', domoticz.PRIORITY_HIGH) end end }
Все? А вот и нет! Ну кто утром читает push уведомления с телефона, необходимы голосовые оповещения! Начал искать подходящие службы для синтеза речи, поддерживающие русский язык. Их оказалось не так уж много...
- Festival TTS
- ESpeak TTS
- Яндекс.Speechkit
- Google.Speech
Первые две достаточно примитивны, создают просто ужасную сложно различимую речь уровня этак 90-х годов прошлого века. Голосовой синтезатор от Яндекс довольно хорош, основан на модели голосового синтеза искусственного интеллекта, речь довольно плавная, с интонациями. Однако, мне он не пришелся по вкусу т.к. с недавних пор служба предоставляется в рамках пакета Cloud.Speechkit стоимостью 183,0508 ₽ за 1 млн. символов, обращение к сервису проходит с помощью токенов, которые нужно получать каждые 12 часов. Остается творение "корпорации добра" ? Он хоть по качеству синтеза немного хуже, но бесплатный и может использоваться без дополнительных заморочек с получениями токенов...
Для озвучивания событий создадим небольшой скрипт speech.sh в папке со скриптами (либо просто в домашней директории). Для этого вводим в терминале
nano speech.sh
Вставляем файл следующего содержания:
#!/bin/bash say() { local IFS= ;/usr/bin/mplayer -ao alsa -really-quiet -noconsolecontrols "http://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&q=$*&tl=ru"; } mplayer /home/pi/sound/messageOn.mp3 -really-quiet say $* mplayer /home/pi/sound/messageOff.mp3 -really-quiet
Сохраняем файл, закрываем, даем ему права на исполнение. Для этого в терминале вводим команду sudo chmod x speech.sh. Скрипт, в качестве параметров командной сроки, принимает фразу, которую необходимо произнести. Перед началом сообщения и после него, для привлечения внимания, я добавил звуковые сигналы (наподобие тех, которые можно услышать в аэропортах перед объявлениями). Все, теперь осталось только сконфигурировать Domoticz для голосового оповещения:
Для этого заходим в Настройки -> Уведомления и добавляем пользовательскую систему уведомления, как показано на картинке. Теперь наш умный дом будет не только сообщать о пробках, но и озвучивать необходимость замены батареек в датчиках, сообщать об обнаружении протечек, необходимости проветривания помещения в случае превышения концентрации СО2 в доме (если отсутствуют бризеры), успешной проверке системы защиты от протечки, необходимости взять с собой зонт, если по прогнозу погоды обещали дождь, одеться потеплее, при резких изменениях температуры на улице, и прочих полезных вещах, о которых необходимо знать владельцу умного дома.
На этом пока все, а какие кейсы работы умного дома реализованы у вас? Оставляйте в комментариях, это позволит сделать наши умные дома еще чуточку "умнее"!
Отличная статья, спасибо за проделанную работу.
Супер! Хочу тоже самое в ХАшку...
а в WB не устанавливали?
А можно уточнить, куда происходит вывод звука?
ЗЫ Сам и уточню, вывод на калоши через mplayer. А хотелось бы на хоумпод, но наверное нереально будет.