Перестало работать правило, ошибка can't convert control

Очень интересная картина

log("===============142===========================");
log("Print status  142 k0", dev['wb-mr6cv3_142/K0']);
log("Print status  142 k1", dev['wb-mr6cv3_142/K1']);
log("Print status  142 k2", dev['wb-mr6cv3_142/K2']);
log("Print status  142 k3", dev['wb-mr6cv3_142/K3']);
log("Print status  142 k4", dev['wb-mr6cv3_142/K4']);
log("Print status  142 k5", dev['wb-mr6cv3_142/K5']);
log("Print status  142 k6", dev['wb-mr6cv3_142/K6']);
log("===============155===========================");

log("Print status  155 k0", dev['wb-mr6cv3_155/K0']);
log("Print status  155 k1", dev['wb-mr6cv3_155/K1']);
log("Print status  155 k2", dev['wb-mr6cv3_155/K2']);
log("Print status  155 k3", dev['wb-mr6cv3_155/K3']);
log("Print status  155 k4", dev['wb-mr6cv3_155/K4']);
log("Print status  155 k5", dev['wb-mr6cv3_155/K5']);
log("Print status  155 k6", dev['wb-mr6cv3_155/K6']);
log("===============187===========================");

log("Print status  187 k1", dev['wb-mr6c_187/K1']);
log("Print status  187 k2", dev['wb-mr6c_187/K2']);
log("Print status  187 k3", dev['wb-mr6c_187/K3']);
log("Print status  187 k4", dev['wb-mr6c_187/K4']);
log("Print status  187 k5", dev['wb-mr6c_187/K5']);
log("Print status  187 k6", dev['wb-mr6c_187/K6']);



Есть идеи?

Можете включить отладочный логгинг в wb-rules:

echo "WB_RULES_OPTIONS=-debug" > /etc/default/wb-rules
systemctl restart wb-rules

После этого воспроизвести вышеприведенную картину и собрать архив c диагностикой. Посмотрим по логу что происходит.

приложен диагностический архив, доступен только сотрудникам поддержки
(505,0 КБ)

В архив не попали действия

Лучше - при работе wb-rules с debug пересохранить скрипт выводящий состояния реле и выгрузить так:

journalctl -u wb-rules --since "10 min ago"

ну и вывод timeout 5 mosquitto_sub -v -t /devices/#

Проблема в том, что все сейчас работает. Ничего не менялось кроме перезагрузки сервиса, но до этого было несколько перезагрузок и это не помогало.

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

для инфо.
сегодня обновил систему еще раз… ушли ошибки из моего сообщения выше:
но появилась аналогичная с другого контрола на mwac. Начал было разбираться по инструкциям в треде, рестартанул сервис wb-rules - и ошибка ушла. Собственно - не может ли проблема быть связана с “ранним” запуском wb-rules после ребута ? Почему лечиться рестартом сервиса после загрузки системы. Никак более изменений не делалось.

Да, весьма похоже, уже у разработчиков бага.

1 Like

Присоединюсь к проблеме.
ERROR: control wb-mr6c_51/K6 SetValue() error: can’t convert control value ‘false’ (type bool) to datatype ‘0’

defineVirtualDevice("switchNightLight", {
    title: "Включить ночной свет",
    cells: {
	enabled: {
	    type: "switch",
	    value: false
	},
    }
});

defineRule("switchNightLight", {
  whenChanged: "switchNightLight/enabled",
  then: function (newValue, devName, cellName) {
	
    dev["wb-mr6c_27"]["K1"] = newValue;
    dev["wb-mr6c_51"]["K5"] = newValue;
    dev["wb-mr6c_51"]["K4"] = newValue;
    dev["wb-mr6c_37"]["K5"] = newValue;
    dev["wb-mr6c_37"]["K4"] = newValue;
    dev["wb-mr6c_51"]["K6"] = newValue;

  }
});

И проблема ТОЛЬКО у wb-mr6c_51/K6

Остальные все прекрасно работают.

Версия: 6.7.2 wb-2404

Странно. Обновлялся только на прошлой неделе. А сейчас ещё раз попробовал - обновился ещё раз. И проблема ушла.

Да, на актуальной - судя по отзывам не воспроизводится. У меня тоже не воспроизводится, на 2.20.10

у меня лог пестрит красным. что характерно, сначала ругался так:

14-07-2024 00:35:21.730 ERROR: [rule error] failed to SetValue for unexisting control wb-mrm2-mini_38/K1: false

у кого такая проблема, отмотайте лог - может, у вас тоже сначала так было.

потом устройство “появилось” (понятное дело, оно всегда было на месте), и теперь вот этот вот “дататайп 0”:

14-07-2024 02:16:15.462 [wb-rules] ERROR: control wb-mrm2-mini_38/K1 SetValue() error: can’t convert control value ‘false’ (type bool) to datatype ‘0’

правило у меня написано, конечно, криво: оно вызывается каждую секунду по нескольку раз и с несколькими устройствами (два из которых mrm2-mini, но ругается только про этот 38-й). может, там у него что-то перегрелось…

Версия wb-rules какая? Если 2.20.8 - да, возможно.

2.20.8, newest. Но перезапуск отдельно wb-rules помогает.

Надо ждать пока 2.20.10 в репозиторий попадет…

~# apt -s install wb-rules
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
wb-rules is already the newest version (2.20.8).
wb-rules set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Я сначала подумал, что у меня какие-то проблемы на линии modbus. Но когда начал отваливаться wbio модуль, заподозрил неладное. Тоже висит вопрос
https://support.wirenboard.com/t/oshibki-zapisi-setvalue-for-unexisting-control-i-modbus/21019
А пока делаю перезагрузку, когда ломается и поставил таймер на всё правило на 10 секунд, как будто помогает, но может совпадение.

Есть еще странности. Не отрабатывают некоторые правила при запуске контроллера, и при последующем сохранении правила. Но если перезапустить сервис wb-rules, все начинает работать.

UPD: подпер следующим костылем - пока работает. У меня есть обращения к устроствам сразу после запуска правила, поэтому в журнал попадают сообщения об ошибках уже сразу после перезагрузки.
Сделал скрипит для мониторинга ошибок и перезапуска правил, при старте устройства срабатывает раз 5, потом все стабильно.

sudo nano /usr/local/bin/monitor-wb-rules.sh

#!/bin/bash

SUBSTRING="failed to SetValue for unexisting control"


journalctl -u wb-rules.service -f | while read -r line; do
    if echo "$line" | grep -q "$SUBSTRING"; then
        systemctl restart wb-rules.service
    fi
done

Добавил скрипт в автозапуск.