Привет, меня зовут Иван Некипелов, и я Python Tech Lead в компании по автоматизации кафе, ресторанов и магазинов Poster. Хочу рассказать, как и почему мы решили использовать Raspberry Pi на постоянной основе в коммерческих целях для нашего highload продукта. Наш опыт будет полезен всем тем, кто думает применить Raspberry в узком месте проекта и хочет понять, какие подводные камни могут встретиться на пути.
Что мы делаем
Poster — это SaaS-система автоматизации ресторанного и розничного бизнеса. То, что мы делаем, называют Point of Sale или «касса». Для того, чтобы после работы вы съели с друзьями по бургеру в гастро-пабе, шефу нужно проработать меню и создать технологические карты, кладовщику — узнать, какие продукты заканчиваются на складе, и вовремя купить их, официанту — провести заказ на кассе, а повару — приготовить блюдо. Все эти процессы работают быстро и слаженно благодаря системе автоматизации.
Наш продукт разделен на две части — терминал и админка. Терминал запускается на планшетах iPad и Android или Windows-устройствах в противовес дорогим стационарным системам автоматизации, которые используют громоздкие Windows-моноблоки. Сейчас системой учета Poster пользуются 6800 активных заведений в 65 странах мира.
Как подключить неподключаемое
Каждый ресторан использует много периферийного торгового оборудования: фискальный регистратор, принтер чеков, весы и т. д. Все это жизненно необходимо для основных внутренних процессов заведения, но тянет за собой много бюрократической волокиты: фискальный регистратор должен быть зарегистрирован и сертифицирован налоговой, весы проверены в бюро метрологии и гос. стандартизации. Зачастую производители-монополисты не спешат выпускать новые технологичные модели оборудования, так как успешно продают старые.
Подключить устаревшее оборудование, которое раньше подключалось к моноблокам в лучшем случае по USB, а в худшем по COM-порту, к новым iPad — стало главным вызовом в начале нашей работы. Мы видели несколько вариантов решения этой проблемы:
1. Отказ от iPad :)
Самым простым решением было отказаться от iPad и использовать только Android- или Windows-устройства с возможностью проводного подключения, но это противоречило нашей главной ценности — удобству, надежности и современности решения, поэтому этот вариант отсеяли сразу.
2. Использование еще одного планшета или компьютера на Windows
Мы также рассматривали вариант использовать дополнительный планшет или компьютер на Windows, что позволило бы подключать оборудование к терминалу на Windows и общаться с ним с других терминалов на планшетах. Но это повлекло бы дополнительные расходы для клиентов из-за сложности и дороговизны конструкции.
В итоге решили остановиться на Raspberry Pi и расскажу почему.
Что такое «малина»
Raspberry Pi — это микрокомпьютер размером чуть больше кредитной карты. В нем есть разъемы USB и Ethernet. Работает на базе операционной системы Raspbian. Raspbian — это форк Debian для Raspberry Pi.
Изначально Raspberry был создан для образовательных целей и DIY проектов. Сразу после выпуска этого одноплатника появились тысячи гиков, которые стали собирать на его основе умные дома, автоматические страйкбольные винтовки для охраны дома и гроверы для марихуаны. Также «малину» стали закупать школы в странах третьего мира для обучения детей информатике. На 2017 год было продано более 12,5 миллионов экземпляров этого микрокомпьютера. Многие зарубежные компании начали использовать Raspberry в своих коммерческих проектах. Например, на нем сделаны медиаплеер Slice и GIF-камера OTTO. Но в основном эти проекты были стартапами и продавались с помощью краудфандинговых кампаний на Kickstarter.
OTTO камера на основе Raspberry Pi для съёмки GIF-изображений
Мы же решили использовать микрокомпьютер Raspberry в реально коммерческих целях на постоянной основе. Главной причиной стала дешевизна, надежность и простота решения. Также огромным плюсом конкретно этого микрокомпьютера и операционной системы стало наличие масштабного комьюнити, у которого можно было найти ответы на самые каверзные вопросы.
Как создавали Poster Box
Программно-аппаратный комплекс на основе Raspberry мы назвали Poster Box. Он подключается к локальной сети заведения, а к нему подключаются фискальные или термальные принтеры.
Выбор сервера
Web-сервис решили поднять на Tornado, чтобы работать параллельно с несколькими фискальными регистраторами и принтерами с помощью одного Raspberry.
Драйверы
После выбора сервера встал вопрос поддержки ресторанного оборудования. Так как парк оборудования достаточно большой, необходимо было найти наиболее универсальное решении. Такой «серебряной пулей» для нас стал драйвер компании «АртСофт», который называется «Универсальный драйвер РРО». Он предоставляет возможность с помощью единого интерфейса взаимодействовать со всеми возможными фискальными регистраторами в Украине. Использование уже готовых компонентов помогло максимально быстро запустить продукт. Позже мы самостоятельно написали драйверы для некоторых других моделей, чтобы снизить себестоимость устройства.
Когда масштабировали Poster Box на другие страны, иногда приходилось самостоятельно писать драйверы для фискальных регистраторов. Например, на момент нашего старта в России у Атола, самого крупного производителя фискальных регистраторов, совсем не было библиотек и драйверов, приспособленных для работы на Raspberry, поэтому пришлось самостоятельно закрывать этот вопрос.
Интеграции
Писать интеграции к такому оборудованию — достаточно забавная вещь. Общение с фискальными регистраторами происходит с помощью бинарных протоколов. По сути, отправляешь байтовый массив, получаешь в ответ другой, парсишь и получаешь данные об успехе или неуспехе операции.
ТОП-3 проблем, которые пришлось решить
Проблемы с Poster Box начались после продажи десятого устройства. Я выделил три ключевые проблемы, с которыми столкнулись и которые пришлось оперативно решать:
1. «Постановка на поток»
Самой первой проблемой стала организация потокового производства устройств. По сути, нужно было собрать Raspberry в корпус, установить на него операционную систему, наш софт и проверить его работоспособность. Операция сборки и записи занимала около 40 минут и требовала внимания разработчика. Учитывая крайнюю неэффективность такой работы, мы решили автоматизировать процесс. Для этого написали тулзовину под названием pbox-farm — по сути,
После запуска она находила все USB massStorage устройства и записывала на них образ Raspbian, потом делала chroot в каждую записанную флешку и устанавливала софт. Это позволило значительно ускорить запись — до 40 минут на 4 устройства с минимальным участием разработчика.
2. Дистрибьюция и обновления
Следующей проблемой стала дистрибьюция новых сервисов на устройства и поддержание их в актуальном состоянии. Ни одно из готовых средств доставки кода на клиента не закрывало наши потребности, поэтому пришлось писать свой «велосипед». Для этого мы использовали пакетный менеджер opkg, который изначально разрабатывался для openWRT и был очень легковесным.
Затем мы разработали многоуровневую систему репозиториев для плавного деплоя и написали сервис, который просто один раз за определенный период дергал opkg и обновлял пакеты на Poster Box. Сейчас конфиг на каждом устройстве выглядит примерно так:
src/gz custom http://updateserver.com/ua/ua999 src/gz stable_ua http://updateserver.com/stable/ua src/gz testing_ua http://updateserver.com/testing/ua arch any 100 arch arm 200
Существует три канала обновлений: stable, testing, custom. Stable — стабильные версии для всех. Testing — канал, на который выливаются новые релизы примерно для 10% всех клиентов. Custom — специфические пакеты, которые привязаны к конкретному устройству.
3. Настройка удаленного доступа
Поскольку каждый Poster Box физически находится у клиента, прямого доступа к нему у нас не было. Когда к нам стали обращаться клиенты по поводу тех или иных проблем с нашим софтом на «малине», мы толком ничего не могли сделать. Стало ясно, что без удаленного доступа к каждому девайсу работать будет сложно и неэффективно.
Как вариант, мы думали настроить VPN для каждой малины. Но этот способ показался неоправданно сложным. К тому же VPN не всегда стабильно поднимался на всех устройствах.
Поэтому мы решили создать чат-бота на основе XMPP-протокола. На каждом Poster Box установлен сервис-бот, который при включении девайса подключается к XMPP-серверу и становится онлайн для всех его контактов. Если приходит сообщение-команда от контакта из белого списка, он выполняет определенный скрипт на устройстве. Такая схема оказалась очень удобной.
В качестве сервера использовали Prosody. Prosody оказался очень надежным решением и практически не имеет никаких минусов, только требует очень большой лимит системы на открытые файловые дескрипторы.
И еще одна
Есть еще одна проблема, о которой хочется сказать отдельно, — требовательность Raspberry к питанию. Питающее «малину» напряжение должно быть 5 вольт и минимум 2 ампера, но не больше 3. К тому же Raspberry очень боится перепадов напряжения, поскольку в нем нет конденсаторов для безопасного выключения с синхронизацией файловой системы. Поэтому на некоторых точках от перепадов напряжения повреждались загрузочные разделы флешек. Единственный вариант, не меняя платформу, убрать эту проблему — это припаивать к каждому Raspberry конденсаторный шилд, что сильно бы увеличило стоимость и привело к проблеме с дистрибьюцией.
На данный момент мы рекомендуем клиентам ставить Raspberry на бесперебойники или хотя бы хорошие сетевые фильтры, чтобы исключить такие сбои.
Что в итоге
Poster Box — это полезное решение, которое мы смогли быстро запустить благодаря нестандартному, но удачному выбору Raspberry PI. Теперь владельцы заведений могут управлять своим бизнесом с помощью планшетов из любой точки мира в режиме реального времени и не тратить время и деньги на громоздкие стационарные решения.
Безусловно, Raspberry PI имеет свои плюсы и минусы. Но почти все проблемы мы смогли побороть, кроме недостатков самой платформы. Какое-то другое решение, которое бы удовлетворило сейчас наши потребности, не кажется целесообразным.
Сегодня, когда все больше производителей торговой периферии добавляют сетевые интерфейсы в свои продукты, мы постепенно отказываемся от этого дополнительного звена. Но думаю Poster Box будет жить еще очень долго, так как рынок б/у техники, к сожалению, перенасыщен старыми моделями.