Алгоритм создания Unit
TIP
INFO
Данное руководство составлено на основе готового к работе Fan Regulator ds18b20
Проработка идеи Unit
Перед началом разработки Unit ответьте себе на следующие вопросы:
- Какую основную задачу будет решать Unit ?
- Какие физические элементы будут у Unit ?
- Какие данные Unit будет публиковать ?
- Какое управляющее воздействие будет допускать Unit ?
- На каком языке будет написан Unit ?
Например
- Unit будет регулировать температуру при помощи вентилятора
- Понадобятся:
esp32,4pinвентилятор, температурный датчикds18b20 - Будет публиковаться: скважность
PWMсигнала управления вентилятором и температура на датчике - Будет команда: включение на
Nсекунд с заданной скоростью вращения Micropython
Создание репозитория Git
Выберите инстанс GitLab или GitHub:
- Создайте пустой репозиторий
- Склонируйте его на свою
ЭВМ
Создание базовой файловой структуры
TIP
Создайте в корне Git репозитория следующие пустые файлы:
.gitignore
env.json
schema.json
tmp
.idea
.nvimWARNING
Не забудьте указать папку с вашей IDE, это может быть: .idea, .nvim или любая другая
.pepeignore
.git
.gitignore
.pepeignore
LICENSE
env_example.json
schema_example.json
pepeunit.toml
readme.mdschema_example.json
{
"input_base_topic": [
"update/pepeunit",
"env_update/pepeunit",
"schema_update/pepeunit",
"log_sync/pepeunit"
],
"output_base_topic": [
"state/pepeunit",
"log/pepeunit"
],
"input_topic": [
"set_fan_state/pepeunit"
],
"output_topic": [
"current_fan_speed_percentage/pepeunit",
"current_temp/pepeunit"
]
}Для соответствия проработанной идее Unit, к стандартным топикам input_base_topic и output_base_topic потребуются добавить ещё два типа топиков: input_topic и output_topic
| Тип топика | Топик разработчика | Назначение |
|---|---|---|
input_topic | set_fan_state/pepeunit | Unit подпишется на него и будет получать управляющие команды |
output_topic | current_fan_speed_percentage/pepeunit | Будет использоваться для публикации скважности PWM |
output_topic | current_temp/pepeunit | Будет использоваться для публикации данных с датчика температуры ds18b20 |
env_example.json
{
"WIFI_SSID": "ssid",
"WIFI_PASS": "password",
"PWM_FAN_PIN": 0,
"DS18B20_PIN_NUM": 4,
"REGULATOR_OPERATING_RANGE": 1000,
"PUBLISH_SEND_INTERVAL": 1,
"TEMP_MIN": 30,
"TEMP_MAX": 60,
"DUTY_MIN": 8192,
"DUTY_MAX": 65535,
"PU_DOMAIN": "unit.example.com",
"PU_HTTP_TYPE": "https",
"PU_APP_PREFIX": "/pepeunit",
"PU_API_ACTUAL_PREFIX": "/api/v1",
"PU_MQTT_HOST": "emqx.example.com",
"PU_MQTT_PORT": 1883,
"PU_MQTT_PING_INTERVAL": 30,
"PU_AUTH_TOKEN": "jwt_token",
"PU_SECRET_KEY": "32_bit_secret_key",
"PU_ENCRYPT_KEY": "32_bit_encrypt_key",
"PU_STATE_SEND_INTERVAL": 300,
"PU_MIN_LOG_LEVEL": "Debug",
"PU_MAX_LOG_LENGTH": 64
}DANGER
Все переменные в env_example.json должны быть обезличены
Нужно продумать, за что будут отвечать переменные Разработчика Unit:
| Название переменной | Назначение |
|---|---|
WIFI_SSID | Название WiFi сети для подключения |
WIFI_PASS | Пароль от WiFi сети для подключения |
PWM_FAN_PIN | Позволит менять номер контакта подключения вентилятора |
DS18B20_PIN_NUM | Позволит менять номер контакта, отвечающего за получение данных от датчика ds18b20 |
REGULATOR_OPERATING_RANGE | Позволит изменять частоту работы регулятора |
PUBLISH_SEND_INTERVAL | Позволит настраивать скорость публикации в топик current_fan_speed_percentage/pepeunit и current_temp/pepeunit |
DUTY_MIN | Позволит устанавливать минимальную скорость вентилятора |
DUTY_MAX | Позволит устанавливать максимальную скорость вентилятора |
TEMP_MIN | Позволит настраивать температуру, начиная с которой скорость будет DUTY_MIN |
TEMP_MAX | Позволит настраивать температуру, начиная с которой скорость будет DUTY_MAX |
WARNING
Переменные могут поменяться в процессе разработки - это абсолютно нормально. Добавьте или удалите переменные в env_example.json и актуализируйте pepeunit.toml и readme.md.
Pepeunit отобразит новые переменные Пользователям для ввода, когда они изменят таргет версию.
Первый коммит
После заполнения минимально нужных файлов, пора их закоммитить:
- Переходим в консоль директории вашего проекта
git add .- добавляем все файлы в кандидаты на коммитgit commit -m "feat(init): initial files"- коммитим измененияgit push- отправляем изменения в ваш удалённый хостинг GitLab или GitHub
Создание тестового Unit в Pepeunit
Чтобы продолжить разработку Unit, нужно взаимодействовать с Pepeunit через MQTT, а также получить env.json и schema.json. Выбирите подходящий инстанс Pepeunit, которому вы доверяете. Выполните следующие шаги:
- Создайте RepositoryRegistry
- Создайте Repo
- Создайте Unit
- Настройте Unit для обновлений в ручную, чтобы чётко контролировать таргет версию
- Заполните env у Unit
- Скачайте Архив с env.json и schema.json
Полученные файлы env.json и schema.json нужно будет поместить в каталог вашего локального Git репозитория. Данные файлы будут содержать данные для подключения к Pepeunit, а также топики для публикации.
INFO
В процессе разработки можно заходить в тестовый Unit и видеть:
Наполнение Unit программным функционалом
WARNING
Не существует универсального алгоритма разработки Программного обеспечения. Разрабатывайте так, как удобно именно вам. Однако рекомендуем стараться следовать стандартным правилам частоты кода.
Когда у Unit в локальном репозитории есть обратная связь с Pepeunit, попробуйте следовать следующему алгоритму:
- Протестировать, что клиентские библиотеки (Micropython, Golang и Python) корректно отправляют данные и получают стандартные команды
- Получите данные от ваших физических датчиков, попробуйте вывести значения напрямую в консоль, без сетевых усложнений, чтобы понять что данные действительно поступают
- Попробуйте отправить свои данные в
output_topic, указанные в schema_example.json - Получите команды из
input_topicи обработайте их так, как задумано в концепции вашего Unit - Внедрите переменные окружения из env_example.json для удалённой настройки вашего Unit
После этих шагов вы получите рабочий Unit, которой нужно протестировать в различных режимах работы.
WARNING
В процессе разработки можно делать множество коммитов с рабочим и не рабочим функционалом, создавать ветки и делать всё, что позволяет Git. Однако настенет момент, когда вы поймёте, что всё работает корректно, и доработки больше не требуются. В этот случае можно двигаться дальше.
Создание pepeunit.toml и readme.md
INFO
Pepeunit расчитывает на машиночитаемое описание Unit в файле pepeunit.toml.
Чтобы добавить описание для Unit, нужно:
- Создать в корне репозитория Unit файл pepeunit.toml
- Сгенерировать readme.md на основе pepeunit.toml
- Поместить сгенерированный readme.md в корень репозитория. Писать readme.md в ручную не требуется
DANGER
У всех Unit должна быть документация, чтобы Пользователи могли ими пользоваться.
Присвоение Тега
readme.md и pepeunit.toml заполнены, функционал готов, всё работает корректно. Время присвоить Тег для последнего коммита в репозитории:
- Перейдите в консоль в директории вашего проекта
- Выполните команду
git tag 1.0.0 - Выполните команду отправки во внешний репозиторий
git push --tags
INFO
Pepeunit например использует везде: major.minor.fix:
DANGER
Тег будет сигнализировать Пользователям, что всё готово к эксплуатации и протестировано Разработчиком Unit.
Пользователи будут ожидать, что выбрав последний Тег, получат самую рабочую, самую актуальную версию Unit.