Wirenboard and vakiokivsmart

Так ВБ я настраивал первый раз, сделал тестовый стенд (датчики, зигби, диммеры, реле), поигрался, получилось, немного набрался опыта. И решил, что обновлю, сброшу на заводские, и с учетом опыта уже начну делать нормально рабочий вариант. Я же не знал, что у ВБ проблемы со сбросом. )
По поводу вентклапана, техподдержка после долгих бесполезных обсуждений, все таки выдала, что этот клапан как опенэйр, только без команды “спиид”, к чему товарищ Волчков и сам пришел. И интегрироваться с ВБ они не собираются - делайте сами.

Пока техподдержка думает, что делать с моим зависшим контроллером, ЧатГПТ набросал код. Кто понимает, подскажите - верно ли он считывет данные из МКТТ топиков?

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
});

Товарищ Влад, спасибо, что помогаете. С порядком разобрался. Но температура не читается. Топик беру из МКТТ эксплоера, но этого мало, что то нужно еще добавить в путь.

1 Like

А можете прислать полностью MQTT топик где хранится температура.
И попробывать что-то туда самостоятельно вписать, может он еще ни разу не публиковал ничего в топик температуры


топик беру отсюда. Публиковать пробовал, меняется. В скрипте изменил вакио на вакиокивсмарт03В0

1 Like

Отлично! Замените топики по всем остальном правиле и все будет работать!

Когда двигаю ползунки в виртуальном устройстве, оно отвечает гудит, включается выключается
но обратно ничего не читается. Но понимаю почему.
вот код



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
});

я это вообще удалил. Теперь это делаю через нодред.

1 Like

Резюмирую.
Все настройки клапана нужно делать при подключении к вайфай клапана.
Сбросить клапан - зажать на 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
  }
}

Но прочитать данные не получилось штатными средствами, нодред в помощь.