Filtrete 3M-50 Wi-Fi Thermostat. Version 2.0 Released 12/17/2016

Hi, I have successfully installed the code and am able to control my 3m-50 thermostat – thank you for all the effort you put into writing this!

What I am unable to do is automatically set a “permanent” temp when my smartthings hub goes into “away” mode.

I can trigger the temp change automatically, but it is always a “temporary” change. When I am in away mode, I don’t want the thermostats scheduled to override my away temp.

Is there a way of automatically setting “holdOn”?

I tried tweaking the code to do this when a heat temp point is set, but unfortunately, it didn’t work.

Thanks!

Marc

might as well delete the built-in time schedules.

No I don’t know how to automatically set holdOn. Looks possible.

I know that I can create “routines” to do this, but that feels a bit tedious and I haven’t found a good way to do this in smartthings that also provides a good visualization. Let me know if I have missed something.

I did some more digging and found a way to do it. If you replace the definitions of “setHeatingSetpoint” and “setCoolingSetpoint” in the device handler with the code below, one will get the following two changes in behavior:

  • Temps are set with a permanent hold.
  • Setting a heat and cooling temp of 0 and 0 will release the permanent hold so that the thermostat will resume following it’s schedule.

Marc

// thermostat.setHeatingSetpoint
def setHeatingSetpoint(temp) {
    //log.debug "setHeatingSetpoint(${temp})"

    double minT = 36.0
    double maxT = 94.0
    def scale = getTemperatureScale()
    double t = (scale == "C") ? temperatureCtoF(temp) : temp

    t = t.round()
    
    // A temp of 0 means turn permanent hold off
    if (t == 0) {
    	log.info "Setting hold off based on heating temp ${t}"
        return holdOff()
    }
    
    if (t < minT) {
        log.warn "Cannot set heating target below ${minT} °F."
        return null
    } else if (t > maxT) {
        log.warn "Cannot set heating target above ${maxT} °F."
        return null
    }
    
    log.info "Setting heating setpoint to ${t} °F"

    def ev = [
        name:   "heatingSetpoint",
        value:  (scale == "C") ? temperatureFtoC(t) : t,
        unit:   scale,
    ]
    
    holdOn()

    sendEvent(ev)
    
    def val = "${t},\"hold\": 1"
	return writeTstatValue('it_heat', val)
}

// thermostat.setCoolingSetpoint
def setCoolingSetpoint(temp) {
    //log.debug "setCoolingSetpoint(${temp})"

    double minT = 36.0
    double maxT = 94.0
    def scale = getTemperatureScale()
    double t = (scale == "C") ? temperatureCtoF(temp) : temp

    t = t.round()
    
    // A temp of 0 means turn permanent hold off
    if (t == 0) {
    	log.info "Setting hold off based on cooling temp ${t}"
        return holdOff()
    }

    if (t < minT) {
        log.warn "Cannot set cooling target below ${minT} °F."
        return null
    } else if (t > maxT) {
        log.warn "Cannot set cooling target above ${maxT} °F."
        return null
    }
    log.info "Setting cooling setpoint to ${t} °F"

    def ev = [
        name:   "coolingSetpoint",
        value:  (scale == "C") ? temperatureFtoC(t) : t,
        unit:   scale,
    ]
    
    holdOn()

    sendEvent(ev)
    
    def val = "${t},\"hold\": 1"
	return writeTstatValue('it_cool', val)
}
1 Like

Apologies to all for asking a dumb question, but I’m a bit of a newbie to Alexa and Google Home. I recently installed both, along with a SmartThings hub, Harmony hub, and several smart outlets. I’ve managed to get all of them connected and set up some controls and timers.

I’ve read through most of this thread and installed the RadioThermostat driver, and got both Alexa and Google Home to recognize the thermostat as a new device. I can also see the thermostat controls on the SmartThings mobile app. So far, so good!

But how do I find out what queries and commands can be directed to Alexa and Google Home? I’ve found that if I ask Alexa, “What is the thermostat temperature?”, she answers correctly. But if I ask, “What is the thermostat setting?” or “What is the thermostat mode?”, she says the thermostat doesn’t support that or she doesn’t understand.

Google Home is different. If I ask, “What is the thermostat temperature?”, she responds, “Sorry, I don’t know how to help with that.” This is strange, as the exact same question gets a correct response from Alexa. On the other hand, when I ask Google Home, “What is the thermostat setting?”, she responds with the correct answer (Alexa says this isn’t supported). And if I ask, “What is the thermostat mode?”, she answers correctly (Alexa doesn’t understand this question).

So how do I find out what queries and commands are supported, and how to phrase those to both Alexa and Google Home?

TIA for your help and for all the excellent work on that device driver.

these are good questions that I have also asked myself. I don’t know where the Alexa interface to thermostats is documented fully, so I learn by doing.

In practice I use “Alexa what is the thermostat”, and “Alexa what is the thermostat setting”, and Alexa only replies with the actual inside temperature. And I know at least a year ago that mode could not be set via Alexa.

When I want to be certain of setpoint then I say “Alexa set the thermostat to 67” .

Fortunately the native Filtrete/RadioThermostat smartphone app is fully featured and operates in parallel with Alexa and SmartThings with no conflict, and the last command wins. And I use the built-in time-schedules with a typical weekly operation so the HVAC does not need regular commands from the cloud.

I don’t know about Google Home.

I tested a bunch of phrases with both Alexa and Google Home. For reference, the thermostat was set to 69 degrees and the actual temperature was 69.5 degrees. The results are shown below. It sure would be nice to have some sort of decoder ring so we would know how to control this through Alexa and Google Home.

What’s the thermostat temperature?
Alexa: The thermostat temperature is 69.5 degrees. [Correct]
Google: Sorry, I can’t help with that yet. [Boo]

What’s the thermostat setting?
Alexa: The thermostat temperature is 69.5 degrees. [Wrong answer]
Google: It’s currently 70 degrees. [Wrong answer]

What’s the thermostat set to?
Alexa: The heat is set to 69. [Correct]
Google: It’s currently 70 degrees. [Wrong answer]

What’s the thermostat mode?
Alexa: That’s not supported yet. [Boo]
Google: The House Thermostat is set to heat. [Correct]

What’s the thermostat set point?
Alexa: The thermostat temperature is 69.5 degrees. [Wrong answer]
Google: Sorry, I don’t know how to help with that. [Boo]

What’s the thermostat reading?
Alexa: The thermostat temperature is 69.5 degrees. [Correct]
Google: Heating is set to 69 with a current temperature of 70. [Correct]

Set the temperature to 65.
Alexa: The heat is set to 65. [Correct]
Google: You got it - setting the House Thermostat to 65 degrees. [Correct]

Turn the thermostat off.
Alexa: Thermostat doesn’t support that. [Wrong answer]
Google: Sure - changing the House Thermostat to Off. [Correct]

Turn on the heat.
Alexa: It’s set to heat. [Correct]
Google: Sure - changing the House Thermostat to Heat. [Correct]

1 Like

good updates. I think we’ll have to try the SAME questions again in the future and may get different hopefully better results. Nice that Alexa can set heat or cool mode now.

This handler provides both heatingSetpoint and coolingSetpoint. Yay.

Is there a way to expose thermostatSetpoint, like the stock zwave module handler for this thermostat?

Zwave module/handler:
snip10

Yes. If you use multiAttributeTile in your DTH:

		tileAttribute("device.thermostatSetpoint", key: "VALUE_CONTROL") {
			attributeState("VALUE_UP", action: "setLevelUp")
			attributeState("VALUE_DOWN", action: "setLevelDown")
            attributeState("default", label:'${currentValue}°')
		}

        tileAttribute("device.thermostatSetpoint", key: "THERMOSTAT_SETPOINT") {
            attributeState("default", label:'${currentValue}°')
        }

Should end up looking like this:

Thx.
That’s what the tile looks like for me too!

My issue is that there I don’t see thermostatSetpoint for this device- only heatingSetpoint and coolingSetpoint.
I’d like to be able to use the thermostatSetpoint variable in a webcore piston.

This is a snap of what I see for the device using this DHT with the wifi module. There is no {thermostatSetpoint}. :frowning:

snip11

After posting this last night I started playing around with mine, and checking up on documentation. Unfortunately it’s not a variable ST supports within the multiatributetile for thermostat, but I’d think that variable would be available in webcore. I don’t use it (yet) to know for sure, so try posting your question in the main webcore thread?

Hey everyone, I really need some help with this. I specifically purchased a SmartThings hub so I can control this thermostat with Alexa. I purchased a Alexa Enabled Thermostat and for a while it worked fine but I hated it because of its lack of features (specifically logging of the temperature and runtime). I put my 3M-50 back in and still love it however I have followed these instructions to allow it to work with the SmartThings hub but nothing I do will work. No matter what, it never finds my thermostat and updates the Device Network ID from the random one I put in. I have deleted the device and the device handler several times trying to make this work but it never updates the device ID and I am at a loss.

When I go into the SmartThings App (the new version…I cant use the old one because I activated the hub on the new app I think), it always shows my thermostat status as “Checking status…”. I cannot enter it to refresh or anything since it does not seen the device yet.

I have tried to check any log I can find for a Device Network ID but so far nothing. I am at a total loss. Any thoughts?

Update: Forgot to mention that I am using the Wifi Module although both Z-wave and Wifi are installed. I can poll the API manually from my browers and it all works fine with the Native Radio Thermostat App. I know it is setup right and working on my network, for what ever reason, it cannot be found by the ST Hub/Device Handler.

  1. does the Filtrete native phone app work with your Tstat? NOW I see you answered yes.

  2. there is a Samsung phone app, that you cannot/should-not use until you are specifically INVITED to do by ST support . But I assume you are using the old-but-updated-ST-native-phone-app (so am I) which does allow you to use custom device types such as your Wifi Tstat.

  3. you are familiar with installation of gecko’s Wifi custom device type? My old Wifi integration still works, I assume the custom device type has not changed. I am on hub v1.

  4. you are familiar with ST IDE? Check your cut-and-paste action, it’s easy to lose a character or 20 lines.

  5. consider uninstalling Zwave module (USNAP). I do not know how. I am not using Zwave module.

  6. there is only one place to see “Device Network ID”, right? IDE Device list.

Thanks for the help, I removed the zwave which did not help. After some more exploring I found a page with configuration info that was not included with the setup steps. I am not sure if it was required but the moment I put in the IP Address, Port, and Polling Interval manually in the device config, everything started working and the device network ID populated. If this step is required, why was it not included in the instructions? Below is a screenshot I took of what I’m talking about

Thanks again for the help. While it seems to finally be communicating with the SmartThings Hub and getting updated when its polled, for some reason it is not working with the SmartThings iOS app (Samsung Version). In the attached screenshot, you can see it just says “Checking Status…” still. I figured this would go away once I got it working but it is still doing it. Any thoughts?

I use the android app which I think is the primary interface to update the name, address, port, polling.

I don’t look at the thermostat with the phone app anyway, but it is updating.

Looks like live data. Did you try it with Alexa now.

at 21:03 on Jun11, my thermostat received an unrequested cooling setpoint change to 35F, for one minute. Pretty interesting - I noticed the fan should not be running. I suspect I can’t even set this low setpoint at the physical device.

Recorded by the tstat-manuf-app, but not ST, so this one does not look like an ST latency ghost command. Besides, I never sent any request for 35 ever, so ST has no record to ghost an old command.

Still, them’s the risks - I dunno - save your packet logs.

I have the same problem. Online ST shows I am connected. My iPhone using the new ST app only says “Checking Status.” I am also connected to Amazon with an Echo and it has connectivity to the thermostat so I know the ST Hub is connected to the thermostat. The issue is with the 2nd gen (new) ST app.
Any help would be appreciated.
jalari, did you ever get your set up, the same as mine, working and if so may I ask how?

D

So I finally gave up on the newer Smartthings app. It seems that this method is not compatible with it. Once I went back to the older version of the app (The non-Samsung Account version) everything works perfectly. I do not know of a way to make it work with the newer app. It most likely need to be adapted for the newer app and who knows if or when the author of the code will be able to do that.

Thanks for the quick reply. I think I’ll go to the old app as well.