Как мы сделали колокольчик, который звенит при поступлении оплаты за размещение вакансий

Инструкция старшего электрика vc.ru.

В конце 2017 года на vc.ru появился сервис «Вакансии». Работает он так: пользователь заполняет форму вакансии и оплачивает банковской картой 5 тысяч рублей за размещение объявления. После этого деньги замораживаются на счету, пока модератор не одобрит вакансию.

Во время одного из обсуждений Владислав Сергеевич пошутил, что было бы круто сделать устройство, которое будет уведомлять о новых заявках — чтобы предупредить модератора, да и вообще, чтобы в офисе радостнее было работать.

В голове сначала нарисовалась картина из будней Уолл-стрит, когда трейдер звонит в колокол при удачной сделке.

Как мы сделали колокольчик, который звенит при поступлении оплаты за размещение вакансий

Однако колокол — слишко громко, громоздко и не смешно. Поэтому я вспомнил о настольном колокольчике, которые устанавливают на ресепшенах в отелях. Его я и взял за основу конструкции.

Что еще нужно

Помимо колокольчика, который я купил в «Комус», нужен был компьютер, который бы мог отвечать за всю логику. У нашего арт-директора как раз был Raspberry Pi, который он однажды дал мне для экспериментов и который я специально забыл ему вернуть.

Как мы сделали колокольчик, который звенит при поступлении оплаты за размещение вакансий

Далее нужен двигатель, который бы приводил в действие колокольчик. Для этих целей прекрасно подходит соленоид — в отличие от обычных моторчиков у него поступательное, а не круговое движение, и работает он в режиме включен или выключен. Кроме того, соленоид маленький по своему размеру и прекрасно помещается внутри настольного колокольчика. То, что нам нужно.

Еще нужен диод, транзистор и резистор для того, чтобы соединить соленоид с Raspberry. Но об этом чуть позже.

Сначала заказал не тот соленоид — слишком мощный. Но потом исправился.
Сначала заказал не тот соленоид — слишком мощный. Но потом исправился.

1. Готовим Raspberry Pi

На Raspberry я установил стандартную операционную систему Raspberry NOOBS. У нее есть привычный графический интерфейс, который не понадобится, и предустановленные приложения, которые почти не будут использоваться. Главное, что пригодится — терминал.

ОС Raspberry Pi
ОС Raspberry Pi

Так как устройство будет находиться в Москве, а сам я пока живу в Петербурге, сразу после установки операционной системы настроил инструменты для удаленного управления Raspberry:

  1. VNC — позволяет подключаться к рабочему столу Raspberry Pi через облако. Установлен по умолчанию, достаточно только зарегистрироваться.
  2. Dataplicity — доступ к командной строке Raspberry через интернет. Устанавливается при помощи одной команды, которая генерируется при регистрации на сайте Dataplicity.
  3. Git — для того, чтобы удобно загружать написанный код на Raspberry. Устанавливается при помощи команды sudo apt-get install git. Сам код я разместил на Github. Для того, чтобы скопировать его на Raspberry, нужно ввести команду git clone и URL-адрес хранилища Github. В моём случае git clone http://github.com/kontsarenko/raspberry-bell. Для последующего обновления кода — git pull.

2. Берем паяльник в руки

В моем случае подзаголовок немножко другой: покупаем паяльник и гуглим, как им пользоваться.

Мне повезло: в интернете я нашел готовую схему с Raspberry Pi и небольшим соленоидом, который не требует дополнительного источника питания и полностью работает на мощностях микрокомпьютера.

Перерисовал схему так, чтобы было понятно таким гуманитариям, как я:

Как мы сделали колокольчик, который звенит при поступлении оплаты за размещение вакансий

Что на схеме:

GND, 5V и GPIO — это выходы на плате Raspberry Pi, к которым подключается вся схема. Для моей модели B расположение выходов на компьютере выглядит вот так:

Как мы сделали колокольчик, который звенит при поступлении оплаты за размещение вакансий

У каждого GPIO-выхода есть свой номер. Я подключил схему к контакту номер 18 (просто потому, что могу). Если не вдаваться в технические подробности, то вся схема работает так: на выход GPIO мы с помощью специального скрипта отправляем сигнал, он «включает» схему и приводит в действие соленоид. Затем отключаем сигнал на GPIO, соленоид возвращается на своё место.

Сначала я собрал схему на монтажной плате, чтобы можно было проверить её работу:

Как мы сделали колокольчик, который звенит при поступлении оплаты за размещение вакансий

2. Пишем бота для анализа Slack

Чтобы не отвлекать отдел разработки на важную и приоритетную бизнес-задачу по созданию колокольчика, я решил сделать всю систему на основе бота.

Каждый раз, когда пользователь оплачивает вакансию, к нам в Slack приходит уведомление типа «💰 Оплачена вакансия». Бот должен увидеть его и привести в действие соленоид.

На Github можно найти сотни Slack-ботов на Python, умеющих реагировать на сообщения в чатах. Я взял один из них за основу и адаптировал для нашей специфики — получился скрипт slack.py.

  • Для работы Slack-бота нужно установить дополнительную библиотеку slackclient на Raspberry. Это можно сделать при помощи команды pip install slackclient в терминале.
  • Вместо config['token'] нужно указать токен для Slack-канала. Для этого нужно сначала создать бота в Slack и скопировать сгенерированный сервисом ключ. И не забудьте добавить бота в нужный канал в мессенджере.
  • В строчке print (message.encode('UTF-8').lower().find('💰 Оплачена')) вместо 💰 Оплачена можно указать любую другую фразу, на которую должен реагировать бот.
  • import ding — здеcь мы указываем название скрипта, который будет приводить в действие соленоид.
Создание бота в Slack
Создание бота в Slack

Всё, основной скрипт готов. Он анализирует сообщения в Slack и при обнаружении соответствия вызывает второй — ding.py, который и приводит в действие соленоид.

3. Скрипт для соленоида

  • Цифра в строчке GPIO.setup(18,GPIO.OUT) — это как раз выход, к которому подключен соленоид. В моём случае, это 18-й коннектор.
  • Строчка GPIO.output(18,1) устанавливает «высокое состояние» для выхода. То есть приводит в действие всю схему.
  • Строчка GPIO.output(18,0) возвращает выход к изначальному состоянию.
  • time.sleep(0.1) — устанавливает длительность паузы в работе скрипта.

Если схема собрана правильно, то при выполнении в терминале команды python ding.py соленоид включится на долю секунды и вернется обратно к своему изначальному состоянию. То есть ударит в колокольчик и вернется на прежнее место.

Аналогично можно проверить работу скрипта slack.py — python slack.py. Если всё ок, то добавляем его в автозагрузку, чтобы при включении Raspberry скрипт запускался автоматически. Делаем это через crontab:

crontab -e

В конце открывшегося файла добавляем команду, в которой указываем путь к скрипту:

@reboot python /home/pi/raspberry-bell/slack.py

Можно перезагружать устройство.

4. Собираем всё вместе

Теперь нужно собрать все элементы вместе и придать продукту товарный вид. Для этих целей прекрасно подошла коробка с новогодними подарками от Mail.ru Group.

Как мы сделали колокольчик, который звенит при поступлении оплаты за размещение вакансий

Красим её в черный цвет, сверлим три отверстия в крышке: два — для крепления колокольчика, одно — для провода от соленоида.

Как мы сделали колокольчик, который звенит при поступлении оплаты за размещение вакансий

Одно большое отверстие делаем в корпусе для провода питания.

Как мы сделали колокольчик, который звенит при поступлении оплаты за размещение вакансий

Соленоид приклеиваем при помощи двустороннего скотча прямо к ножке звонка:

Как мы сделали колокольчик, который звенит при поступлении оплаты за размещение вакансий

Берем в руки паяльник и соединяем все элементы схемы вместе. Для изоляции я использовал термоусадочные трубки (посоветовали в магазине) и, конечно же, изоленту (посоветовал личный опыт). Получилось компактно:

Транзистор, резистор и диод где-то внутри
Транзистор, резистор и диод где-то внутри
Как мы сделали колокольчик, который звенит при поступлении оплаты за размещение вакансий

Проверяем:

Версия со звуком:

Ах, да. Самое главное забыл:

Как мы сделали колокольчик, который звенит при поступлении оплаты за размещение вакансий
6060
35 комментариев

Как тебе такое, Илон Маск?

112

Он бы солнечную батарею присобачил. И станции експресс зарядки в соседних офисах.

Имхо слишком жирно использовать целую Rasberry Pi для одного колокольчика.
Можно в самую простую ардуинку запихать TCP Socket клиент.

Далее, покупаем за 3$ VPS, делаем там все нужные скрипты интеграции (слаки, телеграм и прочие оповещалки). Итак, у нас есть сервер, к которому по IP подключается куча таких колокольчиков, у каждого колокольчика свой ID , который он отправляет при подключении к серверу. Как только пришло оповещение - отправляем сообщение колокольчику по IP

Таким образом, можно сделать целый бизнес продавая "облачные колокольчики", а клиент еще сможет настраивать в веб-морде (если сделать быстро ЛК на PHP) на какие оповещения бить в колокола.

Забирайте бизнес на миллион ;)

30

Ну для одного колокольчика кажется в самый раз, не? По сравнению с VPS, за который надо постоянно платить, окупится за год, плюс можно навешивать на распберри новые задачи (моя мечта — датчик занятости туалета)

5