WB-MAO4: управление LED. Пример функции

Добрый день.
Прошу поделиться примером функции для WB-MAO4.

Дано: LED лента + диммируемый БП Arlight ARPV-UH24150-PFC-0-10V + WB-MAO4 + кнопочный выключатель (без фиксации) + я не разработчик (пока). Сейчас подключен согласно схеме

Задача: настроить включение\выключение led ленты по однократному нажатию и диммирование по длинному нажатию.

Пытаюсь использовать модуль для кнопок: https://github.com/bthos/wb-multi-action-button-module , но с функцией проблемы - прошу помочь или подсказать где посмотреть пример функции для WB-MAO4.

Отдельный вопрос: после подключения модуля по схеме: LED вроде управляется через web интерфейс WB, но почему-то с инверсией: значение 0 - максимальная яркость LED, значение 10000 - минимальная яркость LED. При этом свечение светодиодов на значении 10000 все равно присутствует (то есть какое-то питание на LED все равно приходит). Не очень понимаю как выключать LED совсем и нормально ли такое поведение в принципе.

Добрый день.

Немного непонятно что делаете что ожидаете и что происходит.
Посмотрите пример тут: Нестандартные функции выключателей - #6 от пользователя BrainRoot

Подключено наоборот?
Давайте проверим, правильно ли модуль MAO4 работает: Измерьте напряжение на выходе, на клемме “1” относитьельно Gnd. При минимальном значении движка - должно быть около нуля, при максимальном - около 10 вольт.

Спасибо, проверю. Возможно, электрик перепутал

Прошу простить за “многобукв”. Попробую сформулировать.
Ожидания следующие:

  1. Однократное нажатие кнопки либо включает LED на максимальную яркость (10000) либо выключает LED ленту (0).
    Ожидал, что значение 0 означает полное отсутствие питания, но по факту это не так и есть минимальное свечение LED ленты. Возможно ли как-то полностью выключать LED ленту не понятно. На сколько я понимаю, модуль WB-MAO4 как реле не работает и функцию из примера (wb-multi-action-button-module/rules_Buttons.js at main · bthos/wb-multi-action-button-module · GitHub) типа такой:
Спойлер

function switchRelay(device, control) {
dev[device+“/”+control] = !dev[device + “/” + control];

room.ActionButtons.onButtonPress(
“wb-gpio/EXT1_IN1”,
{
singlePress: {
func: switchRelay,
prop: [“wb-mr6c_33”, “K1”]

не прикрутить. Могу ошибаться, но у меня не получилось - я не программист и пока тяжело).
Поэтому и прошу пример хэлппер-функции с параметрами которые можно передавать именно для WB-MAO4.

  1. Длинное нажатие кнопки диммирует LED ленту. Тоже не понимаю как написать хэллпер-функцию и какие параметры передавать. В примерах хэллпер-функций , которые описаны тут: wb-multi-action-button-module/rules_Buttons.js at main · bthos/wb-multi-action-button-module · GitHub есть только реле (вкл.\выкл.) и RGB. Адаптировать к WB-MAO4 не выходит.

Будет ли работать функция из Вашего примера для WB-MAO4?

Спойлер

defineVirtualDevice(“dimmer”, {
title: “dimmer control”,
cells: {
change: {
type: “switch”,
value: false
},
value: {
type: “value”,
value: 0
},
saved: {
type: “value”,
value: 255
},
}
});

var dirct = false;
var lastdirct = false;
var timerLast;
var timerTime;

defineRule(“startClicking”, {
asSoonAs: function() {
return dev[“dimmer/change”];
},
then: function() {
if (dev[“dimmer/value”] == 255) {
dirct = false;
} else if (dev[“dimmer/value”] == 0) {
dirct = true;
} else {
dirct = !lastdirct;
}
startTicker(“clickTimer”, 300);
}
});

defineRule(“stopClicking”, {
asSoonAs: function() {
return !dev[“dimmer/change”];
},
then: function() {
timers.clickTimer.stop();
}
});

defineRule(“doClick”, {
when: function() {
return timers.clickTimer.firing;
},
then: function() {

    if (dirct) {
        if (dev["dimmer/value"] >= 250) {
            dev["dimmer/value"] = 255;
        } else {
            dev["dimmer/value"] = ((dev["dimmer/value"] * 1) + 10).toFixed(0);
        }
    } else {
        if (dev["dimmer/value"] <= 10) {
            dev["dimmer/value"] = 0;
        } else {
            dev["dimmer/value"] = ((dev["dimmer/value"] * 1) - 10).toFixed(0);
        }
    }
}

});

defineRule(“long_press”, {
whenChanged: “wb-gpio/A1_OUT”,
then: function(newValue, devName, cellName) {
if (newValue) {
timerLast = Date.now();
dev[“dimmer/change”] = true;
} else {
dev[“dimmer/change”] = false;
timerTime = Date.now();
if ((timerTime - timerLast) <= 1000) {
if (dev[“dimmer/value”] > 0) {
dev[“dimmer/saved”] = dev[“dimmer/value”];
dev[“dimmer/value”] = 0;
} else {
dev[“dimmer/value”] = dev[“dimmer/saved”];
}
log(“Было короткое нажатие”);
} else if ((timerTime - timerLast) >= 1000) {
lastdirct = dirct;
log(“было длинное нажатие”);
}
}
}
});

На сколько я понимаю, она решает все мои потребности: и вкл.\выкл и диммирование.

У MAO4 функция - выдавать напряжение от 0 до 10 вольт, как именно интерпретируется это напряжение - зависит от управляемого устройства.

Для MAO4 единиственное значение которым можно управлять - уровень выходоного напряжения. То есть “выключение” так:

dev["wb-mao4_111/Channel 1"] = 0;

Да, должна, совершенно тот же принцип.
Но - в MAO4 не реализована аппаратная поддержка различения нажатий, если будет много устройств на шине и их входы будут опрашиваться редко - возникнет вероятность пропуска коротких нажатий.

Может быть имеет смысл читать нажатия аппаратным модулем? Примеры правил — Wiren Board

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.