Apostol CSMS — двигатель, на котором работает ChargeMeCar
ChargeMeCar - розничный сервис на Apostol CSMS: платформе управления зарядными станциями с тремя версиями OCPP, OCPI-роумингом, платежами через Stripe Connect и несколькими независимыми операторами на одном экземпляре. Эта страница прямо говорит, что в продуктиве, что готово и что пока в планах.
Как ChargeMeCar соотносится с платформой
Три вещи, которые стоит знать - ради прозрачности, а не для буклета.
Тот же двигатель, без форка
ChargeMeCar работает на той же сборке ПО, что и любой другой бренд на платформе, под криптографически подписанной лицензией бренда. Релизы платформы доходят до него так же, как до всех: одна команда обновления, проверки состояния, откат той же формы.
Операционно независим
Наш аккаунт Stripe, наша инфраструктура, наше юридическое лицо - FROG IT SARL, Ницца. Владелец платформы не управляет ChargeMeCar и не может касаться его денег: платежи списываются в аккаунтах Stripe владельцев станций, а данные бренда зашифрованы ключом самого бренда.
Открытый фундамент, документированное ядро
Платформа стоит на открытом фундаменте, опубликованном под свободной лицензией на GitHub: транспортном фреймворке и платформенном слое на PostgreSQL. Бренд покупает или лицензирует прикладной слой зарядки поверх него - а ядро, от которого он зависит, может прочитать любой.
Что умеет платформа - с честным статусом каждой строки
Три уровня, намеренно не смешанные: в продуктиве - работает на живых станциях с реальными деньгами; готово - реализовано, покрыто тестами и эмулятором станций, но промышленного объёма ещё не видело; в планах - в дорожной карте, не поставляется.
Станции
- OCPP 1.6 - основной протокол платформы; любая станция, говорящая на нём, подключается без доработокВ продуктиве
- OCPP 2.0.1 - 12 из 16 функциональных блоков полностью, 4 частичноГотово
- OCPP 1.5 - старые паркиГотово
- Смешанный парк: версия определяется автоматически, команды переводятся между форматамиГотово
- Самостоятельное подключение владельцем - около 15 минут; станция регистрируется при первом выходе на связьВ продуктиве
- Удалённый старт, стоп, разблокировка кабеля, перезагрузка, включение и вывод из работы - из портала, приложения водителя или по QRВ продуктиве
- Обновление прошивки по ссылке или из библиотеки файлов платформы; журнал событий безопасности станцииГотово
- Массовые операции над парком, иерархия площадок (регион → город → объект → зона)В планах
Тарифы и деньги
- Пять тарифицируемых услуг: за кВт·ч, за минуту зарядки, простой после окончания, бронирование, паузаВ продуктиве
- Тарифы по расписанию: день недели, час, день/ночьГотово
- Stripe и Stripe Connect: прямое списание в аккаунте владельца станции, квитанции от имени владельца, возвратыГотово
- Разовая оплата по QR без регистрации - требование AFIR в ЕС; сквозной тест против настоящего StripeГотово
- Комиссия платформы удерживается с каждого платежа; ежемесячная выписка с расшифровкой владельцуВ продуктиве
- Предоплатный баланс организации, списание за каждую сессию по кВт·ч для своих парковВ продуктиве
- Двойная запись по внутренним счетам - суммы сходятся по построениюВ продуктиве
- Динамическое ценообразование (от спроса, от цены электроэнергии)В планах
Операторы и водители
- Несколько независимых операторов на одном экземпляре, каждый видит только своёВ продуктиве
- Роли: владелец, администратор, оператор, инженер, поддержка, водитель, партнёрВ продуктиве
- Партнёры - дочерняя сеть внутри оператора, с учётом выручкиГотово
- Веб-приложение водителя: карта с фильтрами, старт и стоп, ход сессии, история, сохранённые карты, RFID, бронирование - восемь языковВ продуктиве
- Уведомления: push, e-mail, в интерфейсе; массовые рассылкиГотово
- ИИ-помощник поддержки в приложении водителя, действующий строго в правах водителяГотово
- Нативные приложения в App Store и Google PlayВ планах
Роуминг и интеграции
- OCPI 2.2.1 и 2.3.0 одновременно, в обеих ролях: оператор зарядных точек и провайдер услуг мобильностиГотово
- Публикация станций, тарифов, сессий и расчётных записей партнёрской сети через хаб - прошла живой обменВ продуктиве
- Приём токенов и команд партнёра в живом обменеЧастично
- Договоры с Hubject и Gireve - коммерческий шаг оператора; техническая предпосылка естьВ планах
- Открытый REST API - сотни методов со спецификацией OpenAPI, события в реальном времени, вебхукиВ продуктиве
- Коннекторы к бухгалтерии и ERPВ планах
Эксплуатация и безопасность
- Панель оператора: станции по состояниям, энергия, выручка, загрузка, тревоги; консоль инцидентов с живой лентой событийВ продуктиве
- Поставка контейнерами; установка, обновление без остановки и откат - четыре площадки на одном конвейереВ продуктиве
- Вход по OAuth 2.0, включая Google; защита сессии браузера; три независимых уровня контроля доступа; журналы аудитаВ продуктиве
- Выгрузка отчётов в Excel/CSV, конструктор отчётов, показатели загрузки и доступностиВ планах
- Внешний мониторинг и оповещения, резервное копирование на момент времениВ планах
- ISO 15118 Plug & Charge, взаимные сертификатыВ планах
Открытые стандарты, без привязки к поставщику
Платформа говорит на протоколах, которыми пользуется любая современная зарядная сеть, - OCPP в сторону оборудования, OCPI в сторону других сетей. Работает любая станция, совместимая с OCPP, кто бы её ни сделал.
OCPP - три версии, одна среда исполнения
- OCPP 1.5 (SOAP)
Совместимость со старым оборудованием, которое ещё в строю.
- OCPP 1.6 (JSON / WebSocket)
Основной протокол платформы: станция, говорящая на нём, подключается без доработок.
- OCPP 2.0.1
Трёхуровневая модель Станция → EVSE → Коннектор, постоянная модель устройства, события безопасности, управление прошивкой. 12 из 16 функциональных блоков полностью.
Версия определяется при подключении. Команды из портала переводятся 1.6 ↔ 2.0.1, так что смешанный парк управляется в одном интерфейсе.
OCPI - роуминг с обеими действующими версиями
- Роль CPO
Открывает станции, тарифы и сессии бренда партнёрским сетям - публикация через хаб прошла живой обмен.
- Роль eMSP
Принимает токены водителей партнёров и команды удалённого старта по тому же каналу - реализовано и протестировано, в живом обмене ещё не доказано.
Нейтральна к оборудованию по замыслу
Любая станция OCPP 1.5 / 1.6 / 2.0.1 - в том числе конкурента. Смешанный парк сводится в один портал без перепрошивки: адрес OCPP-сервера меняется в собственном веб-интерфейсе станции.
Построена вокруг регуляторного контура ЕС
Прямое списание через Stripe Connect в аккаунт владельца станции, разовая оплата по QR для AFIR, строгая аутентификация клиента по PSD2, GDPR в слое данных.
Stripe Connect
«Подключить через Stripe» из портала - ваш собственный аккаунт Stripe, из любой страны; прямое списание в аккаунте владельца; квитанция выпускается с аккаунта владельца от его имени; комиссия платформы удерживается с каждого платежа, ежемесячная выписка - для бухгалтерии; возвраты по тому же каналу.
AFIR - разовая оплата
Общедоступные точки обязаны принимать оплату от любого водителя без договора и приложения: водитель сканирует QR-код на станции, видит тариф, платит картой и заряжается. Реализовано и протестировано сквозным тестом против настоящего Stripe.
PSD2 / 3-D Secure
Строгую аутентификацию клиента для европейских карт обеспечивает Stripe; ни один платёжный путь её не обходит.
GDPR
Данные остаются в ЕС, водитель может удалить аккаунт из приложения, согласия фиксируются, каждое действие оставляет след в аудите.
Тонкий транспорт, логика в базе данных
Два слоя в ядре: однопоточный транспорт на современном C++ - HTTP, WebSocket, TLS, OCPP - и бизнес-логика, написанная в самой PostgreSQL. Осознанное инженерное решение, с изложенными доводами.
Один цикл событий для HTTP и PostgreSQL
Соединения с базой живут в том же цикле событий, что HTTP- и WebSocket-соединения: запрос - один поход в базу, одна транзакция. Десятки тысяч станций держат постоянные соединения с одним узлом при стабильной задержке.
Целостность денег по построению
Расчёт стоимости, проверка баланса, защита от двойного списания и выставление счёта выполняются в одной транзакции базы - атомарность гарантирует PostgreSQL, а не код приложения. Завершённая сессия с потерянным счётом или двойное списание при параллельных запросах исключены по построению.
Лицензия и манифест бренда
Бренд работает под криптографически подписанной лицензией - название, юридическое лицо, рынок, домен, налоговые реквизиты, - которую нельзя перевыпустить без владельца платформы. Оформление, платёжный провайдер, язык, валюта и карты живут в манифесте бренда, который правится в портале и применяется без пересборки.
Открытый фундамент
Транспортный фреймворк и платформенный слой на PostgreSQL опубликованы под свободной лицензией на GitHub; прикладной слой зарядки поверх них - продукт. Поставка - Docker Compose на собственном сервере бренда, база данных недоступна из внешнего сегмента сети.
Где платформа отстаёт от лидеров enterprise - и говорит об этом
Ничто из этого не мешает работать и зарабатывать уже сегодня; всё это - запланированная работа.
ISO 15118 Plug & Charge
Автомобиль авторизуется сам, без карты и приложения. Важно для премиальных DC-парков и входит в некоторые национальные программы субсидий.
Нативные мобильные приложения
Водители пользуются веб-приложением, которое ставится на телефон в одно касание; присутствие в App Store и Google Play - следующий шаг.
Балансировка мощности площадки
Профили мощности передаются станции и хранятся; распределение мощности между станциями одной площадки и реакция на пики сети - в планах.
Эксплуатация парка в масштабе
Массовые операции с прошивкой и настройками, иерархия площадок, выгрузка отчётов и конструктор отчётов - то, о чём просит оператор от пятидесяти станций.
Роуминговые хабы
Половина eMSP в OCPI в живом обмене и договоры с Hubject и Gireve.
Хотите платформу под своим брендом?
Новый бренд разворачивается на подготовленном сервере за минуты - со своим доменом, юридическим лицом, платёжным провайдером и оформлением. Производителям и операторам: white-label-программа на следующей странице.