Advanced Blind Control

What if you didn’t even need to think about adjusting your blinds throughout the day? What if they responded automatically to the outdoor brightness? I have been using my motorized blinds for a while now but I can’t help but notice that I still need to adjust the blind tilt from my phone throughout the day. This seemed like something that could certainly be automated!

Using Home Assistant and ESP Home, I could see a fairly straightforward solution. Before we get into it, let’s define some requirements.

Requirements:

  1. Must respond to the outdoor brightness such that the brightness in the room remains relatively constant.

  2. Must be fully automatic.

  3. Must not adjust too often such that it bothers people in the room (ideally no more than every 15-30 minutes).

  4. Slow down the actuation of the blinds. They currently operate at maximum speed and this makes automations less subtle when people are present in the room.

Solution:

To measure the brightness outside the windows, I will use a Aqara sensor. This method is free for me since I already have several of these sensors laying around. I really like these as they are easy to pair with Home Assistant, last a long time (since they are Zigbee), and combine a couple sensors into a single enclosure. They are pretty cheap on AliExpress for a 3-pack.

I have been using these to trigger automations inside my house as a walk in/out of room, and I have been wanting to use the additional illuminance sensor for a while now.

The only problem with them for this application, is that the illuminance sensor gets saturated when placed facing outside on bright days. I need the brightness to change throughout the day so that my blinds can respond to this. I can reduce the sensitivity by simply placing layers of translucent white tape over the sensor until the characteristics look better. The figure below shows the difference between two sensors, one without modification, and one with the sensitivity reduced. We can see that the unmodified sensor is not providing much useful information for us. It gets saturated very quickly and is really only telling us if the sun is up or not. The modified sensor looks much better, we are able to see peaks of different heights between days of varying brightness. The modified sensor also responds much better to changes throughout a given day.

Now that we are able to properly determine the outdoor brightness, we can use this to control our blinds. A simple way would be to linearly map the blinds 0 -100 % tilt to the sensor reading 0 - 700 lx.

This works well but after using this for a while, I wanted to make a slight improvement. Below a certain level of sunlight, I can actually keep my blinds fully open as it is still not very bright in the room. This reduces the number of blind adjustments during the day and ensures the brightness in the room is more constant. Also, above a certain threshold, it gets bright enough that I want my blinds fully closed.

This is what I came up with:

  1. Below 20% brightness, set blinds to 0%.

  2. Above 80% brightness, set blinds to 100%.

  3. Between 20% and 60%, scale blinds proportionally to outdoor brightness.

  4. Between 60% and 80%, scale blinds exponentially to outdoor brightness.

Below we can see the how the blinds respond to the outdoor brightness with this control scheme:

Below we can see how the control works between days with greatly different outdoor brightness maximums. On the first day, the brightness is below the threshold (20%) so the blinds stayed open all day. On other brighter days, the blinds ended up fully closed during the brightest part of the day.

Based on the sensor data, the blinds will not update more than our desired time frame of 15-30 minutes defined previously. This means we do not need to add any extra logic to prevent frequent adjustments in blind tilt!

The last thing I want to do is update the speed at which my blinds actuate. In ESPHome I can modify the “Transition Length” in the servo component, which defines the time for a full movement. More info on the Servo component can be found here. I found 2 seconds slowed the blinds down to a more natural feeling speed. More info about motorizing the blinds can be found in my older post here.

servo:
  - output: 'tilt'
    id: kitchenblind1
    transition_length: 2s

Now we have blinds that automatically adjust based on the outdoor brightness! I have found them to work quite well and now never need to think about adjusting my blinds throughout the day!

Considerations:

Now that I have my blinds working for me, it got me thinking about other possibilities. What if I could loosely relate brightness to thermal load into my house (maybe considering time of year and brightness)? Then I could potentially use my blinds as part of my heating and cooling strategy… On hot summer days the blinds could prevent more sun from getting into my house, and on cold winter days they could stay fully open for longer… Probably pretty small gains from this but it could be fun!

Previous
Previous

Automated Drapes: Your Key to Sunrise on Demand

Next
Next

Advanced Window Control (plus a new window actuator!)