Skip to content

Commit

Permalink
feat: implement counters processing in devices-control (#7)
Browse files Browse the repository at this point in the history
* feat: modify scheme for processing value counters

* fix: uncomment isValidTypes correct line (forget in last commit)

* docs: fix translate in schema + example in init module desc

* refactor: improve Makefile, mod, js

- Cleared RULE_FILES calculation
- Add separate reusable *_DEST vars
- Add different names for *_FILES_* variables inside install-* goals
- Edit comments

* refactor: replace checks to module + add config read err

* fix: Makefile variable typo

* docs: several different READMEs files improves

* feat: implement readAndValidateConfig

* feat: first iteration event/action tables

* docs: add in dev README about input parameters checks

* feat: second iteration - integrate table to validation

* feat: third iteration - integrate table to event handling

* refactor: split behavior table in separate module file

* docs: info about adding new event/action to devices-control scenario

* fix: translate in schema

* refactor: small refactoring comments in behavior table + module

* feat: implementation value support for devices-control

* refactor: split event and action tables into separate files

* docs: change divices-control scenario scheme + screen images

* docs: bump version to 1.0.5

* fix: clean control file from old depends

* refactor: delete scenario link-in-to-out

* refactor: delete image from schema devices-control

* refactor: delete heart

* refactor: general scenarios description deleted

* refactor: change devicesControl_description

* refactor: change ID Prefix title and description

* refactor: change inControls titles

* refactor: change inControls_arr_description

* refactor: change inControls_control_title

* refactor: change inControls_behaviorType_title

* refactor: change outControls_arr_title and outControls_obj_title

* refactor: change outControls_arr_description

* refactor: change outControls_control_title + outControls_behaviorType_title + outControls_actionValue_title

* refactor: change outControls_actionValue_description

* refactor: change control_description

* refactor: delete not used translation

* fix: change maxLength in id_prefix from 15 to 30

* refactor: replace thenHandler function

* fix: change generated vd title to users scenario name

* fix: change prefixes - vd name to wbsc_ and rule to wbru_

* fix: implement /enabled control feature in virtual device

* fix: module init function export parameters qty

* fix: change id_prefix_description string and max lenght to 120

* fix: replace standart err msg to error_regexp_patternmessage

* fix: change name scenario maxLength from 30 to 120

* fix: change control_description

* fix: replace all log() to specific log.debug and log.error

* fix: change enabled for virtual device to default true

* docs: little bit describe install from git branch

* fix: virtual device switch control from enable to active

* fix: change scenario enable_title + virt device title

* docs: describe more about add new event/action in table

* refactor: rename events-handling-table to table-handling-events

* refactor: rename actions-handling-table to table-handling-actions

* fix: delete link-in-to-out from general README + fix path

* docs: actualize README image for devices control
  • Loading branch information
vitalii-wb authored Nov 12, 2024
1 parent 87f196e commit 41c79f0
Show file tree
Hide file tree
Showing 21 changed files with 688 additions and 502 deletions.
55 changes: 34 additions & 21 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,24 @@ SCENARIOS_ROOT := scenarios/
# Папка для схем и изображений в схеме
SCHEMA_DIR := schema/

# Целевые пути
CONFIG_DEST := $(DESTDIR)/etc
IMAGE_DEST := $(DESTDIR)/var/www/images
SCHEMA_DEST := $(DESTDIR)$(PREFIX)/share/wb-mqtt-confed/schemas
# Используем системный путь до скриптов /usr/share/wb-rules-system/rules
# так как /etc/wb-rules/* должно использоваться для пользовательских скриптов
RULES_DEST := $(DESTDIR)$(PREFIX)/share/wb-rules-system/rules
# Используем системный путь до модулей /usr/share/wb-rules-modules
# так как /etc/wb-rules-modules/* должно использоваться
# для пользовательских модулей
MODULES_DEST := $(DESTDIR)$(PREFIX)/share/wb-rules-modules

# Поиск папок сценариев внутри папки scenarios
SCENARIO_DIRS := $(wildcard $(SCENARIOS_ROOT)*)

# @note: Потенциально могут быть пробелы и спец символы в именах файлов
# или папок - можно сделать проверку перед началом работы

# Предварительно вычисленные списки файлов для копирования
CONFIG_FILES := $(wildcard *.conf)
IMAGE_FILES := $(wildcard $(SCHEMA_DIR)*.png)
Expand All @@ -37,46 +52,44 @@ install:

@# Копирование всех конфигурационных файлов из корня проекта
@$(foreach file,$(CONFIG_FILES),\
echo "Copying $(file) to $(DESTDIR)/etc";\
install -Dm644 $(file) -t $(DESTDIR)/etc;)
echo "Copying $(file) to $(CONFIG_DEST)";\
install -Dm644 $(file) -t $(CONFIG_DEST);)

@# Копирование изображений из папки schema
@$(foreach file,$(IMAGE_FILES),\
echo "Copying image $(file) to $(DESTDIR)/var/www/images";\
install -Dm644 $(file) -t $(DESTDIR)/var/www/images;)
echo "Copying image $(file) to $(IMAGE_DEST)";\
install -Dm644 $(file) -t $(IMAGE_DEST);)

@# Копирование схем из папки schema
@$(foreach file,$(SCHEMA_FILES),\
echo "Copying schema $(file) to $(DESTDIR)$(PREFIX)/share/wb-mqtt-confed/schemas";\
install -Dm644 $(file) -t $(DESTDIR)$(PREFIX)/share/wb-mqtt-confed/schemas;)
echo "Copying schema $(file) to $(SCHEMA_DEST)";\
install -Dm644 $(file) -t $(SCHEMA_DEST);)

@# Установка каждого сценария из подпапок
@$(foreach dir,$(SCENARIO_DIRS),\
echo "Installing from directory $(dir)...";\
$(MAKE) -s install-$(dir);)

define TEMPLATE
define INSTALL_SCENARIO_TEMPLATE
install-$(1):
@echo " + Processing directory $(1)..."
@# Используем уникальные имена *_$(1) чтобы не перезаписывать переменные
$(eval MODULE_FILES_$(1) := $(wildcard $(1)/*.mod.js))
$(eval JS_FILES_$(1) := $(wildcard $(1)/*.js))
@# Собираем все файлы .js, кроме модулей (заканчиваются на .mod.js)
$(eval RULE_FILES := $(filter-out $(wildcard $(1)/*.mod.js), $(wildcard $(1)/*.js)))
$(eval MODULE_FILES := $(wildcard $(1)/*.mod.js))

@# Используем системный путь до скриптов /usr/share/wb-rules-system/rules
@# так как /etc/wb-rules/* должно использоваться для пользовательских скриптов
@if [ -n "$(RULE_FILES)" ]; then \
echo " - Copying rule files: $(RULE_FILES) to $(DESTDIR)$(PREFIX)/share/wb-rules-system/rules";\
install -Dm644 $(RULE_FILES) -t $(DESTDIR)$(PREFIX)/share/wb-rules-system/rules;\
$(eval RULE_FILES_$(1) := $(filter-out $(MODULE_FILES_$(1)), $(JS_FILES_$(1))))

@if [ -n "$$(RULE_FILES_$(1))" ]; then \
echo " - Copying rule files: $$(RULE_FILES_$(1)) to $(RULES_DEST)";\
install -Dm644 $$(RULE_FILES_$(1)) -t $(RULES_DEST);\
fi

@# Используем системный путь до модулей /usr/share/wb-rules-modules
@# так как /etc/wb-rules-modules/* должно использоваться для пользовательских модулей
@if [ -n "$(MODULE_FILES)" ]; then \
echo " - Copying module files: $(MODULE_FILES) to $(DESTDIR)$(PREFIX)/share/wb-rules-modules";\
install -Dm644 $(MODULE_FILES) -t $(DESTDIR)$(PREFIX)/share/wb-rules-modules;\
@if [ -n "$$(MODULE_FILES_$(1))" ]; then \
echo " - Copying module files: $$(MODULE_FILES_$(1)) to $(MODULES_DEST)";\
install -Dm644 $$(MODULE_FILES_$(1)) -t $(MODULES_DEST);\
fi

.PHONY: dummy install-$(1)
endef

$(foreach dir,$(SCENARIO_DIRS),$(eval $(call TEMPLATE,$(dir))))
$(foreach dir,$(SCENARIO_DIRS),$(eval $(call INSTALL_SCENARIO_TEMPLATE,$(dir))))
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
Данный репозиторий содержит готовые сценарии которые помогают
быстрее подключать устройства и связывать их между собой

На данный момент реализованые сценарии:

- [Управление устройствами](scenarios/devices-control/README.md)

## Установка

Пакет `wb-scenarios` можно установить из репозиториев wirenboard
Expand All @@ -14,3 +18,6 @@

После этого у вас в пункте `Настройки` -> `Конфигурационные файлы`
должен появится пункт `Сценарии автоматизации`

Для информации о разработке новых сценариев - смотрите
файл для разработчиков [README](develop/README.md).
8 changes: 7 additions & 1 deletion debian/changelog
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
wb-scenarios (1.0.4) stable; urgency=medium
wb-scenarios (1.0.5) stable; urgency=medium

* feat: add counters control functional in devices-control scenario

-- Vitalii Gaponov <[email protected]> Tue, 05 Nov 2024 08:30:00 +0300

wb-scenarios (1.0.4) stable; urgency=medium

* feat: implement new scenario for light control

Expand Down
4 changes: 1 addition & 3 deletions debian/control
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,5 @@ Vcs-Git: https://github.com/wirenboard/wb-scenarios

Package: wb-scenarios
Architecture: all
Depends: ${shlibs:Depends}, ${misc:Depends}, wb-rules (>= 2.20.0~~), wb-utils (>= 2.1)
Recommends: linux-image-wb2 | linux-image-wb6 (>= 4.9+wb20180729224630) | linux-image-wb7,
wb-hwconf-manager (>= 1.30.1), wb-release-info
Depends: ${shlibs:Depends}, ${misc:Depends}, wb-rules (>= 2.20.0~~)
Description: Scenarios for Wiren Board
39 changes: 32 additions & 7 deletions develop/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,15 @@
# cd ~
```

Клонирование на контроллер
Установить git и make на контроллера

```terminal
# apt update && \
apt install git -y && \
apt install make
```

Клонирование на контроллер с помошью гит

```terminal
# git clone https://github.com/wirenboard/wb-scenarios
Expand All @@ -21,9 +29,10 @@
В процессе разработки удобно клонировать свою ветку и сразу провести установку

```terminal
# git clone -b feature/add-light-scenario-first-iteration --single-branch https://github.com/wirenboard/wb-scenarios.git
# cd wb-scenarios
# make
# GIT_BRANCH_NAME="feature/implement-counters-processing"
# git clone -b "${GIT_BRANCH_NAME}" --single-branch "https://github.com/wirenboard/wb-scenarios.git" && \
cd wb-scenarios && \
make
```

### Сборка пакета и установка через apt
Expand Down Expand Up @@ -118,8 +127,6 @@ Installing from directory scenarios/link-in-to-out...
/etc/scenarios.conf
```

Для более подробной информации о разработке новых сценариев - смотрите
файл [README](develop/README.md) для разработчиков.



Expand All @@ -146,6 +153,9 @@ Installing from directory scenarios/link-in-to-out...
4. Модуль `*.mod.js`
Это опциональная единица для удобного использования
Сюда можно перенести методы init и другую логику, чтобы их было удобно использовать в том числе из скриптов.
ВАЖНО - если пишется модуль - то нужно стараться делать его так, чтобы он не занал что работает в сценариях:
Он должен принимать общие структуры данных - например массивы входных и выходных контролов, но не объект самого сценария.
Это нужно чтобы его можно было использовать вообще без сценариев, там где конфиг имеет другую структуру.

Ниже описывается процесс создания новых сценариев

Expand Down Expand Up @@ -291,4 +301,19 @@ Installing from directory scenarios/link-in-to-out...

----

Скрипт
Скрипт


----
Модуль


Проверка входящих в функцию параметров:
Для того чтобы инициализировать правило мы должны быть уверены что
пользователь сконфтгурировал корректно работающую конфигурацию топиков
и выбранных событий и действий
Для этого нам нужно проверить:
- Что введённые пользователем устройства и топики существуют
- Что тип выбранных пользователем топиков поддерживает выбранный
тип события для аходных топиков или вид действия для выходных топиков

Loading

0 comments on commit 41c79f0

Please sign in to comment.