Виртуальное устройство с контроллом типа text

В топик с radonly=true может писать только и исключительно драйвер (создатель) этого топика. Запись откуда угодно еще будет игнорироваться.

не понимаю.
как рамки то расширить???

Покажите файл виртуальных устройств.

вот код на создание виртуального устройства
// 1. НЕОБХОДИМО ЗАПОЛНИТЬ ДАННЫЕ ПО УСТРОЙСТВУ

// 1.1 путь до внешних физических устройств
var temperatureSensorDoor = “wb-mai6_66/IN 2 P Temperature”
var temperatureSensorDeep = “hwmon/CPU Temperature”
var redLamp = “wb-gpio/A4_OUT”
var greenLamp = “wb-gpio/A4_OUT”
var yellowLamp = “wb-gpio/A3_OUT”
var loock = “wb-m1w2_78/Input 1”
var cleaning = “wb-mrm2-mini_54/Input 2 counter”
var humidity = “wb-msw-v4_96/Humidity”

// 1.2 введите Id и Имя холодильника (устройства (обычно +1 к предыдущему)
var idDevice = 2
var idName = “Холодильник с тестом №6”

// -------------------------------------------------------------------------- //

// 2. СКРИПТ НА СОЗДАНИЕ УСТРОЙСТВА
defineVirtualDevice(“fridge_”+idDevice, {
title: idName ,
cells: {
temperatureSensorDoor: {
title: “Температура у двери”,
type: “temperature”,
value: 0,
order: 8
},
temperatureSensorDeep: {
title: “Температура у блока”,
type: “temperature”,
value: 0,
order: 9
},
redLamp: {
title: “Сброс ошибки”,
type: “switch”,
value: false,
order: 3
},
greenLamp: {
title: “Зеленая лампа”,
type: “switch”,
value: false,
order: 5
},
yellowLamp: {
title: “Желтая лампа”,
type: “switch”,
value: false,
order: 7
},
cleaning: {
title: “Режим уборки”,
type: “switch”,
value: false,
order: 4
},
loock: {
title: “Дверь заперта”,
type: “switch”,
value: false,
order: 6
},
alarm: {
title: “ОШИБКА”,
type: “alarm”,
value: false,
order: 1
},
textAlarm: {
title: “”,
type: “text”,
value: “описание ошибки”,
readonly: false,
order: 2
},
humidity: {
title: “Влажность”,
type: “rel_humidity”,
value: 0,
order: 10
},
}
});

// привязка показаний физических устройств (внешних)
// датчик у двери
defineRule( {
whenChanged: temperatureSensorDoor,
then: function (newValue) {
dev [“fridge_” +idDevice+ “/temperatureSensorDoor”] = newValue
}
});
// датчик у блока
defineRule( {
whenChanged: temperatureSensorDeep,
then: function (newValue) {
dev [“fridge_” +idDevice+ “/temperatureSensorDeep”] = newValue
}
});

// Красная лампа
defineRule( {
whenChanged: redLamp,
then: function (newValue) {
dev [“fridge_”+idDevice+“/redLamp”] = newValue
}
});
defineRule( {
whenChanged: “fridge_”+idDevice+“/redLamp”,
then: function (newValue) {
dev [redLamp] = newValue
}
});

// Зеленая лампа
defineRule( {
whenChanged: greenLamp,
then: function (newValue) {
dev [“fridge_”+idDevice+“/greenLamp”] = newValue
}
});
defineRule( {
whenChanged: “fridge_”+idDevice+“/greenLamp”,
then: function (newValue) {
dev [greenLamp] = newValue
}
});

// Желтая лампа
defineRule( {
whenChanged: yellowLamp,
then: function (newValue) {
dev [“fridge_”+idDevice+“/yellowLamp”] = newValue
}
});
defineRule( {
whenChanged: “fridge_”+idDevice+“/yellowLamp”,
then: function (newValue) {
dev [yellowLamp] = newValue
}
});

// геркон (датчик на закрытие двери)
defineRule( {
whenChanged: loock,
then: function (newValue) {
dev [“fridge_” + idDevice + “/loock”] = !newValue
}
});

// Режим уборки
defineRule( {
whenChanged: cleaning,
then: function () {
dev [“fridge_”+idDevice+“/cleaning”] = true
}
});

// активация аларм
defineRule( {
whenChanged: “fridge_”+idDevice+“/redLamp”,
then: function (newValue) {
dev [“fridge_” + idDevice + “/alarm”] = newValue
}
});

// Влажность привязка
defineRule( {
whenChanged: humidity,
then: function (newValue) {
dev [“fridge_” +idDevice+ “/humidity”] = newValue
}
});

Просьба код высылать или файлом, или как описано в правилах портала.

Данные рекомендации выполнили? Покажите. Без них описанный мной вариант ожидаемо не будет работать.

1 сделано
2 сделано (текст пишется через /on)
3 не совсем понял где писать правило? В файле js? тогда откуда будет браться newValue?

freezer.js (4,3 КБ)
вот файл

Не уточнил. Файл закиньте в архив и снова пришлите.

freezer.js.zip (1,7 КБ)

Да. Также создать правило как и любое другое (“В файле js”). Я привел только одну строку для понимания - естественно правило должно быть описано целиком по типу примеров.

правило обработки самого себя?
defineRule({
whenChanged: “virtual-fridge_2/textAlarm”,
then: function (newValue, devName, cellName) {
dev[“virtual-fridge_2/textAlarm”] = newValue;
}
});


сделал но у меня весь текст не влазит в квадрат. Как расширить квадрат?

Снимок экрана 2024-04-15 в 16.26.08
если я ставлю readonly: true то я не могу писать топики с ноде рев через /on

Простите, я уже несколько раз указывал что такое решение работать не будет. Используйте другой способ передачи либо создавайте виртуальные устройства непосредственно из ПО которое используете (NodeRed).

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

Совсем нет.
У вас есть несколько виртуальных устройств холодильника - в них для textAlarm обязательно оставляем readonly: true,.
К этому необходимо дополнительное виртуальное устройство и правило. Вот в данное виртуальное устройство и прописываете все нужные textAlarm для всех холодильников с readonly: false,, и именно эти топики используйте в Node-RED, а в правиле пропишите, что при изменении данного топика менять уже топик холодильника. Я пока только так вижу решение вашей задачи. Поэтому покажите:

  1. Виртуальное устройство холодильников (если не меняли, то уже есть).
  2. Другое виртуальное устройство для алармов, как я выше описал.
  3. Правило обработки данных алармов, как выше описал.

все получилось, правда появился лишний топик. А его как то можно скрыть?

Сейчас и в квадратике и так есть инфа ))

Можно вообще не использовать топик. Достаточно публиковать в неконвенционный, неотображаемый топик. Например в /tmp/sometopick и читать значение с помощью trackMqtt.
Тогда он и выводится не будет - и читаться при этом успешно.

Вот у меня сейчас так

defineVirtualDevice(“fridge_”+idDevice, {
title: idName ,
cells: {
temperatureSensorDoor: {
title: “Температура у двери”,
type: “temperature”,
value: 0,
order: 8
},
temperatureSensorDeep: {
title: “Температура у блока”,
type: “temperature”,
value: 0,
order: 9
},
redLamp: {
title: “Сброс ошибки”,
type: “switch”,
value: false,
order: 3
},
greenLamp: {
title: “Зеленая лампа”,
type: “switch”,
value: false,
order: 5
},
yellowLamp: {
title: “Желтая лампа”,
type: “switch”,
value: false,
order: 7
},
cleaning: {
title: “Режим уборки”,
type: “switch”,
value: false,
order: 4
},
loock: {
title: “Дверь заперта”,
type: “switch”,
value: false,
order: 6
},
alarm: {
title: “ОШИБКА”,
type: “alarm”,
value: false,
order: 1
},
textAlarm: {
title: “”,
type: “text”,
value: “описание ошибки”,
readonly: false,
order: 2
},
textAlarm2: {
title: “”,
type: “text”,
value: “описание ошибки”,
readonly: true,
order: 2
},
humidity: {
title: “Влажность”,
type: “rel_humidity”,
value: 0,
order: 10
},
}
});

defineRule({
whenChanged: “fridge_” +idDevice+ “/textAlarm”,
then: function (newValue, devName, cellName) {
dev [“fridge_” +idDevice+ “/textAlarm2”] = newValue;
}
});

то есть у меня 2 контролла textAlarm2 и textAlarm
Я в дашборде просто ссылку на один топик сделал, а в устройстве висят два

ноде ред пишет в textAlarm

а правило WB уже переводит его в textAlarm2