[2026-09-17] eagle: family/tech/zont-scenario-logic-11109.md
This commit is contained in:
@@ -233,14 +233,28 @@ scenarios:
|
|||||||
| Значение | Что это | Доказательство из тестовых сценариев |
|
| Значение | Что это | Доказательство из тестовых сценариев |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `0` / `1` | ручной запуск (кнопка), вкл/выкл | 64 старых сценария = `1`; `11109` = `0` |
|
| `0` / `1` | ручной запуск (кнопка), вкл/выкл | 64 старых сценария = `1`; `11109` = `0` |
|
||||||
| `8` | по **расписанию** | `#Z8597` — поле 4 = `61`, поле 5 = `3354` |
|
| `8` | по **расписанию** | `#Z8597` — поле 4 = `61`, поле 6 = `3354` ✅ расшифровано |
|
||||||
| `9` | по **триггеру** (условию) | `#Z8547`, `#Z8551` — тестовые |
|
| `9` | по **триггеру** (условию) | `#Z8547`, `#Z8551` — оба триггерные (подтверждено Alex) |
|
||||||
| `10` | по **интервалу** | `#Z8599` — поле 6 = `43200000` мс = **12 ч** |
|
| `10` | по **интервалу** | `#Z8599` — поле 6 = `43200000` мс = **12 ч** |
|
||||||
|
|
||||||
Распределение по живому конфигу: `{1: 64, 0: 1, 8: 2, 9: 2, 10: 1}`.
|
**Поле 6** — параметр запуска (для `10` — интервал в мс; для `8` — время запуска).
|
||||||
|
|
||||||
**Поле 6** — параметр запуска (для `10` — интервал в мс; для `9`/`8` — иное).
|
### 🔴 Поле 4 + поле 6 при запуске по расписанию — РАСШИФРОВАНО (2026-09-17)
|
||||||
**Поле 4** — у `8597` = `61` (вероятно день недели / индекс расписания), у остальных `0`.
|
|
||||||
|
`#Z8597` «Тестовый сценарий по расписанию», Alex: **ПН, СР, ЧТ, ПТ, СБ, в 13:26**.
|
||||||
|
|
||||||
|
| Поле | Значение | Расшифровка |
|
||||||
|
|---|---|---|
|
||||||
|
| поле 4 | `61` = `0b00111101` | **битовая маска дней недели**: бит 0=ПН, 1=ВТ, …, 6=ВС. Установлены биты **0,2,3,4,5** = ПН, СР, ЧТ, ПТ, СБ ✅ |
|
||||||
|
| поле 6 | `3354` = `0x0D1A` | **время**: старший байт `0x0D` = **13** (час), младший `0x1A` = **26** (минута) → **13:26** ✅ |
|
||||||
|
|
||||||
|
```text
|
||||||
|
#Z8597 = 11, 'Тестовый сценарий по расписанию', [8598], 61, 3354, 8, 0, 0
|
||||||
|
^годнедели ^время ^тип
|
||||||
|
```
|
||||||
|
|
||||||
|
> Формула времени: `поле6 = (час << 8) | минута`. Начало недели — **ПН** (бит 0), не ВС.
|
||||||
|
> Проверка: `61 >> 0 & 1 = 1` (ПН есть), `61 >> 1 & 1 = 0` (ВТ нет — у Alex ВТ не отмечен) ✅.
|
||||||
|
|
||||||
```text
|
```text
|
||||||
#Z8456=11,'Простой тестовый сценарий',[<26 ссылок>],0,0, 8,0,0
|
#Z8456=11,'Простой тестовый сценарий',[<26 ссылок>],0,0, 8,0,0
|
||||||
@@ -254,17 +268,46 @@ scenarios:
|
|||||||
> это **потеря информации** для значений 8/9/10. Конвертер на новом конфиге **падает**
|
> это **потеря информации** для значений 8/9/10. Конвертер на новом конфиге **падает**
|
||||||
> (`Ошибка: Условие 8496: не type 49`) — новые типы не поддержаны.
|
> (`Ошибка: Условие 8496: не type 49`) — новые типы не поддержаны.
|
||||||
|
|
||||||
### 8.2. Новые типы объектов
|
### 8.2. Новые типы объектов (УТОЧНЕНО ответами Alex 2026-09-17)
|
||||||
|
|
||||||
| Тип | Что | Формат | Пример |
|
| Тип | Что | Формат | Пример |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| **47** | **лист дерева условий** | `[47, <оператор>, <объект>, <значение>, <порог>]` | `[47, 3, 8552, 0, -5]` — «температура ниже −5» |
|
| **47** | **лист дерева условий** (сравнение) | `[47, <оператор>, <левый>, <правый_или_0>, <константа>]` | `[47, 3, 8552, 0, -5]` — «погода <= -5» |
|
||||||
| **48** | **группа условий (И/ИЛИ)** | `[48, <логика>, [<id условий>]]` | `[48, 0, [8493,8495]]`, `[48, 1, [...]]`, `[48, 2, [...]]` |
|
| **48** | **группа условий** | `[48, <логика>, [<id условий>]]` | `[48, 0, [8493,8495]]` |
|
||||||
| **50** | **запуск команды/сценария по id** | `[50, 1, 0, 0, <id>]` | `[50, 1, 0, 0, 123]`, `[50, 1, 0, 0, 109]`, `[50, 0, 1, 3351, 0]` |
|
| **50** | **объект-триггер запуска** (внешний/системный) | `[50, 1, 0, 0, <ext_id>]` | `[50, 1, 0, 0, 109]` |
|
||||||
| **59** | **мини-скрипт ZONT** | `[59, '<код>', <арг1>, <арг2>, <флаг>]` | `[59, 'expr "%0 + %1"', 8459, 8460, 0]` |
|
| **59** | **мини-скрипт ZONT** | `[59, '<код>', <арг1>, <арг2>, <флаг>]` | `[59, 'expr "%0 + %1"', 8459, 8460, 0]` |
|
||||||
|
|
||||||
Наблюдённые значения поля 1 у **47**: `0, 1, 3, 4` (оператор — семантика **не подтверждена**).
|
**Type 47 — модель полей.** `[47, op, LEFT, RIGHT, K]`:
|
||||||
У **48**: `0, 1, 2` (логика группы — семантика **не подтверждена**).
|
- `LEFT` — объект/скрипт-выражение слева;
|
||||||
|
- если `RIGHT` != `0` — **второй объект**, сравнение двух объектов (`8495`: `var1 >= objstate 9838`, RIGHT = `8494`);
|
||||||
|
- если `RIGHT` = `0` — сравнение **с константой** из поля 4 (`8493`: `OBJECT < 3`).
|
||||||
|
|
||||||
|
**Type 47, операторы — ПОДТВЕРЖДЕНО Alex** (порядок пунктов UI: `<`, `>`, `=`, `<=`, `>=`):
|
||||||
|
|
||||||
|
| Поле 1 | Оператор | Доказательство (формулировка Alex) |
|
||||||
|
|---|---|---|
|
||||||
|
| `0` | `<` | `8493` «значение элемента управления < 3»; `8497` «var1 < 2» |
|
||||||
|
| `1` | `>` | `8499` «Pickle(2) > 3» |
|
||||||
|
| `2` | `=` | в тестовом блоке нет; следует из порядка UI |
|
||||||
|
| `3` | `<=` | `8553` «погода из интернета <= -5» |
|
||||||
|
| `4` | `>=` | `8495` «var1 >= значение 13/9 рад. ванная 2эт» |
|
||||||
|
|
||||||
|
> 🔴 **Ловушка:** порядок пунктов UI (`<`,`>`,`=`,`<=`,`>=`) **не** логически упорядочен.
|
||||||
|
> `=` стоит **третьим** (код `2`), между `>` и `<=`. Не «додумывать» порядок как
|
||||||
|
> «сначала все меньше, потом все больше» — это даёт неверные коды.
|
||||||
|
|
||||||
|
**Type 48, логика группы — ПОДТВЕРЖДЕНО Alex** (по описанию теста 8456):
|
||||||
|
|
||||||
|
| Поле 1 | Логика | Доказательство |
|
||||||
|
|---|---|---|
|
||||||
|
| `0` | **И** (все условия) | `8496 = [48,0,[8493,8495]]` — «условие И: ...» |
|
||||||
|
| `1` | **ИЛИ** (любое) | `8501 = [48,1,[8497,8500]]` — «ИЛИ: ...» |
|
||||||
|
| `2` | **НЕ** (отрицание) | `8500 = [48,2,[8499]]` — «НЕ (...)» |
|
||||||
|
|
||||||
|
**Type 50 — триггер запуска.** `[50, 1, 0, 0, <ext_id>]`, где `<ext_id>` — **внешний/системный
|
||||||
|
объект**, которого нет среди `#Z` (напр. `109` — «погода из интернета»). Сценарий «по времени»
|
||||||
|
(`8547`, шаг `8550`) ссылается на `109` — в UI это тоже триггер-условие запуска
|
||||||
|
(поле 5 типа 11 = `9`).
|
||||||
|
|
||||||
### 8.3. Type 59 — встроенный скриптовый язык
|
### 8.3. Type 59 — встроенный скриптовый язык
|
||||||
|
|
||||||
@@ -337,19 +380,41 @@ scenarios:
|
|||||||
| `8597` | Тестовый сценарий по расписанию | `8` (расписание) |
|
| `8597` | Тестовый сценарий по расписанию | `8` (расписание) |
|
||||||
| `8599` | Тестовый сценарий по интервалу | `10` (интервал, 12 ч) |
|
| `8599` | Тестовый сценарий по интервалу | `10` (интервал, 12 ч) |
|
||||||
|
|
||||||
### 8.7. ⏳ ОТКРЫТЫЕ ВОПРОСЫ (заданы Alex, ответа ещё нет)
|
### 8.7. ✅ ВОПРОСЫ ЗАКРЫТЫ — ответы Alex (2026-09-17)
|
||||||
|
|
||||||
| # | Вопрос |
|
Alex создал тестовые сценарии и описал, что видно в UI. Все пять вопросов закрыты:
|
||||||
|---|---|
|
|
||||||
| 1 | **Type 47, поле 1** — что за оператор? Наблюдены `0, 1, 3, 4`. Гипотеза: `0`=равно, `1`=не равно, `3`=меньше, `4`=больше — **не подтверждено** |
|
|
||||||
| 2 | **Type 48, поле 1** — логика группы? Наблюдены `0, 1, 2`. Гипотеза: `0`=И, `1`=ИЛИ, `2`=НЕ — **не подтверждено** |
|
|
||||||
| 3 | **Type 50** — что за объект? `[50, 1, 0, 0, <id>]` — запуск по расписанию/интервалу? |
|
|
||||||
| 4 | **Type 11, поле 4** — у `8597` = `61`, у остальных `0`. Минуты? День недели? |
|
|
||||||
| 5 | **Type 59** — есть ли документация на язык? Или это внутренний формат |
|
|
||||||
|
|
||||||
> 🔴 **Не строить гипотезы вместо ответа.** Alex явно предложил: «если нужна будет подсказка что и
|
| # | Вопрос | Ответ | Проверка по конфигу |
|
||||||
> чем является по типу/значениям — спрашивай меня». Вопросы заданы, ждём ответа.
|
|---|---|---|---|
|
||||||
> До ответа **правки конвертера не делать** — можно закодировать неверную семантику.
|
| 1 | **Type 47, оператор** | Операнды в UI: **`<`, `>`, `=`, `<=`, `>=`** → коды `0..4` | ✅ все 5 листов сошлись |
|
||||||
|
| 2 | **Type 48, логика** | **`0`=И, `1`=ИЛИ, `2`=НЕ** | ✅ по описанию теста 8456 |
|
||||||
|
| 3 | **Type 50** | **Объект-триггер запуска** (внешний, напр. `109` «погода из интернета») | ✅ |
|
||||||
|
| 4 | **Type 11, поле 4** | **Маска дней недели** (`61` = ПН,СР,ЧТ,ПТ,СБ), поле 6 = `(час<<8)|мин` | ✅ 13:26 |
|
||||||
|
| 5 | **`;#a`/`;#h`/`;#p`** | (не переспрашивал; остаются гипотезой) | ⏳ |
|
||||||
|
|
||||||
|
**Разбор тестовых сценариев Alex (ответы дословно → факты конфига):**
|
||||||
|
|
||||||
|
| Сценарий | Что сказал Alex | Что в конфиге |
|
||||||
|
|---|---|---|
|
||||||
|
| `8597` расписание | «пн, ср, чт, пт, сб, в 13:26» | поле 4=`61`, поле 6=`3354`=13:26 ✅ |
|
||||||
|
| `8547` «по времени» | «по триггеру, триггер на день недели: пн,ср,чт,сб,вс» | поле 5=`9`, шаг `8550` → `[50,1,0,0,109]` |
|
||||||
|
| `8551` «по триггеру» | «триггер сравнение: погода из интернета <= -5, действие вывод в терминал» | `8553=[47,3,8552,0,-5]`, `8552=[49,8254,0,4]`, `8254`=«Погода из интернета», then `8554`=`puts "Температура упала ниже -5"` ✅ |
|
||||||
|
| `8547` шаг `8550` | «только одно действие: вывод "test" в терминал» | `8549=[59,'puts "test"',0,0,0]` ✅ |
|
||||||
|
| `8456` (26 ссылок) | «set var много, у каждого разный тип значения» | 7× `set var1` + 7 разных типов объектов ✅ |
|
||||||
|
|
||||||
|
**Type 46 — модель полей ПОДТВЕРЖДЕНА (5 полей = если/то/иначе):**
|
||||||
|
|
||||||
|
```text
|
||||||
|
#Z<step> = [46, <вид>, <id_условия_или_0>, [<ТОГДА>...], [<ИНАЧЕ>...]]
|
||||||
|
```
|
||||||
|
|
||||||
|
Alex по тесту `8456` описал: «если (условие И: …) То: … Иначе: Сохранить событие» —
|
||||||
|
и это точно соответствует `8506 = [46, 0, 8496, [8505], []]` + `8505 = [46, 1, 8501, [8502,8503], [8504]]`,
|
||||||
|
где `[8504]` = ветка **ИНАЧЕ**. Поле 4 = список **ИНАЧЕ** (ранее помечено «семантика не подтверждена» — теперь подтверждена).
|
||||||
|
|
||||||
|
> ⚠️ Поле 1 шага: `0` у внешнего, `1` у вложенного (`8505`) — вероятно «уровень вложенности»
|
||||||
|
> или признак вложенного блока. Точная семантика не подтверждена, но round-trip требует
|
||||||
|
> сохранять как есть.
|
||||||
|
|
||||||
### 8.8. Скрипты разбора (в проекте)
|
### 8.8. Скрипты разбора (в проекте)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user