В топик с 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?
Не уточнил. Файл закиньте в архив и снова пришлите.
Да. Также создать правило как и любое другое (“В файле js”). Я привел только одну строку для понимания - естественно правило должно быть описано целиком по типу примеров.
правило обработки самого себя?
defineRule({
whenChanged: “virtual-fridge_2/textAlarm”,
then: function (newValue, devName, cellName) {
dev[“virtual-fridge_2/textAlarm”] = newValue;
}
});
если я ставлю readonly: true то я не могу писать топики с ноде рев через /on
Простите, я уже несколько раз указывал что такое решение работать не будет. Используйте другой способ передачи либо создавайте виртуальные устройства непосредственно из ПО которое используете (NodeRed).
Если у вас есть вопросы требующие участия техподдержки - то есть оборудование либо ПО работает не так как документировано - то с удовольствием поможем.
Совсем нет.
У вас есть несколько виртуальных устройств холодильника - в них для textAlarm
обязательно оставляем readonly: true,
.
К этому необходимо дополнительное виртуальное устройство и правило. Вот в данное виртуальное устройство и прописываете все нужные textAlarm
для всех холодильников с readonly: false,
, и именно эти топики используйте в Node-RED, а в правиле пропишите, что при изменении данного топика менять уже топик холодильника. Я пока только так вижу решение вашей задачи. Поэтому покажите:
- Виртуальное устройство холодильников (если не меняли, то уже есть).
- Другое виртуальное устройство для алармов, как я выше описал.
- Правило обработки данных алармов, как выше описал.
все получилось, правда появился лишний топик. А его как то можно скрыть?
Сейчас и в квадратике и так есть инфа ))
Можно вообще не использовать топик. Достаточно публиковать в неконвенционный, неотображаемый топик. Например в /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