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

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

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

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

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

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

Что еще нужно

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

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

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

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

1. Готовим Raspberry Pi

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

ОС 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 и при обнаружении соответствия вызывает второй — 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.

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

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

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

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

Транзистор, резистор и диод где-то внутри

Проверяем:

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

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

  • Весь код тут.
  • Можно адаптировать колокольчик для любых целей — например, чтобы уведомлять о новых вопросах в онлайн-чате.
  • За помощь спасибо Пете Савченко и Андрею Потетюрину.
0
35 комментариев
Написать комментарий...
Sasha Korablyov

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

Ответить
Развернуть ветку

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

Развернуть ветку
Вел Колдин

уахахахаахах

Ответить
Развернуть ветку
Alex Ownagez

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

Ответить
Развернуть ветку

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

Развернуть ветку
Олег Бабаков

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

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

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

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

Ответить
Развернуть ветку
Султан Сулейманов

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

Ответить
Развернуть ветку
Максим Наумов

Ждем симметричного ответа от Самата и команды Медузы. Пора уже давно меряться слаками и колокольчиками

Ответить
Развернуть ветку
Сергей Сергей
Ответить
Развернуть ветку
Султан Сулейманов

Отлично! Вот и мы думали, на чем делать: датчик света? Объёма? Лазер на уровне ног? Сенсор на замке?

Ответить
Развернуть ветку

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

Развернуть ветку
Олег Бабаков

немного не понял про "айпи на вебморде". Имелось ввиду что есть дешевая VPS где есть мини-сайт с ЛК и интеграциями. Там вводишь ID своих колокольчиков (точнее хардварных) и какие оповещения принимать. И сервер занимается тем что по IP отправляет сигнал на звонок. А на стороне колокольчика - самая дешевая ардуинка (или дешевая stm32, которая возможно может и Ethernet эмулировать хорошо, для ардуины еще шилд покупать) и в ней TCP клиент

Ответить
Развернуть ветку

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

Развернуть ветку
Олег Бабаков

я ардуиной не занимался 6 лет) ушел потом на stm32, а потом в веб-разработку) так что что появилось за это время сказать не могу, может и веб-сокеты есть. Я просто помню что на какой-то библиотеке гонял строки туда-сюда. Там скорее всего используется обычный сокет (но не веб, там немного он другой насколько помню)

начните с этого:
https://www.arduino.cc/en/Tutorial/ChatClient

Ответить
Развернуть ветку

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

Развернуть ветку
Константин Панфилов

Тут тебе что, «Хабр»?

Ответить
Развернуть ветку

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

Развернуть ветку
Константин Панфилов

Что?

Ответить
Развернуть ветку

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

Развернуть ветку
Константин Панфилов

Я-то более чем доволен

Ответить
Развернуть ветку

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

Развернуть ветку
Константин Панфилов

Это был ироничный комментарий, чтобы все посмеялись

Ответить
Развернуть ветку

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

Развернуть ветку
Филипп Концаренко
Автор

Винтажная закончилась

Ответить
Развернуть ветку

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

Развернуть ветку

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

Развернуть ветку
Заур Шукюров

Какое еще машинное обучение, алло?

Ответить
Развернуть ветку

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

Развернуть ветку
Артем Павлов

Несколько лет назад сделал похожую штуку, которая звонит в звонок, когда кто-то чекинится на форсквере (тогда он еще был актуален). Фоточки по ссылочке: https://vk.com/wall2948481_941

Ответить
Развернуть ветку
Олег Урукхаев

Летающий дилдо-дрон с лазерным наведенеим в случае отсутсвия продаж был бы гораздо лучшим мотиватором для сотрудников.

Ответить
Развернуть ветку
Юрий Глотов

Всегда восхищался теми, кто в этом всем шарит

Ответить
Развернуть ветку
Филипп Концаренко
Автор

Я, к сожалению, плохо в этом разбираюсь. Но, к счастью, было у кого спросить.

Ответить
Развернуть ветку

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

Развернуть ветку
Igor Novák

Это не сложно.

Ответить
Развернуть ветку

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

Развернуть ветку
Ekaterina Vorobyeva

Вакансии больше не размещают бесплатно?

Ответить
Развернуть ветку
Константин Панфилов

На vc.ru — нет.

💰💰💰

Ответить
Развернуть ветку
Danil Khasanshin

+ 💰💰

Ответить
Развернуть ветку
Константин Панфилов

Мне скидку обещали.

Ответить
Развернуть ветку

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

Развернуть ветку
unknown

С телефония 😎

Ответить
Развернуть ветку
Ilya Finagin

Напряжение теперь ощущается, когда колокольчик долго не звенит?

Ответить
Развернуть ветку

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

Развернуть ветку
Dmitry Yashin

Зачем я это прочитал?

Ответить
Развернуть ветку

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

Развернуть ветку
DJ

Чёрный ящик хоть Цукербергом назвали?

Ответить
Развернуть ветку
Вел Колдин

захотелось вакансию разместить

Ответить
Развернуть ветку

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

Развернуть ветку
Филипп Концаренко
Автор

В Slack просто все логи падают. Удобно потом искать.

Ответить
Развернуть ветку

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

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

Ребят, когда вам совсем есть нечего, пишите, не стесняйтесь, подкинем деньжат!

Ответить
Развернуть ветку

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

Развернуть ветку
Valeriy Roshko

Вот чего нехватает, так это электрических схем для гуманитариев. Где там Морейнис с миллионом, отличная идея для стартапа)

Ответить
Развернуть ветку

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

Развернуть ветку
Serge Arsentiev
специально забыл ему вернуть.

Высокие отношения СПб и Мск офисов.
А потом автор купит компактную, но скрытую сирену, и настроит ее на добавление любого коммента к любой статье, да?

Ответить
Развернуть ветку
Serge Arsentiev

Мне с самого начала показалось странным, что ради вакансий строили целую систему. Я так понимаю, пилотный проект прошел успешно, и система будет дополняться и расширяться - звонками и гудками разного назначения, срабатывающими на оплате разного рода материалов?
Т.е., постепенно будете обучать Мск офис по системе Павлова - при звонке бежать ставить вакансии, при гудке - партнерские материалы, и так далее ...
Тонкий питерский троллинг ...

Ответить
Развернуть ветку

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

Развернуть ветку

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

Развернуть ветку

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

Развернуть ветку
32 комментария
Раскрывать всегда