Вот код в обе стороны гоняет значение, работает проверено.
defineVirtualDevice("weintek_json_sub", {
title: "weintek_json_sub",
cells: {
lb120: {
title: "lb120",
type: "switch",
value: false
},
lw120: {
title: "lw120",
type : "value",
readonly: false,
value : 0
},
lw122: {
title: "lw122",
type: "value",
readonly: false,
value: 0
},
}
});
trackMqtt("cMT3072x/test/sub", function(message) {
log.info("json_sub:","name: {}, value: {}".format(message.topic, message.value));
data = JSON.parse(message.value);
dev["weintek_json_sub/lb120"] = data.lb120
dev["weintek_json_sub/lw120"] = data.lw120
dev["weintek_json_sub/lw122"] = data.lw122
});
///////////////////////////// lb120
defineRule("weintek_json_pub_lb120", {
whenChanged: "weintek_json_sub/lb120",
then: function () {
var testString = {
lb120: dev["weintek_json_sub/lb120"], // контрол типа bool
};
jsonString = JSON.stringify(testString);
log.info("jsonString_pub:", jsonString);
publish("cMT3072x/test/pub",jsonString);
}
});
///////////////////////////////////// lw120
defineRule("weintek_json_pub_lw120", {
whenChanged: "weintek_json_sub/lw120",
then: function () {
var testString = {
lw120: dev["weintek_json_sub/lw120"], // контрол типа целое число u16
};
jsonString = JSON.stringify(testString);
log.info("jsonString_pub:", jsonString);
publish("cMT3072x/test/pub",jsonString);
}
});
///////////////////////////////////// lw122
defineRule("weintek_json_pub_lw122", {
whenChanged: "weintek_json_sub/lw122",
then: function () {
var testString = {
lw122: dev["weintek_json_sub/lw122"] //контрол типа float32
};
jsonString = JSON.stringify(testString);
log.info("jsonString_pub:", jsonString);
publish("cMT3072x/test/pub",jsonString);
}
});
со стороны weintek настройки как публиковал ранее, за исключением одной галочки выше. Адреса и имена регистров в подписке и публикации mqtt у weintek должны совпадать. Есть ньюанс, при загрузке weintek публикует значение ячеек памяти. Если необходимо энергонезависимые данные, то их надо хранить в RW регистрах у weintek.Иниче при загрузке weintek в WB опубликуются нули.
Сам потратил не мало времени на это, даже ваш ИИ не смог помочь. Надеюсь многим будет полезно.
Я вот про это имел ввиду, что бы передать большое количество регистров, надо столько же правил whenChanged:,что бы при изменении любого контрола WB передать в weintek. Можно это как то оптимизировать?