Smart Blinds & Temperature Control

Awesome!!

Can you post your rule? I'd love to take a look.

Cheers,

Unfortunately it’s not Rule Machine. It’s code in the driver I wrote for my custom blinds motor. I added a light sensor to the control box, so the driver implements both the WindowShade and LightSensor capabilities. (I realized later that the code for Auto-close should have been separated out into an app (so that it could be used with any shade and light sensor), but I haven’t had time to do that yet. So for now, it’s built into the driver.)

@philippompili, I made a lot of progress on breaking it out into a separate app yesterday. When I'm finished, I'll publish it.

1 Like

Brilliant!

Thank you,

.
There is also a Node-RED flow out there in the wild that adjusts blinds to the sun position.. I've thought about implementing that myself

1 Like

For window blinds, I would think this matters way more than anything else. A lux sensor in the window frame would be one way of triggering the blinds to close/open (i.e. when the sun is shining directly through the window). This driver might also work for you:

1 Like

Thanks. That sounds very useful. I am still in the very early stages and am looking at all of these methods. Lux sensors seems like the most direct approach (albeit the most expensive as well).

I do like the sun calculator idea as well.

Many thanks,

1 Like

I picked up this lux sensor recently:

Haven’t had a chance to create any automations to actually adjust the blinds yet, but the readings from the sensor itself seem like they should work just fine for this purpose.

It’s an older z-wave device, so it’s fairly cheap. If you have a large z-wave plus mesh, I guess it’s possible it could slow things down (I’m no z-wave expert but I believe I’ve read that the faster bitrate of z-wave plus transmissions revert to the slower rate when older devices are on the mesh).

@philippompili, I've finished breaking it out into a separate app. I'll start an official thread for it soon, but if you want to try it now, you can get it here:

Awesome thanks. I'm going to start playing with this soon.

Cheers,

I've decided to finally tackle blind automations based on sun position and temp and found this same node pallet. I'm wondering if you set this up yet so I could steal your work? :stuck_out_tongue:

I haven't gotten to it yet, but for sure looking at doing it at some point!

We still haven't moved back into our home (still in renos). Blinds should be ordered within the next couple of weeks and then there is a 4-6 week delivery window. Look forward to trying this, but it won't be for a while. :frowning:

Get to mess with this yet?

I took some time last night but the options are dizzying to say the least.

I completely do not understand what "Channel" is supposed to represent and the documentation for both "blindcontroller" and "blindcontroller-v2" do not give any indication on what unit of measurement the dimensions should be.

Like their sample screenshot's dimensions make absolutely no sense

I have, but not too much. I'm still working through it trying to dial it in the way I like.

I've read through the github issues. Dimensions can be literally any dimension. I used cm. So top = top of window. Bottom = bottom of window. Depth = how far in the sun is allowed to shine.

Orientation is the perpendicular angle to north. So I basically stood in my window with the compass app open on my phone and got 168. Offset is so you can shift the settings a few degrees in case of trees or neighbours, etc..

In my particular case, 0 is closed for my blinds. And even when I select that, the node itself is showing 100% when closed. So there's a bug in it somewhere. I worked around it by using blind position instead of logical blind position to send the command to the blinds.

Another bug I've picked up on is when using weather. The sun position triggers 1 setting then the weather imediately overrides it so I hear the blinds activate and stop every so often. So I think I'm going to have to put in a switch somewhere so it will send 1 or the other but not both. Another thing I want to do is restrict it based on house mode. Sunrise can be 5am and I don't really want the blinds coming up until I get out of bed.

Here's what I've got right now as I work through it. Just haven't had a ton of time to put into it. Not sure why the code isn't going to short form.

[{"id":"1071d4b3.97bd6b","type":"sunpos","z":"b67e9a59.79e788","name":"","lon":"-64.82821","lat":"46.07508","start":"sunrise","startoffset":0,"end":"sunset","endoffset":0,"x":290,"y":40,"wires":[["39ca3ece.77e832"]]},{"id":"4bd9a492.c28fac","type":"api-call-service","z":"b67e9a59.79e788","name":"Set Blind Position","server":"94fdcfdf.a00b","version":1,"debugenabled":false,"service_domain":"cover","service":"set_cover_position","entityId":"cover.side_window_blinds_ha","data":"{\"position\":\"{{payload.blindPosition}}\"}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1350,"y":120,"wires":[["6bf911e0.06e1a"]]},{"id":"1f751a64.b91576","type":"server-state-changed","z":"b67e9a59.79e788","name":"Temp Changes","server":"94fdcfdf.a00b","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.outside_temperature","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"x":100,"y":80,"wires":[["1071d4b3.97bd6b","d028e4c1.24f698","99b252b8.29026"]]},{"id":"99b252b8.29026","type":"api-current-state","z":"b67e9a59.79e788","name":"Cloud Cover","server":"94fdcfdf.a00b","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"weather.shediac","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":290,"y":200,"wires":[["c52f37e9.ffccf8"]]},{"id":"c52f37e9.ffccf8","type":"join","z":"b67e9a59.79e788","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"data.entity_id","joiner":"\\n","joinerType":"str","accumulate":true,"timeout":"","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":470,"y":120,"wires":[["3feb6869.ecc908"]]},{"id":"d028e4c1.24f698","type":"api-current-state","z":"b67e9a59.79e788","name":"Current Temp","server":"94fdcfdf.a00b","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"sensor.outside_temperature","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":300,"y":120,"wires":[["c52f37e9.ffccf8"]]},{"id":"3feb6869.ecc908","type":"unsafe-function","z":"b67e9a59.79e788","name":"Weather","func":"var temperature=msg.payload[\"sensor.outside_temperature\"];\nvar weather=msg.payload[\"weather.shediac\"];\n\nmsg.payload = {};\nmsg.topic = \"weather\";\n\nmsg.payload.maxtemp = temperature;\n\nif (weather == 'sunny') {\n var clouds = '0';\n} else if (weather == 'partlycloudy') {\n var clouds = '0.4';\n} else if (weather == 'rainy' || weather == 'pouring' || weather == 'cloudy') {\n var clouds ='1';\n}\n\nmsg.payload.clouds = clouds\n\nreturn msg;","outputs":1,"noerr":0,"x":620,"y":120,"wires":[["39ca3ece.77e832"]]},{"id":"39ca3ece.77e832","type":"simpletime","z":"b67e9a59.79e788","name":"Month","mydate":false,"myymd":false,"myyear":false,"mymonth":true,"mymonthn":true,"mydom":false,"mydoy":false,"myday":false,"myhourpm":false,"myhour":false,"mytime":false,"mytimes":false,"myminute":false,"myminutes":false,"mysecond":false,"mymillis":false,"myepoch":false,"myrawdate":false,"mypm":false,"x":770,"y":120,"wires":[["ffe6e723.45a698"]]},{"id":"ffe6e723.45a698","type":"switch","z":"b67e9a59.79e788","name":"Season","property":"mymonthn","propertyType":"msg","rules":[{"t":"btwn","v":"01","vt":"num","v2":"04","v2t":"num"},{"t":"btwn","v":"9","vt":"num","v2":"12","v2t":"num"},{"t":"btwn","v":"05","vt":"num","v2":"08","v2t":"num"}],"checkall":"true","repair":false,"outputs":3,"x":920,"y":120,"wires":[["71a91aa0.90dac4"],["71a91aa0.90dac4"],["aa705e34.088ee","6bf911e0.06e1a"]],"outputLabels":["winter","winter","summer"]},{"id":"2f375071.25331","type":"inject","z":"b67e9a59.79e788","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":100,"y":160,"wires":[["1071d4b3.97bd6b","d028e4c1.24f698","99b252b8.29026"]]},{"id":"aa705e34.088ee","type":"blindcontroller","z":"b67e9a59.79e788","name":"Side Window Blinds","mode":"Summer","channel":"1","orientation":"168","noffset":"","poffset":"","top":"82","bottom":"10","depth":"50","altitudethreshold":"","increment":"10","maxopen":"","maxclosed":"","temperaturethreshold":"25","temperaturethresholdposition":"100","cloudsthreshold":"0.5","cloudsthresholdposition":"0","uvindexthreshold":"","uvindexthresholdposition":"","nightposition":"100","expiryperiod":"120","opposite":true,"x":1120,"y":160,"wires":[["4bd9a492.c28fac","6bf911e0.06e1a"]]},{"id":"71a91aa0.90dac4","type":"blindcontroller","z":"b67e9a59.79e788","name":"Side Window Blinds","mode":"Winter","channel":"1","orientation":"168","noffset":"","poffset":"","top":"82","bottom":"10","depth":"50","altitudethreshold":"","increment":"10","maxopen":"","maxclosed":"","temperaturethreshold":"25","temperaturethresholdposition":"100","cloudsthreshold":"0.4","cloudsthresholdposition":"0","uvindexthreshold":"","uvindexthresholdposition":"","nightposition":"100","expiryperiod":"120","opposite":true,"x":1120,"y":80,"wires":[["4bd9a492.c28fac"]]},{"id":"6bf911e0.06e1a","type":"debug","z":"b67e9a59.79e788","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1530,"y":120,"wires":[]},{"id":"94fdcfdf.a00b","type":"server","z":"","name":"Home Assistant","addon":true}]

1 Like

@morningz I've never gotten to a point where I've been completely happy with blindcotroller.

I did just come across another

It's called sun-position but it's a cluster of nodes including a blind controller. It was built off the original blind-controller, but it seems significantly more capable and customizable, a lot more documentation on github and the dev seems active on issues. I'll probably give this a shot when I get some spare time in the next few weeks.

1 Like

I've got that sun-position node installed for something else, i'll for sure have to check it out!

Something to tinker with this weekend

I was using sunpos for sunposition. I will admit, at first glance at this node I am completely lost! LOL

While confusing, I'm convinced this node is THE node for blind control.

Using the built-in rules for the node I've been able to setup the blinds like this:

  • Close blinds at dusk but no later than 10pm
  • Open blinds in the morning, no earlier than 7:30am and only when the house is in "Home - Morning" mode (which is set using our sleep sensors)
  • Close blinds when house is in "Vacation" mode
  • Close blinds when house is in "Away" mode and it's summer time (to maximize cooling efficiency)
  • Open blinds when house is in "Away" mode and it's winter time (to maximize heating from the sun through the windows"
  • Close blinds when over 25 degrees C to maximize cooling
  • Open blinds when cloudy, raining, snowing to maximize light
  • Open blind when window is open
    and of course adjust the blinds based on sun position

It's able to evaluate its rules based on variables which makes the flow much easier. So instead of feeding everything into a join node and evaluating in a function node I can just save the data into a flow variable.

The other big benefit I'm seeing is that it only outputs on a position change. The other node output every time it evaluated so my blinds were constantly trying to adjust from 0 to 0. It was eating batteries.

I've built a flow to setMode to automatically change from summer to winter based on month, and while it does work the node is not visually representing it so I've opened an issue on github for that. I also plan to program some "manual override" options, just not sure if I'll set that up for Alexa or just set that up with double/triple taps on the switch beside the blinds.

@MRobi Would you be willing to share your Node RED flows for these examples?