По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Итак, вы полностью укомплектовали и настроили ваш умный дом. И конечно, вам нравится периодически показывать выпендриваться перед друзьям, как круто включать лампы, проигрывать видео и фильмы подсказкой голосовому помощнику, приготовить кофе или регулировать термостат коснувшись приложения на экране смартфона. Поздравляем!
Но если вы любитель автоматизации (как и мы), который редко останавливается на достигнутом, то возможно будете разочарованы количеством необходимых программ, которые нужно загрузить, интерфейсов, которые вам придётся усваивать, чтобы управлять гаджетами. Скорее всего, будут отдельные приложения для управления освещением, медиацентром, термостатом и приложение Google Home, который изо всех сил (но безнадежно) старается собрать всё это воедино.
Большая вероятность того, что некоторые приложения будут несовместимы с другими и, вероятно, многие из них не будут работать, если они не в одной сети с гаджетом. Представьте если бы мы смогли управлять всем этим из одного интерфейса, на засоряя телефон или компьютер сотнями приложений, через интерфейс, который доступен как на смартфонах, так и на компьютерах, а также с помощью сторонних сценариев вне зависимости от того, находимся ли мы в одной сети с умным домом или нет. Интерфейс, который был бы легким и простым в использовании?
А что если мы будем делать это через мессенджер или чат? В конце концов, разве не легче было бы контролировать наш дом, гаджеты и облачные сервисы через тот же интерфейс, который мы используем для отправки фотографий котиков нашим друзьям, и через бот, полностью адаптированный к нашим потребностям?
В этой статье я покажу вам, как настроить команды и процедуры в дополнение к существующим сетапам умного дома. В данном руководстве мы используем два основных инструмента:
Telegram: существует много мессенджеров и платформ, но до сих пор попытки многих из них (Facebook Messenger, Whatsapp, Hangouts и т.д.) в предоставлении пригодного для разработчиков API, мягко говоря, были тщетны. Ушли те дни, когда все использовали XMPP или IRC в качестве своего мессенджер. Сегодняшний мир мессенджеров очень разнообразен.
Кроме того, поскольку в интересах многих крупных игроков создавать изолированные ИТ экосистемы, наиболее часто используемые решения не поставляются с официально поддерживаемыми API/интерфейсами разработчиков. Мало того: некоторые из них активно отговаривает пользователей от использования чего-либо, кроме официального приложения, для взаимодействия с платформой (почитайте, как Whatsapp может забанить вас).
В этом чрезвычайно разнообразном мире, состоящем из нескольких несвязанных островов, Telegram представляет собой радостное исключение: их официальный bot API хорошо задокументирован и поддерживается, и для тех, кто знает немного программирования, очень легок в интеграции.
Platypush: Platypush поставляется с плагином для Telegram и бэкэндом. Так что давайте начнем и создадим первый бот для автоматизации управления домом!
Создание Telegram-бота
Начните беседу с Botfather.
Наберите /start, а затем /newbot для создания нового бота. Задайте боту ник и имя.
Вы получите ссылку, чтобы начать беседу с вашим ботом и уникальный API-ключ. Сохраните его где-нибудь, так как он нам понадобится для конфигурации плагина platypush.
Конфигурация бота в platypush
1. Установите platypush с основными расширения и интеграцией с Telegram:
pip install 'platypush[http,db,telegram]'
apt-get install redis-server
[sudo] systemctl start redis
[sudo] systemctl enable redis
2. Изучите platypush хотя бы немного, если еще не сделали этого. Определите несколько вещей, которыми вы хотите управлять/автоматизировать - источники света, музыку, датчики, базу данных, роботы - и установите/настройте соответствующие расширения.
В этой статье мы рассмотрим, как настроить наш новый бот для управления освещением Philips Hue, воспроизведением музыки и потоковой передачей PiCamera.
3. Добавьте настройки Telegram в файл ~/.config/platypush/config.yaml:
chat.telegram:
api_token: <your bot token>
backend.chat.telegram:
enabled: true
Бэкэнд-система позволяет получать события (например, новые сообщения, вложения, запросы и т.д.) и создавать на них пользовательские "хуки". Плагин позволяет писать вам чаты, программно отправлять сообщения и вложения, администрировать каналы и т.д.
Допустим, мы хотим, чтобы бот реализовал следующие команды:
/start
Приветствие пользователя
/help
Показать доступные команды
/lights_on
Включить свет
/lights_off
Выключить свет
/music_play
Включить музыку
/music_pause
Приостановить музыку
/music_next
Перейти на следующую песню
/music_prev
Перейти на предыдущую песню
/start_streaming
Начать удаленное вещание PiCamera
/stop_streaming
Остановить удалённое вещание PiCamera
Всё что мы должны сделать это создать действие в конфигурационном файле platypush config.yaml. В этом контексте вы должны:
Установить и настроить плагины Philips Hue, mopidy и PiCamera:
pip install 'platypush[hue,mpd,picamera]'
# Hue lights configuration
light.hue:
# Hue bridge IP address
bridge: 192.168.1.10
# Default groups to control
groups:
- Living Room
# MPD/Mopidy configuration
music.mpd:
host: localhost
port: 6600
# PiCamera configuration
camera.pi:
vflip: False
hflip: False
Чтобы не засорять файл config.yaml, создайте новый файл с названием ~/.config/platypush/include/bot.yaml:
# /start command handler
event.hook.OnTelegramStartCmd:
if:
type: platypush.message.event.chat.telegram.CommandMessageEvent
command: start
then:
- action: chat.telegram.send_message
args:
chat_id: ${chat_id}
text: "Welcome! Type /help to see the available commands"
# /help command handler
event.hook.OnTelegramHelpCmd:
if:
type: platypush.message.event.chat.telegram.CommandMessageEvent
command: help
then:
- action: chat.telegram.send_message
args:
chat_id: ${chat_id}
text: "Available commands:
- /lights_on
- /lights_off
- /music_play [resource]
- /music_pause
- /music_prev
- /music_next
- /start_streaming
- /stop_streaming
"
# /lights_on command handler
event.hook.OnTelegramLightsOnCmd:
if:
type: platypush.message.event.chat.telegram.CommandMessageEvent
command: lights_on
then:
- action: light.hue.on
- action: chat.telegram.send_message
args:
chat_id: ${chat_id}
text: "Lights turned on"
# /lights_off command handler
event.hook.OnTelegramLightsOffCmd:
if:
type: platypush.message.event.chat.telegram.CommandMessageEvent
command: lights_off
then:
- action: light.hue.off
- action: chat.telegram.send_message
args:
chat_id: ${chat_id}
text: "Lights turned off"
# /music_play command handler
event.hook.OnTelegramMusicPlayCmd:
if:
type: platypush.message.event.chat.telegram.CommandMessageEvent
command: music_play
then:
- if ${cmdargs}:
- action: music.mpd.play
args:
resource: cmdargs[0]
- else:
- action: music.mpd.play
- action: chat.telegram.send_message
args:
chat_id: ${chat_id}
text: "Music playing"
# /music_pause command handler
event.hook.OnTelegramMusicPauseCmd:
if:
type: platypush.message.event.chat.telegram.CommandMessageEvent
command: music_pause
then:
- action: music.mpd.pause
- action: chat.telegram.send_message
args:
chat_id: ${chat_id}
text: "Music paused"
# /music_prev command handler
event.hook.OnTelegramMusicPrevCmd:
if:
type: platypush.message.event.chat.telegram.CommandMessageEvent
command: music_prev
then:
- action: music.mpd.previous
- action: chat.telegram.send_message
args:
chat_id: ${chat_id}
text: "Playing previous track"
# /music_next command handler
event.hook.OnTelegramMusicNextCmd:
if:
type: platypush.message.event.chat.telegram.CommandMessageEvent
command: music_next
then:
- action: music.mpd.next
- action: chat.telegram.send_message
args:
chat_id: ${chat_id}
text: "Playing next track"
# /start_streaming command handler
event.hook.OnTelegramCameraStartStreamingCmd:
if:
type: platypush.message.event.chat.telegram.CommandMessageEvent
command: start_streaming
then:
- action: camera.pi.start_streaming
args:
listen_port: 2222
- action: chat.telegram.send_message
args:
chat_id: ${chat_id}
text: "PiCamera streaming started. Check it out with vlc tcp/h264://hostname:2222"
# /stop_streaming command handler
event.hook.OnTelegramCameraStopStreamingCmd:
if:
type: platypush.message.event.chat.telegram.CommandMessageEvent
command: stop_streaming
then:
- action: camera.pi.stop_streaming
- action: chat.telegram.send_message
args:
chat_id: ${chat_id}
text: "PiCamera streaming stopped"
Подключите файл конфигурации бота в config.yaml:
include:
-include/bot.yaml
Запустите platypush:
# Manual start
platypush
# Service start
systemctl start platypush.service
Создайте беседу в вашим ботом перейдя по ссылке, выданной BotFather и начните говорить ему, что делать:
Сейчас бот доступен любому мы этого явно не хотим. Представьте, что кто-то включит на полную громкость System Of A Down- Jet Pilot вам ночью. Так себе пробуждение. Можно настроить бэкэнд Telegram так, чтобы он принимал сообщения только из определенного списка идентификаторов чатов (в Telegram chat_id используется как для частных пользователей, так и для групп).
Отправьте сообщение боту и откройте журналы platypush или проверьте его стандартные выходные данные. На экране появятся следующие сообщения:
2020-01-03 19:09:32,701| INFO|platypush|Received event: {"type": "event", "target": "turing", "origin": "turing", "id": "***", "args": {"type": "platypush.message.event.chat.telegram.CommandMessageEvent", "chat_id": your_chat_id, "message": {"text": "/help", ...}, "user": {"user_id": your_user_id, "username": "****", "is_bot": false, "link": "https://t.me/you", "language_code": "en", "first_name": "***", "last_name": "***"}, "command": "help", "cmdargs": []}}
Скопируйте chat_id своего пользователя и вставьте в бак-энд файл:
backend.chat.telegram:
authorized_chat_ids:
- your_user_id
Теперь бот ответит ошибкой, если вы попытаетесь отправить сообщение от неавторизованного пользователя.
Вы также можете пригласить своего бота в групповой чат и позволить вашим друзьям или членам семьи регулировать свет в вашем доме, если вы захотите!
Что дальше?
В этой статье мы изучили только одну специфическую особенность интеграции Telegram - способность бота реагировать на события в команде, запускать действия и отвечать текстовыми сообщениями.
Как видно из списка поддерживаемых событий Telegram, можно сделать больше, например:
Создавать обработчики, когда кто-то делится контактной информацией - когда-нибудь думали разрешить боту автоматически хранить новые контакты, отправленные вам вашими друзьями в чате?
Создавайте обработчики при совместном использовании документов, видео или изображения - например, автоматически загружайте все файлы мультимедиа, отправленные в чат, на жесткий диск или удаленную папку Dropbox.
Выполнять действия с текстовыми сообщениями вместо команд - можно использовать TextNewsEvent, например, если вы предпочитаете вводить "включить свет" вместо "/lights_on."
Сделайте снимок на камеру наблюдения и отправьте ее себе командой send_photo. Можно также развернуть несколько ботов, например, для каждого устройства, чтобы можно было запускать действия на конкретном устройстве из связанного чата или вместо этого использовать один бот в качестве точки входа и доставлять сообщения другим устройствам через MQTT, Kafka или HTTP API.
Vagrant является инструментом с помощью которого осуществляется создание и управление виртуальными машинами с помощью технологии виртуализации.
Благодаря простому в использовании алгоритму и автоматизации процессов, Vagrant сокращает время настройки и оптимизации среды в которой вы будете работать. Погнали.
Установка для Windows
Установка Vagrant сама по себе очень проста, Вам необходимо скачать клиент с официального сайта для операционной системы, которую вы планируете юзать и запустить процесс установки. Для работы Vagrant также необходимо скачать VirtualBox с официального сайта.
VirtualBox гипервизор, осуществляющий процесс виртуализации (опа, тавтология) систем Linux, macOS, Windows и других. Установка софта VirtualBox, как и самого Vagrant проста и не вызовет у вас никаких вопросов и проблем, а как только вы установите две программы, рекомендуется выполнить перезагрузку Вашей системы.
Кстати, почитать об установке VirtualBox 6.0 на Linux вы можете в нашей статье
После установки откройте командную строку и проверьте доступность Vagrant с помощью следующих строк кода:
$ vagrant
Usage: vagrant [options] <command> []
-v, --version Print the version and exit. -h, --help Print this help.
# ...
Первым шагом в настройке виртуальной машины с помощью Vagrant является создание Vagrantfile, который будет содержать все необходимые настройки. Введите следующую команду:
mkdir vagrant_demo && cd vagrant_demo
vagrant init ubuntu/trusty64
Vagrantfile - это файл Ruby, который описывает, как настроить и подготовить виртуальную машину.
Однако, вместо создания виртуальной машины с нуля, софт предлагает вам воспользоваться базовыми образами для использования "шаблонов" виртуальной машины. Эти базовые образы в Vagrant называются "Vagrant box", которые добавляются в Vagrant с помощью инструмента vagrant box add, сохраняющего Vagrant box под определенным именем, предоставляя возможность использовать несколькими средами повторно. Круто, не правда ли?
$ vagrant box add hashicorp/precise64
С помощью этой команды вы сможете загрузить готовый Vagrant box с названием "hashicorp/precision64" из каталога Vashgrant Cloud, предоставляемого разработчиками для обмена готовыми образами. Следует отметить и то, что имеется возможность добавления образов из локальных файлов или пользовательского URL.
"Боксы" хранятся для каждого пользователя отдельно. Каждый проект Vagrant box создает новую копию "бокса" и никогда не изменяет исходный образ. Это означает, что если у вас есть два проекта, в которых используется один образ Vagrant box hashicorp/precision64, добавление файлов на одной виртуальной машине не повлияет на другую.
Когда Vagrant box добавлен в Vagrant, вы можете настроить его для использования в качестве основы. Откройте Vagrantfile и измените содержимое на следующее:
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/precise64"
end
Вы можете указать версию "бокса", указав config.vm.box_version, например:
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/precise64"
config.vm.box_version = "1.1.0"
end
Также возможно указать URL-адрес, используя config.vm.box_url:
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/precise64"
config.vm.box_url = "https://vagrantcloud.com/hashicorp/precise64"
end
Загружаем первую виртуальную машину Vagrant и вводим команду: $ vagrant up
В течении минуты работа этой команды завершится, загрузив для Вас виртуальную машину с Ubuntu. Процесс загрузки будет выглядеть примерно следующим образом:
Чтобы проверить его работоспособность производится подключение SSH к виртуальной машине: $ vagrant ssh.
Эта команда переведет вас в полноценный SSH-сеанс. Теперь у Вас есть возможность взаимодействия с виртуальной машиной. Сеанс SSH может быть завершен с помощью сочетания клавиш CTRL + D.
vagrant@precise64:~$ logout
Connection to 127.0.0.1 closed.
По окончанию работы с виртуальной машиной следует запустить команду vagrant destroy и Vagrant прекратит использование любых ресурсов, потребляемых виртуальной машиной.
Установка на Ubuntu:
Устанавливаем Virtualbox, который, кстати, сразу доступен в репозиториях Ubuntu: >sudo apt install virtualbox
Совет: Следует отметить, что Vagrant и Virtualbox, доступные в репозиториях Ubuntu могут быть не самой актуальной версии, для установки последних версий этих программ, загрузите их с официальных сайтов разработчиков.
Чтобы убедиться, что установка прошла успешно с помощью следующей команды мы можем проверить версию программы Vagrant: vagrant --version
Вы должны увидеть примерно следующее: Vagrant 2.0.2
Убедившись, что Vagrant установлен в системе Ubuntu, мы можем создать среду разработки, которая является наиболее распространенным вариантом использования данной программы.
Первым шагом является создание каталога, который будет корневым каталогом проекта. И делаем файл Vagrantfile.
Создайте каталог проекта и переключитесь на него:
mkdir ~/my-first-vagrant-project
cd ~/my-first-vagrant-project
Следующим шагом является инициализация нового Vagrantfile с помощью команды vagrant init. В этом примере мы у нас CentOS 7. Запустите следующую команду, чтобы инициализировать новый Vagrantfile:
vagrant init centos/7
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.
Запустив vagrant up, мы получаем возможность создать и настроить среду в соответствии с Vagrantfile.
vagrant up
==> default: Configuring and enabling network interfaces...
default: SSH address: 192.168.121.74:22
default: SSH username: vagrant
default: SSH auth method: private key
==> default: Rsyncing folder: /home/linuxize/Vagrant/my-first-vagrant-project/ => /vagrant
Как видно из приведенной выше информации, Vagrant также внедряет каталог проекта в /vagrant на виртуальной машине, что позволяет вам работать с файлами вашего проекта на вашем хост-компьютере.
Чтобы войти в среду, просто запустите ее с помощью команды:
vagrant ssh
Остановка работы среды:
vagrant halt
Следующая строка остановит работу среды, а также очистит всю информацию, которая была необходима для ее работы:
vagrant destroy
Благодаря нашей статье, вы увидели процесс установки и настройки виртуальной машины на свой компьютер на Windows или Ubuntu 18.04, а также в статье наглядно продемонстрирован процесс создания и настройки виртуальной машины. Профит!
Apache Maven - это инструмент управления проектами и автоматизации сборки с открытым исходным кодом, основанный на концепции объектной модели проекта (POM – Project Object Model), которая в основном используется для развертывания приложений на основе Java, но также может использоваться в проектах, написанных на C#, Ruby и другиех языках программирования.
В этой статье мы объясним, как установить и настроить последнюю версию Apache Maven в системе CentOS 7 (данная инструкция также работает с дистрибутивом RHEL и Fedora).
Требования:
Недавно развернутый или существующий экземпляр сервера CentOS 7.
Java Development Kit (JDK) - Maven 3.3+ требует JDK 1.7 или выше для выполнения.
Установка OpenJDK 8 в CentOS 7
Java Development Kit (JDK) является основным требованием для установки Apache Maven, поэтому сначала установите Java в системе CentOS 7 из репозитория по умолчанию и проверьте версию с помощью следующих команд.
# yum install -y java-1.8.0-openjdk-devel
# java -version
Если установка прошла успешно то, вы увидите следующий вывод.
openjdk version "1.8.0_141"
OpenJDK Runtime Environment (build 1.8.0_141-b16)
OpenJDK 64-Bit Server VM (build 25.141-b16, mixed mode)
Установка Apache Maven в CentOS 7
Далее перейдите на официальную страницу загрузки Apache Maven и загрузите последнюю версию или используйте следующую команду wget, чтобы загрузить ее в домашний каталог maven ‘/usr/local/src’.
# cd /usr/local/src
# wget http://www-us.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
Настройка среды Apache Maven
Теперь нам нужно сконфигурировать переменные окружения для предварительно скомпилированных файлов Apache Maven в нашей системе, создав файл конфигурации «maven.sh» в каталоге «/etc/profile.d» .
# cd /etc/profile.d/
# vim maven.sh
Добавьте следующую конфигурацию в файл конфигурации «maven.sh».
# Apache Maven Environment Variables
# MAVEN_HOME for Maven 1 - M2_HOME for Maven 2
export M2_HOME=/usr/local/src/apache-maven
export PATH=${M2_HOME}/bin:${PATH}
Теперь сделайте конфигурационный файл «maven.sh» исполняемым, а затем загрузите конфигурацию, выполнив команду «source» .
# chmod +x maven.sh
# source /etc/profile.d/maven.sh
Проверка версии Apache Maven
Чтобы проверить установку Apache Maven, выполните следующую команду.
# mvn --version
И вы должны получить вывод, похожий на следующий:
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T19:33:14+01:00)
Maven home: /usr/local/src/apache-maven
Java version: 9.0.4, vendor: Oracle Corporation, runtime: /opt/java/jdk-9.0.4
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.17.6-1.el7.elrepo.x86_64", arch: "amd64", family: "unix"
Вот и все! Вы успешно установили Apache Maven 3.5.4 в вашей системе CentOS 7.