Smart Blinds & Temperature Control

Hello all, I have been considering getting some smart blinds. UI was wondering if anyone uses their smart blinds as a form of temperature control and how they went about doing that? Did you sync them with your internal thermostat, or use the outdoor temperature? Are sunset and sunrise considered? How do you account for sun position?

Anyway, I feel this could be a very interesting project and could make for a very complicated rule.

Looking for some feedback.


My home office is in my attic (so with heat rising up, it's already warmer than the lower house), and it has two windows that get a lot of direct morning sun. I automated the shades on them with two light/brightness sensors.

Pretty simple rules. If it gets brighter than a threshold, close the shades. When it dims (such as the sun no longer shining directly there, or clouds), open the shades. I also put in some delays so that it doesn't open/close too often and get annoying.

End result: roughly 4 degrees F cooler in the office. Now it's only 1 degree warmer than the rest of the house, instead of 5 degrees.


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


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


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.


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