Использование IFTTT с Raspberry Pi
IFTTT (If This Then That) — это бесплатный IoT-сервис, который позволяет отправить триггер с одного устройства/вещи и заставить этот триггер вызвать действие в другом месте.
Запутанно? Возможно, но быстрый пример поможет показать простоту этого сервиса:
Наш рецепт («апплет») может быть таким: «Если я отправлю email с темой „turn on“, то включить мою умную лампочку».
«THIS» — это email, а «THAT» — включение WiFi-лампочки. Просто, правда?
Сервисы IFTTT
Самое захватывающее в IFTTT — это огромное количество сервисов, которые вы можете использовать как триггеры (THIS) или действия (THAT). Их сотни, включая Google Drive, Pushbullet и Android Wear. Есть даже нишевые сервисы, которые могут подключаться к вашей умной стиральной машине, Dominos Pizza, BMW и покупкам в Tesco!
А теперь представьте, что мы можем объединить мощь IFTTT с Raspberry Pi?
Учитывая гибкость Python, возможности GPIO и огромный спектр датчиков, компонентов и устройств ввода, которые мы можем к нему подключить — возможности поистине безграничны!
IFTTT Webhooks
Что ж, это ВОЗМОЖНО благодаря сервису Webhooks в IFTTT, который был специально разработан для мейкеров.
Webhooks могут отправлять и получать триггеры через HTML POST и GET запросы, которые легко добавить в ваш код с помощью Python-библиотеки requests.
GET-запрос извлекает данные с источника/сервера, а POST-запрос делает обратное — отправляет (или обновляет) данные на сервер.
Проект IFTTT: оповещение о движении
Чтобы объяснить, как использовать IFTTT, мы покажем вам реальный проект в действии с использованием Raspberry Pi Zero W и одного из наших доступных PIR-датчиков (также включён в наш набор EduKit Sensors Kit).
Наш проект IFTTT будет использовать сервис Webhooks в качестве триггера, который будет работать совместно с сервисом Pushbullet для отправки всплывающего уведомления на наш смартфон, когда произойдёт это событие.
Этот проект будет обнаруживать, когда кто-то входит в комнату — ловить любого, кто подглядывает там, где не должен, когда нас нет дома! Это можно использовать в кабинете, куда детям вход запрещён, для наблюдения за вашей младшей сестрой, заимствующей ваши вещи, или даже в качестве сверхпростой самодельной охранной сигнализации на Raspberry Pi!
Мы даже можем использовать мобильное приложение IFTTT для включения/выключения триггеров, чтобы вы не получали постоянные уведомления, когда находитесь дома.
Шаг 1: Допущения
Для этого примера проекта мы будем предполагать следующее:
У вас есть базовое понимание Raspberry Pi
У вас настроен и работает PIR-датчик согласно инструкциям рабочего листа CamJam EduKit 2 (средний сигнальный пин PIR подключён к GPIO 17 (BCM).
Шаг 2: Настройка аккаунтов
Прежде чем мы приблизимся к нашему Raspberry Pi, нам нужно настроить аккаунты IFTTT и Pushbullet.
IFTTT
Перейдите на сайт IFTTT (https://ifttt.com) и выберите «sign up» в правом верхнем углу:
Это простой процесс регистрации, как и на любом другом сайте — мы выбрали вход через аккаунт Google, чтобы не запоминать ещё один пароль.
Появится экран с просьбой выбрать 3 сервиса для начала — проигнорируйте это и просто нажмите «X» в правом верхнем углу.
Затем вы будете перенаправлены на главную страницу — вот и всё, аккаунт IFTTT создан!
Pushbullet
Pushbullet — это тоже простой процесс регистрации, но поскольку нам нужны оповещения на смартфоне, нам также необходимо установить мобильное приложение.
Начнём с регистрации аккаунта. Перейдите на сайт Pushbullet (https://www.pushbullet.com/) и выберите регистрацию через Google или Facebook.
Затем вас проведут через несколько рекомендуемых шагов настройки. Вам нужно добавить мобильное приложение Pushbullet, так как именно через него мы будем получать уведомления на телефон.
Выберите опцию «Set up your phone», затем выберите Android или iPhone. Это перенаправит вас на соответствующую страницу магазина приложений, где вы сможете скачать приложение Pushbullet.
Обязательно откройте мобильное приложение и войдите тем же способом (Google/Facebook), который вы использовали на сайте.
Остальные настройки Pushbullet можно пока проигнорировать. Ваш аккаунт Pushbullet создан!
Шаг 3: Активация сервисов Webhooks и Pushbullet
Откройте IFTTT в браузере, выберите ваше имя пользователя в правом верхнем углу, затем выберите «Services».
Вы увидите небольшой набор сервисов — это стандартные сервисы, с которыми начинают все пользователи. Внизу страницы выберите «all services».
Когда появится следующая страница, введите «Webhooks» в поле фильтра, что выделит сервис Webhooks:
Выберите значок Webhooks, затем нажмите «connect» на следующем экране, чтобы включить этот канал.
Для этого сервиса не нужно входить в систему, так как это просто активация способа запроса и передачи данных в IFTTT.
Страница обновится, и вы заметите кнопку «Documentation», которая появится справа. Выберите её, чтобы найти ваш уникальный «ключ» (запишите его):
Вернитесь на главную страницу IFTTT и повторите шаги для добавления сервиса, но на этот раз отфильтруйте «Pushbullet». Как и раньше, вы увидите кнопку для подключения IFTTT к сервису Pushbullet.
Предполагая, что вы всё ещё авторизованы в Pushbullet, вы должны увидеть следующую страницу, где запрашивается одобрение подключения IFTTT к вашему аккаунту Pushbullet:
После одобрения доступа мы готовы начать.
Шаг 4: Создание апплета IFTTT
Апплет — это наш рецепт, который связывает сервисы вместе — связывая триггер «THIS» с действием «THAT».
В этом проекте PIR-датчик будет запускать Raspberry Pi для отправки HTML POST запроса в сервис IFTTT Webhooks, и это вызовет отправку заметки через Pushbullet. Затем она появится на вашем телефоне, поскольку у вас установлено приложение Pushbullet.
На главной странице IFTTT выберите ссылку «My Applets» вверху страницы. Вы увидите экран ниже, а также все стандартные апплеты, которые IFTTT создаёт для новых пользователей. Выберите кнопку «New Applet» в правой части экрана.
Загрузится простой в использовании интерфейс. Выберите синюю ссылку «THIS».
Теперь найдите «Webhooks» и затем выберите значок Webhooks.
Для Webhooks есть только один вариант триггера — «Receive a web request». Выберите этот вариант:
Теперь нам нужно добавить некоторые детали к этому триггеру. Следующий экран попросит указать имя события. Это то, что мы добавим в Python HTML запрос позже, когда будем писать скрипт на Raspberry Pi.
Мы назовём это событие «motion_detected», затем нажмём «create trigger»:
Вы увидите, что значок Webhooks теперь занял место текста «THIS». Теперь нам нужно установить действие «THAT» — нажмите на синий текст «THAT»:
Используя фильтр снова, введите «Pushbullet», затем выберите значок Pushbullet, когда он появится. Мы хотим, чтобы Pushbullet отправлял нам заметку (уведомление), когда этот апплет сработает, поэтому выберите первый вариант «Push a note».
Мы можем настроить это, как нам нравится, включая «ингредиенты», которые представляют собой фрагменты данных, которые мы можем настроить для отправки с нашего Raspberry Pi через запрос Webhooks.
Мы сделаем этот пример простым и просто отправим текст с датой/временем обнаружения движения, следующим образом:
Выберите «Create action» для перехода к финальному экрану.
Здесь мы видим сводку нашего апплета и подтверждаем, что хотим его завершить. Выберите кнопку «Finish»:
Вот и всё — наш апплет ожидает, пока мы запустим его с Raspberry Pi, так что давайте перейдём к этой части.
Шаг 5: Настройка Raspberry Pi
Шаг 1: Обновление Raspbian
Как всегда, мы рекомендуем начать со свежей копии Raspbian и обновить её, выполнив следующие команды в окне терминала, каждую с последующим нажатием Enter:
sudo apt-get update
затем
sudo apt-get upgrade
Шаг 2: Установка pip
Pip — это менеджер пакетов для Python. Скорее всего, pip уже установлен на вашем Raspberry Pi, но давайте проверим на всякий случай.
Введите следующую команду, а затем нажмите Enter:
sudo apt-get install python3-pip
Шаг 3: Установка Requests
Requests — это модуль, который позволяет нам отправлять HTML POST запрос в IFTTT.
Установите requests, введя следующую команду, а затем нажмите Enter:
sudo pip3 install requests
Шаг 4: Установка RPi.GPIO
Если вы используете Raspbian Lite, вам также может потребоваться установить RPi.GPIO. Введите следующую команду, а затем нажмите Enter:
sudo apt-get install python-rpi.gpio python3-rpi.gpio
Шаг 6: Python-скрипт
Поскольку мы используем PIR-датчик из набора CamJam EduKit Sensors, Python-скрипт в основном основан на коде CamJam для этого датчика. Мы немного подправили расположение/стиль, а затем добавили всего две строки кода для отправки POST-запроса в IFTTT:
Мы добавили строку 6 для импорта модуля requests. Мы должны импортировать requests, чтобы использовать его, как и любой другой модуль.
Мы добавили строку 46, которая содержит URL и ключ, необходимые для запуска рецепта IFTTT.
Вам нужно заменить часть YOUR_KEY на ваш ключ IFTTT
Вам нужно заменить часть YOUR_EVENT_NAME на любое имя события, которое вы хотите использовать с Webhooks (помните, мы использовали «motion_detected» в примере)
Это действительно так просто — добавить всего две строки кода!
Код
Вот полный Python-скрипт. Под кодом вы увидите, как легко загрузить его прямо на ваш Raspberry Pi:
#! /usr/bin/python
# Imports
import RPi.GPIO as GPIO
import time
import requests
# Set the GPIO naming convention
GPIO.setmode(GPIO.BCM)
# Turn off GPIO warnings
GPIO.setwarnings(False)
# Set a variable to hold the GPIO Pin identity
pinpir = 17
# Set GPIO pin as input
GPIO.setup(pinpir, GPIO.IN)
# Variables to hold the current and last states
currentstate = 0
previousstate = 0
try:
print("Waiting for PIR to settle ...")
# Loop until PIR output is 0
while GPIO.input(pinpir) == 1:
currentstate = 0
print(" Ready")
# Loop until users quits with CTRL-C
while True:
# Read PIR state
currentstate = GPIO.input(pinpir)
# If the PIR is triggered
if currentstate == 1 and previousstate == 0:
print("Motion detected!")
# Your IFTTT URL with event name, key and json parameters (values)
r = requests.post('https://maker.ifttt.com/trigger/YOUR_EVENT_NAME/with/key/YOUR_KEY_HERE', params={"value1":"none","value2":"none","value3":"none"})
# Record new previous state
previousstate = 1
#Wait 120 seconds before looping again
print("Waiting 120 seconds")
time.sleep(120)
# If the PIR has returned to ready state
elif currentstate == 0 and previousstate == 1:
print("Ready")
previousstate = 0
# Wait for 10 milliseconds
time.sleep(0.01)
except KeyboardInterrupt:
print(" Quit")
# Reset GPIO settings
GPIO.cleanup()
Загрузка скрипта
Самый простой способ загрузить Python-скрипт на ваш Raspberry Pi — использовать простую команду «wget», которая указывает Raspberry Pi загрузить скрипт.
Сначала в окне терминала создайте новую директорию, введя команду ниже, а затем нажмите Enter:
mkdir IFTTT
Затем войдите в эту директорию, используя следующую команду, также с последующим нажатием Enter:
cd IFTTT
Наконец, загрузите скрипт в эту директорию, используя следующую команду, а затем нажмите Enter:
wget https://cdn.shopify.com/s/files/1/0176/3274/files/iftttpir.py
Затем проверьте, что всё сработало, используя команду ниже, а затем нажмите Enter:
ls
Ваша директория должна выглядеть, как на изображении ниже:
Совет профессионала!
Вы заметили, что в конце строки 46 есть строка «params» после URL?
params={"value1":"none","value2":"none","value3":"none"})
Мы не используем их в этом примере, однако их можно использовать для отправки до 3 значений в IFTTT с вашим POST-запросом, которые могут быть любой строкой, которую ваш скрипт может создать.
Вот где вы добавляете их в IFTTT при создании апплета:
Подумайте о вариантах использования этих значений в сочетании с другими датчиками, такими как датчики температуры, ультразвуковые или датчики влажности (или один из многих других доступных датчиков)!
Шаг 7: Запуск скрипта
Чтобы запустить ваш код, сначала убедитесь, что вы находитесь в директории IFTTT, затем запустите код этой командой, а затем нажмите Enter:
sudo python3 iftttpir.py
Шаг 8: Результат
С запущенным кодом вы начнёте получать уведомления от Pushbullet каждый раз, когда кто-то двигается перед вашим PIR-датчиком!
Вот как это выглядит на нашем смартфоне:
Скрипт включает 120-секундную задержку после обнаружения движения, чтобы убедиться, что вы не будете получать уведомления каждую секунду, когда кто-то находится в комнате. Вы можете изменить эту настройку в соответствии с потребностями вашего проекта (строка 53).
Расскажите нам, что вы создали с IFTTT и вашим Raspberry Pi. Отправляйте нам ваши фотографии и проекты в Twitter, Facebook или Instagram.