Raspberry Pi — іграшка для pet-проекту або мікрокомп'ютер для highload продукту
Привіт, мене звуть Іван Нєкіпелов, і я 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 — по суті, cli-утиліту, яка запускалася теж на Raspberry.
Після запуску вона знаходила все 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 буде жити ще дуже довго, так як ринок б/у техніки, на жаль, перенасичений старими моделями.
Опубліковано: 12/09/18 @ 10:01
Розділ Різне
Рекомендуємо:
Пожежна команда і біг на випередження: як ми будуємо Java Competence Center в EPAM
Український математик Богдан Рубльов – про олімпіади, перемоги школярів на міжнародних конкурсах та майбутнє математиків
Go дайджест #5: Go 1.11 c підтримкою модулів і WebAssembly, відмовостійкість в архітектурі микросервисной
PHP дайжест #16: новинки в РНР 7.3, Laravel 5.7, головні події цього місяця
Centers of Excellence. Особливості впровадження