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

и вы используете modbus_client, перед его использованием надо wb-mqtt-serial остановить

Да забыл сделать. и адрес был не правильный

root@wirenboard-ALSPTZPR:~# modbus_client_rpc --debug -m rtu -p none -a 224 /dev/ttyRS485-1 -b 115200 -t 0x04 -r0x68 -c 2
2026-04-30 17:50:25,605 [DEBUG] [e0][04][00][68][00][02][e7][a6]
2026-04-30 17:50:25,607 [DEBUG] Connecting to broker unix:///var/run/mosquitto/mosquitto.sock
2026-04-30 17:50:25,609 [DEBUG] RPC Client → {‘path’: ‘/dev/ttyRS485-1’, ‘baud_rate’: 115200, ‘parity’: ‘N’, ‘data_bits’: 8, ‘stop_bits’: 1, ‘response_size’: 9, ‘format’: ‘HEX’, ‘msg’: ‘e00400680002e7a6’, ‘total_timeout’: 1000} (1000 timeout ms)
2026-04-30 17:50:26,613 [ERROR] Mqtt-rpc client timeout error, timeout 1000 ms

Это нормально? или проблема на линии? или с устройством?

Устройство не ответило за 1 секунду. Это не очень хорошо, проверьте шину (имя порта) скорость и адрес.
Должны соответствовать фактичесим.
Например приложите скриншот настроек порта из интерфейса

Термометры wire1 не показывает раньше показывал вроде бы. Ничего не делал, как решить проблему? Это датчик температуры подключен к WB 8.5

Проверьте пожалуйста с двумя стопбитами, точно так же как настроено на порту, например

modbus_client_rpc --debug -m rtu -p none -s2 -a 224 /dev/ttyRS485-1 -b 115200 -t 0x04 -r0x68 -c 2

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

Нецелесообразно обсуждать в одной теме несколько разных вопросов - при этом нить реассуждений теряется. Лучше создайте новую.

Перед этим произвел команду systemctl stop wb-mqtt-serial

root@wirenboard-ALSPTZPR:~# modbus_client_rpc --debug -m rtu -p none -s2 -a 224 /dev/ttyRS485-1 -b 115200 -t 0x04 -r0x68 -c 2
2026-05-01 14:07:10,335 [DEBUG] [e0][04][00][68][00][02][e7][a6]
2026-05-01 14:07:10,338 [DEBUG] Connecting to broker unix:///var/run/mosquitto/mosquitto.sock
2026-05-01 14:07:10,340 [DEBUG] RPC Client → {‘path’: ‘/dev/ttyRS485-1’, ‘baud_rate’: 115200, ‘parity’: ‘N’, ‘data_bits’: 8, ‘stop_bits’: 2, ‘response_size’: 9, ‘format’: ‘HEX’, ‘msg’: ‘e00400680002e7a6’, ‘total_timeout’: 1000} (1000 timeout ms)
2026-05-01 14:07:11,345 [ERROR] Mqtt-rpc client timeout error, timeout 1000 ms

Хорошо

А, это не стоит делать если используете modbus_client_rpc - он работает через метод драйвера.
Если останавливаете - то лучше modbus_client

Вот повторил команду

root@wirenboard-ALSPTZPR:~# modbus_client_rpc --debug -m rtu -p none -s2 -a 224 /dev/ttyRS485-1 -b 115200 -t 0x04 -r0x68 -c 2
2026-05-01 15:03:39,525 [DEBUG] [e0][04][00][68][00][02][e7][a6]
2026-05-01 15:03:39,527 [DEBUG] Connecting to broker unix:///var/run/mosquitto/mosquitto.sock
2026-05-01 15:03:39,529 [DEBUG] RPC Client → {‘path’: ‘/dev/ttyRS485-1’, ‘baud_rate’: 115200, ‘parity’: ‘N’, ‘data_bits’: 8, ‘stop_bits’: 2, ‘response_size’: 9, ‘format’: ‘HEX’, ‘msg’: ‘e00400680002e7a6’, ‘total_timeout’: 1000} (1000 timeout ms)
2026-05-01 15:03:39,567 [DEBUG] RPC Client ← {‘response’: ‘e004040001162314f3’}
2026-05-01 15:03:40,569 [DEBUG] Response: e004040001162314f3
2026-05-01 15:03:40,570 [DEBUG] <04><04><00><01><16><23><14>
SUCCESS: read 2 elements:
Data: 0x0001 0x1623

Устройство перезапускалось 19 часов, 46 минут назад.
А остальные устройства на этой же шине (предполагаю что они питаются от одного источника) - имеют такое же или близкое значение?

Да я вчера подключал новое устройство и отключал линию.

Отлично. Ну, посмотрите на количество ошибок на линии, это даст направление.

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

// Виртуальное устройство Насос Окна 2 этаж с шестью переключателями K1..K6
defineVirtualDevice(“Насос Окна 2 этаж”, {
title: “Насос Окна 2 этаж”,
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 = [“wb-mr6cv3_45//K1”, “wb-mr6cv3_45/K2”, “wb-mr6cv3_45/K3”,
“wb-mr6cv3_45/K4”, “wb-mr6cv3_45/K5”, “wb-mr6cv3_45/K6”];

// Правило: срабатывает если хотя бы один из 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: все контролы выключены”);
// Здесь можно добавить нужные действия
}
}
})

wb-mr6cv3_45/K- устройства при отключении которого насос wb-mr6cv3_101/K4 должен включаться но если все включены то насос только тогда отключается

А в какой строке это у вас происходит?

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

два слэша

У вас в трех правилах проверяется одно и то же условие, лучше сделать все в одном правиле:

var KEYS = [
    'wb-mr6cv3_45/K1',
    'wb-mr6cv3_45/K2',
    'wb-mr6cv3_45/K3',
    'wb-mr6cv3_45/K4',
    'wb-mr6cv3_45/K5',
    'wb-mr6cv3_45/K6'
];

var CHANNELS = [1, 2, 3, 4, 5, 6];

defineRule('wb-mr6cv3_45_state', {
    whenChanged: KEYS,
    then: function () {

        var onCount = 0;

        CHANNELS.forEach(function (i) {
            if (dev['wb-mr6cv3_45/K' + i]) {
                onCount++;
            }
        });

        if (onCount === 0) {
            log.info('testdev1: все контролы выключены');
            return;
        }

        if (onCount === CHANNELS.length) {
            log.info('testdev1: все контролы включены');
            return;
        }

        log.info('testdev1: частично включены (' + onCount + ')');
    }
});

но нужно сделать так чтобы “все контролы выключены” насос ВКЛ “wb-mr6cv3_101/K4”

“все контролы включены” насос ВЫКЛ “wb-mr6cv3_101/K4”

“частично включены” насос ВКЛ “wb-mr6cv3_101/K4”

Допишите код, там же все тривиально.