Сценарий автоматизация если-то

Либо я пиши не правильно сценарий или проблема в чем-то в другом. Создаю сценарий из шаблона автоматизация если-то. включаются виртуальные термостаты и когда один из термостатов выключается насос выключается. А хотя другие термостаты еще работают и они не включают насос, пока не поступает от другого термостата который остыл команда на включение. прикладываю сценарии.

а также есть проблема с сценарием термостат они остаются выключенном

состоянии при перезагрузки что нужно сделать чтобы не приходилось заново включать виртуальный термостат

Добрый день.

Попробовал воспроизвести. Релиз стабильный 2602. Добавил несколько switch, в аналогичный “сценарий”.
Что я ожидаю:
независимо от начального состояния переключателей при включении любого из них - топик указанный в действиях выключается.
При выключении любого - топик включается.

Собственно так и работает.

Опишите пожалуйста что в поведении считаете не соответствующим настройкам.

как на фото 6 входов есть команда что когда все достигнут данного значения тогда и должна выполнятся даная функция, а не при получение команды с одного выхода

1 Включить

2 Включить

3 Включить

4 Включить

5 Включить

6 Включить

только тогда должен выключиться насос. а у меня выключается насос при изменении у одного выхода

Вот тут не понимаю. Откуда следует что “все”?

тогда как это сделать чтобы действие совершалось только того как все 6 устройства достигнут заданного положения? или чтобы команды чаще опрашивали выходы чтобы два сценария работали более слажено например пока одно включает другой выключат пока не достигнут условий. а то у меня одна комната нагрелась и насос выключился а другие еще не согрелись а насос уже выключился. Или надо сделать 6 сценариев на включение и 6 сценариев на выключение. Получается на каждый выход свое сценари.

и что делать с термостатами чтобы они были включены после перезагрузки и почему то они и за ночь уходят на отключение и утром приходится заново запускать сценарий

Например

// Виртуальное устройство testdev1 с шестью переключателями K1..K6
defineVirtualDevice("testdev1", {
  title: "Test Device 1",
  cells: {
    K1: { type: "switch", value: false },
    K2: { type: "switch", value: false },
    K3: { type: "switch", value: false },
    K4: { type: "switch", value: false },
    K5: { type: "switch", value: false },
    K6: { type: "switch", value: false },
  }
});

var KEYS = ["testdev1/K1", "testdev1/K2", "testdev1/K3",
            "testdev1/K4", "testdev1/K5", "testdev1/K6"];

// Правило: срабатывает если хотя бы один из K1..K6 равен true
defineRule("testdev1_any_on", {
  whenChanged: KEYS,
  then: function() {
    var anyOn = [1, 2, 3, 4, 5, 6].some(function(i) {
      return dev["testdev1/K" + i];
    });
    if (anyOn) {
      log.info("testdev1: хотя бы один контрол включён");
      // Здесь можно добавить нужные действия
    }
  }
});

// Правило: срабатывает если все K1..K6 равны true
defineRule("testdev1_all_on", {
  whenChanged: KEYS,
  then: function() {
    var allOn = [1, 2, 3, 4, 5, 6].every(function(i) {
      return dev["testdev1/K" + i];
    });
    if (allOn) {
      log.info("testdev1: все контролы включены");
      // Здесь можно добавить нужные действия
    }
  }
});

// Правило: срабатывает если все K1..K6 равны false
defineRule("testdev1_all_off", {
  whenChanged: KEYS,
  then: function() {
    var allOff = [1, 2, 3, 4, 5, 6].every(function(i) {
      return !dev["testdev1/K" + i];
    });
    if (allOff) {
      log.info("testdev1: все контролы выключены");
      // Здесь можно добавить нужные действия
    }
  }
});

Работает как и ожидается:


То есть как только нужно что-то нестандартное, не предусмотренное сценариями - гораздо проще взять и написать скрипт, решающий поставленную задачу.

Тут лучше описать подробнее. С логами, с выводом статусов.
Потому что я, пока, не понимаю что и как делаете и что меняется.
Вот для примера: что такое “включены после перезагрузки”?

на данный момент есть 2 проблемы после того как устройство WB 8.5 перезагружается, имитируем долгое отсутствие электричество. После того как головное устройство загрузилось видим что Сценарий Термостат деактивирован и вообще не функционирует.что видно по Активировать правило сценария деактивирован switch

“2) Термостат хамам Сидушка” теряет “Активировать правило сценария” деактивирован “switch” видимо теряет связь с датчиком связь wb-m1w2_224/ External Sensor 2 а нагреватель wb-mr6cv3_108/к1. Но wb-m1w2_224/ External Sensor 1 что на “1) Термостат Хамам” связь не теряет нагреватель wb-mr6cv3_108/к2. Не могу понять в журнале вроде нет ошибок! И там и тут вроде 1 устройства но почему-то одно теряет связь а другая работает

Понятно а что в логах при этом? То есть - в актуальном релизе состояние включен-выключен сохраняется и выключиться может только при недоступности, например, топика-источника или назначения (выхода).

Тут целесообразно в логи посмотреть. Покажите относящиеся к нему - подскажу.

log_20260430T093136.log (6,4 КБ)Вот скидываю ошибка выходит проблема самого устройства. вроде устройство работает и обновляется. что делать? попробовать заменить это устройство на новое.. есть запасное устройство

Добрый день.
Судя по

2026-04-30T06:31:36.556Z [wb-rules] WARNING: [rule warning] [WBSC-thermostat-mod/11_teplyy_pol_pogreb]: Get critical error (r/w) for topic "wb-m1w2_224/External Sensor 1#error". New error state: "r"
2026-04-30T06:31:34.709Z [wb-rules] ERROR: [rule error] [WBSC-thermostat-mod/11_teplyy_pol_pogreb]: Scenario disabled: critical error (r/w) for topic "wb-m1w2_224/External Sensor 2#error" not cleared for 10000 ms. Current error state: "r"

действительно - meta/error был в состоянии ошибки более 10 секунд.
Это считается ошибкой..
Вообще на шинах вполне допускаются (единичные) ошибки.
Для примера:

Apr 30 06:58:09 wirenboard-AQASN7R6 wb-mqtt-serial[1730]: WARNING: [modbus] failed to read 20 input(s) @ 13060 of device modbus:125: Serial protocol error: request timed out
Apr 30 07:00:29 wirenboard-AQASN7R6 wb-mqtt-serial[1730]: WARNING: [modbus] failed to read 2 input(s) @ 12538 of device modbus:125: Serial protocol error: malformed response: invalid crc
Apr 30 07:00:59 wirenboard-AQASN7R6 wb-mqtt-serial[1730]: WARNING: [modbus] failed to read 20 input(s) @ 13060 of device modbus:125: Serial protocol error: request timed out
Apr 30 07:01:43 wirenboard-AQASN7R6 wb-mqtt-serial[1730]: WARNING: [modbus] failed to read 2 input(s) @ 10268 of device modbus:125: Serial protocol error: malformed response: invalid crc
Apr 30 07:01:55 wirenboard-AQASN7R6 wb-mqtt-serial[1730]: WARNING: [modbus] failed to read 22 input(s) @ 8962 of device modbus:125: Serial protocol error: request timed out
Apr 30 07:02:53 wirenboard-AQASN7R6 wb-mqtt-serial[1730]: WARNING: [modbus] failed to read 2 input(s) @ 10268 of device modbus:125: Serial protocol error: malformed response: invalid crc
Apr 30 07:03:49 wirenboard-AQASN7R6 wb-mqtt-serial[1730]: WARNING: [modbus] failed to read 24 input(s) @ 13056 of device modbus:125: Serial protocol error: malformed response: invalid crc
Apr 30 07:04:47 wirenboard-AQASN7R6 wb-mqtt-serial[1730]: WARNING: [modbus] failed to read 2 input(s) @ 18460 of device modbus:125: Serial protocol error: malformed response: invalid crc

То есть если бывают раз в минуту - то шина вполне работает.
Если чаще - нужна ее диагностика.
Если устройство не отвечает более 10 секунд - это повод его проверить. Начал бы с чтения регистров uptime, если устройство не перезапускалось - тогда начал проверять шину.

я сегодня перезапускал WB 8.5 вставил в него новые устройства. как сделать чтения регистров uptime? и да некоторые термостаты ушли в отключенное состояние, а некоторые вообще не дают ничего сделать

Прочитать 104 и 105 input регистры, вот тут они описаны.
Для примера:

modbus_client_rpc --debug -m rtu -p none -a 125 /dev/ttyRS485-1 -b 115200 -t 0x04 -r0x68 -c 2
2026-04-30 08:42:04,221 [DEBUG] [7d][04][00][68][00][02][fb][eb]
2026-04-30 08:42:04,225 [DEBUG] Connecting to broker unix:///var/run/mosquitto/mosquitto.sock
2026-04-30 08:42:04,229 [DEBUG] RPC Client -> {'path': '/dev/ttyRS485-1', 'baud_rate': 115200, 'parity': 'N', 'data_bits': 8, 'stop_bits': 1, 'response_size': 9, 'format': 'HEX', 'msg': '7d0400680002fbeb', 'total_timeout': 1000} (1000 timeout ms)
2026-04-30 08:42:04,264 [DEBUG] RPC Client <- {'response': '7d040400456be478ed'}
2026-04-30 08:42:05,266 [DEBUG] Response: 7d040400456be478ed
2026-04-30 08:42:05,267 [DEBUG] <7d><04><04><00><45><6b><e4><78><ed>
SUCCESS: read 2 elements:
	Data: 0x0045 0x6be4 

Тут видно что не перезапускался более 1200 часов.

В “отключенное” состояние - что имеется в виду? Сценарии отключаются если устройства в них описанные имеют ошибки (недоступны) длиннее 10 секунд.
Если устройства действительно недоступны - не имеет смысла заниматься настройкой сценариев, пока не заработают без ошибок.

То есть отсутствие связи - должно быть чем-то обработано, недопустимо продолжать управление если устройство не отвечает.
То есть для термостата, например отсутствие датчика - требует вмешательства.

вот пытался подставить не получается даже сохранить и заставить работать. возможно я делаю что то не так

// Виртуальное устройство Насос Окна 2 этаж с шестью переключателями K1..K6
defineVirtualDevice(“Насос Окна 2 этаж”, {
title: “Насос Окна 2 этаж”,
cells: {
“wb-mr6cv3_45/K1”:
{type: “switch”,
value: false,},
“wb-mr6cv3_45/K2”:
{type: “switch”,
value: false,},
“wb-mr6cv3_45/K3”:
{type: “switch”,
value: false,},
“wb-mr6cv3_45/K4”:
{type: “switch”,
value: false,},
“wb-mr6cv3_45/K5”:
{type: “switch”,
value: false,},
“wb-mr6cv3_45/K6”:
{type: “switch”,
value: false,},
}
});

// Правило: срабатывает если хотя бы один из K1..K6 равен true
defineRule(“wb-mr6cv3_45_any_on”, {
whenChanged: KEYS,
then: function() {
var anyOn = [1, 2, 3, 4, 5, 6].some(function(i) {
return dev[“wb-mr6cv3_45/K” + i];
});
if (anyOn) {
log.info(“testdev1: хотя бы один контрол включён”);
// Здесь можно добавить нужные действия
}
}
});

// Правило: срабатывает если все K1..K6 равны true
defineRule(“wb-mr6cv3_45_all_on”, {
whenChanged: KEYS,
then: function() {
var allOn = [1, 2, 3, 4, 5, 6].every(function(i) {
return dev[“wb-mr6cv3_45/K” + i];
});
if (allOn) {
log.info(“testdev1: все контролы включены”);
// Здесь можно добавить нужные действия
}
}
})

{// Правило: срабатывает если все K1..K6 равны false}

defineRule(“wb-mr6cv3_45_all_off”, {
whenChanged: KEYS,
then: function() {
var allOff = [1, 2, 3, 4, 5, 6].every(function(i) {
return !dev[“wb-mr6cv3_45/K” + i];
});
if (allOff) {
log.info(“testdev1: все контролы выключены”);
// Здесь можно добавить нужные действия
}
}
})

пишет SyntaxError: parse error (line 67) duk_js_compiler.c:3391 но строки 67 нет

в первом символе проблема

теперь так ругается

пишу не правильно ?

root@wirenboard-ALSPTZPR:~# modbus_client --debug -mrtu -b115200 -pnone -s2 /dev/ttyRS485-1 -a243 -t0x03 -r104
Opening /dev/ttyRS485-1 at 115200 bauds (N, 8, 2)
[F3][03][00][68][00][01][10][C4]
Waiting for a confirmation…
ERROR Resource temporarily unavailable: read
ERROR occured!

Вы тут делаете странное. После
cells: {
должен идти идентификатор контрола, без кавычек. А у вас тут строка с названием контрола релейного модуля.

Пишете правильно, устройство не отвечает. Либо порт не тот, либо адрес не тот, либо скорость не та, либо регистр не тот.