mirror of
https://github.com/anklimov/lighthub
synced 2026-03-14 05:16:31 +03:00
728 lines
27 KiB
Markdown
728 lines
27 KiB
Markdown
# LightHub: Модуль многоканального кондиционера и вентиляции (out_Multivent)
|
||
|
||
> Документ описывает назначение, архитектуру и конфигурирование модуля управления многозональными системами кондиционирования и вентиляции LightHub.
|
||
> Предназначен для инженеров HVAC-систем, интеграторов и разработчиков.
|
||
|
||
---
|
||
|
||
## 1. Назначение модуля
|
||
|
||
### 1.1 Область применения
|
||
|
||
Модуль `out_Multivent` предназначен для управления системами кондиционирования и вентиляции с **центральной установкой** и **множеством независимых зон/комнат**.
|
||
|
||
### 1.2 Типовые сценарии
|
||
|
||
#### Сценарий 1: Многозональный кондиционер
|
||
- Центральная сплит-система или компактная установка (1 компрессор, 1 вентилятор)
|
||
- Несколько помещений с электромоторными задвижками (воздушными затворами)
|
||
- Каждое помещение требует своего микроклимата
|
||
|
||
#### Сценарий 2: Многозональная приточная вентиляция
|
||
- Центральная приточная установка с одним вентилятором
|
||
- Несколько независимых воздуховодов с регулируемыми задвижками
|
||
- Распределение воздушного потока в зависимости от потребностей зон
|
||
|
||
#### Сценарий 3: Комбинированная система (климат + вентиляция)
|
||
- Центральный кондиционер + приточная вентиляция
|
||
- Управление как охлаждением/нагревом, так и циркуляцией воздуха
|
||
|
||
### 1.3 Ключевые возможности
|
||
|
||
✅ **Балансировка воздушного потока** — автоматическое распределение производительности между зонами
|
||
|
||
✅ **PID-регулирование температуры** — независимая стабилизация для каждой зоны
|
||
|
||
✅ **Интеллектуальное переключение режимов** — автоматическое определение HEAT/COOL по текущей температуре
|
||
|
||
✅ **Агрегация команд** — управление центральной установкой на основе суммарного спроса от зон
|
||
|
||
✅ **Каскадное управление** — возможность передачи команд на внешние системы
|
||
|
||
❌ **Ограничения**: ?
|
||
|
||
---
|
||
|
||
## 2. Архитектура и принцип работы
|
||
|
||
### 2.1 Компоненты системы
|
||
|
||
```
|
||
┌────────────────────────────────────────────┐
|
||
│ Центральная установка (AC) │
|
||
│ (компрессор, вентилятор, датчик temp) │
|
||
│ │
|
||
│ Управляется через S_MODE и S_FAN │
|
||
└──────────────┬─────────────────────────────┘
|
||
│
|
||
┌─────┴─────┐
|
||
│ │
|
||
┌────▼─────┐ ┌─▼─────────┐
|
||
│ Зона 1 │ │ Зона N │
|
||
│ Задвижка1│ │ ЗадвижкаN │
|
||
│ Датчик1 │ │ ДатчикN │
|
||
└──────────┘ └───────────┘
|
||
```
|
||
|
||
### 2.2 Логика работы
|
||
|
||
#### Фаза 1: Опрос и сбор информации
|
||
1. Модуль считывает текущий режим центральной установки (`mode`)
|
||
2. Определяет текущую функцию (HEAT, COOL, FAN)
|
||
3. Собирает команды от всех зон
|
||
|
||
#### Фаза 2: PID-расчёты
|
||
Если в зоне определён PID-контроллер:
|
||
- Вход PID: текущая температура зоны (`val`)
|
||
- Установка: требуемая температура зоны (`set`)
|
||
- Выход PID: регулировочный сигнал (`po`, от 0 до 255)
|
||
|
||
#### Фаза 3: Балансировка
|
||
```
|
||
balance = Σ(po_zone) где cmd=HEAT
|
||
balance = Σ(-po_zone) где cmd=COOL
|
||
```
|
||
|
||
#### Фаза 4: Управление центральной установкой
|
||
- **balance > 0** → отправить HEAT на AC
|
||
- **balance < 0** → отправить COOL на AC
|
||
- **balance = 0** → отправить FAN (если кто-то запросил)
|
||
- **else** → OFF
|
||
|
||
#### Фаза 5: Распределение производительности
|
||
Для каждой зоны пересчитывается выходной сигнал задвижки:
|
||
|
||
$$out = \frac{(V_{requested} \times 255) \times V_{max}}{V \times P_{max}}$$
|
||
|
||
где:
|
||
|
||
- $V_{requested}$ — требуемый объём воздуха для зоны
|
||
- $V$ — номинальный объём воздуха зоны
|
||
- $V_{max}$ — объём максимально требующей зоны
|
||
- $P_{max}$ — максимальный процент открытия требующей зоны
|
||
|
||
---
|
||
|
||
## 3. Структура JSON-конфигурации
|
||
|
||
### 3.1 Формат item типа 14 (Multivent)
|
||
|
||
```json
|
||
"item_name": [
|
||
14,
|
||
[
|
||
"device_name",
|
||
{
|
||
"zone_1": { ... },
|
||
"zone_2": { ... },
|
||
"": { ... }
|
||
}
|
||
]
|
||
]
|
||
```
|
||
|
||
- `device_name` — имя device-type в modbus (если используется внешнее AC)
|
||
- Объект маршрутизации содержит **именованные зоны** + **пустую строку** `""` для центральной установки
|
||
|
||
### 3.2 Структура зоны
|
||
|
||
```json
|
||
"zone_name": {
|
||
"fan": 0,
|
||
"cmd": 2,
|
||
"out": 255,
|
||
"V": 60,
|
||
"pid": [1.0, 0.1, 0.05, 5.0],
|
||
"set": 21.0,
|
||
"val": 21.0,
|
||
"cas":{
|
||
"fan":{"item":"panel1${sfx},"emit":"f_room1${sfx}","map":{"cmd":"fan"}},
|
||
"set":{"item":"panel1${sfx}},
|
||
"cmd":{"item":"panel1${sfx}}}}
|
||
}
|
||
```
|
||
|
||
#### Поля зоны:
|
||
|
||
| Поле | Тип | Назначение |
|
||
|------|-----|-----------|
|
||
| `fan` | int (0-255) | Текущий запрос в воздухе для зоны. Этот параметр устанавливается как встроенным PID регулятором так и при помощи суффикса /fan данной зоны (изменение запускает процесс пере-балансировки зон, в результате формируется параметр out, который уже подается на задвижки |
|
||
| `cmd` | int | Текущая команда (OFF/ON/HEAT/COOL и т.д. в числовом виде) |
|
||
| `out` | int (0-255) | Финальный выходной сигнал задвижки (пересчитанный) |
|
||
| `V` | int | Номинальный объём воздуха для этой зоны (м³/ч) |
|
||
| `pid` | array[4] | Коэффициенты PID: [Kp, Ki, Kd, dT(сек)] |
|
||
| `set` | float | Требуемая температура (установка) |
|
||
| `val` | float | Текущая температура зоны. Передается через суффикс /val данной зоны |
|
||
| `cas` | object | Каскадирование полученной команды на другие обьекты. Полезно, если изменение статуса зоны надо, наример, отразить на климатической панели. Или если скорость вентилятора надо преобразовать в дискретный вид (LOW,MEDIUM,HIGH) и передать в отдельный топик (как в примере) для отображения в интерфейсе Home Assistant. У обьекта cas может быть три под-обьекта: fan, set, cmd которые могут отдельно транслировать скорость вентилятора, команду (режим) зоны и уставку температуры. Следует заметить, что даже без использования данной настройки, изменения зоны передаются в статусный топик зоны (для восстановления состояния при перезапуске и отражения в интерфейсе HA, так что дублировать это в данной настройке не требуется. Но данная настройка крайне полезна именно для дублирования состояния на внешние устройства а также на внутренние обьекты контроллера (отрабатывается весь синтаксис EXEC обьекта, включая возможность передачи по MQTT, CAN, локальные items) |
|
||
|
||
### 3.3 Центральная установка (пустая зона `""`)
|
||
|
||
```json
|
||
"": {
|
||
"val": { "emit": "ac/temp" },
|
||
"mode": { "emit": "ac/mode" },
|
||
"@lastCmd": -1,
|
||
"roomtemp": 0.0
|
||
}
|
||
```
|
||
|
||
#### Поля:
|
||
|
||
| Поле | Назначение |
|
||
|------|-----------|
|
||
| `val` | Температура воздуха от AC (или текущее состояние) |
|
||
| `mode` | Текущий режим AC (CMD_HEAT/CMD_COOL/CMD_FAN/CMD_OFF) |
|
||
| `@lastCmd` | Последняя отправленная команда (служебное) |
|
||
| `roomtemp` | Дополнительный датчик комнатной температуры |
|
||
|
||
---
|
||
|
||
## 4. Детальная конфигурация компонентов
|
||
|
||
### 4.1 PID-контроллер
|
||
|
||
#### Включение PID
|
||
|
||
```json
|
||
"pid": [1.0, 0.1, 0.05, 5.0]
|
||
```
|
||
|
||
**Формат**: `[Kp, Ki, Kd, dT]`
|
||
|
||
- **Kp** (пропорциональный коэффициент): 0.5—2.0
|
||
- Отрицательное значение включает **REVERSE-режим** (для охлаждения)
|
||
- Положительное значение — DIRECT-режим (для нагрева)
|
||
|
||
- **Ki** (интегральный коэффициент): 0.0—0.2
|
||
- Устраняет постоянное отклонение
|
||
|
||
- **Kd** (дифференциальный коэффициент): 0.01—0.1
|
||
- Снижает колебания
|
||
|
||
- **dT** (период сэмплирования, сек): по умолчанию 5 сек
|
||
|
||
#### Пример для зоны с нагревом:
|
||
|
||
```json
|
||
"pid": [1.0, 0.05, 0.02, 5.0]
|
||
```
|
||
|
||
#### Пример для зоны с охлаждением:
|
||
|
||
```json
|
||
"pid": [-1.0, 0.05, 0.02, 5.0]
|
||
```
|
||
|
||
### 4.2 Объём воздуха (V)
|
||
|
||
Указывается в **относительных единицах** (не обязательно м³/ч):
|
||
|
||
```json
|
||
"V": 60
|
||
```
|
||
|
||
Используется для **пропорционального распределения** между зонами.
|
||
|
||
**Рекомендуемые значения:**
|
||
- Спальня: 30—50
|
||
- Гостиная: 60—100
|
||
- Офис: 40—80
|
||
- Кухня: 80—150 (если есть вентиляция)
|
||
|
||
### 4.3 Маршрутизация MQTT
|
||
|
||
tbd
|
||
|
||
### 4.4 Каскадные команды
|
||
|
||
Возможность передачи команды на другие устройства (например, открыть задвижку, вывести на панель):
|
||
|
||
```json
|
||
"cas":{
|
||
"fan":{"item":"panel1${sfx},"emit":"f_room1${sfx}","map":{"cmd":"fan"}},
|
||
"set":{"item":"panel1${sfx}},
|
||
"cmd":{"item":"panel1${sfx}}}}
|
||
```
|
||
|
||
---
|
||
|
||
## 5. Режимы работы модуля
|
||
|
||
### 5.1 Режимы команд для зон
|
||
|
||
| CMD | Назначение |
|
||
|-----|-----------|
|
||
| `OFF` | Задвижка закрыта, зона отключена |
|
||
| `ON` | Зона активна (используется последний процент) |
|
||
| `HEAT` | Зона требует нагрева (минимум 20% вентилятора) |
|
||
| `COOL` | Зона требует охлаждения |
|
||
| `FAN` | Только вентиляция (без нагрева/охлаждения) |
|
||
| `AUTO` | Пассивный режим (зависит от AC) |
|
||
| `HEATCOOL` | Автоматическое переключение по PID |
|
||
| `DRY` | Осушение |
|
||
|
||
### 5.2 Режимы работы центральной установки
|
||
|
||
Модуль автоматически определяет режим AC по текущей температуре:
|
||
|
||
```
|
||
AC temp < 15°C → CMD_COOL (переоборудование в холод)
|
||
15°C ≤ AC temp ≤ 30°C → CMD_FAN (вентиляция)
|
||
AC temp > 30°C → CMD_HEAT (переоборудование в тепло)
|
||
```
|
||
|
||
### 5.3 PID-режимы
|
||
|
||
#### DIRECT (Kp > 0)
|
||
- Выход растёт при увеличении отклонения (set > val)
|
||
- Используется для режима HEAT
|
||
|
||
#### REVERSE (Kp < 0)
|
||
- Выход растёт при уменьшении отклонения (set < val)
|
||
- Используется для режима COOL
|
||
|
||
**Автоматическое переключение в режиме CMD_AUTO:**
|
||
```
|
||
AC в HEAT → PID в DIRECT
|
||
AC в COOL → PID в REVERSE
|
||
```
|
||
|
||
---
|
||
|
||
## 6. Примеры конфигурации
|
||
|
||
### 6.1 Простая двухзональная система
|
||
|
||
**Сценарий**: кондиционер на два помещения, каждое с вентилятором и датчиком температуры.
|
||
|
||
```json
|
||
{
|
||
"mqtt": ["lh1", "192.168.1.10"],
|
||
"topics": {"root": "home"},
|
||
|
||
"items": {
|
||
"ac_multizone": [
|
||
14,
|
||
[
|
||
"ac_unit",
|
||
{
|
||
"bedroom": {
|
||
"fan": {"emit": "home/bedroom/fan"},
|
||
"cmd": {"emit": "home/bedroom/cmd"},
|
||
"out": {"emit": "home/bedroom/out"},
|
||
"V": 40,
|
||
"pid": [1.0, 0.05, 0.02, 5.0],
|
||
"set": {"emit": "home/bedroom/setpoint"},
|
||
"val": {"emit": "home/bedroom/temp"}
|
||
},
|
||
"living_room": {
|
||
"fan": {"emit": "home/living/fan"},
|
||
"cmd": {"emit": "home/living/cmd"},
|
||
"out": {"emit": "home/living/out"},
|
||
"V": 80,
|
||
"pid": [1.0, 0.05, 0.02, 5.0],
|
||
"set": {"emit": "home/living/setpoint"},
|
||
"val": {"emit": "home/living/temp"}
|
||
},
|
||
"": {
|
||
"val": {"emit": "home/ac/indoor_temp"},
|
||
"mode": {"emit": "home/ac/mode"}
|
||
}
|
||
}
|
||
]
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 6.2 Трёхзональная система с разными объёмами
|
||
|
||
```json
|
||
{
|
||
"mqtt": ["lh2", "broker.local"],
|
||
"topics": {"root": "climate"},
|
||
|
||
"items": {
|
||
"ventilation": [
|
||
14,
|
||
[
|
||
"central_vent",
|
||
{
|
||
"zone_a": {
|
||
"fan": {"emit": "climate/a/fan"},
|
||
"cmd": {"emit": "climate/a/cmd"},
|
||
"out": {"emit": "climate/a/out"},
|
||
"V": 50,
|
||
"pid": [-1.5, 0.08, 0.03, 5.0],
|
||
"set": 22.0,
|
||
"val": {"emit": "climate/a/temp"}
|
||
},
|
||
"zone_b": {
|
||
"fan": {"emit": "climate/b/fan"},
|
||
"cmd": {"emit": "climate/b/cmd"},
|
||
"out": {"emit": "climate/b/out"},
|
||
"V": 100,
|
||
"pid": [-1.5, 0.08, 0.03, 5.0],
|
||
"set": 24.0,
|
||
"val": {"emit": "climate/b/temp"}
|
||
},
|
||
"zone_c": {
|
||
"fan": {"emit": "climate/c/fan"},
|
||
"cmd": {"emit": "climate/c/cmd"},
|
||
"out": {"emit": "climate/c/out"},
|
||
"V": 30,
|
||
"pid": [-1.5, 0.08, 0.03, 5.0],
|
||
"set": 20.0,
|
||
"val": {"emit": "climate/c/temp"}
|
||
},
|
||
"": {
|
||
"val": {"emit": "climate/central/temp"},
|
||
"mode": {"emit": "climate/central/mode"}
|
||
}
|
||
}
|
||
]
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 6.3 Система с каскадным управлением задвижками
|
||
|
||
```json
|
||
"zone_main": {
|
||
"fan": {"emit": "hvac/main/fan"},
|
||
"cmd": {"emit": "hvac/main/cmd"},
|
||
"out": {"emit": "hvac/main/out"},
|
||
"V": 60,
|
||
"pid": [0.8, 0.04, 0.01, 5.0],
|
||
"set": {"emit": "hvac/main/setpoint"},
|
||
"val": {"emit": "hvac/main/temp"},
|
||
"cas": {
|
||
"emit": "hvac/main/damper_cmd"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 6.4 Реальная система: Haier с четырьмя зонами
|
||
|
||
**Сценарий**: кондиционер Haier с управлением через Modbus, 4 комнаты с независимыми задвижками и датчиками 1-Wire.
|
||
|
||
```json
|
||
{
|
||
"mqtt": ["ac", "192.168.1.4"],
|
||
"syslog": ["192.168.1.4"],
|
||
"topics": {"root": "home"},
|
||
|
||
"ow": {
|
||
"283A3F81E3503CC8": {"emit": "t_ac2", "item": "vac"},
|
||
"286C3381E3823CBC": {"emit": "t_zal", "item": "vac/zal"},
|
||
"28B41581E3563CDE": {"emit": "t_bedr21", "item": "vac/bedr21"},
|
||
"28C1A581E3563C2D": {"emit": "t_bedr22", "item": "vac/bedr22"}
|
||
},
|
||
|
||
"modbus": {
|
||
"haier": {
|
||
"baud": 9600,
|
||
"serial": "8N1",
|
||
"poll": {
|
||
"regs": [[0, 3]],
|
||
"irs": [[0, 1]],
|
||
"coils": [0],
|
||
"delay": 10000
|
||
},
|
||
"par": {
|
||
"pwr": {
|
||
"coil": 0,
|
||
"map": {"cmd": [1, ["OFF", 0]], "val": null, "def": "acmode"},
|
||
"id": 1
|
||
},
|
||
"acmode": {
|
||
"reg": 1,
|
||
"map": {
|
||
"cmd": [
|
||
["FAN_ONLY", 4],
|
||
["HEAT", 2],
|
||
["COOL", 1],
|
||
["DRY", 3],
|
||
["AUTO", 5]
|
||
],
|
||
"val": null
|
||
},
|
||
"id": 1
|
||
},
|
||
"$temp": {"ir": 0},
|
||
"set": {"reg": 0, "id": 2},
|
||
"fan": {
|
||
"reg": 2,
|
||
"id": 7,
|
||
"map": {
|
||
"cmd": [
|
||
["LOW", 1],
|
||
["HIGH", 3],
|
||
["MEDIUM", 2],
|
||
["AUTO", 4]
|
||
],
|
||
"val": [1, 255, 1, 3]
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
"items": {
|
||
"ac_2": [
|
||
14,
|
||
[
|
||
"haier",
|
||
{
|
||
"pwr": {"emit": "home/ac/cmd", "item": "vac/mode", "@V": null},
|
||
"$temp": {"emit": "home/ac/temp", "item": "vac/temp", "@S": null},
|
||
"set": {"emit": "home/ac/setpoint", "item": "vac/set"},
|
||
"acmode": {"emit": "home/ac/mode", "@V": null},
|
||
"fan": {"emit": "home/ac/fan", "@V": null}
|
||
}
|
||
]
|
||
],
|
||
|
||
"vac": [
|
||
[18, 5],
|
||
{
|
||
"": {"item": "ac_2"},
|
||
"zal": {
|
||
"pid": [490, 100, 9879, 40],
|
||
"set": 21.0,
|
||
"fan": 0,
|
||
"cmd": 14,
|
||
"item": "acgzal/set"
|
||
},
|
||
"bedr21": {
|
||
"pid": [490, 100, 9879, 40],
|
||
"set": 21.0,
|
||
"fan": 0,
|
||
"cmd": 14,
|
||
"item": "acgbedr21/set"
|
||
},
|
||
"bedr22": {
|
||
"pid": [490, 100, 9879, 40],
|
||
"set": 21.0,
|
||
"fan": 0,
|
||
"cmd": 14,
|
||
"item": "acgbedr22/set"
|
||
}
|
||
}
|
||
],
|
||
|
||
"acgzal": [7, ["ig2", "og1"]],
|
||
"acgbedr22": [7, ["ig1", "og2"]],
|
||
"acgbedr21": [7, ["ig4", "og3"]],
|
||
|
||
"og1": [12, [4, 33, 58, 629, 289, 5000]],
|
||
"og2": [12, [5, 32, 59, 631, 296, 5000]],
|
||
"og3": [12, [6, 31, 60, 627, 289, 5000]],
|
||
|
||
"ig1": [12, [8, 29, 62, 623, 286, 5000]],
|
||
"ig2": [12, [7, 30, 63, 634, 296, 5000]],
|
||
"ig4": [12, [11, 27, 65, 620, 289, 5000]]
|
||
}
|
||
}
|
||
```
|
||
|
||
**Пояснение примера:**
|
||
|
||
- **AC (ac_2)**: контроллер Haier, управляется через Modbus (скорость 9600, опрос каждые 10 сек)
|
||
- **Зоны** (zal, bedr21, bedr22): каждая имеет PID [490, 100, 9879, 40] — агрессивные коэффициенты для точного контроля
|
||
- **1-Wire датчики**: подключены четыре датчика температуры
|
||
- **Задвижки**: управляются через цифровые выходы (og1-og3) с припасовкой через item [12, ...]
|
||
- **Входы**: чтение датчиков через item [12, ...] для каждой зоны
|
||
|
||
---
|
||
|
||
## 7. Протокол управления через MQTT
|
||
|
||
### 7.1 Отправка значений на контроллер
|
||
|
||
#### Установка команды для зоны
|
||
```
|
||
Публикуй в: home/bedroom/cmd
|
||
Сообщение: 1 (CMD_ON)
|
||
```
|
||
|
||
#### Установка процента вентилятора
|
||
```
|
||
Публикуй в: home/bedroom/fan
|
||
Сообщение: 128
|
||
```
|
||
|
||
#### Установка требуемой температуры
|
||
```
|
||
Публикуй в: home/bedroom/setpoint
|
||
Сообщение: 22.5
|
||
```
|
||
|
||
#### Установка текущей температуры (от датчика)
|
||
```
|
||
Публикуй в: home/bedroom/temp
|
||
Сообщение: 21.8
|
||
```
|
||
|
||
### 7.2 Получение значений от контроллера
|
||
|
||
#### Выходной сигнал задвижки
|
||
```
|
||
Подпишись на: home/bedroom/out
|
||
Значение: 0—255 (0=закрыто, 255=открыто)
|
||
```
|
||
|
||
#### Режим работы центральной установки
|
||
```
|
||
Подпишись на: home/ac/mode
|
||
Значения: 0=OFF, 1=ON, 2=HEAT, 3=COOL, 4=FAN, ...
|
||
```
|
||
|
||
---
|
||
|
||
## 8. Алгоритм балансировки воздушного потока
|
||
|
||
### 8.1 Принцип работы
|
||
|
||
Модуль обеспечивает **пропорциональное распределение** воздуха между зонами в зависимости от их требований.
|
||
|
||
### 8.2 Пример расчёта
|
||
|
||
**Исходные данные:**
|
||
- Зона 1: V=40 м³/ч, fan=100%, po=200 → требуемый поток = 40×100% = 40
|
||
- Зона 2: V=80 м³/ч, fan=80%, po=180 → требуемый поток = 80×80% = 64
|
||
- Макс требуемый поток: 64 (зона 2)
|
||
|
||
**Расчёт выходов:**
|
||
- Зона 1: $out_1 = \frac{40 \times 255 \times 80}{40 \times 80} = 255$
|
||
- Зона 2: $out_2 = \frac{64 \times 255 \times 80}{80 \times 80} = 204$
|
||
|
||
**Результат:**
|
||
- Зона 1: открыта на 255 (100%)
|
||
- Зона 2: открыта на 204 (80%)
|
||
|
||
---
|
||
|
||
## 9. Специальные параметры и флаги
|
||
|
||
### 9.1 Служебные поля
|
||
|
||
```json
|
||
"@lastCmd": -1, // Последняя отправленная AC команда
|
||
"roomtemp": 0.0, // Дополнительный датчик комнаты
|
||
"po": -2.0, // Выход PID (внутренне)
|
||
```
|
||
|
||
### 9.2 Таймаут неактивности
|
||
|
||
Если текущая температура от AC не обновлялась 60 секунд, модуль очищает её.
|
||
|
||
---
|
||
|
||
## 10. Интеграция с внешними системами
|
||
|
||
### 10.1 Подключение задвижек
|
||
|
||
```json
|
||
"zone_name": {
|
||
"out": {
|
||
"emit": "building/room1/damper_position"
|
||
}
|
||
}
|
||
```
|
||
|
||
Затем в другом item'е (например, цифровой выход):
|
||
|
||
```json
|
||
"damper": [
|
||
3,
|
||
["GPIO_PIN_5", {"emit": "building/room1/damper_position"}]
|
||
]
|
||
```
|
||
|
||
### 10.2 Подключение датчиков температуры
|
||
|
||
```json
|
||
"zone_name": {
|
||
"val": {
|
||
"emit": "sensors/room1/temperature"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 10.3 Управление центральным AC через Modbus
|
||
|
||
```json
|
||
"": {
|
||
"val": {
|
||
"emit": "ac_unit/room_temp"
|
||
},
|
||
"mode": {
|
||
"emit": "ac_unit/operation_mode"
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 11. Рекомендации по эксплуатации
|
||
|
||
### 11.1 Настройка PID-контроллеров
|
||
|
||
1. **Начальные значения:** Kp=1.0, Ki=0.05, Kd=0.02, dT=5сек
|
||
2. **Тестирование:** постепенно увеличивайте Kp до появления колебаний
|
||
3. **Стабилизация:** добавляйте Ki для устранения постоянного смещения
|
||
4. **Демпфирование:** добавляйте Kd для снижения колебаний
|
||
|
||
### 11.2 Распределение объёмов (V)
|
||
|
||
- Убедитесь, что сумма V соответствует производительности центральной установки
|
||
- Для равномерного распределения: V ≈ площадь помещения
|
||
- Для приоритизации: увеличьте V критичным зонам
|
||
|
||
### 11.3 Мониторинг системы
|
||
|
||
- Отслеживайте `balance` в логах (должен быть близко к нулю в установившемся режиме)
|
||
- Проверяйте `out` для каждой зоны (не должны быть постоянно на 0 или 255)
|
||
- Контролируйте переходы режимов (HEAT↔COOL) — не должны быть частыми
|
||
|
||
### 11.4 Диагностика проблем
|
||
|
||
| Проблема | Причина | Решение |
|
||
|----------|---------|---------|
|
||
| Задвижки не реагируют | `out` зоны = 0 | Повысить fan или cmd |
|
||
| Колебания температуры | PID слишком агрессивен | Снизить Kp |
|
||
| Не достигается setpoint | PID недостаточен | Увеличить Ki |
|
||
| AC часто переключается | balance скачет | Увеличить dT в PID |
|
||
|
||
---
|
||
|
||
## 12. Ограничения и известные особенности
|
||
|
||
⚠️ **Важно:**
|
||
|
||
1. **Синхронизм PID:** все PID работают с одинаковым dT
|
||
2. **Порядок обработки:** сначала зоны, потом центральная установка
|
||
3. **Гистерезис режимов:** автоматическое переключение AC может быть медленным (до 60 сек при отсутствии данных)
|
||
4. **Отсутствие истории:** модуль не сохраняет историю команд между перезагрузками
|
||
|
||
---
|
||
|
||
## 13. Заключение
|
||
|
||
Модуль `out_Multivent` предоставляет **промышленную-grade** решение для управления многозональными системами климатизации.
|
||
|
||
Ключевые преимущества:
|
||
|
||
- ✅ Интеллектуальная балансировка воздушного потока
|
||
- ✅ Независимое PID-регулирование для каждой зоны
|
||
- ✅ Автоматическая агрегация команд
|
||
- ✅ Каскадное управление внешними системами
|
||
|
||
---
|
||
|
||
**Версия документа:** 1.0
|
||
**Дата:** 2026-01-21
|
||
**Статус:** Утверждено
|