Не удается прочитать mqtt топики через симулятор панели weintek

Те ребята скидку хорошую дают.

Не перебор. Это не просто сенсорная панель, это контроллер HMI с кучами возможностями какие только есть.

Заказывайте продвинутые модели серии cMT -х. Есть еще модели сMT -SVR, они без экрана,HMI реализуется приложением СMT viever на любое устройство.

Будут вопросы по weintek,задавайте в личку, в том числе и по выбору. Большой опыт работы с ними.

Слишком громоздкая конструкция кода получается.

1 лайк

вот тут рабочая конструкция. Если надо много топиков WB в одном JSON публиковать,то пишите

“value”:xx,

“value(1)”:xx,

“value(2)”:xx

1 лайк

Вот 100% рабочий и проверенный пример.

weintek_json.js (700 байтов)

1 лайк

Сколько weintek в одной подписке mqtt топика может принять полезной нагрузки json мне не известно. У меня например 72 разных объекта без проблем тянет.

Спасибо Вам больше. А можете еще раз перезалить JS-ку. А то у меня реджектет на нее

Вот код из правила

defineRule(“weintek_json_pub”, {
whenChanged: “wb-mai6_94/Uptime”, // подставьте свое значение для старта публикации

then: function () {
var testString = {
lb120: dev[“wb-gpio/5V_OUT”], // контрол типа bool
lw120: dev[“buzzer/frequency”], // контрол типа целое число u16
lw122: dev[“wb-mai6_94/Internal Temperature”] //контрол типа float32

};
jsonString = JSON.stringify(testString);
log.info(“jsonString:”, jsonString);
publish(“cMT3072x/test”,jsonString); // подставьте свой топик для публикации

}  

});

Да, портал режет js.
Лучше текст вставить как код используя Текст «как есть» (без применения форматирования), то есть кнопку </> в панели.

Ну что бы закрыть тему с weintek, вот код правил подписки WB на топики публикуемые weintek в формате JSON. Код 100% рабочий и проверенный, я не силен в java,если есть огрехи в коде, пусть спецы поправят. Если писать и читать с WB в одни и те же адреса weintek, то получится двусторонние управление.

defineVirtualDevice("weintek_json_sub", {
    title: "weintek_json_sub",
    cells: {
	lb130: {
	    type: "switch",
	    value: false
	},
      lw130: {
        type : "value",
        value : 0
    }, 
      lw132: {
        type : "value",
        value : 0,
    },  
    
  }
});

trackMqtt("cMT3072x/test/sub", function(message) {
   log.info("name: {}, value: {}".format(message.topic, message.value));
    data = JSON.parse(message.value);  
      dev["weintek_json_sub/lb130"] = data.lb130
      dev["weintek_json_sub/lw130"] = data.lw130
      dev["weintek_json_sub/lw132"] = data.lw132      
      
});


1 лайк

Вот код в обе стороны гоняет значение, работает проверено.

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. Можно это как то оптимизировать?

Спасибо Вам большое!!! Я дня три сидела и не могла победить!!!

Получилось в итоге?

ДаДа, все вышло

Ну, для примера GitHub - wirenboard/wb-zigbee2mqtt: zigbee2mqtt to Wiren Board MQTT Conventions bridge · GitHub тоже создает сотни правил.
UPD: поправил ссылку.

Ссылка не рабочая

Ох, точно, не то скопировал.