Определения
Micropython
Micropython - это простая и эффективная реализация языка программирования Python 3, включающая небольшое подмножество стандартной библиотеки Python и оптимизированная для работы на микроконтроллерах и в ограниченных средах.
Fediverse
Fediverse - это способ организации взаимодействия сервер - сервер, обеспечивающий децентрализованную схему распространения и обработки информации.
IoT
Ineternet of Things
- это обширная сеть устройств-предметов, подключенных к Интернету и способных взаимодействовать друг c другом.
Git
Git - это бесплатная распределенная система контроля версий с открытым исходным кодом, предназначенная для быстрой и эффективной работы с проектами, от небольших до очень крупных.
Git Commit
Commit или Коммит
- это зафиксированное во времени состояние кода или иной байтовой структуры в системе контроля версии Git. Каждый коммит имеет свой уникальный идентификатор и обычно имеет description
- текстовое описание изменений, которые в него входят.
Git Tag
Tag или Тег
- это коммит, помеченный дополнительным свойством - тегом, обычно тег присваивается стабильным-релизным версиям какой-либо программы.
Git Branch
Branch или Ветка
- это набор коммитов, расположенных в хронологическом порядке в системе контроля версии Git.
Gitlab
Gitlab
- это веб-инструмент жизненного цикла Git репозиториев от компании GitLab Inc
. В данной документации под Gitlab
подразумевается не только gitlab.com, но и любой другой Узел Gitlab CE
или Gitlab EE
Github
Github - это хостинг Git репозиториев от компании Github Inc
.
Pepeunit
Pepeunit - платформа с открытым исходным кодом основанная на приниципах Fediverse и IoT, предоставляющая функционал CI/CD
, настройки политик взаимодействия, управления, отслеживания состояния, а также обеспечивающая федеративное взаимодействие между Unit.
Instance
Instance или Узел
- полностью работоспособное, настроенное и запущенное веб приложение - способное отвечать на запросы клиентов.
API
Application Programming Interface
- это контракт, проедоставляемый программами и описывающий взаимодействие c ними.
REST
REST API
- контракт описывающий взаимодействие программы с клиентами через HTTP
запросы. Pepeunit Backend использует пакет Pydantic и интерфейс Swagger OpenAPI для предоставления REST API
.
GQL
GraphQL API
- это язык запросов и серверная среда с открытым исходным кодом, использующая HTTP
запросы для обмена информацией с клиентами. Pepeunit Backend использует пакет strawberry-graphql для предоставления GraphQL API
.
MQTT
MQTT API
- упрощённый сетевой протокол, работающий поверх TCP/IP
, ориентированный на обмен сообщениями между устройствами по принципу издатель-подпищик. Pepeunit Backend использует пакет fastapi-mqtt как клиент, для взаимодействия c MQTT Broker - EMQX.
OTA
Over The Air
- обновление по воздуху, способ доставки и установки новых микропрограм в IoT устройства. Pepeunit поддерживает обновление по OTA
через REST и отдаёт три вида архивов:
zip
для первичной ручной установки на устройствоtar
для устройств не поддерживающих распаковкуgz
tgz
как основной способ обновления
MQTT Broker
MQTT Broker
- это серверное приложение, которое координирует сообщения между издателями и подпищиками MQTT протокола. В Pepeunit главными подпищиками и издателеми можно считать Unit, а главным руководителем взаимодействия - Backend. Pepeunit использует MQTT брокера - EMQX.
ACL List
ACL List
- это файл, определяющий правила авторизации для MQTT Broker
Redis
Redis - NoSQL
кластерная база данных использующая парадигму key-value
Postgresql
Postgresql - кластерная реляционная база данных с языком запросов SQL
.
ChatBot
ChatBot
- приложение, позволяющее взаимодействовать с Backend через диалог в чате. Pepeunit Backend использует пакет AioGram как клиент, для взаимодействия с Telegram Bot API.
Frontend
Frontend
- веб приложение, доступное для скачивания открытым способом и предназаначенное для обеспечения взаимодействия пользователя c Backend приложением. Pepeunit Frontend Repository
Backend
Backend
- приложение размещаемое на сервере, обеспечивающее обработку, хранение и анализ информации, а так же предоставляющее разные API для взаимодействия. Pepeunit Backend Repository
Repo
Repo
- это представление Pepeunit о внешнем Git репозитории, например из Gitlab или Github. Данная сущность содержит в себе полный клон репозитория и синхронизирует своё состояние с внешним репозиторием, что позволяет Pepeunit быстро создавать микропрограммы для Unit.
Unit
Unit
- это представление о физичеcком IoT устройстве в Pepeunit, данная сущность создаётся на основе Repo и несёт в себе информацию о конкретном физическом IoT устройстве, а так же о версии микропрограммы доступной в Repo
UnitNode
UnitNode
- это предстваление о топике в MQTT для Pepeunit, данная сущность описывает точку взаимодействия с Unit. UnitNode
может быть двух типов Input
и Output
. Между UnitNode
разных Unit могут быть связи: от одного Output
к многим Input
.
env_example.json
env_example.json
- файл, описывающий переменные окружения нужные дла корректной работы микропрограммы Unit, он создаётся разработчиком Unit и помещается в каждую версию Repo. На основе данного файла и ввода пользователя, Pepeunit может сгенерировать env.json файл для Unit.
env.json
env.json
- секретный файл, содержащий переменные окружения нужные дла корректной работы микропрограммы Unit. Именно данный файл отличает ваш Unit от других Unit отстыкованных от одного и того же Repo. Он создаётся владельцем Unit совместно с Pepeunit и хранится в шифрованном виде внутри сущности Unit.
DANGER
Никогда и никому не передавайте env.json
файл, любой человек имеющий данный файл, может эмулировать ваше устройство Unit.
schema_example.json
schema_example.json
- файл схемы, описывающий MQTT топики нужные Unit. Данный файл создаётся разработчиком Unit и помещается в каждую версию Repo. Благодаря данному файлу Pepeunit создаёт UnitNode сущности, отвечающие за взаимодействие с Unit и регламентирующие политики доступа до топиков Unit. Пример:
{
"input_base_topic": [
"update/pepeunit",
"schema_update/pepeunit"
],
"output_base_topic": [
"state/pepeunit"
],
"input_topic": [
"input/pepeunit"
],
"output_topic": [
"output/pepeunit"
]
}
schema.json
schema.json
- готовый файл схемы для Unit генерируемый Pepeunit, содержит в себе ссылки на UnitNode и базовые топики для взаимодействия с Pepeunit. Пример готовой схемы:
{
"input_base_topic": {
"update/pepeunit": [
"example.com/input_base_topic/5e1a4151-515e-4926-8b8a-5e821713e25e/update/pepeunit"
],
"schema_update/pepeunit": [
"example.com/input_base_topic/5e1a4151-515e-4926-8b8a-5e821713e25e/schema_update/pepeunit"
]
},
"output_base_topic": {
"state/pepeunit": [
"example.com/output_base_topic/5e1a4151-515e-4926-8b8a-5e821713e25e/state/pepeunit"
]
},
"input_topic": {
"input/pepeunit": [
"example.com/dc2d6f5e-90b3-4cdb-91a4-5ae12db1887f/pepeunit",
"example.com/f06bcaa8-bb00-45ea-aba8-0fc0eba41e08/pepeunit"
]
},
"output_topic": {
"output/pepeunit": [
"example.com/4114a3f8-65c1-4d42-8d1d-481785d0dcca/pepeunit"
]
}
}
5e1a4151-515e-4926-8b8a-5e821713e25e
- при этомuuid
Unitdc2d6f5e-90b3-4cdb-91a4-5ae12db1887f
,f06bcaa8-bb00-45ea-aba8-0fc0eba41e08
,4114a3f8-65c1-4d42-8d1d-481785d0dcca
- при этомuuid
разных UnitNodeinput/pepeunit
- имеет сразу два топика, это означает что один из этих UnitNode принадлежит к текущему Unit сuuid=5e1a4151-515e-4926-8b8a-5e821713e25e
, а второй другому UnitNode