Инструкция: дверной звонок с уведомлениями в Slack

Коллеги в офисе попросили что-нибудь придумать с дверным звонком — чтобы он не шумел на весь офис, но при этом можно было легко узнать о том, что кто-то пришел. Были и другие ограничения: две входных двери, нет возможности провести какие-либо провода к звонку.

Лучше всего под такие ограничения подошла кнопка Amazon Dash для мгновенного заказа товаров в интернет-магазине. Она работает на батарейках и подключается к Wi-Fi. Плюс в интернете есть много инструкций по её непрямому использованию 😄.

Инструкция: дверной звонок с уведомлениями в Slack

Итак, что нужно:

  • Кнопка Amazon Dash, которая будет выполнять функции дверного звонка.
  • Компьютер Raspberry Pi, который будет отправлять сообщение в Slack.

Сценарий такой: Raspberry видит сигнал, который отправляет Amazon Dash при нажатии на кнопку, и запускает скрипт, который отправляет сообщение в Slack.

1. Готовим Raspberry

Сначала на компьютере записываем образ с операционной системой на SD-карту. Для этого в Terminal на macOS нужно ввести последовательно команды:

df -h

Смотрим номер, который соответствует SD-карте. В моём случае это disk2s1, поэтому вместо N в коде ниже подставляю 2.

sudo diskutil unmount /dev/diskNs1 sudo dd bs=1m if=./name.img of=/dev/rdiskN sudo diskutil eject /dev/rdiskN

Вставляем SD-карту в Raspberry и ждем установки.

Инструкция: дверной звонок с уведомлениями в Slack

2. Устанавливаем Node.js

Наш скрипт, который будет отслеживать сигнал и отправлять сообщение в Slack, работает на Node.js. Поэтому первым делом ставим его.

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - sudo apt-get install nodejs

3. Устанавливаем библиотеку для мониторинга сети

Библиотека libpcap нужна для того, чтобы отслеживать в локальной сети пакеты данных, которые отправляет Amazon Dash.

sudo apt-get install libpcap-dev -y

4. Устанавливаем скрипт для работы звонка

На GitHub можно найти много готовых скриптов для работы с Amazon Dash и Slack. Я взял dashdong за основу, адаптировав несколько параметров для нашего офиса.

Копируем любой из этих скриптов на Raspberry и устанавливаем.

git clone https://github.com/kontsarenko/amazon-dash-doorbell/ cd amazon-dash-doorbell sudo npm install

5. Подключаем кнопку через приложение Amazon

Теперь нужно подключить Amazon Dash к Wi-Fi. В приложении Amazon заходим в настройки профиля и добавляем новое устройство.

Инструкция: дверной звонок с уведомлениями в Slack

Следуя инструкции вводим пароль от Wi-Fi, подключаем кнопку к сети и доходим до вот этого экрана с выбором продукта:

Инструкция: дверной звонок с уведомлениями в Slack

Здесь ничего не нажимаем и принудительно закрываем приложение.

6. Ищем MAC-адрес кнопки

Amazon Dash подключена к сети. Теперь нужно узнать её Mac-адрес. Вводим на Raspberry команду:

sudo node node_modules/node-dash-button/bin/findbutton

Скрипт начнет сканирование и выведет список всех устройств, обнаруженных в сети. Нажимаем на кнопку, чтобы она отправила запрос и ищем вот такую строчку:

Possible dash hardware address detected: MM:MM:MA:AA:AC:CC Manufacturer: Amazon Technologies Inc. Protocol: udp

Сохраняем MAC-адрес.

7. Подключаем Slack

Заходим в настройки Slack и создаём новую интеграцию: выбираем канал, в который нужно отправлять сообщения, и копируем Webhook URL.

8. Создаём файл с настройками

Возвращаемся к Raspberry, создаем файл с настройками config.json, вставляем в него следующее:

{ "settings": { "logging": { "url": "http://dot.com", "token": "look-a-me-im-a-token", "client-id": "CLIENTID", "client-secret": "CLIENTSECRET", "enabled": true } }, "buttons": [{ "name": "Doorbell", "id": "MAC-АДРЕС", "action": "post", "post": { "url": "WEBHOOK-ИЗ-SLACK", "headers": {"Content-type": "application/json"}, "json": {"text": ":fist: Кто-то стучится в дверь"} } }] }

Вместо MAC-АДРЕС — то, что получили на 4-м шаге. Вместо WEBHOOK-ИЗ-SLACK — то, что скопировали на 6-м шаге.

Если нужно установить кнопки на несколько дверей, то добавляем в config.json сразу несколько конфигураций:

{ "settings": { "logging": { "url": "http://dot.com", "token": "look-a-me-im-a-token", "client-id": "CLIENTID", "client-secret": "CLIENTSECRET", "enabled": true } }, "buttons": [{ "name": "Doorbell 1", "id": "MAC-АДРЕС-1", "action": "post", "post": { "url": "WEBHOOK-ИЗ-SLACK-1", "headers": {"Content-type": "application/json"}, "json": {"text": ":fist: Кто-то стучится во входную дверь"} } },{ "name": "Doorbell 2", "id": "MAC-АДРЕС-2", "action": "post", "post": { "url": "WEBHOOK-ИЗ-SLACK-2", "headers": {"Content-type": "application/json"}, "json": {"text": ":fist: Кто-то стучится в дверь на крыше"} } }] }

9. Запускаем

Всё готово. Но нужно ещё сделать так, чтобы скрипт работал постоянно — даже после перезагрузки Raspberry. Для этого устанавливаем supervisor и открываем файл с настройками.

pip install supervisor sudo nano /etc/supervisor/supervisord.conf

В настройках указываем путь к скрипту.

[program:doorbell] command=/usr/bin/node /home/pi/amazon-dash-button/index.js directory=/home/amazon-dash-button/ autostart=true autorestart=true startretries=3 stderr_logfile=/var/log/supervisor/amazon-dash-button.err.log stdout_logfile=/var/log/supervisor/amazon-dash-button.out.log user=root

Сохраняемся. Запускаемся.

supervisorctl start

10. Проверяем

Жмём.

Инструкция: дверной звонок с уведомлениями в Slack

Смотрим:

Инструкция: дверной звонок с уведомлениями в Slack
2828
16 комментариев

Хабрахабр переехал на vc?)

8
Ответить

Добро пожаловать на https://vc.ru/dev :)

6
Ответить

Как-то все просто, надо было через IBM Watson попробовать

4
Ответить

Берём ESP8266 (150 руб на али), берём ОБЫЧНУЮ кнопку за 20 руб. И отправляем сообщения куда угодно: VK, Телеграм, Push-сервисы, СМС и т.д.

5
Ответить

Делал такое у себя на Wemos (китайский ардуино за 150 руб) + обычная кнопка: https://github.com/UksusoFF/wemos-doorbell Сейчас все равно пришлось прикрутить RPI чтобы еще и картинку с камеры приклеивала.

2
Ответить

А сколько месяцев от батареи у вас этот звонок проживет?

1
Ответить

VC спасибо, это крутая рубрика :)

2
Ответить