WB-MRGBW-D управление отдельно 4я каналами

доброго времени, при подключение диммера штатно

На сайте указано что можно отдельно (не зависимо) управлять каждым каналом, то есть можно подключить отдельно четыре белых ленты. как переделать окно, что бы на каждый канал был свой ползунок. Спасибо. Возможно стоить добавить это возможность в штатную сборку?

Добрый день, SAA!
Создайте свой шаблон для диммера, где один RGB-канал (показан красным),
замените тремя, по образу белого (показан зеленым).
Измените тип устройства и имя файла, чтобы при обновлении он не затерся, а вы имели бы возможность выбирать разные шаблоны для диммера: с RGB и с отдельными каналами:

Статья вам в помощь:
https://wirenboard.com/wiki/index.php/Драйвер_wb-mqtt-serial:Примеры_написания_шаблонов

Доброго времени. Поправил шаблон, получилось config-wb-mwwww-d.json (2.4 КБ)

%D0%B4%D0%B8%D0%BC%D0%BC%D0%B5%D1%80-wwww

Ползунок управляет каждый своим каналом. Но Button 1 и 2 по прежнему управляют сразу тремя каналами RBG Возможно ли переназначить их и сделать что бы каждая кнопка управляла своим каналом, как это реализовано на Button 3 и канал W. Спасибо.

1 лайк

SAA, добрый день!
Замечательно. Логика работы кнопок настроена в микропрограмме модуля, так что поменять ее не получится. Вы можете отвязать входы (через соответствующие регистры) и делать свое управление на движке правил. Единственно, скорость управления будет не очень большая, поскольку состояние кнопок считывается по Modbus не мгновенно. Можно ориентироваться на увеличение счетчика нажатий.

Хорошо, тогда прошу подсказать следующее.
В статье https://wirenboard.com/wiki/index.php/Relay_Module_Modbus_Management говориться, что у цифровых выходов есть 3 режима. А в карте димера https://wirenboard.com/wiki/index.php/WB_Dimmers_Modbus_Registers_Map описано только два режима. Для данного димера значение 1 это выключено или работа с клавишами фиксации?
А в статье https://wirenboard.com/wiki/index.php/WB-MRGBW-D говориться, что в HOLDING_REGISTER по адресу 5 необходимо записать число 255 (0xFF) для отключения управления кнопками.

И из этих статей, для меня не совсем понятно. Если я выставляю значение 1, то это правило действует на все цифровые выходы? или возможно задавать параметры для каждого выхода? Или вообще надо указать 255?

Спасибо.

SAA, коротко: регистр 5: 0 – кнопки работают как клавиши без фиксации, 1 – все кнопки не работают. Отдельно управлять входами нельзя.

Первая ваша ссылка относится к релейным модулям, не к диммерам. В статье про диммер осталась старая информация: спасибо большое, поправил.

Доброго времени, удачно получилось отвязать цифровые выходы. При написании правил за пример был взят шаблон правил

     defineRule("switch", { //название правила
         whenChanged: "WB-MRGBW-D-1/Button 1", //при изменении состояния кнопки выключателя
            then: function (newValue, devName, cellName) { //выполняй следующие действия
            dev["WB-MRGBW-D-1"]["White 1-B"] = newValue ; //установи Реле 1 контроллера
     }
     }); 

Пример взят из работы реле. Если устройство в штатном режиме управлялось клавишами без фиксации, то данное правило работает как правило для клавиши с фиксация. То есть пока мы держим нажатой физическую кнопку, устройство срабатывает, после отпускания клавиши, значение Button 1 меняется и происходит переключение. :cold_sweat::cold_sweat:
Второй момент, так как это правило из реле, реле как я понимаю может быть в двух положения включено и выключено, у димера скорей всего есть целый диапазон значений от 0-225.

Прошу помочь, подсказать, где прочитать…

  1. как сделать работу клавиши без фиксации
  2. как дать нагрузку на канал 1 после нажатия клавиши без фиксации
  3. и самый наверное сложный, при данной схеме работы вообще возможно димировать лету?

Спасибо.

Ну сам пока начну отвечать на свои вопросы )))

Правило работает если у нас выключатель с фиксацией

defineRule("switch", {                                                          //название правила
     whenChanged: "WB-MRGBW-D-1/Button 1",                //при изменении состояния кнопки выключателя
        then: function (newValue, devName, cellName) {       //выполняй следующие действия
        dev["WB-MRGBW-D-1"]["White 1-B"] = 200 ;             //включить Реле 1 контроллера на 200 (включить реле)
 }
 }); 

Возможно тут не надо и/или не используется значение newValue?

Если выключатель без фиксации то работает правило.

 defineRule("switch", { 											//название правила
     whenChanged: "WB-MRGBW-D-1/Button 1 counter", 					//при изменении состояния кнопки выключателя
        then: function (newValue, devName, cellName) {     			//выполняй следующие действия
			if (dev["WB-MRGBW-D-1"]["White 1-B"] == 0) { 			//если значение White 1-B = 0 (реле выключено)
        		dev["WB-MRGBW-D-1"]["White 1-B"] = 200 ;			//включить Реле 1 контроллера на 200 (включить реле)
            	} else {											//если значение White 1-B > 0 (реле включено)
              		dev["WB-MRGBW-D-1"]["White 1-B"] = 0 ; 			//включить Реле 1 контроллера на 0 (выключить реле)
            			}
 }
 });

Надо подумать как димер реализовать?

Поправили шаблон, как описано в этой теме, но все равно отображается RGB с выбором цвета.
Подскажите, как убрать RGB, чтобы остались только ползунки?

2019-06-21_183214

Добрый день!
А вы старый канал (который с "type": "rgb") удалили? Если да, то service wb-mqtt-serial restart и mqtt-delete-retained с правильными параметрами должны помочь. И страницу перезагрузить по Ctrl+R

1 лайк

Изначально делали, и это не сработало:
mqtt-delete-retained '/devices/wb-mrgb_11/controls/RGB

Помогло:
mqtt-delete-retained '/devices/wb-mrgb_11/controls/#

Спасибо!

1 лайк

Чуть выше лежит исправленный шаблон. Надо по аналогии у вас поправить. Ну и при применении нового шаблона, надо замереть старое устройство. Вроде так.

A post was split to a new topic: Странное поведение ленты при включении

Вот пример диммирования одного канала кнопкой, подключенной к A1_IN контроллера.

var DEVICE = "wb-mrgbw-d_63";
var CONTROL = "White 1-B";
var STEP_VALUE = 6;
var MIN_VALUE = 12;
var MAX_VALUE = 255;

var levelUp = true;
var holdTimer = null;
var changeInterval = null;
var valueBeenChanged = false; // яркость была изменена в промежутке между нажатием и отпусканием кнопки
var lastLevel = MAX_VALUE;

defineRule("my_test_rule", {
  whenChanged: "wb-gpio/A1_IN",
  then: function(newValue, devName, cellName) {
    if (newValue) {
      // кнопка нажата
      if (dev[DEVICE][CONTROL] == 0) {
        // если лампа выключена
        // установить ей предыдущее значение (до выключения)
        dev[DEVICE][CONTROL] = lastLevel
        valueBeenChanged = true
        if (lastLevel < MAX_VALUE) {
          levelUp = true;  
  		  log.info('level up', dev[DEVICE][CONTROL]);
        } else {
          levelUp = false;
          log.info('level down');
        }
      }
      
	  holdTimer = setTimeout(function() {
        // если кнопка все еще нажата
        var up = levelUp;	// запомним направление изменения яркости
        levelUp = !levelUp; // при следующем нажатии направление изменения яркости будет другим
        changeInterval = setInterval(function() {
          if (up) {
            newValue = dev[DEVICE][CONTROL] + STEP_VALUE;
          	newValue = newValue > MAX_VALUE ? MAX_VALUE : newValue;
          } else {
           	newValue = dev[DEVICE][CONTROL] - STEP_VALUE;
            newValue = newValue < MIN_VALUE ? MIN_VALUE : newValue;
          }
          
          if (dev[DEVICE][CONTROL] != newValue) {
            dev[DEVICE][CONTROL] = newValue;
          }
          
          valueBeenChanged = true;
        }, 150);
      }, 500);
    } else {
      // кнопка отпущена
	  clearTimeout(holdTimer);
      if (changeInterval) {
	    clearInterval(changeInterval);
      }

      if (!valueBeenChanged && dev[DEVICE][CONTROL] > 0) {
        lastLevel = dev[DEVICE][CONTROL];
        dev[DEVICE][CONTROL] = 0;
      }
      
      valueBeenChanged = false;
    }
  }
});

Т.е. можно использовать внешние кнопки для диммирования каналов R,G,B по такуму же принципу, как кнопка 3 диммирует белый канал.

2 лайка

Что в итоге? Удалось реализовать управление 4 разными лентами с 4-х разных кнопок через один этот модуль?

А в чем проблема? Вроде весь процесс описан.

ретроспектива ) не вылезло ли каких косяков и т.д.
за шаблон спасибо

1 лайк

Пока все в процессе, но собирал тестовый стенд и работало

А ведь можно получить автономный диммер взяв только 2 канала: белый и один из RGB, например Red (Green и Blue - оставляем не подключенными). В таком случае кнопка b1 - управляет яркостью Red, а кнопка b3 - яркостью White. Подключил и проверил. b1 никак не влияет на канал W. b3 - не влияет на каналы RGB. Все правильно?
И остался вопрос: скорость диммирования будет в этом случае разная у двух указанных каналов?(еще не получилось подключить ленту для проверки этого).
Так мы получим двухканальный диммер с прямым управлением кнопками.

Итак, отвечу на свой вопрос: проверил скорость изменения яркости по каналу Blue и White (т.е. время, за которое яркость от максимальной изменяется до минимальной и наоборот при удержании кнопок 1 и 3). Получилось, что по каналу Blue врем составило около 2 сек, а по каналу White около 4 сек. Как сделать одинаковую скорость? Она прописана во внутреннем ПО диммера и не меняется?

1 лайк