Разработка Philipp Kontsarenko
4 708

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

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

В закладки

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

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

  • Кнопка 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 и ждем установки.

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 заходим в настройки профиля и добавляем новое устройство.

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

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

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. Проверяем

Жмём.

Смотрим:

{ "author_name": "Philipp Kontsarenko", "author_type": "editor", "tags": [], "comments": 13, "likes": 40, "favorites": 10, "is_advertisement": false, "subsite_label": "dev", "id": 58154, "is_wide": true, "is_ugc": false, "date": "Wed, 13 Feb 2019 18:44:09 +0300" }
{ "id": 58154, "author_id": 4, "diff_limit": 1000, "urls": {"diff":"\/comments\/58154\/get","add":"\/comments\/58154\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/58154"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 235819 }

13 комментариев 13 комм.

Популярные

По порядку

Написать комментарий...
5

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

Ответить
4

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

Ответить
0

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

Ответить
2

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

Ответить
–1

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

Ответить
2

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

Ответить
2

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

Ответить
1

Вообще непонятно, зачем тут Raspberry?
Это кнопка из коробки работает с AWS, а оттуда можно слать пуши, смскиа на телефон, в Saleforce сообщения и еще много чего.

Ответить
0

AWS уже три месяца как нельзя купить: https://www.amazon.com/dp/B01KW6YCIM.

Вероятно, они свернули производство — на письма о кнопке как минимум не отвечают.

Ответить
0

странно

Ответить
0

Нажмите «Купить» — так уже где-то с октября-ноября.

Ответить
1

Я читал что они начали кнопки на 4Г делать вместо вайфая и этот 4Г подвязан на мобильного оператора AT&T.
Может они хотят все так перевести?

Ответить
0

Воу. Надеюсь, что выпустят!

Ответить

Комментарий удален

0
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Команда калифорнийского проекта
оказалась нейронной сетью
Подписаться на push-уведомления
{ "page_type": "default" }