Module - это компьютерная программа, которая позволяет создавать автоматизации процессов домашнего и промышленного хозяйства, по средством использования готовых компонентов, и программного кода на языке typescript.
Module - это умный дом или умное предприятие.
Умный дом - это комплексная система, которая обеспечивает комфорт, безопасность и экономию ресурсов в автоматическом режиме. Некоторые сценарии удобно запускать со смартфона или через голосового ассистента, но самые базовые автоматизации должны срабатывать без вмешательства пользователя. Цель — избавиться от рутинных действий, а не сделать для них дополнительную прослойку в виде условного пульта.
Умное предприятие - это комплексная система, которая обеспечивает комфорт и бесперебойность производственных процессов, мониторинг состояния производства в целом и отдельный процессов в частности, безопасность, экономию ресурсов в автоматическом режиме.
Использование Module для реализации конкретной инсталляции не предусматривает написание кода.
В рамках инсталляции потребуется разметить устройства, создать экземпляры требуемых автоматизаций, заполнив их устройствами и настройками в соответствии с проектом.
Исходя из этого, вытекают преимущества:
- Нет разработки кода.
- Нет разработки сценариев if/else.
- Нет разработки сценариев на графическом языке программирования (Node-Red).
- Раз нет разработки:
- Значит нет разработчиков.
- Значит нет багов.
- Значит нет долгой пусконаладки.
- Значит все работает так же как и на предыдущих инсталляциях.
- Не нужно ждать пока именно под вас все настроят, отладят, проведут пусконаладку.
- Не нужно оплачивать дорогостоящий труд разработчиков.
- Не нужно зависеть от тех разработчиков, которые вам реализовали систему.
- Не нужно заниматься поиском тех, кто внесет изменения, починит, отладит систему которую несколько лет назад сделали другие люди.
- Нет блокировки на производители специализированной автоматики для:
- освещения
- окон (шторы, подсветка, приводы, датчики)
- отопление (радиаторы, теплый пол, параллельная загрузка бойлера, каскад котлов, резервный котел, снеготаяние, бассейн, солнечный коллектор)
- вентиляции (подогрев воздуха, увлажнение воздуха, охлаждение воздуха, распределение воздушных потоков по помещениям)
- увлажнение
- кондиционирование
- водоснабжения (рециркуляция ГВС, защита от протечек)
- открывания (ворот, штор, ставней, дверей)
- реализации различных функций типа (мастер выключатель, автоматический ввод резерва, полив, серена, охранные функции)
- учета расхода ресурсов (электричество, вода, тепло, газ).
- Так как автоматизация строится на универсальных устройствах Wirenboard, и Zigbee.
- Да, в таком случае происходит блокировка на устройствах Wirenboard и/или устройствах Zigbee. Но эти устройства универсальны, и на их базе, можно собрать любую инженерную систему, если есть хорошо реализованный, протестированный код, который приведет в действие автоматику.
- Да,
НЕ
реализованы все возможные случаи, но если ваш случайНЕ
реализован, то мы можете обратиться к нам, и мы соберем схему на железе, реализуем и отладим ПО с учетом всех частных случаев, и добавим такую автоматизацию в нашу коллекцию, и все последующие инсталляции такой инженерной системы будут происходить без отладки ПО.
- Быстрый пуск инсталляции, так как автоматизации для инженерных систем уже готовы и их код не менялся с прошлых установок.
- В процессе жизни, могут происходить изменения в железе, и мы можем выпускать обновления.
- После каждого обновления, проводится проверка на собранном железе, во всех частных случаях. Только после этого, обновление автоматически попадет на конкретные установки, как предложение обновиться, и если что-то пойдет не так, то будет возвращена предыдущая версия.
- Данные отладки будут автоматически отправлены нам и мы узнаем в чем дело.
- В процессе жизни, могут происходить изменения в железе, и мы можем выпускать обновления.
- Возможность купить комплектующие для различных инженерных систем по отдельности, и собрать из них ту или иную систему, что позволит сократить расходы.
- Чтобы понять из чего состоят те или иные системы, можно обратиться к нашей документации, где мы объясняем, из каких принципиальных частей должна состоять та или иная система, и какие параметры должны быть у узлов этой системы. Эта документация похожа на методичку, которая объясняет нюансы, и позволяет закупиться оборудованием, собрать его на объекте, подключить провода и получить работающее решение в одно касание.
Module реализовывает "мозги" для следующих инженерных систем:
- Освещение
- Отопление
- Поддержание температуры в каждой комнате
- Поддержание температуры пола в каждой комнате
- Управление уставкой котла ( источник тепла )
- Управление каскадом котлов ( источник тепла )
- Солнечный коллектор ( источник тепла )
- Управление насосом ( загрузки теплоаккумулятора, разгрузки теплоаккумулятора )
- Контроль температуры коллектора
- Контроль температуры теплового аккумулятора
- Оповещение ( перегрев, падение давления, высокая/средняя/низкая эффективность )
- Управление насосами ( насосная группа )
- Управление смесителями 0-10В ( насосно-смесительная группа )
- Управление контурами теплого пола 0-100% ( термостатические приводы )
- Управление радиаторами 0-100% ( термостатические приводы )
- Автоматическая подпитка
- Отслеживание давления в системе
- Открытие клапана или крана подпитки
- Аварийные уведомления ( ошибки котла, отклонения по температуре, тактование )
- Вентиляция
- Поддержание CO2 в каждой комнате
- Поддержание VOC в каждой комнате
- Подогрев воздуха
- Автоматическая подстройка температуры калорифера по датчикам
- До калорифера
- После калорифера
- После увлажнителя
- Через отопление
- Управление смесителем 0-10В
- Управление насосом
- Управление автоматизацией
отопление
, запрос нужной температуры
- Автоматическая подстройка температуры калорифера по датчикам
- Увлажнение воздуха
- Управление циркуляционным насосом
- Управление клапаном, для защиты от протечки
- Контроль протечки
- Наполнение водой, через механический поплавок
- Управление вентиляторами 0-10В
- Приток
- Вытяжки ( может быть несколько )
- Управление задвижками ( приток, вытяжки, комнаты )
- Релейное + контроль положения ( открыто, закрыто ), через сигнальные линии
- Управление 0-10В
- Контроль параметров через датчики
- Температура перед нагревателем
- Загрязнение фильтра через реле перепада давления ( может быть несколько )
- Температура после нагревателя
- Температура после увлажнителя
- Температура подачи нагревателя
- Температура обратки нагревателя
- Положение смесителя нагревателя 0-10В
- Скорость работы вентиляторов 0-10В
- Влажность после увлажнителя
- Контроль протечки увлажнителя
- CO2 в каждой комнате
- VOC в каждой комнате
- Влажность в каждой комнате
- Температура в каждой комнате
- Шум в каждой комнате
- Давление воздуха в каждой комнате
- Аварийные уведомления
- Увлажнение
- Поддержание влажности в каждой комнате
- Управление комнатными увлажнителями, через реле
- Контроль влажности в каждой комнате
- Управление ( вкл/выкл ) однозонной форсуночной системой увлажнения
- Управление клапанами для подачи воды на форсунки в нужную комнату, через реле
- Контроль давления в системе, через электронный датчик
- Управление частотным преобразователем 0-10В, для управление насосом высокого давления
- Датчик протечки
- Клапан от протечки, с управление через реле
- Аварийные уведомления
- Кондиционирование
- Поддержание температуры в каждой комнате
- Поддержание влажности в каждой комнате
- Управление кондиционерами через ИК
- Управление кондиционерами через Modbus
- Водоснабжение
- Защита от протечек
- Контроль протечек
- Перекрытие ввода по средством электромагнитного нормально закрытого клапана
- Двух-ходовой кран с сигнальными линями
- Двух-ходовой кран 0-10В
- Отключение питания насоса
- Аварийные уведомления
- Управление насосом рециркуляции ГВС
- Реализует быструю подачу ГВС
- Обеспечивает работу полотенце сушителей
- Контроль температуры ГВС
- Параллельная загрузка бойлера
- Управление насосом
- Управление автоматизацией
отопление
, запрос нужной температуры
- Защита от протечек
- Снега таяние
- Запрос пользователя на включение таяния снега исходя из прогноза погоды
- Запрос пользователя на продление работы системы
- Таймер завершения работы
- Управление насосом
- Контроль подачи и обратки
- Управление смесителем 0-10В
- Управление автоматизацией
отопление
, запрос нужной температуры
- Бассейн
- Поддержание температуры в бассейне
- Запуск/остановка фильтрации
- Наполнение/слив
- Управление насосом
- Управление смесителем 0-10В
- Контроль подачи и обратки
- Управление автоматизацией
отопление
, запрос нужной температуры
- Открывашка
- Управление шторами
- Управление воротами
- Управление люками
- Управление рольставнями
- Управление замками
- Греющий кабель
- Управление скрытым в стене полотенце сушителем
- Управление таянием льда в водостоках
- Подогрев ХВС с улицы
- Мастер выключатель
- Безопасность
- Контроль утечки метана
- Контроль дыма
- Контроль вибрации окно/дверей
- Контроль открывания дверей
- Сирена
- Контроль движения
- Уведомления
- Управление автоматизацией
освещение
, включение той или иной зоны освещения
- Учет
- Учет воды
- Учет газа
- Учет расхода тепла
- Учет расхода электричества
- Общий
- По выбранным линиям
- Источник бесперебойного питания
- Контроль разряда батарей
- Управление автоматизацией
Автоматический ввод резерва
, запуск генератора
- Автоматический ввод резерва
- Включение генератора
- Задержка переключения сети на генератор для прогрева и для остывания
- Переключение с сети на генератор и обратно
- Контроль наличия напряжения на фазах
- Аварийные уведомления
С английского legacy переводится как «наследие». Легаси-код — это код, который перешёл «по наследству» от предыдущих разработчиков. Чаще всего это происходит так:
- Команда делает продукт, внутри много разных возможностей.
- Часть функций со временем оптимизируется, а часть остаётся неизменной в виде старого кода, потому что и так работает.
- Некоторое время спустя в команде не остаётся тех, кто писал старый код.
- Текущая команда не знает, почему старый код написан именно так.
- В этих кусках сложно что-то поменять или разобраться, потому что всё остальное написано уже по-другому.
- Этот старый код, который сложно поддерживать и сложно разбираться — это и есть легаси.
👉 Проще говоря, легаси — это код, про который говорят: «Это ещё Михалыч писал 8 лет назад для синхронизации с сервером, он работает, мы его не трогаем, потому что иначе всё сломается». При этом Михалыча в компании давно нет, документации тоже нет, и проще этот код не трогать совсем.
Так как легаси — это старый код, то обычно на нем завязаны многие важные вещи в программе. Получается замкнутый круг: отказаться от легаси нельзя, потому что без него всё сломается, но и поддерживать его в рабочем состоянии тоже сложно, потому что никто не хочет разбираться в старом коде.
Легаси появляется как только интеграторы покидают объект, так как инсталляция будет работать много лет, и потом не найти того разработчика который писал код или делал конфигурации сценариев, а даже если и найти, то он с трудом вспомнит, что к чему.
Но даже если вспомнил, то исправления или доработки будут выполнять как новая разработка, долго + дорого, и после могут появиться баги, которые потребуют возврат разработчика на объект.
Без легаси на каждой инсталляции, это когда:
- Не пишется код
- Не создаются if/else сценарии
- Не создаются Node-Red конфигурации
- Не создаются какие либо уникальные сценарии для конкретной инсталляции, требующие детальной работы с параметрами устройств.
Module построен на базе автоматизаций, каждая автоматизация это законченная программа, которая выполняет свою функцию самостоятельно или взаимодействует с другими автоматизациями для достижения цели.
Таким образом, на каждой инсталляции запускаются нужные автоматизации, код которых не меняется от инсталляции к инсталляции, а так как код не меняется, то и не появляются баги.
В случае если нужно получить автоматизацию которая не реализована, можно воспользоваться двумя опциями:
- Заказать разработку на нашем сайте, описав, то, что должна делать автоматизация, после чего мы предложим время в котором мы сможем созвониться, для детального выяснения подробностей (Рекомендуется).
- Разобраться как разрабатываются автоматизации и сделать Pull request с новым протестированной автоматизацией.
Module основан на универсальной автоматике от компании Wirenboard + устройствах работающих по протоколу Zigbee.
Zigbee может быть как в составе Wirenboard контроллера, так и в любом другом ПК.
- Проектирование
- Закупка железа
- Сборка электрощита
- Прокладка проводников
- Монтаж железа
- Отопление
- Вентиляция
- Увлажнение
- Кондиционирование
- Электрощит
- Щит автоматики
- Первичная настройка wirenboard
- Разметка устройств в Module
- Присваивание размеченных устройств соответствующим проекту автоматизациям
- Проверка режимов работы
- Конец
- Required
Node@20.11.0
npm@10.2.4
- Required
Yarn 1.22.21
- Required
Docker version 24.0.7, build afdd53b
Рекомендуется использовать VSCode
, так как в проекте в директории .vscode
, находятся все конфигурации
и набор расширений которые сделают разработку максимально эффективной и удобной.
Желательно, но не обязательно установить все рекомендованные расширения.
Самый простой вариант начать, это установить Node@18.16.0
npm@9.5.1
отсюда.
Это рекомендованный вариант контроля версии node
.
- Устанавливаем nvm, если его нет.
- Далее через nvm устанавливаем нужную версию node, если у вас оболочка
ZSH
, то можно автоматизировать процесс.
Если у вас оболочка zsh
, можно установить плагин zsh-nvm, выполнив шаги ниже:
-
Выполнить эту команду
git clone https://github.com/lukechilds/zsh-nvm ~/.oh-my-zsh/custom/plugins/zsh-nvm
, она клонирует код плагина дляzsh
в нужную директорию -
Добавить
zsh-nvm
к списку плагиновplugins=(git bundler ... zsh-nvm)
-
Добавить вот такой кусок текста в
.zshrc
:# NVM autoload -U add-zsh-hook load-nvmrc() { if [[ -f .nvmrc && -r .nvmrc ]]; then nvm use elif [[ $(nvm version) != $(nvm version default) ]]; then echo "Reverting to nvm default version" nvm use default fi } add-zsh-hook chpwd load-nvmrc load-nvmrc
-
Выполнить
source .zshrc
-
Перейти в директорию с файлом
.nvmrc
-
Увидеть что-то подобное, только будет указана версия взятая из вашего
.nvmrc
.Found '~/programming/collaborative-data/.nvmrc' with version <v18.16.0> Now using node v18.16.0 (npm v9.5.1)
-
В случае если нужная версия
node
не установлено вы увидите предложение установить её.
npm i -g yarn
yarn
cp .env.example .env
Для запуска БД в контейнере, и теперь она всегда будет включаться автоматически, даже после перезагрузки ПК:
docker compose up -d
Накатим миграции:
yarn prisma:migrate:dev
Накатим сидинг:
Перед тем как катить сидинг, стоит изменить часть переменных на свои значения:
## Master User
#
MASTER_USER_EMAIL=dmitriy@borodin.site
MASTER_USER_PASSWORD='1234'
MASTER_USER_NAME="Dmitriy Borodin"
yarn prisma:seed
yarn start
- Domain-driven-hexagon
- Mosquitto
- MQTT
- NodeJS
- Nodemon
- Debug
- Fastify
- Mercurius
- GraphQL
- SQLlite
- Docker compose
- Compose-file
Все инсталляции лучше всего проводить как отдельные `docker-compose.yaml`` файлы.
Покупаем виртуальную машину на одном из хостингов:
Устанавливаем WireGuard Easy VPN.
Установка будет осуществляться через docker-compose.yaml
.
Создадим ~/wg-easy
, перейдем туда и там создадим необходимые каталоги.
cd
mkdir wg-easy
cd wg-easy
touch docker-compose.yaml
Заполняем ключевые поля WG_HOST, PASSWORD
в настройках, и заполняем файл ~/wg-easy/docker-compose.yaml
, следующим содержимым:
version: '3.8'
services:
wg-easy:
environment:
# ⚠️ Required:
# Change this to your host's public address
- WG_HOST=CLOUD_HOST
# Optional:
- PASSWORD=foobar123
# - WG_PORT=51820
# - WG_DEFAULT_ADDRESS=10.8.0.x
# - WG_DEFAULT_DNS=1.1.1.1
# - WG_MTU=1420
# - WG_ALLOWED_IPS=192.168.15.0/24, 10.0.1.0/24
# - WG_PRE_UP=echo "Pre Up" > /etc/wireguard/pre-up.txt
# - WG_POST_UP=echo "Post Up" > /etc/wireguard/post-up.txt
# - WG_PRE_DOWN=echo "Pre Down" > /etc/wireguard/pre-down.txt
# - WG_POST_DOWN=echo "Post Down" > /etc/wireguard/post-down.txt
image: weejewel/wg-easy
container_name: wg-easy
volumes:
- .:/etc/wireguard
ports:
- '51820:51820/udp'
- '51821:51821/tcp'
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
Запускаем:
docker compose up -d
Далее в Web GUI создадим туннели.
Переходим на тот хост который указали в поле WG_HOST
, http://${CLOUD_HOST}:51820
.
Создаем несколько туннелей:
- Для роутера, чтобы через него получать доступ к WB, или непосредственно для WB, если роутер не поддерживает
WireGuard
. - Для компьютера
- Для телефона
В случае если роутер поддерживает WireGuard
, на роутере нужно будет пробросить порты:
- 80 (внутренний) -> 80 (внешний)
- 22 (внутренний) -> 22 (внешний)
- 18883 (внутренний) -> 18883 (внешний)
В случае если мы установили WireGuard Client
на контроллер то никакие порты пробрасывать не нужно.
Установим MQTT брокер Mosquitto
.
Установка будет осуществляться через docker-compose.yaml
.
Создадим ~/mosquitto
, перейдем туда и там создадим необходимые каталоги.
cd
mkdir mosquitto
cd mosquitto
mkdir ./config
touch ./config/mosquitto.conf
mkdir ./data
mkdir ./log
touch mosquitto.pwd # этот файл будет хранить логи и пароль
touch docker-compose.yaml
Заполняем ~/mosquitto/config/mosquitto.conf
следующим содержимым:
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
#Turn on port listening
listener 1883
#Disable anonomous login:
allow_anonymous false
#Password file:
password_file /etc/mosquitto/mosquitto.pwd
Определяем логин и пароль для доступа к брокеру в формате USER_NAME:PASSWORD
и записываем в файл ~/mosquitto/mosquitto.pwd
, эти данные будут использованы для настройки контроллера.
Заполняем ~/mosquitto/docker-compose.yaml
, следующим содержимым:
version: '3.8'
services:
mosquitto:
image: eclipse-mosquitto
restart: always
privileged: true
ports:
- '0.0.0.0:18883:1883/tcp'
- '0.0.0.0:9001:9001/tcp'
volumes:
- './mosquitto/config:/mosquitto/config'
- './mosquitto/data:/mosquitto/data'
- './mosquitto/log:/mosquitto/log'
- './mosquitto/mosquitto.pwd:/etc/mosquitto/mosquitto.pwd'
Запускаем
docker compose up -d
Проверить работоспособность можно при помощи программы: https://mqtt-explorer.com.
Устанавливаем Gitea
, она понадобится для организации резервного копирования.
Установка будет осуществляться через docker-compose.yaml
.
Создадим ~/gitea
, перейдем туда и там создадим необходимые каталоги:
cd
mkdir gitea
cd gitea
mkdir ./pg-data
mkdir ./data
touch docker-compose.yaml
Заполняем ~/gitea/docker-compose.yaml
, следующим содержимым:
version: '3.8'
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:1.19.0
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=gitea_pg_db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=gitea
restart: always
networks:
- gitea
volumes:
- ./data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- '3001:3000'
- '222:22'
depends_on:
- db
db:
image: postgres:14
restart: always
container_name: gitea_pg_db
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=gitea
- POSTGRES_DB=gitea
networks:
- gitea
volumes:
- ./pg-data:/var/lib/postgresql/data
Запускаем
docker compose up -d
Дальнейшая настройка выполняется через Gitea Web GUI.
Первым делом нужно обеспечить SSH.
См. https://wirenboard.com/wiki/SSH
Выполняем вход:
- Либо через VPN сеть если у нас роутер который поддерживает
WireGuard
. - Либо через встроенный wifi, если вы рядом с контроллером.
- Либо через локальную сеть, если контроллер и ваш ПК подключены к одной сети.
Первый вход будет выполнен по паролю, и пароль по умолчанию это wirenboard
.
Рекомендуется отказаться от аутентификации по паролю, и перейти на аутентификацию по сертификату.
Для этого:
- Создаем файл
nano ~/.ssh/authorized_keys
- Кладем в него свой публичный ключ
- Проверяем доступ по сертификату
ssh root@10.8.0.4
, подставив подходящий IP адрес. - Отключаем вход по паролю добавив строчку
PasswordAuthentication no
в файлnano /mnt/data/etc/ssh/sshd_config.wb
. - Перезапускаем сервис
systemctl restart ssh
- Готово, доступ по паролю отключен.
В случае если роутер не поддерживает WireGuard
, мы установим его клиент на контроллер, и установим соединение с сервером непосредственно, нужно иметь в виду, что это будет тратить ресурсы контроллера.
См. https://wirenboard.com/wiki/MQTT#Создание_своего_брокера_MQTT
Для того, чтобы контроллер публиковал и принимал сообщения от внешнего брокера, нужно выполнить следующие настройки.
Для настройки поста, нужно отредактировать всего 1 файл: /mnt/data/etc/mosquitto/conf.d/20bridges.conf
и вставить в него следующее содержимое:
connection bridge20
address ${CLOUD_HOST}:18883
notifications true
notification_topic /clientnotification/bridge_status
remote_username ${USERNAME}
remote_password ${PASSWORD}
topic # both
См. https://wirenboard.com/wiki/Zigbee
В случае если установлен модуль ZigBee необходимо выполнить установку соответствующих пакетов.
Следуем инструкции WB, устанавливаем пакеты в соответствии с оборудованием и выполняем по очередное добавление устройств в систему.
Для улучшения качества сигнала стоит использовать внешнюю антенну на подобие:
Антенна Espada ESP-ANT3B всенаправленная поможет максимально улучшить качество сигнала Wi-Fi.
При этом разместить ее можно как внутри помещения, так и снаружи, на металлической поверхности.
Для надежной фиксации антенны предусмотрено магнитное основание.
Длинный, 3-метровый, кабель предусматривает стабильное подключение антенны к роутеру.
В качестве разъема подключения у антенны Espada ESP-ANT3B используется RP-SMA Male. Особенности конструкции антенны предполагают ее эффективную работу по передаче сигнала.
Коэффициент усиления при этом составляет 3 дб. А диапазон рабочих частот антенны - 2,4 - 2,5 ГГц.
Настройку всех физически подключенных устройств, и беспроводных устройств, выполняют в WB Web GUI.
Для начала конфигурирования необходимо подключаемся к GUI контроллера внутри VPN, адрес будет похож на http://10.8.0.4:81
.
После чего выполняем рекомендации описанные в документации начальное конфигурирование устройств, разбираемся, что и как делать, и по итогу у нас должны появиться все устройства, подключенные проводами или бкз проводов на странице Devices/Устройства
.
См. https://wirenboard.com/wiki/Wiren_Board_Firmware_Update#user-files
Для того, чтобы сделать резервную копию настроек, необходимо скопировать содержимое /mnt/data/etc
.
Это можно делать разными путями:
- Непосредственно скопировать.
- Инициализировать git репозиторий в
/mnt/data/etc
и при изменении конфигураций публиковать их вGitea
. - Воспользоваться VestaSync, на свой страх и риск.
В случае переустановки прошивки на контроллере, такие пакеты как ZigBee и другие приложения установленные в /mnt/data/root
, нужно будет переустановить. Их не стоит копировать, так как переустановка это не сложный и быстрый процесс, главное знать список софта который нужно установить.
Система управления контроллером НЕ будет расположена на борту контроллера, чтобы не занимать его мощности. Система состоит из трех частей:
- База данных.
- К процесс в котором запущен код Module который выполнят все необходимые вычисления и отдает команды контроллеру.
- Фронтенд для пользовательского взаимодействия.
- Устанавливаем
Module
на ту же виртуальную машину. - Прописываем у него в переменных окружения данные для подключения к нашему MQTT брокеру.
- Входим в web интерфейс
Module
(адрес будет похож наhttp://CLOUD_HOST
), и смотрим вкладкуУстройства
, там должны появиться все устройства которые имеются вWirenboard Web GUI
. - Размечаем устройства в соответствии с проектом.
- Инициализируем автоматизации в соответствии с проектом.
- Проверяем работоспособность все случаев в соответствии с проектом.
- Сдаем работу заказчику, демонстрируя все случаи в соответствии с проектом.
- Вся дальнейшая работа происходит в полностью автоматическом режиме, если в проекте не предусмотрено ручное управление чем либо.