Так ВБ я настраивал первый раз, сделал тестовый стенд (датчики, зигби, диммеры, реле), поигрался, получилось, немного набрался опыта. И решил, что обновлю, сброшу на заводские, и с учетом опыта уже начну делать нормально рабочий вариант. Я же не знал, что у ВБ проблемы со сбросом. )
По поводу вентклапана, техподдержка после долгих бесполезных обсуждений, все таки выдала, что этот клапан как опенэйр, только без команды “спиид”, к чему товарищ Волчков и сам пришел. И интегрироваться с ВБ они не собираются - делайте сами.
Пока техподдержка думает, что делать с моим зависшим контроллером, ЧатГПТ набросал код. Кто понимает, подскажите - верно ли он считывет данные из МКТТ топиков?
defineVirtualDevice("air_valve", {
title: "Приточный клапан",
cells: {
"Состояние": {
type: "switch",
value: false
},
"Режим работы": {
type: "text",
value: "manual"
},
"Положение заслонки": {
type: "range",
value: 0,
max: 3
},
"Температура": {
type: "temperature",
value: 22.5
},
"Влажность": {
type: "rel_humidity",
value: 50
}
}
});
// Привязка температуры из топика vakio/temp
defineRule("update_temperature", {
whenChanged: ["mqtt/vakio/temp"],
then: function (newValue) {
dev["air_valve"]["Температура"] = parseFloat(newValue);
}
});
// Привязка влажности из топика vakio/hud
defineRule("update_humidity", {
whenChanged: ["mqtt/vakio/hud"],
then: function (newValue) {
dev["air_valve"]["Влажность"] = parseFloat(newValue);
}
});
// Отправка положения заслонки в топик vakio/gate
defineRule("update_gate_position", {
whenChanged: ["air_valve/Положение заслонки"],
then: function (newValue) {
publish("vakio/gate", newValue.toString());
}
});
// Отправка режима работы в топик vakio/workmode
defineRule("update_work_mode", {
whenChanged: ["air_valve/Режим работы"],
then: function (newValue) {
if (newValue === "manual" || newValue === "super_auto") {
publish("vakio/workmode", newValue);
}
}
});
// Получение режима работы из топика vakio/workmode
defineRule("sync_work_mode", {
whenChanged: ["mqtt/vakio/workmode"],
then: function (newValue) {
if (newValue === "manual" || newValue === "super_auto") {
dev["air_valve"]["Режим работы"] = newValue;
}
}
});
// Управление состоянием устройства через топик vakio/state
defineRule("update_state", {
whenChanged: ["air_valve/Состояние"],
then: function (newValue) {
publish("vakio/state", newValue ? "on" : "off");
}
});
// Синхронизация состояния устройства с топиком vakio/state
defineRule("sync_state", {
whenChanged: ["mqtt/vakio/state"],
then: function (newValue) {
if (newValue === "on") {
dev["air_valve"]["Состояние"] = true;
} else if (newValue === "off") {
dev["air_valve"]["Состояние"] = false;
}
}
});
Добрый день!
Только живая проверка сможет точно ответить, работает ли данный скрипт.
Синтаксически ChatGPT пишет код верно, но его нужно всегда проверять на практике, чтобы убедиться в корректности работы.
Практика критерий истины. Через дней 5 буду дома, надеюсь восстановлю контроллер и попробую. )
Вообщем есть два клапана.Один выдает нормальные данные, другой чушь. По поводу скрипта. команды на клапан отрабатываются нормально. Но не могу получить значения температуры и влажности. В мктт эксплоере все видно. А в устройствах нет. И еще момент, почему во вкладке устройства все параметры по алфавиту, а не так как в скрипте?
нет, данный скрипт работать не будет, из-за ошибок синтаксиса
что бы параметры были как в скрипте можете добавить order: 0/1/2/3
trackMqtt("vakio/temp", function(message) {
log.info("name: {}, value: {}".format(message.topic, message.value));
dev["air_valve"]["Температура"] = message.value
});
trackMqtt("vakio/hud", function(message) {
log.info("name: {}, value: {}".format(message.topic, message.value));
dev["air_valve"]["Влажность"] = message.value
});
Товарищ Влад, спасибо, что помогаете. С порядком разобрался. Но температура не читается. Топик беру из МКТТ эксплоера, но этого мало, что то нужно еще добавить в путь.
А можете прислать полностью MQTT топик где хранится температура.
И попробывать что-то туда самостоятельно вписать, может он еще ни разу не публиковал ничего в топик температуры
Отлично! Замените топики по всем остальном правиле и все будет работать!
Когда двигаю ползунки в виртуальном устройстве, оно отвечает гудит, включается выключается
но обратно ничего не читается. Но понимаю почему.
вот код
defineVirtualDevice("air_valve", {
title: "Приточный клапан",
cells: {
"Состояние": {
type: "switch",
value: false,
order: 0
},
"Положение заслонки": {
type: "range",
value: 0,
max: 3,
order: 4
},
"Температура": {
type: "temperature",
value: 0,
order: 1
},
"Влажность": {
type: "rel_humidity",
value: 0,
order: 2
},
}
});
// Привязка температуры из топика vakio/temp
trackMqtt("VakioKivSmart_03B0/temp", function(message) {
log.info("name: {}, value: {}".format(message.topic, message.value));
dev["air_valve"]["Температура"] = message.value
});
// Привязка влажности из топика vakio/hud
trackMqtt("VakioKivSmart_03B0/hud", function(message) {
log.info("name: {}, value: {}".format(message.topic, message.value));
dev["air_valve"]["Влажность"] = message.value
});
// Отправка положения заслонки в топик vakio/gate
defineRule("update_gate_position", {
whenChanged: ["air_valve/Положение заслонки"],
then: function (newValue) {
publish("VakioKivSmart_03B0/workmode", "manual");
publish("VakioKivSmart_03B0/gate", newValue.toString());
}
});
// Управление состоянием устройства через топик vakio/state
defineRule("update_state", {
whenChanged: ["air_valve/Состояние"],
then: function (newValue) {
publish("VakioKivSmart_03B0/state", newValue ? "on" : "off");
}
});
// Синхронизация состояния устройства с топиком vakio/state
defineRule("sync_state", {
whenChanged: ["VakioKivSmart_03B0/state"],
then: function (newValue) {
if (newValue === "on") {
dev["air_valve"]["Состояние"] = true;
} else if (newValue === "off") {
dev["air_valve"]["Состояние"] = false;
}
}
});
Установил Нодеред. Он видит топики, шлет в Алису, даже шлет в виртуальные устройства и там показывает нормальные данные, но во вкладке устройства ВБ ничего не меняется. Скоро мозг лопнет.
Подредактировал модули ВБ в нодреде, стали приходить показания на виртуальные устройства. хоть чтото.
defineRule("sync_state", {
whenChanged: ["VakioKivSmart_03B0/state"],
then: function (newValue) {
if (newValue === "on") {
dev["air_valve"]["Состояние"] = true;
} else if (newValue === "off") {
dev["air_valve"]["Состояние"] = false;
}
}
});
Замените на:
trackMqtt("VakioKivSmart_03B0/state", function(message) {
dev["air_valve"]["Состояние"] = message.value == "on" ? true: false
});
я это вообще удалил. Теперь это делаю через нодред.
Резюмирую.
Все настройки клапана нужно делать при подключении к вайфай клапана.
Сбросить клапан - зажать на 8 секунд обе кнопки.
Топики в двух форматах.
vakio_2/workmode
vakio_2/state
vakio_2/gate
vakio_2/hud
vakio_2/hud
device/vakio_2/kivsmart/mode {
"capabilities": {
"mode": "manual",
"on_off": "on",
"gate": 1
}
}
Но прочитать данные не получилось штатными средствами, нодред в помощь.