Jump to content

Tim Wilson

Members
  • Posts

    82
  • Joined

  • Last visited

Profile Information

  • Location
    Minneapolis, MN

Recent Profile Visitors

493 profile views

Tim Wilson's Achievements

New

New (2/6)

9

Reputation

  1. I had the same issue on one of my Nest thermostats where I didn't have a common wire. (The builder only used a four-conductor wire to one of my thermostats for some reason.) It ran for a while just like Larry's son's experience and then started exhibiting the exact behavior the OP describes. It might be worth checking the voltage reported on the Nest to make sure it's within spec. Mine was too low which suggested that the battery couldn't supply enough voltage without the common wire. I ended up running a new wire to the location which took care of the problem.
  2. I'd take a look at the Polyglot solution mentioned above first as long as you're willing to use a RaspberryPi or similar device and you're willing to run the 5.0.x Alpha branch of the ISY firmware.
  3. That makes sense. Thanks for the clarification, Michel.
  4. Yes, that's more like what I expected it to be.
  5. Thanks for the reply. So you're saying that the ISY evaluates the "if" portion of that program continually during the specified time interval? That wouldn't change the observed behavior I cited, but it is a big difference from what I thought was happening. I could have sworn I'd read somewhere that those only get evaluated at the beginning and end. (But I'll take your word for it as someone who should probably know.)
  6. I still don't think this is working quite right. Let me check my understanding of how the following program triggers. I may be misunderstanding something fundamental. Tim arrives home - [ID 0006][Parent 0008] If From Sunset + 15 minutes To Sunrise (next day) And 'Neighborhood / Tim iPhone' Occupied is True Then Run Program 'Outside lights on arrival' (Then Path) Else - No Actions - (To add one, press 'Action') My understanding is that the "if" part of this program will be evaluated when one of the following events occurs: The ISY's time is Sunset + 15 minutes The ISY's time is Sunrise (next day) My iPhone enters the geofence I've defined as my "neighborhood" Obviously, the "and" requires that the time constraint and occupancy both evaluate as true to trigger the "then" clause. I should not be surprised, then, when the outside lights turn on at Sunset+15 if I'm sitting in my living room at the time. That's not what I attended with this program though. I only want the outside lights to turn on as I approach my house in my car after dark. I don't need the outside lights on if I'm already in the house. So I'm back to the idea that I may need to set a state variable when the occupancy state changes. My program would change to look for that state variable between sunset+15 and sunrise, say $sTimArrivedHome = 1, turn on the lights, set $sTimArrivedHome = 0, wait 10 minutes, and turn the light off. Does that make sense?
  7. Thanks for all the feedback everyone. I'm still experimenting a bit with the placement of the sensor tags to optimize the performance.
  8. It looks like Amazon stocks both 32% and 70% RH calibration kits for $7.95 each. The question is which to get. I'm thinking that 32% is probably closer to the average over an entire year..
  9. The purpose of this tutorial is to demonstrate how to automate a bathroom exhaust fan based on the humidity in the bathroom compared to a reference sensor in a different room. This solution uses the following devices: two wireless sensor tags (13-bit temperature and humidity) ethernet tag manager (required for the wireless sensor tags) Insteon 2477S SwitchLinc On/Off Insteon 2477D SwitchLinc Dimmer Background I've been using a simple timer to control the exhaust fan in my master bathroom. It started getting flaky, and I would often come home from work and find that the fan had been running all day. I decided that it was time to up my home automation game and go with a more sophisticated solution. I replaced the old exhaust fan timer with a 2477S SwitchLinc. Having the ISY control the 2477S is easy, but I wanted it to monitor the humidity in the bathroom and run the exhaust fan as needed. The humidity varies widely where I live so I can't simply measure the humidity in the room. I need to have two sensors so I can compare the humidity readings and determine when the difference between them exceeds a given threshold. Step 1: Humidity monitoring Among the cheapest and most capable humidity sensors I could find were the CAO Wireless Sensor Tags (see Wireless Sensors sub-forum). The 13-bit temperature/motion/humidity sensors can be purchased for $29 each or in a five-pack for $139. The sensors require an ethernet tag manager that receives the sensor data and publishes it to a web site for monitoring and tracking. The ethernet tag manager can also update variables on the ISY using the ISY's REST interface. I placed one of the sensors in the master bathroom near the shower about six feet high on the wall. The other one is in the master bedroom on the far side of the room from the bathroom. You can see from the graph below that it's not difficult to tell when someone is showering. (You can view the graphs on the WirelessTag app or the MyTagList.com web site.) Humidity measurements (Click for full-size view.) The wireless tags can trigger lots of different kinds of events through the use of Kumo Apps which are Javascript applications that have easy access to the sensor values. (See examples at the link.) I created a Kumo App that updates three state variables on my ISY: sMasterBath.humidity, sMasterBedroom.humidity, and sMasterSuite.humidityDelta. Here's the Kumo App: var tags = <#tags_[13]_N#>; var isy_ip=<%ISY IP Address%>; var isy_user = <%ISY username%>; var isy_password=<%ISY password%>; var isy_RESTcall = "http://"+isy_user+":"+isy_password+"@"+isy_ip+"/rest/vars/set/2/"; var isy_variable_humi_delta = 3; // "3" corresponds to the ISY state variable // Initialize a couple variables to use later to trigger recording the humidity difference var master_bath_humi = 0; var master_bedroom_humi = 0; tags.forEach( function (tag) { tag.updated = function () { var cur_name = tag.name var valid_device = true switch(cur_name) { case "Master Bath": var isy_variable_temp = 4 // This and following map to ISY state variables var isy_variable_humi = 1 master_bath_humi = tag.moisture // save this for later break; case "Master Bedroom": var isy_variable_temp = 5 var isy_variable_humi = 2 master_bedroom_humi = tag.moisture // save this for later break; default: var valid_device = false } if(valid_device==true){ // Capture sensor data from the "Master Bath" and "Master Bedroom" sensors. var tag_temp = Math.round((tag.temperature * 1.8 + 32)*10)/10; // Convert to F and round to 0.1 KumoApp.Log("Temp for "+cur_name+" ("+isy_variable_temp+") updated to "+tag_temp); KumoApp.httpCall(isy_RESTcall+isy_variable_temp+"/"+tag_temp, "GET"); var tag_moisture = Math.round(tag.moisture); KumoApp.Log("Humidity for "+cur_name+" ("+isy_variable_humi+") updated to "+tag_moisture); KumoApp.httpCall(isy_RESTcall+isy_variable_humi+"/"+tag_moisture, "GET"); // Calculate the humidity delta if both sensors have checked in. if (master_bath_humi > 0 && master_bedroom_humi > 0) { var master_suite_humi_delta = Math.round((master_bath_humi - master_bedroom_humi)*10)/10; KumoApp.Log("Humidity difference in Master Suite ("+isy_variable_humi_delta+") updated to "+master_suite_humi_delta); KumoApp.httpCall(isy_RESTcall+isy_variable_humi_delta+"/"+master_suite_humi_delta, "GET"); }; } else { KumoApp.Log("Data from non-configured device: "+cur_name); } }; } ); The variables at the top in the angle brackets correspond to parameters that are prompted when the Kumo App is launched. Each sensor tag is checked in turn and the temperature and humidity data are logged to the ISY via its REST interface. Once both sensors have logged their humidity data, the Kumo App calculates the humidity difference and logs it to ISY variable #3. Step 2: Controlling the exhaust fan Once the humidity data is stored in variables in the ISY, the final step is writing two programs: one to turn the fan on and another to turn it off. I decided that for the purpose of triggering the exhaust fan, I would check the status of the light in the bathroom (the 2477D dimmer) on the assumption that I don't want the exhaust fan to start up unless someone is actually in the bathroom showering. Since we always have the light on when someone is in the bathroom, that makes it easy to avoid the situation where the exhaust fan might turn on when no one is home or in the middle of the night. Here's the code: Turn ON Master Bath Exhaust - [ID 0019][Parent 0001] If '2nd Floor - Master Bath / Master Bath Lights' Status is not Off And $sMasterSuite.humidityDelta >= 3 Then Set '2nd Floor - Master Bath / Master Bath Exhaust Fan' On Else - No Actions - (To add one, press 'Action') You can see from this code that I decided to set the humidity threshold to 3%, that is, the fan will only turn on if the difference between the humidity in the bathroom and bedroom is at least 3%. This is easily tweaked over a period of a few days until the fan turns on at the right time. Similarly, on the assumption that the master bathroom light won't be on when no one is present, the code to turn off the exhaust fan runs when the bathroom light is off and the humidity difference drops below 3%. Turn OFF Master Bath Exhaust - [ID 001A][Parent 0001] If '2nd Floor - Master Bath / Master Bath Lights' Status is Off And $sMasterSuite.humidityDelta < 3 Then Set '2nd Floor - Master Bath / Master Bath Exhaust Fan' Off Else - No Actions - (To add one, press 'Action') The sensors and programs are working great so far. Feel free to post with questions below.
  10. The lights came on when I got home tonight. Now the problem is that they click off after 10 minutes and then go right back on again. I think I need to set a variable somewhere to manage that unless someone has a more elegant solution. In my previous solution that was using Locative only, the state variables that Locative triggered worked perfectly. Now the line that refers to the neighborhood being occupied is always true when I'm home.
  11. I have the Schlage Connect. Search the forums here for "BE469" to find more info.
  12. Good catch. I'm guessing that could be messing up the trigger.
  13. I just switched to using the ISY portal node server for occupancy monitoring, and I'm having trouble replicating what used to work for me when I was using simple Locative calls to set ISY state variables. Here's the program I have right now. Essentially I want the outside lights to come on (it's a single Insteon 2477S device, not a scene) if it's dark outside, if the lights aren't already on, and I arrive in my neighborhood geofence. Arrive home - [ID 0005][Parent 0008] If From Sunset + 15 minutes To Sunrise (same day) And 'Outside / Outside Lights' Status is Off And 'Neighborhood / iPhone' Occupied is True Then Run Program 'Outside lights on arrival' (Then Path) Else - No Actions - (To add one, press 'Action') The "Outside lights on arrival" program is disabled and looks like this: Outside lights on arrival - [ID 0007][Parent 0008][Not Enabled] If - No Conditions - (To add one, press 'Schedule' or 'Condition') Then Set 'Outside / Outside Lights' On Wait 10 minutes Set 'Outside / Outside Lights' Off Else - No Actions - (To add one, press 'Action') I'm still trying to wrap my head around the event-drive programming paradigm of the ISY. I'd appreciate any pointers.
  14. Part 6: Creating the ISY program to trigger notification and logging We've finally arrived to the final section. Now it's time to create a short program to trigger the Pushover notification and Airtable record creation when the deadbolt is locked or unlocked. Fortunately, the final step is the easiest one. Go to the "Programs" menu and click "New Program" at the bottom of the screen. Enter the following: Notification program If '1st Floor - Living Room / Front Door Lock' is switched Alarm Unlocked by Keypad Or '1st Floor - Living Room / Front Door Lock' is switched Alarm Locked by Keypad Then Resource 'Zapier -- Front door keypad activity' Resource 'Pushover -- Front door keypad activity' Else - No Actions - (To add one, press 'Action') Your program will use the corresponding name of your deadbolt. Mine is called "Front Door Lock", and I have it in a folder called "1st Floor - Living Room". Simply add both notifications to the "Then" portion of the program and you're all set. The notifications will also correspond to the names you gave yours. Good luck.
×
×
  • Create New...