Мы любим пить чай и поэтому у нас есть большой чайник, кто-то делает Чайник, мы все пьем чай и все довольны.

Ну, почти проблема в том, как узнать, что в чайнике есть чай, сколько чашек чая осталось в чайнике или сколько лет чаю?

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

Это просто, действительно все, что вам нужно, это

1x USB почтовые весы

1x Малиновый Пи

1x термометр

Мы используем весы, чтобы измерить вес чайника, термометр, чтобы сообщить, теплый ли чай, и малину, которая жалеет все это вместе с каким-то питоном.

Состояние Чайника представлено в виде конечного автомата, который выглядит примерно так:

Это определено здесь — https://github.com/gbrady92/Teabot/blob/master/teabot/teapot_state.py

  • No Teapot — это начальное состояние, в которое будет сбрасываться конечный автомат в случае сбоя приложения.

Затем мы объединяем текущее состояние с показаниями весов и датчика температуры, чтобы решить, в какое состояние перейти.

  • Мы взвесили чайник с водой, чтобы получить порог для нового чайника.
  • Мы знаем, сколько весит чайник без воды, чтобы определить, когда он пуст.
  • Все, что находится между этими двумя измерениями, означает, что у нас есть немного чая в чайнике, но это не ново.

К сожалению, датчик температуры работал не очень хорошо, поэтому наше обнаружение холодного чайника довольно шаткое.

Вся эта логика реализована здесь — https://github.com/gbrady92/Teabot/blob/master/teabot/status_helpers.py#L152

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

Мы хотели иметь веб-интерфейс для получения статистики и взаимодействия с Teabot, поэтому решили сделать это отдельно от Teabot на стороне сервера.

Используем обратные вызовы для передачи по POST информации о новом состоянии чайника на сервер



Это позволяет нам сохранять историю каждого состояния, в котором находился чайник, для дальнейшей забавной аналитики.

Помимо отправки нового состояния чайника на сервер, если мы вошли в состояние FULL_TEAPOT, мы запускаем таймер заваривания.

ISO 3103 — https://en.wikipedia.org/wiki/ISO_3103 Стандарт заваривания чая рекомендует 6 минут, но мы обнаружили, что это слишком долго, поэтому мы ждем только 3 минуты, пока он заварится.

И как только таймер заваривания истекает, Teabot отправляет сообщение на сервер, предлагая ему опубликовать сообщение в нашем канале Slack, объявляющее, что чайник готов к употреблению.

Наконец, мы внедрили веб-хук Slack, чтобы люди могли использовать команду /teabot для POST-сообщения на сервер с вопросом, сколько чашек чая осталось в чайнике, и мы используем последний элемент истории, который был отправлен нам, чтобы ответить на этот вопрос.

Веб-сервер представляет собой простое приложение Flask, которое находится здесь — https://github.com/AaronKalair/teabot_endpoints/blob/master/teabot_endpoints/endpoints.py.

(Забавно, что есть конечная точка, которая возвращает код состояния 418 Я чайникhttps://github.com/AaronKalair/teabot_endpoints/blob/master/teabot_endpoints/endpoints.py#L134 )

Это была первая версия Teabot, которая была выпущена, и с набором весов, показывающим, насколько тяжелым был чайник, на доске рядом с Teabot росла таблица лидеров с самым тяжелым чайником, который был сделан.

Поэтому мы решили превратить это в полноценную функцию Teabot, и родился teabot_stats — https://github.com/AaronKalair/teabot_stats.

Статистика Teabot — это приложение React/Redux, которое позволяет вам получить чайник, если вы его сделали.

И использует эту информацию для создания таблицы лидеров или Tea-derboard, как теперь известно — https://github.com/AaronKalair/teabot_stats/pull/21/files.

Пусть все увидят ваши навыки заваривания чая.

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

Примерно через год мы готовили 1 мг чая и праздновали торт.

Итак, у нас есть чайник, подключенный к Интернету, чтобы отслеживать наш чайник и предоставлять статистику и таблицу лидеров.

Этот пост в блоге основан на трехминутном молниеносном выступлении, которое я сделал на PyconUK.

Подпишитесь на меня в Твиттере @AaronKalair