WB-MRGBW-D maximum load and best practices

Добрый день!

I’m planning to use WB-MRGBW-D to control a 24V RGBW LED strip and would like to ask a few questions regarding itself as well as RGBW led dimming using the Wiren Board controller in general, please.

  1. I see that the driver is good for 5A at 48V per channel, which means the maximum power should be 240W per channel. What is the maximum LED strip length at 24V when the power consumption is 14W/m?
    Am I correct in thinking that the maximum power at 24V would be 120W per channel and thus this would be 4ch x 120W = 480W / 14W/m = 34.29m minus let’s say 15% for safety and efficiency? If yes, I should be good with a 480W power supply such as MW SDR-480-24 and 30 metres of the LED strip, correct?

  2. What is the maximum LED strip length you would recommend to power from one point in order to keep the voltage drop across the strip below let’s say 1V?

  3. Could you please advise what’s the greatest length of cable from the driver to the LED strip you would recommend under these conditions?
    I want to install the strip metres away from the distribution board and since sections of the strip will presumably have to be connected in parallel, I expect the length of the cable to reach about 5 – 20 metres which should result in a voltage drop across a 2.5mm2 (AWG 14) wire at 24V and 5A of about 0.4 – 1.6V, which is a lot, if my calculation is correct.

  4. For the reason above, I’ve been wondering whether it wouldn’t be better to bring 230V AC power all the way to the strip and then use a DMX512 driver. Do you have software support for DMX512? I found it mentioned in the documentation but apparently only in early revisions of the controller. I’m asking for DMX512 because I plan to use it for a light which already has a DMX512 interface and thus it would make things easier.

  5. Do you have software support for LED strips which allow you to control the colour temperature of white light using cold and warm LEDs? I believe these require two channels plus power, so essentially if I connected two such strips to the WB-MRGBW-D (one to RG and power, the other two BW and power), would it be difficult to control the colour temperature of each individually using a slider, for example?

Thank you!

Yes, your calculations are correct.
48 volts and 5 amps are absolute values. At 24 volts, the maximum power (per channel) will be 120 watts.
480/14 = ~ 40
If you take 35 meters of tape and a power supply, it will work.

https://www.prismlightinggroup.com/what-is-the-longest-run-length-of-led-flexible-strip-lighting/#:~:text=12V%20DC%20LED%20strip%20longest,is%20164ft%20(50%20meters).

But more details are described in the manufacturer’s datasheet for each brand.
If you need to connect the LED strip longer, then it is connected with wires to the dimmer.

On the front panel of the power supply there is a “VADJ” regulator and you can compensate for the drop on the wire. ±3 volt.
But a drop of only 1-2 volts will be imperceptible even without compensation.

The hardware RS-485 port supports the required operating speed of 250,000
Our users are successfully using the controller to transfer using Python scripts:

The required functionality can be described using JS scripts (wb-rules) in the controller.

1 симпатия

Thank you for your help!

This is perfect, I can’t believe I missed it.

I’ve seen tests in which a voltage drop of 2V resulted in about 30% reduction of luminous power and since this may also affect colour mixing in RGBW strips, I thought I’d rather play it safe as I have little experience. Good to know this shouldn’t be an issue either.

Just to make sure I understand you correctly, is it possible to extend the Wiren Board web interface and for example add another slider to control the white colour temperature here?

If yes, could you please point me to a tutorial, please (if there is one)? I’ve read your documentation on creating widgets but I’m not quite sure if that’s it.

Look at the instructions, you can google translate: https://sprut.ai/client/article/1761
Two options:

  • make a separate template for the dimmer + script
  • Make a separate script without changing the template.
    I will write an example script for the second option.
1 симпатия

Here is a sample script that creates a virtual device that allows you to change colors separately. You can add any logic (coefficients, ratios) between colors and brightness to it.
Describe what formula do you want to use to correct the color?

//01_12_test_01.js
var dimmNumber = "01" //name VIRTUAL device (this) #ChangeMe!#
var devDimmer = "wb-mrgbw-d_189" // For name REAL MRGBW-D device #ChangeMe!#

defineVirtualDevice(dimmNumber +"mrgbw-d", {
  title: dimmNumber +" MRGBW-D", //
  cells: {
    RLine : {
        type : "range",
        value : 0,
        max:255,
        readonly: false,
        order: 1,
    },
    GLine : {
        type : "range",
        value : 0,
        max:255,
        readonly: false,
        order: 2,
    },
    BLine : {
        type : "range",
        value : 0,
        max:255,
        readonly: false,
        order: 3,
    },
    WLine : {
        type : "range",
        value : 0,
        max:255,
        readonly: false,
        order: 4,
    },

  }
});

function changeSetting(){
  log.info("Enter function");
  stringRGB = dev[dimmNumber +"mrgbw-d/RLine"].toString() +";"+ dev[dimmNumber +"mrgbw-d/GLine"].toString() +";"+ dev[dimmNumber +"mrgbw-d/BLine"].toString();
  //log.info("stringRGB=",stringRGB);
  dev[devDimmer +"/RGB"] = stringRGB;
  dev[devDimmer +"/White"] = dev[dimmNumber +"mrgbw-d/WLine"];
}


defineRule( "RLine_change" ,{
  whenChanged: dimmNumber +"mrgbw-d/RLine",
  then: function (newValue, devName, cellName){
    //log.info("RLine changed", newValue)
    changeSetting();
  }
});

defineRule( "GLine_change" ,{
  whenChanged: dimmNumber +"mrgbw-d/GLine",
  then: function (newValue, devName, cellName){
    //log.info("GLine changed", newValue)
    changeSetting();
  }
});

defineRule( "BLine_change" ,{
  whenChanged: dimmNumber +"mrgbw-d/BLine",
  then: function (newValue, devName, cellName){
    //log.info("BLine changed", newValue)
    changeSetting();
  }
});

defineRule( "WLine_change" ,{
  whenChanged: dimmNumber +"mrgbw-d/WLine",
  then: function (newValue, devName, cellName){
    //log.info("WLine changed", newValue)
    changeSetting();
  }
});

1 симпатия

Thank you, I think I understand the principle now and it’s very neat!

So using the second approach, you create a virtual device which is essentially mapped to the original template and I can define the mapping however I want, right?

The ‘cells’ are then represented by sliders in a new control widget, the controller keeps watching for changes to the ‘virtual’ MQTT topics such as dimmNumber +"mrgbw-d/RLine" (whether by adjusting the slider or using another rule, I presume), and when there is a change, it uses changeSetting() with the new value to change the output via dev[devDimmer +"/RGB"] and dev[devDimmer +"/White"], which are the ‘physical’ MQTT topics for the dimmer as per the original template, if my understanding is correct (if it’s not, please correct me).

As for the formula, how do you mix the RGB colour and where is it defined? I presume you can’t simply send the sRGB values directly to the dimmer due to differences in human perception of light intensity based on the colour.

For my use case, I would have an LED strip with two data inputs – one for warm white, the other for cool white LEDs. This would be able to go from say 1800K white (WW at full brightness, CW off) to 6500K white (WW off, CW at full brightness). I understand that the relationship would not be linear, i.e. WW at 50% and CW at 50% would not make 4150K white, but for the sake of an easy example, let’s say I’d want to implement that and use the R and G channels. Could I achieve this by adding the following to your code?

colourTemp1 : {
    type : "range",
    value : 4150, // for neutral white
    min : 1800, // warm white
    max : 6500, // cool white
    readonly: false,
    order: 5,
},

_

defineRule("colourTemp1_change", {
  whenChanged: dimmNumber +"mrgbw-d/colourTemp1",
  then: function (newValue, devName, cellName) {
    coolWhite = Math.round((dev[dimmNumber +"mrgbw-d/colourTemp1"] - 1800) / 18,44);
    warmWhite = 255 - coolWhite;

    dev[dimmNumber +"mrgbw-d/RLine"] = coolWhite;
    dev[dimmNumber +"mrgbw-d/GLine"] = warmWhite;
  }
});

Thank you!