Новая версия движка правил

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

После обновления до 2.2 куча ошибок … SetValue() error: can’t convert control value ‘…’ (type float64) to datatype … и нерабочих правил. wb-rules-system обновлена.
#apt policy wb-rules-system
wb-rules-system:
Installed: 1.6.3
Candidate: 1.6.3
Как пофиксить?

ERROR: control recirculation_pump/state SetValue() error: can’t convert control value ‘1’ (type float64) to datatype ‘switch’
ERROR: control heater/CH consumption SetValue() error: can’t convert control value ‘2’ (type float64) to datatype ‘text’
ERROR: control vutr_tn_1/Mode SetValue() error: This control is not writable

Сами правила выложите, пожалуйста

Например
defineVirtualDevice(‘pressure_status’, {
title: ‘Water pressure’,
cells: {
Pressure: {
type: ‘text’,
value: 0
}
}
});

defineRule(’_system_track_press’, {
whenChanged: ‘wb-adc/A1’,
then: function () {
dev[‘pressure_status’][‘Pressure’] = Math.round((((dev[‘wb-adc’][‘A1’] / dev[‘wb-adc’][‘5Vout’] - 0.1) * 10) / 0.6667) * 100) / 100;
}
});

Ошибка:
ERROR: control pressure_status/Pressure SetValue() error: can’t convert control value ‘1.8’ (type float64) to datatype ‘text’

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

Ваш пример можно поправить следующим образом:

defineVirtualDevice("pressure_status", {
  title: "Water pressure",
  cells: {
    Pressure: {
      type: "text",
      value: ""
    }
  }
});

defineRule("_system_track_press", {
  whenChanged: "wb-adc/A1",
  then: function () {
    floatVal = Math.round((((dev["wb-adc"]["A1"] / dev["wb-adc"]["5Vout"] - 0.1) * 10) / 0.6667) * 100) / 100;
    dev["pressure_status"]["Pressure"] = floatVal.toString();
  }
});

А что насчет ошибок This control is not writable (при попытке записи в холдинг регистр тип value)?

Проверка изменилась только для контролов?
log(‘Recirculation state is set to {}’, newValue); где newValue не строка должно работать?

Можете привести конкретный пример скрипта, в котором происходит эта ошибка (так будет проще определить в чём именно проблема)?

ERROR: control ot_gtw_15/CH Setpoint SetValue() error: This control is not writable

Device ‘ot_gtw_15’ register:

{
“name”: “CH Setpoint”,
“reg_type”: “holding”,
“address”: 7,
“type”: “value”,
“scale”: 0.1
},

Rule:
var heater_device = ‘ot_gtw_15’;
var ch_sp_control = ‘CH Setpoint’;

defineVirtualDevice(‘heater’, {
title: ‘Heater’,
cells: {
‘dhw_setpoint’: {
type: ‘value’,
value: 58
},
‘ch_setpoint_conf’: {
type: ‘value’,
value: 40
},
‘auto_ch_setpoint’: {
type: ‘switch’,
value: false
}
}
});

defineRule(‘heater_temp_update’, {
whenChanged: [
‘weather/temperature’,
heater_device + ‘/’ + ch_enabled_control,
‘heater/auto_ch_setpoint’
],
then: function (newValue, devName, cellName) {
log(‘Temp update rule newValue = {}, devName = {}, cellName = {}’, newValue, devName, cellName);
var calcSetpoint = dev[‘heater’][‘ch_setpoint_conf’];
if (dev[‘heater’][‘auto_ch_setpoint’] == true) {
var c_const = 42;
if (dev[‘homeState’][‘Away’]) {
c_const = 30;
}
var weather_data = readConfig(’/var/log/weather/data.json’);
var outsideTemp = parseFloat(weather_data.main.temp);
calcSetpoint = Math.round(-Math.pow(outsideTemp / 12, 3) - 0.6 * outsideTemp + c_const);
dev[heater_device][ch_sp_control] = calcSetpoint;
}
}
});

А в старом движке правил именно это правило работало?
Ошибка говорит, что контрол ot_gtw_15/CH Setpoint не поддерживает запись.
Предлагаю написать минимальный код, который будет воспроизводить ошибку: бесконечный цикл, в котором вы будете писать в этот контрол любую константу (например, 1).
Потом заменить контрол на какой-нибудь реально существующий в Wiren Board (например, buzzer/enabled).

Мне пока кажется, что дело не в движке правил, а в конфигурации вашего устройства. А если вы сможете такую проблему воспроизвести элементарным правилом и на пищалке, то мы тоже сможем её воспроизвести.

Да, работало. Перестало после установки версии 2,2. Причем не работает для нескольких разных кастомных устройств.
Ок, попробую.

Также нормально работает если отправиить значение через mqtt. (OpenHab)

Наконец вернул контроллер к жизни после апдейта. Кроме адаптации правил возникли проблемы:

  • пропала часть модулей - пофиксилось удалением и повторным добавлением.
  • часть контролов в некоторых модулях стала недоступна для записи через правила (This control is not writable ошибка в логе) но продолжала работать через MQTT - пофиксилось установкой mosquitto_pub -r -t “/devices/…/controls/…/meta/writable” -m 1
  • часть контролов с типом текст (кастомных и системных) стала отображаться как writable на веб интрефейсе. Стало ок после mosquitto_pub -r -t “/devices/…/controls/…/meta/writable” -m 0 но после перезагрузки вернулось назад.
  • часть 1wire датчиков пропала на web ui но продолжала работать через MQTT - пофиксилось установкой типа mosquitto_pub -r -t “/devices/…/controls/…/meta/type” -m temperature но после перезагрузки эти изменения тоже пропали.
    Почему апдейт столько всего наворотил? Почему не сохранились изменения и как их сделать перманентными?

Как производился апдейт? Какие пакеты обновлялись?

Давайте эти проблемы решать по очереди. Выберите один проблемный контрол (например, показания 1-Wire), пришлите сюда все связанные с ним топики, как они есть сразу после перезагрузки. Затем примените ваши изменения, опять пришлите все топики. Потом перезагрузитесь, опять пришлите все топики.

Должно быть починено в версии 2.2.1 (возможно, перед обновлением нужно будет выполнить apt update)

Производился по инструкции из первого сообщения.

Оно уже доступно? Должно поставиться просто через apt update / upgrade?

Да, доступно. Установить можно таким способом:

apt update
apt install wb-rules=2.2.1

Какой EcmaScript в основе?

Не знаю, как в новой версии, но в текущей некорректная работа clearTimeout/clearInterval. Он валится с ошибкой если в качестве аргумента undefined или null. По-хорошему должен просто ничего не делать

  1. ecmascript 5
  2. пожалуйста проверьте в новой версии, инструкции по установке выше.

Обновил wb-rules до 2.2.1.
Пропали данные по температуре процессора и платы в mqtt. после обновления данных больше нет.
Mar 28 23:00:57 wirenboard-AIPBK6MQ daemon.info wb-rules[1648]: ERROR: control hwmon/Board Temperature SetValue() error: can’t convert control value ‘36.125’ (type string) to datatype ‘temperature’
Mar 28 23:00:57 wirenboard-AIPBK6MQ daemon.info wb-rules[1648]: ERROR: control hwmon/CPU Temperature SetValue() error: can’t convert control value ‘59.800’ (type string) to datatype ‘temperature’

На гитхабе нашел исправления от @EvgenyBoger от ноября 2019 года. Хотелось бы, чтобы исправления автоматически ставились вместе с ново версией пакета wb-rules.

спасибо, сейчас исправим.