Skip to content

Instantly share code, notes, and snippets.

@thxthx0
Last active November 26, 2021 17:21
Show Gist options
  • Save thxthx0/ce7f72ea75ab82be2704c9536ea77bf7 to your computer and use it in GitHub Desktop.
Save thxthx0/ce7f72ea75ab82be2704c9536ea77bf7 to your computer and use it in GitHub Desktop.
Tasmota Script for WiFi-2Channel-Dimmer QS-WiFi-D02-2C or MS-105B-220
;WiFi-2CH-Dimmer v1.3
;QS-WiFi-D02-2C
;MS-105B
>D
sw1=0
sw2=0
x=0
cn1=0
cn2=0
tm1=0
tm2=0
h1=0
h2=0
t1=0
t2=0
sl1=0
sl2=0
di=""
pl=2
pu=10
dd1=0
dd2=0
mp=2.2
sp=2
ll=15
ul=95
dv1=70
dv2=70
p1=0
p2=0
>B
=>Counter1 0
=>Counter2 0
=>Baudrate 9600
=#sd1(dv1)
delay(1000)
=#sd1(0)
=#sd2(0)
>F
cn1=pc[1]
cn2=pc[2]
if chg[cn1]>0
then sw1=1
else sw1=0
endif
if chg[cn2]>0
then sw2=1
else sw2=0
endif
tm1+=1
tm2+=1
if sw1==0
and tm1>pl
and tm1<pu
then
t1^=1
if t1==1
then
=#sd1(dv1)
else
=#sd1(0)
endif
endif
if sw2==0
and tm2>pl
and tm2<pu
then
t2^=1
if t2==1
then
=#sd2(dv2)
else
=#sd2(0)
endif
endif
if sw1>0
then
if h1==0
then
dd1^=1
endif
if tm1>pu
then
h1=1
if t1>0
then
if dd1>0
then
dv1+=sp
if dv1>ul
then
dv1=ul
endif
=#sd1(dv1)
else
dv1-=sp
if dv1<ll
then
dv1=ll
endif
=#sd1(dv1)
endif
endif
endif
else
tm1=0
h1=0
endif
if sw2>0
then
if h2==0
then
dd2^=1
endif
if tm2>pu
then
h2=1
if t2>0
then
if dd2>0
then
dv2+=sp
if dv2>ul
then
dv2=ul
endif
=#sd2(dv2)
else
dv2-=sp
if dv2<ll
then
dv2=ll
endif
=#sd2(dv2)
endif
endif
endif
else
tm2=0
h2=0
endif
>E
sl1=Channel1
if chg[sl1]>0
then
if sl1>0
then
dv1=sl1
=#sd1(dv1)
else
t1=0
=#sd1(0)
endif
endif
sl2=Channel2
if chg[sl2]>0
then
if sl2>0
then
dv2=sl2
=#sd2(dv2)
else
t2=0
=#sd2(0)
endif
endif
p1=pwr[1]
if p1==1
then
t1=1
=#sd1(dv1)
else
t1=0
=#sd1(0)
endif
p2=pwr[2]
if p2==1
then
t2=1
=#sd2(dv2)
else
t2=0
=#sd2(0)
endif
#sd1(x)
di="FF5501"+hn(x*mp)+"0000000A"
=>SerialSend5 %di%
=>Channel1 %x%
#sd2(x)
di="FF550200"+hn(x*mp)+"00000A"
=>SerialSend5 %di%
=>Channel2 %x%
#
@adolfotregosa
Copy link

adolfotregosa commented Feb 3, 2020

Thank you for this. I'm almost there. I am missing the device template or pinout assignments. Can you help ?

thank you

EDIT:

Counter 1 GPIO13, counter 2 is GPIO5.

@thxthx0
Copy link
Author

thxthx0 commented Feb 4, 2020

thanks 👍 , updated above with info from:
arendst/Tasmota#5737 (comment)

@timaseth
Copy link

Hi There!
Struggling Noob here - I compiled the binary step by step per details on Tasmota wiki but upon navigating 'Configuration'>>, I see the usual suspects as option and no option to paste a script.
I am certain I am missing something very obvious - please guide.

image

image

@aceindy
Copy link

aceindy commented Feb 20, 2020

@amitseth13 I managed to get it compiled, and the DS01 (1 channel) works fine.
But on the 2 channel (DS02) only the 1st channel shows signs of live, 2nd channel is present, but shows wrong parameters (f.e. RGB ??)
I can send you the bins if you want?

@timaseth
Copy link

Thanks mate - much appreciate. That would start my tinkering, if nothing. Await your bins and thanks in advance!

@dannaren
Copy link

This works very well. My 2nd channel also shows the color temp output, but here however, voltage output will actually change in the desired manner for both outputs anyway. One thing I'm wondering; Are the dimmer max or dimmer range controlled by this script or the tasmota software? Because here, max output will only give 195volts out of 220. and so, I would like to crank it all the way up to 220.

@aceindy
Copy link

aceindy commented Feb 21, 2020

@timaseth
Copy link

timaseth commented Feb 23, 2020

@aceindy - Many thanks for point out the obvious. Just installed my first compile...EVER!

@maxela
Copy link

maxela commented Feb 27, 2020

@thxthx0 based on your script I have programmed a variant that dimms the light on and off softly. This prevents the lights from flashing shortly when you switch them on to a low value and they were dimmed to max the last time. I prefer a soft fade in and out anyway ;)

Here's my code: https://gist.github.com/maxela/64af0e0471aa59c1550b05d8c0d79802

@dondch
Copy link

dondch commented Mar 1, 2020

I have dual dimmer and tried several variant off scripts but what I've noticed is that I can not turn ON second switch via MQTT from Home Assistant, turning OFF works but not ON. Switch one both ON and OFF work fine from Home Assistant. Both switches work fine via web toggle button. Are you seeing same issue ?

@maxela
Copy link

maxela commented Mar 2, 2020

@dondch have you tried power1 on,
power1 off and power2 on, power2 off in tasmota console? I use OpenHAB and everything works fine via mqtt.

Do you use this template and option?

Template:
{"NAME":"2Chan-Dimmer","GPIO":[255,148,255,149,38,43,0,0,255,42,37,255,255],"FLAG":0,"BASE":18}

Console:
SetOption68 1

I use my variant of the script: https://gist.github.com/maxela/64af0e0471aa59c1550b05d8c0d79802

@aceindy
Copy link

aceindy commented Mar 4, 2020

@maxela,
I've exactly similar behavior on HomeAss, from tasmota control everything appears to be working fine, but from H.A. I can switch Off, but not On.
I also noted that :

  • channel 1 is mounted as a switch (on/off) instead of a dimmer (0-100)
  • channel 2 is mounted as a dimmer (0-100), but comes with color temperature setting (warm/cool)

I haven't dived deep yet into mqtt, but on device console I can see the commands coming through:
08:24:24 MQT: tasmota/stat/RESULT = {"POWER1":"OFF"}
08:24:24 MQT: tasmota/stat/POWER1 = OFF
08:24:25 MQT: tasmota/stat/RESULT = {"POWER2":"OFF"}
08:24:25 MQT: tasmota/stat/POWER2 = OFF
08:24:25 MQT: tasmota/tele/STATE = {"Time":"2020-03-

@dondch
Copy link

dondch commented Mar 4, 2020

I think there should be a way to modify the way tasmota reports configuration to Home Assistant but until someone figures that out I came up with a workaround in configuration.yaml:
(you might want to change names according to your configuration. "dualdimmer" bellow is MQTT topic name from tastmota configuration)

light:

  • platform: mqtt
    name: "dualdimmer_SW1"
    state_topic: "dualdimmer/stat/POWER1"
    command_topic: "dualdimmer/cmnd/POWER1"
    availability_topic: "dualdimmer/tele/LWT"
    brightness_state_topic: "dualdimmer/stat/RESULT"
    brightness_command_topic: "dualdimmer/cmnd/Channel1"
    brightness_scale: 100
    brightness_value_template: >
    {% if value_json.Channel1 is defined %}
    {{ value_json.Channel1 }}
    {% else %}
    {% if state_attr('light.dualdimmer_SW1','brightness') == none %}
    0
    {% else %}
    {{ state_attr('light.dualdimmer_SW1','brightness') / 255 * 100 }}
    {% endif %}
    {% endif %}
    qos: 1
    payload_on: "ON"
    payload_off: "OFF"
    payload_available: "Online"
    payload_not_available: "Offline"
    retain: false
  • platform: mqtt
    name: "dualdimmer_SW2"
    state_topic: "dualdimmer/stat/POWER2"
    command_topic: "dualdimmer/cmnd/POWER2"
    availability_topic: "dualdimmer/tele/LWT"
    brightness_state_topic: "dualdimmer/stat/RESULT"
    brightness_command_topic: "dualdimmer/cmnd/Channel2"
    brightness_scale: 100
    brightness_value_template: >
    {% if value_json.Channel2 is defined %}
    {{ value_json.Channel2 }}
    {% else %}
    {% if state_attr('light.dualdimmer_SW2','brightness') == none %}
    0
    {% else %}
    {{ state_attr('light.dualdimmer_SW2','brightness') / 255 * 100 }}
    {% endif %}
    {% endif %}
    qos: 1
    payload_on: "ON"
    payload_off: "OFF"
    payload_available: "Online"
    payload_not_available: "Offline"
    retain: false

@aceindy
Copy link

aceindy commented Mar 5, 2020

@dondch Awesome dude... looks like this works ;that is on mqtt console (at least no errors on either HA nor 2ch dimmer).
I only haven't actually connected a light on ch2 output (yet), but ch1 already worked, so I assume it’ll work on ch2 too;)

PS: SetOption19=0 so HA won’t use auto detect 😉

Thanks !!

@poezadri
Copy link

Hello,
first I want to apologize for my bad english (google translate),
I cannot configure this module "power1 ON" works but with the command "power2 ON" the console responds command unknow, same for channel1 and channel 2, the switches in S1 and S2 do not respond
Hope you can help me for info I have entered the script, the template and activated "Setoption68 1"
thank you in advance

@aceindy
Copy link

aceindy commented Mar 14, 2020

@poezadri Does the unit show correct options in it's webpage [http://<ip_of_2ch_dimmer>], and does the unit respond well on it?
image
The problem I had; it worked fine from the tasmoto webpage, but controling it from HomeAssistant was irratic (especially on the 2nd channel).
@dondch helped me fix it by providing me the idea of adding a mqtt based configuration, instead of using the 'auto-detect' (SetOption19=0) ;)

@poezadri
Copy link

thank you for your answer, and actually I had saved the template but not activated in configuration-> module configuration

@aceindy
Copy link

aceindy commented May 6, 2020

@dondch ,

Looks like there is one more 'glitch', the status of channel 1 and 2 are not updated on HA when operated by the manual switch :-/
Will try to fix it (or maybe you already did ??)

@casapleiadi
Copy link

casapleiadi commented May 7, 2020

Hello, I was able to install tasmota firmware and load the template but the device is not working. Looks like both lights are always on at 50% power. Unfortunately I am not capable of activate script, it is a must have to let the device work or it is just for the button functions?

I also noticed that after a few minutes the device loses its configuration and start over with the tasmota-xxxx thingy.

Any suggestions?

a place to download the tasmota bin with script activated for this dual dimmer would be awesome for noobs like me.

@maxela
Copy link

maxela commented May 8, 2020

@casapleiadi

Hello, I was able to install tasmota firmware and load the template but the device is not working. Looks like both lights are always on at 50% power. Unfortunately I am not capable of activate script, it is a must have to let the device work or it is just for the button functions?

It's required for both the button functions and mqtt.

I also noticed that after a few minutes the device loses its configuration and start over with the tasmota-xxxx thingy.

Do you use and activate this template and option?

Template:
{"NAME":"2Chan-Dimmer","GPIO":[255,148,255,149,38,43,0,0,255,42,37,255,255],"FLAG":0,"BASE":18}

Console:
SetOption68 1

The device should respond in the browser like in the post of @aceindy above https://gist.github.com/thxthx0/ce7f72ea75ab82be2704c9536ea77bf7#gistcomment-3212382

@aldii-hassio
Copy link

Only switch 2 works. Any help?

@aceindy
Copy link

aceindy commented May 21, 2020

@dondch ,

Looks like there is one more 'glitch', the status of channel 1 and 2 are not updated on HA when operated by the manual switch :-/
Will try to fix it (or maybe you already did ??)

Finally had the time to fix the 'glitch' that the status of channel 1 and 2 are not updated on HA when operated by the manual switch by using value_template See also HA documentation https://www.home-assistant.io/integrations/switch.mqtt/

Just replace

    state_topic: "dualdimmer/stat/POWER1"
by
    state_topic: "dualdimmer/stat/RESULT"
    value_template: '{{ value_json["POWER1"] }}'

And ofc the same for POWER2:

light:

- platform: mqtt
  name: "dualdimmer_SW1"
  state_topic: "dualdimmer/stat/RESULT"
  value_template: '{{ value_json["POWER1"] }}'
  command_topic: "dualdimmer/cmnd/POWER1"
  availability_topic: "dualdimmer/tele/LWT"
  brightness_state_topic: "dualdimmer/stat/RESULT"
  brightness_command_topic: "dualdimmer/cmnd/Channel1"
  brightness_scale: 100
  brightness_value_template: >
  {% if value_json.Channel1 is defined %}
  {{ value_json.Channel1 }}
  {% else %}
  {% if state_attr('light.dualdimmer_SW1','brightness') == none %}
  0
  {% else %}
  {{ state_attr('light.dualdimmer_SW1','brightness') / 255 * 100 }}
  {% endif %}
  {% endif %}
  qos: 1
  payload_on: "ON"
  payload_off: "OFF"
  payload_available: "Online"
  payload_not_available: "Offline"
  retain: false
- platform: mqtt
  name: "dualdimmer_SW2"
  state_topic: "dualdimmer/stat/RESULT"
  value_template: '{{ value_json["POWER2"] }}'
  command_topic: "dualdimmer/cmnd/POWER2"
  availability_topic: "dualdimmer/tele/LWT"
  brightness_state_topic: "dualdimmer/stat/RESULT"
  brightness_command_topic: "dualdimmer/cmnd/Channel2"
  brightness_scale: 100
  brightness_value_template: >
  {% if value_json.Channel2 is defined %}
  {{ value_json.Channel2 }}
  {% else %}
  {% if state_attr('light.dualdimmer_SW2','brightness') == none %}
  0
  {% else %}
  {{ state_attr('light.dualdimmer_SW2','brightness') / 255 * 100 }}
  {% endif %}
  {% endif %}
  qos: 1
  payload_on: "ON"
  payload_off: "OFF"
  payload_available: "Online"
  payload_not_available: "Offline"
  retain: false

@casapleiadi
Copy link

casapleiadi commented Jun 14, 2020

Great job, the devices (I have multiple) works fine on tasmota consolle. I am using node-red instead of HA, I can switch the lights on and off but can't control dimmers, can you please tell me the MQTT command (or the console command) to dim Channel1 ans channel2? thanks!

@aceindy
Copy link

aceindy commented Jun 14, 2020

Hmm..I also use node red (within HA), but not with MQTT.
(Or did I misunderstand, and you use MQTT only and no HA at all??)

In case you do use HA, I use a 'fixed' brightness here, I'm sure you'll find a way to adapt it.
image

https://pastebin.com/iRNVhmmU

I also tinkered a while ago with a softstarter

@yuraivan
Copy link

yuraivan commented Jul 7, 2020

Hello everyone!!!! I did everything according instruction.I have entered the script, the template and activated "Setoption68 1". In web interface I see all correct. Toggle 1 and 2 are working but my lamps not light(((((( What is the problem???

@yuraivan
Copy link

yuraivan commented Jul 8, 2020

Hello everyone!!!! I did everything according instruction.I have entered the script, the template and activated "Setoption68 1". In web interface I see all correct. Toggle 1 and 2 are working but my lamps not light(((((( What is the problem???

Sorry for this moment lamp lights everytime and dont turn off. In console I see turn on and off process

@SimasVejas
Copy link

This thread is probably dead but I will try.
I've successfully flashed LM1 chip with script enabled firmware. I've pasted the script and enabled Setoption 1. Everything looks ok in Tasmota. I can see two toggles for both channels, both sliders for dimming and two counters.
My problem - my lamps are always off despite of the status in tasmota. I've tried checking corresponding channels with multimeter and one of them reports ~10V when the lamp is on or off, and the other one is always 0. Using push button also doesn't work. If I push the button toggle status doesn't change and only the counter increases.
I've tried script in this thread and script available here - https://gist.github.com/maxela/64af0e0471aa59c1550b05d8c0d79802
Maybe I did something wrong? Any help would be appreciated...
Thank you!

@maxela
Copy link

maxela commented Sep 1, 2021

This thread is probably dead but I will try

There’s not much happening in this thread, but I get notified and usually I try to help.

Which device and which version of the tasmota firmware are you using?

@SimasVejas
Copy link

SimasVejas commented Sep 1, 2021

Hi, @maxela, thanks for a quick reply!

At first glance it looks like I'm using the same two channel dimmer that is displayed in this thread with LM1 chip but my version might be a bit different. I will attach a photo of the insides when I get back home from work.
I'm not 100% sure but I believe it was 9.5.

20210901_201115

@aceindy
Copy link

aceindy commented Sep 3, 2021

Just for info, i moved to esphome with this 2ch dimmer unit, it works a lot smoother.
https://community.home-assistant.io/t/qs-wifi-d01-triac-dimmer/149811/25?u=aceindy

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment