Добрый вечер.
Есть такое устройство - Ватериус. Я настроил его на подключение к брокеру Вайренборда, MQTT explorer отображает их, но в каналах MQTT они не отображаются и соответсвенно в устройствах их тоже нет. Помогите сделать так, чтобы Ватериус отображался в устройствах. Спасибо.
Здравствуйте.
Это происходит потому, что Ватериус пишет в mqtt не в нашей нотации (соглашении о структуре топиков). Это решаемо, надо написать конвертер на wb-rules. Можете попробовать сами, немного информации и примеров есть тут: Подключение сторонних устройств по MQTT — Wiren Board
Или пришлите топики Ватериуса и их содержимое, можем помочь написать для вас пример скрипта на wb-rules. Лучше всего список топиков получить так:
mosquitto_sub -t '/<укажите>/<путь_к_ватериусу>/#' -v
Александр, спасибо за ваш ответ.
Если я правильно понимаю то правильный запрос по Вашему примеру выглядит так? Какой ожидаемый вывод, у меня ничего нет в результате запроса (скриншот 2)
mosquitto_sub -t '/waterius/kitchen/#' -v
Сам ватериус описывает свои топики [здесь].(waterius/Export.md at master · dontsovcmc/waterius · GitHub)
Попробуйте так
mosquitto_sub -t 'waterius/#' -v
Ожидаемый вывод списка топиков с путями изначениями. Гит видел, хочется реальные тоже глянуть и текстом лучше всего.
Топики Ватериуса.txt (3,2 КБ)
// Waterius2Wirenboard.js
var topic = "waterius/toilet"; //Указываем id Ватериуса указанный в настройках (mqtt topic). Сюда Ватериус будет слать данные.
var device_id = "waterius2"; //Придумайте уникальный id устройства в WirenBoard. Это адрес Виртуального устройства WirenBoard
defineVirtualDevice(device_id, {
title: "Ватериус (Туалет)",
cells: {
"Горячая вода": {
type: "value",
units: "m^3",
precision: 0.001,
order: 0,
value: 0,
},
"Холодная вода": {
type: "value",
units: "m^3",
precision: 0.001,
order: 1,
value: 0,
},
"Вес горячей воды": {
type: "value",
units: "имп/литр",
precision: 0,
order: 2,
value: 0,
},
"Вес холодной воды": {
type: "value",
units: "имп/литр",
precision: 0,
order: 2,
value: 0,
},
"Период пробуждения": {
type: "value",
units: "мин",
precision: 0,
order: 2,
value: 0,
},
}
});
trackMqtt(topic + "/ch0", function(message){
dev[device_id + "/Горячая вода"] = parseFloat(message.value);
});
trackMqtt(topic + "/ch1", function(message){
dev[device_id + "/Холодная вода"] = parseFloat(message.value);
});
trackMqtt(topic + "/period_min", function(message){
dev[device_id + "/Период пробуждения"] = parseInt(message.value);
});
trackMqtt(topic + "/f0", function(message){
dev[device_id + "/Вес горячей воды"] = parseInt(message.value);
});
trackMqtt(topic + "/f1", function(message){
dev[device_id + "/Вес холодной воды"] = parseInt(message.value);
});
// с версии 1.0.0 (если включен флаг homeassistant discovery)
trackMqtt(topic, function(message){
try {
var data = JSON.parse(message.value);
dev[device_id + "/Горячая вода"] = data["ch0"];
dev[device_id + "/Холодная вода"] = data["ch1"];
dev[device_id + "/Период пробуждения"] = data["period_min"];
dev[device_id + "/Вес горячей воды"] = data["f0"];
dev[device_id + "/Вес холодной воды"] = data["f1"];
} catch (e) {
log("Failed to parse waterius data: " + e.message);
}
});
// с версии >=0.11.0
defineRule("Установить Период пробуждения (мин)", {
whenChanged: device_id + "/Период пробуждения",
then: function (newValue) {
publish(topic + "/period_min/set", newValue.toString());
}
});
// с версии >=0.11.9
defineRule("Установить Горячую воду (м3)", {
whenChanged: device_id + "/Горячая вода",
then: function (newValue) {
publish(topic + "/ch0/set", newValue.toString());
}
});
// с версии >=0.11.9
defineRule("Установить Холодную воду (м3)", {
whenChanged: device_id + "/Холодная вода",
then: function (newValue) {
publish(topic + "/ch1/set", newValue.toString());
}
});
// с версии >=0.11.9
defineRule("Установить вес Горячей воды", {
whenChanged: device_id + "/Вес горячей воды",
then: function (newValue) {
publish(topic + "/f0/set", newValue.toString());
}
});
// с версии >=0.11.9
defineRule("Установить вес Холодной воды", {
whenChanged: device_id + "/Вес холодной воды",
then: function (newValue) {
publish(topic + "/f1/set", newValue.toString());
}
});