[Withdrawn] HomeSeer HS-WD200+ Dimmer Driver

@codahq

i'm running into a potential error i wanted to flag when trying to create rules for linking different types of switches together as a single "group" so that dimming performed on one switch/circuit is synced up between multiple sets of lights.

i'm using the action commands "stopLevelChange" and "startLevelChange" in my rules and it works on 2 of the 3 dimmer types in my house.

your driver doesn't seem to support these commands BUT the default driver within hubitat DOES have them. can you look at porting them into your base code and/or let me know how i can get to the driver code for the one that comes preinstalled in HE so i can take a look?

I'm new to HE and am currently just trying to see how to best configure multiple lights/dimmers to be in sync and also controllable by pico remotes - any advice would be much appreciated!

thanks

Yeah, I can. I haven't circled back around to this driver yet but I will eventually.

Has anyone gotten RM4 to work with the LEDs? I am struggling to get it to work with any driver. At the moment, I have the 200+ driver (from this thread) installed.

Either driver works under RM2.5.

The first thing is just to get it working, but then I also am looking to considate something like 17 or 18 rules (v2.5) to control one switch. I want to add more switches, hence the catalyst to reduce the rules.

The reason for so many rules is the number of variables I am tracking.

  1. Switch itself on or off
  2. HSM status (disarmed vs any armed state)
  3. Any doors/windows open (turn on an LED) else off
  4. A Master lighting override control enabled, turn an LED on, else off,
    plus two more similar to # 3 and 4.

Currently it is 1 rule that checks everything is off (switch, HSM and all tracker/overrides) and then the rule is (0,0,0).
1 rule that checks switch off but HSM armed, and that is (8,1,0)
Then one rule each that iterates through each variable, So A, B, C true, D false and A, B True, C, D false, etc. This is where it really explodes as I have 6 variables creating a lot of configurations. Feels like this should be able to be done on 1 rule in RM4. But I can not even get the switch controlled in RM4.

Any advise?

In general, I've not had any problems with it but there were some people (at the top of this discussion) that has some difficulties either using the wrong parameter type or Hubitat passing slightly differ types of ints (aka BigInteger) to the driver commands. What version of HE are you on? What parameter type are you passing the driver?

As to the rest of your questions about consolidating and best practice, that might be best asked in another thread for visibility. There are the Inovelli switches that also do basically the same status LED concept as the HomeSeer switches/dimmers. There may be somebody else facing or having already solved your question that won't see this thread because they use Inovelli.

Personally, I do it mostly in one rule with multiple conditions and then conditional if/else actions.

To review your questions; c4 hub, patched to latest version, integer parameter. :grinning:. Not sure why RM4 will not work for me. Back to the drawing board I guess.

If you haven't already you might post about RM4 in one of the other sections so that you might get some suggestions on how to fix it.

This may have been answered but in case it hasn't....

The LED's can be controlled by a Custom Command created in RM4. A custom function (for this device) essentially calls a function from the driver. For the HS-WD200+ the function is:

setStatusLED(string1, string2, string3)
Where:
string1 = the LED number
string2 = the color (0 will turn it off)
string3: 0 = on solid, 1 = blinking

There is a difference between the codehq driver and the internal driver.

One is setStatusLED and the other is setStatusLed

John

here is the backend when setting it up.. this action blinks the bottom LEDs red

RM shouldn't be seeing two commands for setStatusLed. There is just one on the driver and for me it shows like this in RM (with lowercase 'Led'):

I made some new changes:

1.0.4 2020-01-16

  • Fixed the delay between for single and double tap events @joe.roback
  • Added preference to not let setStatusLed to manage switch mode. If not used carefully this can conflict with bottom status on when load off or the setStatusLed command. However, it lets a user hide load when no status LEDs are set @JohnRob
  • Fixed firmware reporting for new Hubitat command classes
  • Made manufacturer an int and added manufacturer name
  • Fixed fingerprint hopefully

The background behind the new preference can be found here.

@mike12 I just finished a bunch of changes to the driver and I did not put in start or stop level changing commands. I don't see this supported directly by the hardware so I would have had to do it in software.

The only way I could think to do it would be to set the ramp rate to change very slowly, then schedule set levels. When it stopped I would have to restore the previous ramp rate. I didn't want to implement this in case there is a better way and because I was worried that the previous ramp could potentially get lost.

Maybe if you message Mike Maxwell he'll give you a hint on how he implemented it.

I am seeing the below error and thought it started when I went from the internal driver to yours. I could be mistaken though.

dev:20912020-01-18 04:31:46.592 pm errorgroovy.lang.MissingMethodException: No signature of method: user_driver_codahq_hubitat_HS_WD200__Dimmer_2716.setStatusLed() is applicable for argument types: (java.lang.String, java.lang.String, java.lang.String) values: [6, 3, 0]

That means that Mike implemented the internal driver with String parameters and you have RM setup to pass String parameter types. I'm not sure how I feel about that. On the one hand, I feel like people should be able to switch back and forth between the two drivers. On the other hand, I feel like my implementation is correct. Those parameters are definitely numbers.

You would have redo the action in the rules to pass numbers as parameters instead of Strings.

Here's what I'll do... I'll add an overloaded method that takes Strings and calls the other one. Give me five minutes.

1 Like

Related but a little different. I am on the version of the driver before your update today. I finally got it working, honestly not sure what it took. I know there are notes about having to initialize it first. I had been doing that. I did again, with 8,1,0. I found that this was sort of remembered. So as I went back and forth playing with the device in my rules, if I did something like 1,2,0 then back to off, it would go back to 8,1,0. Eventually I initialized it again with 0,0,0. That works. Note I only find it working if I intetionally call SetNormal and SetMode (abbreviated)

Ok, so as you can see I am trying to control individual LEDs.

If the light is on, or off and hsm disarmed, and 2 contacts and 2 other switches, then SetSwitchModeNormal (all LEDs normal). But if HSM is not disarmed, then SetStatusLed 8,1,0-all red. If Contact1 open then 1,2,0. If Contact2 open then 5,6,0. If Switch2 On, then 3,4,0 and finally If Switch3 On, then 7,3,0.

The challenge I am having is my rule keeps skipping.

This is the current state of the rule:

IF (FR Deck(off) is on(F)  OR 
(	FR Deck, Thermostat Override, Master Lights Override(off, off, off) all is off(T)  AND 
	Thermo: Doors / Windows Open, Alarm: Windows / Doors Open all closed(T)  AND 
	HSM status is Disarmed(T)
) [TRUE]) THEN
	setSwitchModeNormal() on FR Deck
ELSE-IF (NOT HSM status is Disarmed(T) [FALSE]) THEN
	setSwitchModeNormal() on FR Deck
	Delay 0:00:05
	setSwitchModeStatus() on FR Deck
	setStatusLed(0, 1, 0) on FR Deck
END-IF
IF (Alarm: Windows / Doors Open open(F) [FALSE]) THEN
	setSwitchModeNormal() on FR Deck
	Delay 0:00:05
	setSwitchModeStatus() on FR Deck
	setStatusLed(1, 2, 0) on FR Deck
END-IF
IF (Thermo: Doors / Windows Open open(F) [FALSE]) THEN
	setSwitchModeNormal() on FR Deck
	Delay 0:00:05
	setSwitchModeStatus() on FR Deck
	setStatusLed(5, 6, 0) on FR Deck

This results in this log:
Action: setStatusLed(5, 6, 0) on FR Deck (skipped)

When I opened contact1 or contact2

However, this worked before I built the last If section...

IF (FR Deck(off) is on(F)  OR 
(	FR Deck, Thermostat Override, Master Lights Override(off, off, off) all is off(T)  AND 
	Thermo: Doors / Windows Open, Alarm: Windows / Doors Open all closed(F)  AND 
	HSM status is Disarmed(T)
) [FALSE]) THEN
	setSwitchModeNormal() on FR Deck
ELSE-IF (NOT HSM status is Disarmed(T) [FALSE]) THEN
	setSwitchModeNormal() on FR Deck
	Delay 0:00:05
	setSwitchModeStatus() on FR Deck
	setStatusLed(0, 1, 0) on FR Deck
END-IF
IF (Alarm: Windows / Doors Open open(T) [TRUE]) THEN
	setSwitchModeNormal() on FR Deck
	Delay 0:00:05
	setSwitchModeStatus() on FR Deck
	setStatusLed(1, 2, 0) on FR Deck
END-IF

Log:
Action: setStatusLed(1, 2, 0) on FR Deck

I am really trying to write this as one rule, and remember I still have to step through 2 more light switches. I need the last 4 items; 2 contacts and 2 switches to stack. Such that if contact1 is open and switch3 is on, it would send SetStatusLeds 1,2,0 AND 7,3,0.

Any ideas why my rule skips?

There's a new committed version with an extra method for setStatusLed that takes Strings. Please try it and let me know.

Sure, it skipped because that condition is false. This is a RM question and doesn't really have anything to do with this driver. I would check to make sure you have all of those if conditions as triggers. Make sure you don't really mean to put them all in IF (one is ELSE-IF). Make sure you end them all correctly (END-IF).

If you still aren't getting what you expect open a thread in the RM section so this can get the exposure/help it needs.

By the way, if you are using this driver then you shouldn't have to set the mode of the switch. The driver sets it for you (unless you have the new preference turned on). I don't set the mode and I have rules that work just fine. One of them is posted above. I don't set individual lights but it's the same thing to the driver. It's just one parameter. On true I set some LEDs and on false I set them to off. The switch goes in between status and normal mode on its own.

1 Like

Thanks so much :slight_smile: I tried the LED status and it worked just like I needed.

And I'm not getting the java exception error.

Awesome !!

John

Yeah, thanks. All conditions where right when I was really testing it. I might have cut a corner or two trying to get this post written.

All 3 switches, 2 contacts and HSM are in conditions as 'changed'.

HSM status becomes *changed*
Thermo: Doors / Windows Open, Alarm: Windows / Doors Open any *changed*
FR Deck, Thermostat Override, Master Lights Override(off, off, off) any turns *changed*

I rebuilt it, adding the second condition as follows:

IF (FR Deck(off) is on(F)  OR 
(	FR Deck, Thermostat Override, Master Lights Override(off, off, off) all is off(T)  AND 
	Thermo: Doors / Windows Open, Alarm: Windows / Doors Open all closed(F)  AND 
	HSM status is Disarmed(T)
) [FALSE]) THEN
	setSwitchModeNormal() on FR Deck
ELSE-IF (NOT HSM status is Disarmed(T) [FALSE]) THEN
	setSwitchModeNormal() on FR Deck
	Delay 0:00:05
	setSwitchModeStatus() on FR Deck
	setStatusLed(0, 1, 0) on FR Deck
END-IF
IF (Alarm: Windows / Doors Open open(F) [FALSE]) THEN
	setSwitchModeNormal() on FR Deck
	Delay 0:00:05
	setSwitchModeStatus() on FR Deck
	setStatusLed(1, 2, 0) on FR Deck
END-IF
IF (Thermo: Doors / Windows Open open(T) [TRUE]) THEN
	setSwitchModeNormal() on FR Deck
	Delay 0:00:05
	setSwitchModeStatus() on FR Deck
	setStatusLed(5, 6, 0) on FR Deck
END-IF

This version has the conditions accurate to this log:

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:54.612 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: END-IF

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:54.562 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: setStatusLed(5, 6, 0) on FR Deck

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:54.514 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: setSwitchModeStatus() on FR Deck

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:54.437 pm [info](http://192.168.87.225/installedapp/configure/1408)Delay Over: Delay 0:00:05

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:49.172 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: Delay 0:00:05

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:48.997 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: setSwitchModeNormal() on FR Deck

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:48.975 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: IF (Thermo: Doors / Windows Open open(T) [TRUE]) THEN

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:48.909 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: END-IF

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:48.907 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: setStatusLed(1, 2, 0) on FR Deck (skipped)

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:48.897 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: setSwitchModeStatus() on FR Deck (skipped)

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:48.885 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: Delay 0:00:05 (skipped)

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:48.877 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: setSwitchModeNormal() on FR Deck (skipped)

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:48.852 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: IF (Alarm: Windows / Doors Open open(F) [FALSE]) THEN (skipping)

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:48.764 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: END-IF

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:48.710 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: setStatusLed(0, 1, 0) on FR Deck (skipped)

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:48.704 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: setSwitchModeStatus() on FR Deck (skipped)

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:48.601 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: Delay 0:00:05 (skipped)

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:48.596 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: setSwitchModeNormal() on FR Deck (skipped)

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:48.588 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: ELSE-IF (NOT HSM status is Disarmed(T) [FALSE]) THEN (skipping)

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:48.099 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: setSwitchModeNormal() on FR Deck (skipped)

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:48.078 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: IF (FR Deck(off) is on(F) OR ( FR Deck, Thermostat Override, Master Lights Override(off, off, off) all is off(T) AND Thermo: Doors / Windows Open, Alarm: Windows / Doors Open all closed(F) AND HSM status is Disarmed(T) ) [FALSE]) THEN (skipping)

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:47.362 pm [info](http://192.168.87.225/installedapp/configure/1408)test 118 copy Triggered

[app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:47.336 pm [info](http://192.168.87.225/installedapp/configure/1408)test 118 copy: Thermo: Doors / Windows Open contact open

Yet both LED 1 and 5 are on. Any ideas? The log even says [app:1408](http://192.168.87.225/logs#app1408)2020-01-18 06:01:48.907 pm [info](http://192.168.87.225/installedapp/configure/1408)Action: setStatusLed(1, 2, 0) on FR Deck (skipped)