Custom light posts for the cabin

Sometimes when I’m browsing the web I get inspired by whatever it is I’m looking at. That so happened when I stumbled upon the following picture:

concrete-lamp

A small light post made out of concrete which houses a single spotlight that shines downward and scatters the light down on the ground. The description said it was easy to make a mold out of wood, and pour concrete in it. I think it would be great to have some small light posts at our cabin to light up the path from the parking area to the cabin. I imagined these kind of lights to fit really well in the area since they do not take up too much space, give a nice indirect glow of light low at the ground. I figured if I make them myself they hopefully would not get too expensive either.

Materials

Obviously, to make the mold I’d need some wood. I settled on cheap spruce wood for the vertical parts and some oak wood for the base purely because I had a piece laying around and it seemed a bit stronger. Additionally I bought:

  • B30 concrete.
  • Electrical tube.
  • Electrical boxes.
  • Brown & blue electrical wire.
  • GU10 light holders.
  • Fishing wire.
  • 200mm bolts.
  • Screw rods.

I learned that concrete is not to be confused with cement. Cement is an ingredient of concrete, which I found out whilst shopping for this project. I also learned that there are different types of concrete, indicated by the B-number. B30 is appropriate for outdoor use, hence why I went for this.

The 200mm bolts stick out of the bottom of each light and will act as an anker once I mount the lights at the cabin. The screw rods I figured would act as some cheap form of reinforcement. The fishing wire is to keep the electric tube and screw rods in place while pouring the concrete.

Since I’d be making a reusable mold I’d decided to try and make 6 light posts. Why 6? I don’t know, it just felt right.

The build process

The building process of the mold was fairly straight forward. I’d labelled all the sides (A, B, C & D) and made sure to use 3 screws between all sides to firmly hold them together in a square. Side A would hold the diagonal piece and cut-out for the lightbulb, whilst side C would hold the electrical box.

IMG-20230530-WA0000
IMG-20230530-WA0002

The sides mount on top of a base plate using a total of 8 screws. I also used some foam in between the base plate and the sides to try and make them watertight and thus prevent concrete from leaking out while it was drying.

PXL_20230604_145020158

Cross section of mold before pouring the concrete

The screw rods are hanging in the mold with the use of fishing wire, and run most of the length from top to bottom. The electrical box and tube are held in place using hot glue. After everything was screwed and glued together I mixed the concrete in small batches (~2kg per batch) and slowly filled the mold with concrete. Then I’d have to wait at least a day for the concrete to dry.

The first build

The first light post came out decent, but had some flaws.
Firstly, in this first build I’d opted to mount the GU10 holder before pouring concrete instead of leaving a cut-out. This resulted in the holder filling up with concrete and the concrete becoming slightly electrified when 230V is applied, which makes your fingers tingle when you touch it.
Secondly, I found that it was hard to remove the cut-out for the lightbulb without damaging the concrete. I figured this was due to three reasons; firstly I’d been impatient and removed the light post from the mold after 1 day. Concrete officially takes 28 days to fully dry out, and removing it after 1 day meant the concrete was still quite brittle. Secondly since I did not use any lubricant on the wood it got stuck to the concrete. Thirdly the concrete’s thickness between the cutout and the side of the light post was relatively thin, so a small amount of force would cause this part to break.

IMG-20230602-WA0000
IMG-20230602-WA0003
PXL_20230602_150805912

Left picture: the light post after it came out of the mold. Top right picture: the cut-out. Bottom right picture: the first test. Note here that the concrete has broken off in front of the lightbulb due to removing the cut-out.

The other light posts

Having learned from the first light post I’d now made the following improvements:

  • Add a cut-out for the GU10 holder instead of pouring it directly in the concrete.
  • Wait at least 2 days before taking the light post out of the mold after pouring.
  • Pretreat the cut out parts with oil, so that they stick less to the concrete and are easier to remove.
PXL_20230602_202802128

The second light post, tested in twilight.

The second light post I poured came out better, however it was still difficult to keep the concrete between the cut-out and the side intact as it was just so thin. This is a problem that all subsequent light posts also had, and my solution was to try and glue together the bits that fell off as best as I could and treat the lights after they’d been installed with a concrete-repair solution – in other words a problem for future me.

When I knew this method worked well enough, I sat down and made all the parts for the other 4 lights I wanted to make.

Snapchat-1607147421

Mass producing the parts for the other 4 lights.

Pouring all 6 lights took me around 3 months. Before shipping them off to the cabin I tested them all and made sure to cap off the electrical box so that no water/animals would crawl into them while they were being mounted at the cabin.

PXL_20230828_132329901

The final 2 light posts, standing upside down and ready for transport.

Mounting at the cabin

My hope was that I could simply place the light posts at the cabin in the ground and that the bolt on the bottom of each light post would keep them in place. However when testing this it became apparent that this just would not work, and that they would fall over very easily. So I reverted to more concrete pouring. For this I dug out a hole until I hit the rock bottom. Then I placed large cardboard tubes in the hole, which I filled up with concrete. I also pushed some 20cm long PVC pipe (sealed on each end) in the middle of the drying concrete and held that in place with a brick.

PXL_20230908_142415694
PXL_20230908_142407053

What is the purpose of the PVC pipe you might ask? Well, after a day of drying I would remove the PVC pipe, fill up the hole with fresh concrete and place the light post with its pin inside this fresh concrete, whilst the weight of the light post would be supported by the concrete poured the day before. This allowed me to place the light posts flush with the concrete, and allowed for some adjustment to make them stand exactly straight before the concrete would dry. Genius, right? 

PXL_20230909_090741340

This picture shows 4 lights. Can you find them all?

I ended up placing 5 lights. 2 next to the parking space and 3 next to the path. The sixth light has as mentioned some electrical issues, but we might be able to place it elsewhere and powering it using 12VDC.

After putting them up (& waiting 5 months for the winter to pass) I swapped the backplate for a waterproof junction box, and wired them all up using outdoor-rated cabling.

PXL_20240413_101314738

The junction box. Here shown during installation.

I also installed a 16A Zigbee Mini Smart Switch to control the lights through Home Assistant. This particular version also has the option to add a manual switch, which we might add in the future. Lastly I buried the cable connecting the light posts to a depth of 1-10cm, and after that it was time to wait for twilight and enjoy a job well done.

End result

PXL_20240413_175749770

The first test. They all light up!

 

PXL_20240413_183049402.MP

In the dark. This is when they look their best.

I really enjoyed this project, even though it took me almost a year to finish it. Not only did I learn a thing or two about concrete, but we now also have some beautiful lights at our cabin, which’ll hopefully stand there for many many years.

Custom Smart Thermostat

Last year I programmed my own custom smart thermostat using Home Assistant and a couple of WiFi enabled heaters. I’m writing this article mostly to document the process of how I control my heaters in the living room and to hopefully inspire others to implement their own solution. I will also try to update the numbers in this blogpost as I make changes to it in the future.

It was important for me that this system would work the entire year round and always provide us with a comfortable indoor temperature whilst simultaneously saving money by (temporarily) turning down the heat whenever the electricity prices are high or when we don’t need a heated living room because we are for example sleeping. Ultimately, this system should run in the background without any of the inhabitants even knowing that it exist.

I got inspired by a blogpost by Martin Bekkelund (article in Norwegian). His basic idea is as follows:

  • Change the heaters set temperature based on a couple of variables such as time of day, electricity price, etc.
  • Allow for a couple of ‘overrides’ such as vacation mode to lower the temperature when nobody is around.

I took this idea and started defining how it should work. Firstly I looked at the operating temperature. In Martin’s blogpost he defines his minimum temperature to be 5°C. This was a bit low for my liking, so I upped that to 18°C. Even if we’re away I don’t want the temperature to sink much below this as it would take a long time to heat the house up again and probably keeping a temperature of 18 degrees would not cost that much more energy than letting the house cool down and heating it up again to 18°C. At the time I programmed this I also wasn’t sure my algorithm would always predict perfectly if people were home or not, meaning that even if the algorithm messed up people in my living room would at least be sitting in 18°C.
For the maximum temperature I decided to go for 22°C. After running this system for a year I experienced that my wife finds 21°C a bit too cold, so we now use 22°C as the maximum.

Secondly, I had to define which variables would influence the set temperature.
After a year I have the following variables contributing:

  • The outdoor temperature.
  • The energy price:
    • General energy price (is today an expensive day?)
    • Peak energy price (Is energy significantly more expensive this hour compared to the rest of the day?)
  • Amount of sunshine entering through the window.
  • Manual override.

My idea was to look at these variables and assign a number to each of them, depending on their value. I would then add all the numbers together, and this would create a temperature offset. This way I quantify as many variables as I want and directly translate them to a desired living room temperature.

Thirdly I defined 3 overrides:

  1. Night Mode. Turns on at 22:00 and turns off at 06:00.
  2. Weekend Away mode. Turns off automatically on Sundays at 15:00.
  3. Vacation Away mode. Does not automatically turn off.

Temperature Offset

The temperature offset will be a calculated number based on the variables defined above. I defined the base temperature in the house as 21°C, and the temperature offset will be added to this temperature to give the final setting for my heaters, within a minimum and maximum of 18°C and 22°C respectively. So for example, if the temperate offset is calculated to be -2, the heaters will be set to 21°C – 2 = 19°C. If the temperature offset is +5, the heaters will be set to 21°C + 5 = 26°C 22°C as the maximum temperature is 22°C.

After a year of running the system my variables are quantified as follow:

Outdoor Temperature Offset
< -10°C +3
> -10°C & < -5°C +2
> -5°C & < 0°C +1
> 0°C & < 5°C 0
> 5°C & < 10°C -1
> 10°C & < 15°C -2
> 15°C -3
General Electricity Price Offset
< 1 NOK/kWh +3
> 1 NOK/kWh & < 2 NOK/kWh +2
> 2 NOK/kWh & < 4 NOK/kWh 0
> 4 NOK/kWh -1
Peak Energy Price Offset
Hourly Price < 130% Daily Average 0
Hourly Price > 130% Daily Average -1
Sunshine through the window Offset
Yes -1
No 0
Manual Offset Offset
Manual offset. Resets daily at 00:00 Between +3 and -3

Remember that a + means more heat, a – means less heat. As mentioned the algorithm goes through all the variables one by one and adds/subtracts the offset value based upon what that variable is at the time the algorithm runs. Whenever one of the variables change the algorithm reruns to recalculate the offset.

Additionally I defined an offset for the override modes. They’ll just get a large minus number to make sure they always default to the minimum temperature of 18°C.

Mode Offset
Night Mode -9
Weekend Away mode -10
Vacation Away mode -10

Night mode has a different offset than Weekend Away mode and Vacation Away mode to in the future allow myself to differentiate between the two, in case I want to expand the system and for example want a different temperature when we’re away vs. when we’re sleeping.

Implementation in Home Assistant

This algorithm runs inside my Home Assistant instance. Home Assistant allows the definition of so-called ‘helpers’. I created a number of these helpers and virtual sensors which help create the main automation that calculates the offset:

Helper Explanation
Heating: Manual Offset Manual input number which can vary between +3 and -3.
Heating: Night Mode A schedule which defines when night mode should be active.
Heating: Offset An input number which holds the current offset.
Heating: Offset Calculator An input number used during the calculation of the offset.
Heating: Outdoor Temperature Combines my 2 outdoor temperature sensors into a single number.
Heating: Sunshine Switch A threshold sensor that turns on when the light sensor in front of my window senses more than 1000 lux.
Vacation Away An input boolean which can be turned on and off manually.
Weekend Away An input boolean which can be turned on and off manually. Automatically turns off on Sundays at 15:00
High Energy Price Binary A binary sensor that turns on when the hourly energy price is >1.3x the daily average energy price

Additionally I am getting the energy price from my energy provider Tibber.

Automations

There are 2 automations running in Home Assistant. The first one calculates the Heating Offset, while the second one sets the heater’s temperature based upon the newly calculated Heating Offset number. This is because the Heating Offset can be calculated multiple times during the day but won’t necessarily change all that much. As long as it doesn’t change, the heaters will be left alone and won’t receive an update.

The first automation to calculate the Heating Offset is in essence a large If/Then/Else function. If any of the overrides are on Then we set the Heating Offset Calculator to the value of whatever mode is active. Else we calculate the Heating Offset Calculator based upon the variables and their respective offset described in the table above.

Actions in Heating: Calculate Offset.

When this action is done I set the Heating Offset variable to the value of Heating Offset Calculator, which was just calculated. Setting Heating Offset to a different value triggers the next automation which sets the living room heaters to their new required temperature. If Heating Offset does not change compared to the last time the automation ran then the second automation is not triggered.

Set Heating Offset from Heating Offset Calculator

Experiences last year

Last winter we experienced some of the highest energy prices in Europe since ever. This mainly drove the Heating Offset during the winter, lowering the temperature of the heaters whenever there was a peak and thereby lowering my energy bill. Unfortunately I do not have numbers on how much money this has saved.

In the summer the Heating Offset is mainly influenced by the Sunshine sensor and the Outdoor Temperature sensor, lowering the heaters to 19°C/20°C during most of the month of August. Additionally we were on holiday in the beginning of August, causing the heaters to be at 18°C all day.

Living Room heater requested temperature vs Outdoor temperature in August 2023. Click to view in full screen.

The last couple of weeks the outdoor temperature has been fluctuating around 0°C. This has caused the heaters to be 21°C (22°C since last week, when I changed the maximum temperature) almost continuously:

Living Room heater requested temperature vs Outdoor temperature in November 2023. Click to view in full screen.

Now when the weather is getting even colder I expect the heaters to be on 21°C/22°C for most of the time, as long as the energy prices are not getting out of hand again.

Improvements

As I mentioned, this system has now been running for over a year. During this year I’ve made a few minor changes, mainly tuning of the Outdoor Temperature offset and the addition of a Manual Override to add/subtract to the Heating Offset. The system has mostly been running in the background and whenever I glanced at the heaters the set temperature often made sense. My house inhabitants have unfortunately complained a couple of times about my system (so they do know it exists), but the root cause was almost always a broken WiFi connection with the heaters, instead of the algorithm making weird calculations. To improve this I have created a 3rd automation which resets the power to the heater, by toggling a power switch connected to the heater’s power cord, whenever Home Assistant notices that it stops reporting its measured temperature, forcing those pesky heaters into submission!

I feel the minimum and maximum temperatures might be a bit restrictive, so I might tune this in the future. As said, I’ll try to update the numbers whenever I make changes. If you have idea’s please let them know below!

Preparing the cabin

A special thanks to Helge in assisting me preparing the water pump, checking the drain and a thanks to both Arve and Helge with hogging the trees!

I recently got the keys of our cabin. Since this time I’ve been preparing it so my parents can come and be there for a few weeks during the winter. There are 1001 things I want to do there, but for the first few jobs we prioritized the ones that were most essential. The most essential was the water. During the winter the waterpipe freezes as it lies on the surface, so the cabin only has a pipe with running water from roughly April to October. If somebody wants to be there during the winter they need to bring and store their own water. The cabin has one (very old) sink and drain pipe, but the previous owner said they never used it. This meant we were unsure on the status of the drain, and if water actually leaves the cabin.

In order to make life at the cabin a bit more comfortable we installed a small pump and a waterpipe inside the cabin which allows you to wash your hands. In addition to that we checked the status of the drain, and made it so that water can safely be drained during the coming winter. We plan for this solution to be here only for a few months until spring allows for building something more integrated, but it is now possible to operate it as-is for at least a few years (just in case). Lastly, we decided to cut down some trees to get more light and a better view.

Installing a pump

Beneath the cabin there used to be a well which in the old days was used for supplying water. A handpump was connected to this well, which allowed you to pump up the water and for example wash your hands or fill up a bowl over a small sink. This system is still mounted on the wall, but the pump is disconnected from the well.

Original situation.

In order to get running water in the cabin we bought a small boat-pump, a hose, a switch and a bucket. The bucket will hold (drinking-)water which is filled up with the use of jerrycans. The pump can be lowered into the bucket and will, once powered on, pump the water through the pipe which is mounted with zip-ties to the old water pipe. This system was installed in a few hours, where the biggest challenge was to find a good location for the on/off switch and running the wires/pipes in a neat way.

Cutting cables and hoses

During installation we found that a small cutting board that was nailed to the wall. It was there to hide a hole in the wall, and turned out to be a perfect holder for our switch.

The old cutting board with the new switch.

A few hours of work, and suddenly we had running water!

The completed setup.

Checking the drain

Checking the drain turned out to be a more difficult job then we initially expected. The drain is a single pipe running from the sink to a concrete box outside filled with sand and small stones. These filter the water, after which it is released into the nature.

We had hoped that the water would run through this entire pipe and into the box. However, when we tried to pour water through the sink no water appeared inside the box. That meant the pipe had a breach somewhere, and we would have to locate it in order to make sure no water was leaking inside the cabin.

Firstly, we attempted to go underneath the cabin to check if we could find the drain pipe. This we did not, but we did find the old (disconnected) well which in the old days was used for the water supply.

Old well in the crawl space.

Outside the cabin we found that the drain pipe was overgrown with a tree. Judging by the size of the tree the pipe must have been there for many decades. It looked like this was at least one of the places the pipe was broken.

Tree which has grown over the drain pipe.

Ultimately we were able to find a spot outside where the pipe was easy to take apart and where water which was thrown into the sink was running out. At this point we dug a hole in the ground and filled it with gravel and stones. This will act as a filter, and allows us to use the sink during the upcoming winter without a risk of the pipe clogging up.

Preparing a hole with stones and gravel to prevent the drain pipe from clogging up during the next winter.

While we were working outside I installed some Christmas lights to make it a bit more cozy.

Christmas lights on the veranda.

Getting that view

The cabin is located at some height, but the view is completely blocked by mainly a big fir tree and many smaller trees. Cutting down trees is a job which can be done in a day and does not need much preparation, so we therefore decided to go to the cabin one day and start cutting down on the trees which were blocking the view.

The view before the trees were cut.

We started by cutting down the tree which had grown over the drain pipe and the large fir tree.

Cutting down the trees went surprisingly fast. Since we had the entire day we continued cutting down on some rotten trees and in general thinning out the amount of trees which were in the way. To assist we had a 4×4 which was very useful in pulling trees down in the right direction and in moving the cut down trees.

4×4 to assist with moving the cut down trees.

When the day was done there was a much better view and much more daylight! The increased amount of daylight is a welcome addition in the short winter days.

The view after the trees were cut down. One can now see the water in the distance, and the cabin receives much more daylight. There is also a decent gap in the tree line left to the house in the background

The cabin is now ready to be inhabited for a couple of weeks in a row. We have many jobs left which we hopefully can start on during the spring, but for now there is (some form of) running water, enough wood to heat the cabin and a decent view with sufficient daylight to not get depressed.

Cheers, Jesper

Roborock S5 Max

Please meet Dustin! For my girlfriends birthday I bought a Xiaomi Roborock S5 Max, after having talked about it for many months. I dislike vacuuming and do this at most once a week. My girlfriend on the other hand would like me to vacuum every day, so we both agreed this could be a very good solution for the both of us! The Roborock S5 Max is able to do both vacuum cleaning and mopping, and I haven’t been able to find any negative review of them, hence why I choose this model.

The Roborock S5 Max has the possibility to change the name. So after a short brainstorm session with the family ranging from Bob, JARVIS (which is already the name of the house) and Dusty we landed on Dustin.

First impressions

My first impressions with this product are very positive! Dustin has a LiDAR sensor peeking out from the roof, which it uses for navigation and mapping. The mapping feature is very impressive, as it creates a 2D map of my house while it is vacuuming. Simultaneously it logs on the map where it is and where it has been. In addition to the LiDAR it has a big bumper with a pressure sensor on the front to stop it running into low items, and sensors on the bottom preventing it from falling down the stairs.

Screenshot_20200628-102150
Screenshot_20200628-120551
  • Running Dustin for the first time. On the top, mapping the house for the first time. On the bottom, mapping and cleaning were done.

After the house was mapped you can manually divide it into different rooms. This allows you to clean specific rooms, or set different vacuum/mopping settings depending on which room it is in. The map also allows for setting ‘no go zones’ and ‘virtual walls’, which make it not go into a specified area.

The LiDAR is slightly offset from the middle. This means it can do a 360 on the spot to very accurately see depth, which means you can manually set it anywhere in your house and it is able to locate itself and automatically drive back to the dock. I have tried this a couple of times, and in ~80% of the instances it successfully managed to locate itself in the house and return to the dock.

Screenshot_20200628-173154
  • Mapping complete, and the house is divided into rooms. Also a no-go zone (the red square) and no-mopping zones (the purple squares) have been set up.

Using the map you can also drop a pin to where you want it to go to. After it reached this location, you can tell it to do a ‘Spot Cleaning’, which cleans an area of 1,5m² around that spot. Very handy!

Are there any shortcomings?

I have found a few so far. When the LiDAR sees a mirror, it is convinced the room is 2x bigger than it actually is due to the reflection. This causes it to misjudge where walls are, and it get’s confused as it tries to reach these spaces. In my case, when cleaning the hallway it finds that there must be a room connected to the hallway that extends into the wardrobe, and that it actually extends all the way into the living room. It then tries to drive around to the other side to access this room, only to see that there actually is a wall there. It tries this three times in a row before it gives up cleaning this area (but hey, it shows commitment!).

Screenshot_20200703-141416
Screenshot_20200703-141841
  • On the left, the map is shown as when Dustin is placed in front of the mirror. The closet is painted red in Photoshop, and it can be seen that the walls on the back of the closet have disappeared. On the right, you can see that Dustin tried to drive back and forth a couple of times, and that when it is on the back side of the closet the walls are drawn as they are.

Another shortcoming is that it sometimes gets stuck on the doorway steps, especially when it tries to drive parallel over the doorway steps. There might be a solution by creating a separate room over these doorsteps as suggested on Reddit, but I haven’t been able to test this properly yet.

Lastly, I haven’t been able to find a way to integrate this unit into my Athom Homey. To centralize all my automation’s I’d like to have it integrated into Homey, but unfortunately the Xiaomi Mi Home library is not updated which means it cannot talk to this Roborock model. For now I integrated it directly into Google Home (an integration that would normally have been done through Homey), which at least enables voice steering.

Conclusion

So far, Dustin has been vacuuming our house multiple times in the last week. The rest of the family seems to be happy with him as they are using him extensively and without my help. I have good faith in that I’m able to fix the doorway problem, and if all else fails I can always make them lower so that Dustin is able to clear them better. All in all, I am very happy we finally have one running around :).

If you have any tips/updates on the Homey integration or the other issues I’m seeing, feel free to drop me a comment below!

Awning Motor #2 – Installation & Configuration

Installing the Dooya awning motor was a bit cumbersome, due to the sheer size of the awning. Our awning is 7 meters long, which means that it requires at least 3 persons to lift the unit off and on the roof. In total we needed 2 installation attempts. During the first attempt we managed to remove the old, manual crank system and slide the motor into the awning. After we slid in the motor we found that the manual crank system was wider than the new motor, which meant the motor could not be slid in completely whilst also being attached to the side plate supporting the awning:

IMG_20200616_112025
IMG_20200606_170328

Old crank vs. new motor. The lower picture shows that the motor is not fully slid into the awning.

To allow the motor to be slid in completely there were basically 2 options:

  1. Shorten the support beam holding the awning to the roof.
  2. Use bolts to offset the motor from the side plate.

Shortening the support beam would be the most elegant solution, although this means that reverting to the manual crank at a later time will not be possible. The quality of the motor is not known, and failure is always an option. Therefore we chose to get some 50mm M6 bolts and a whole bunch of washers to offset the motor from the side plate. Simultaneously, the motor was rotated 180 degrees so that the power cable and antenna would exit on the top instead of the bottom, allowing for neater cable management.

The motor with the 50mm offset. Now the motor is fully slid into the awning.

After pairing the remote control to the motor and adjusting the outer limits, it was very satisfying to find out that it working well. It looks like the motor has enough torque to comfortably pull the awning back up, which hopefully means it won’t break in the near future.

Homey and Google Home integration

The remote control uses Z-Wave to steer the up & down movement of the motor. Homey is able to steer Z-Wave devices, and according to the Homey forums the Brel Motors app should be able to be paired to and control the Dooya DM45RM motor that is installed here.

Screenshot_20200616-121136
Screenshot_20200616-121217

On the left: Pairing the Dooya motor
On the right: The control interface in Homey.

Pairing was very simple. The app asks to push one of the buttons on the remote control that is already paired to the motor. From that signal it can determine the unique communication key to the motor (which ensures that a neighbor won’t accidentally control my motor), as well as the correct up, down & stop signal. A concern I had was that Homey was too far away to reliably control the motor, as it is positioned 3 rooms away from the motor, but the Z-Wave signal seems to have no problem reaching the motor.

My Homey was already integrated into Google Home. After a quick refresh, the Sunshade appeared in the Google Home app. Sweet!

And finally, it was time for a test:

You may notice that I say ‘close the sunshade’ instead of ‘lower the sunshade’. This is because Google recognizes the awning as blinds, which means they can only be ‘closed’ and ‘opened’. Fortunately this is not a problem whatsoever as it is easy to remember, and in the worst case Google doesn’t understand our command and we need to say it twice.

Some more Homey configuration

With Homey being able to control the awning, I could program a couple of ‘flows’. Flows can be compared with IFTTT applets that are managed and run inside Homey.

Screenshot_20200616-122944~2
Screenshot_20200616-123017

To the left: 4 flows to automatically steer the awning.
To the right: detailed view of the flow that lowers the awning.

I set up 4 flows for now:

  1. The first flow automatically lowers the awning at 11:00 if the weather is good.
  2. The second flow retracts the awning at sunset.
  3. The third flow retracts the awning when the weather applet shows it’s raining.
  4. The fourth flow retracts the awning when the weather applet shows the wind speed is over 39 km/h, which equals to Beaufort 6 or higher.

The flows that retract the awning will always run once they are triggered, regardless if the first flow has been triggered or not. This is because we are able to lower the awning manually with the remote control, and this motor only allows for a one-way communication. Therefore Homey has no way of knowing the current state of the awning. If the awning is already retracted, the motor is blocked by the end-switch and nothing will happen. To avoid spamming the motor with retract-signals a timer set to 1 hour is activated, which blocks new retract signals.

With this project done the balcony refurbishment is (for now) complete. We can now comfortably sit outside, enjoy the view and get ourselves some shadow whenever we want it with very little effort. The last couple of days have been quite sunny as well, so we have been able to enjoy our new setup quite a lot.

Renovating the balcony

It’s Corona-time! Therefore (almost) everybody has a lot of time at home, including me. In order to make the most out of the situation my girlfriend and I decided it was a good idea to invest some time and money into our balcony as we can see this directly from the living room. During the day this is also the part of the house that gets the most sun as it is located at the south side of the apartment. Renovating this part of the house will therefore allow us to enjoy the outdoor weather during the spring/summer and simultaneously improve the view we have from inside the house.

The first step in renovating the balcony was to make a list of things that needed to be done.

IMG_20200503_103223
IMG_20200503_154832
IMG_20200503_154844

The situation before the renovation

  • The floor was rotten, so that needed to be removed. Underneath the wooden floor were stone tiles, which we decided to leave in place as they made a relatively flat surface, were pretty heavy, and we wouldn’t know if the concrete below would require a lot of maintenance (what you don’t know can’t hurt you).
  • All the grass in the planter needed to be removed to make room for new plants that look better.
  • The walls and planter could do with a paintjob.
  • To make the balcony safe(r) a wooden fence was placed onto the planter. To allow for painting, the fence has to be disassembled, and can then painted as well.
  • There are plans to do a large overhaul on the balconies and planters in this neighborhood in 1-2 years. One option we considered was to build a terrace similar to the one build on the veranda at the other side of the apartment, however this would have to be destroyed if they start the large overhaul. We therefore decided for IKEA RUNNEN decking, which both looked good and is easy to remove again when necessary.
  • Lastly we wanted some nice lounge seats so we could sit outside in the sun.

Preparing the balcony

I started with removing the wooden fences. This was easy as they were hanging on the planter with the help of hooks, and they were only fastened by screws in the bottom. After removing the fence it was time for the grass and the floor. First the grass was gathered in waste bags, after which I cut up the floor in pieces of 90cm (so they would fit perpendicular in the trunk of my car).

IMG_20200503_154844
IMG_20200507_141857

Before and after the floor and grass removal

I then could drive all the old flooring to the local landfill. With everything removed it was the perfect time to paint the walls. Both the red and the white had to be done, so on a nice (semi) sunny day I set to work.

The result after painting red and white.

To determine the color of the fence I made a 3D model of the balcony in Google Sketchup. In our area there are 3 common colors: red, white and brown/black. The 3D model allowed us to quickly change the color to see what looked best:

Balcony_brown
Balcony_red
Balcony_white

In the end, we decided white would look the best. Brown/black made it look like a barcode, while red would not really fit onto the white planter and the trees in the background. We therefore choose to paint the fence white.

The rebuild

It was then time to lay the new floor. The RUNNEN floortiles are very easily clicked into place, and give a very nice result for such a short time. I again made a timelapse of the process, which can be found below:

At this point, we bought some plants and planted those in the planter. After replacing the fence and securing it into place the balcony was almost done.

IMG_20200514_172147

Lounge set

The last thing that was missing was a nice place to sit and enjoy our newly refurbished balcony. After some consideration we again reverted to IKEA, this time to buy an ÄPPLARÖ 4-seat lounge set.

I’m really looking forward to drink a cup of coffee there during the morning, and to enjoy a beer during the evening. The entire family is happy with how it turned out, and hopefully we’ll get a lot of sunny days this year to enjoy the outdoors!

Awning Motor

I bought this 200 watt motor to motorize our awning. This specific model is a Dooya DM45RM tubular motor, which is able to deliver 40 Nm of torque. Hopefully this will pull our 7 meters long sunshade in and out without problems.

As a bonus, it looks like this unit can be connected directly to Homey, which also means a Google Home integration (via Homey) is possible (‘Hey Google, give us some shadow’). I’m looking forward to install this bad boy!

Home NAS Server Setup

This website runs on an Intel NUC.

Actually, a lot of things are now running on this little NUC. Before showing you exactly what processes/services are running, please allow me to explain why I have this NUC in the first place.

Home Assistant and the NUC

In our previous house I was running Home Assistant on a Raspberry Pi. Home Assistant is a piece of software that can observe, control and automate nearly anything that can be part of a smart home. In my case, I had the following devices connected to it:

Linking all these devices together required something more robust than a Raspberry Pi, hence why in April 2019 I bought an Intel NUC NUC6CAYH. This little fellah has an Intel Cerion CPU, place for a maximum of 2x 4GB of DDR3L RAM, can house a 2.5″ hard drive and has a 1Gb ethernet port. I figured that this was a very good alternative for a Raspberry Pi, whilst also keeping my wallet in mind.

This NUC ran Home Assistant (or HA for short) very reliably, although the HA software itself needed quite some maintenance, up until we moved in December 2019. The NUC disappeared in a box, and at the new house I bought an Athom Homey to take over the task of HA in an attempt to limit the amount of maintenance work. This is why I had a NUC laying around when I decided to start setting up a Home Server in January 2020.

First step: Setting up a NAS file server

When I started on this project I knew nothing about file- or NAS servers, but I imagined that there would be open source software out there that could help me out. I had decided that I did not want to buy new hardware, as things could be tested on the NUC first to see if it would be good enough.

Two names that kept popping up were FreeNAS and Unraid. They both looked equally good candidates for me, so I picked the one that felt like it had the best chance of succeeding -> FreeNAS. Over the last couple of months I have been very happy with this choice. FreeNAS is running very stable and is in my opinion easy to use. The initial file server setup was a breeze, and in no-time I had a functioning NAS server which could be accessed through a PC with Windows Explorer (via a Samba share).

FreeNAS has a functionality which are called ‘Jails’. Jails are, very shortly explained, little isolated operating systems that use the same kernel as the hosts operating system. This means that they are more lightweight to run than a Virtual Machine as they dynamically share available RAM, CPU & HDD space between the host and other jails, but simultaneously are compartmentalized from the host. Processes run inside the jail can only access files inside the jail, and processes/files inside the jail are not aware of any file outside the jail. An additional (much better) introduction to jails can be found here. All in all, they are a perfect place to run additional programs/services without the risk of breaking my entire NAS system.

The current setup

The current HW setup, including PS4 Pro and Philips Hue bridge

Hardware

The current hardware today is, as I mentioned, running on an Intel NUC. This includes:

The HDD’s are set up in a mirrored configuration. That means that all data is copied on both drives, giving me an effective storage capacity of 2 TB whilst also protecting myself from a disk failure. This is also called a RAID 1 setup.

FreeNAS Software setup

The current setup is running 3 jails, 1 Virtual Machine, a samba share and some additional smaller services inside FreeNAS:

FreeNAS services setup
  • The Samba share allows us to access files on the server when we’re on the home network.
  • The website that you see right now is running inside a Jail.
  • A second jail contains NextCloud. NextCloud mainly allows for automatic synchronization of pictures and videos from my phone to the server.
  • Since there are multiple websites that I want to access from this web-address there is a jail set up that acts as a Reverse Proxy server.
  • Lastly I have a virtual machine that runs PiHole. PiHole is software that blocks advertisements on my home network. Unfortunately it cannot run (yet) inside a FreeNAS jail as it does not support FreeBSD, the operating system FreeNAS runs on.

So how do all these services work together? Well, that’s a different view:

Networking flow

Starting from the bottom, there are the NextCloud storage, this blog and the magic mirror which are accessible through the internet via the reverse proxy. There is also the Samba share which is accessible only on the local network for privacy reasons.

In the middle of the picture is the router which obviously has access to the internet. All DNS requests are however forwarded to PiHole. A DNS request is a request for a name server to translate the domain name of a website (for example jessendelft.org) to an address (for example 217.197.166.65), in order to connect to that address. PiHole blocks any requests to known advertisement addresses so that these requests never get resolved, which means they will not load. This way there is network-wide ad-blocking for all devices connected to it.

I have some plans of integrating Octoprint into the Reverse Proxy once my 3D printer is back up&running. I also want to move PiHole to a jail to free up some RAM and HDD space which are now reserved by the Virtual Machine.
If you have any more ideas on what I can do to improve my setup, please let me know!

Installed a mesh WiFi network

Yesterday I bought this ASUS RT-AC66U router with 2x Lyra Trio routers. These together form a mesh network at my home, giving me a whopping 1.3 GB/s of theoretical speed on the 5GHz network.

Top Gun I Feel The Need GIF - Find & Share on GIPHY

So how much do I actually get? My subscription should allow for 600/600Mbps. The following is measured on the 5GHz WiFi in the living room while the access router is a few rooms away.

It’s not 1.3 GB/s, but for a Wi-Fi connection this is not bad at all.

Still, I wanted to try and reach the maximum that I’m paying for. So in the next measurement I turned off the QOS settings in the router (to prevent it from reserving bandwidth for other services), and attached my PC to one of the LAN ports. The results speak for themselves:

So hopefully this should allow us for problem free streaming, downloading, gaming and video calling during the current Corona lockdown.

Building a terrace

We recently moved to a new house. This house has a veranda, which included a terrace that covered ~60% of the total area. The rest was covered by some (poorly grown) grass and a small playhouse for the children.

Overview of the veranda
Overview of the veranda

Our plan is to extend the terrace to cover at least all the grass for 2 reasons:

  • The grass’s condition is really poor, and there are a lot of small stones. We have a baby that soon will start to crawl around, and don’t want her to hurt herself on the stones or start eating the grass.
  • We have a second child which is almost 11, who would love a trampoline.

To determine the amount of materials needed for this job (and to have a good reference), I measured the veranda and drew it into Google Sketchup:

3D model of the veranda
3D model of the veranda

The most common small-sized trampolines we can buy in our local stores are 3 meters in diameter. Inside the 3D model I drew a 3 meter wide trampoline and saw that it would just about fit in the middle of the veranda once the terrace was build. It would however be a tight fit with the children’s playhouse and the project that I’m planning on the left side of the veranda.

With this in mind we planned to see how things worked out by leaving the children’s playhouse intact and start building the terrace.

The build

Firstly, I removed the grass, stones and started digging holes which would later be filled with gravel to support the terrace.

Our first thought was to save ourselves some work and leave the playhouse intact, building the new terrace around it. Around halfway into the digging, we decided that this lazy approach was not the right way to do it. It would be better to build the terrace all the way, to allow the playhouse to be placed more freely afterwards. Below is a video of how this process looked.

Digging the holes was hard work, as the ground was quite wet and felt like clay. But after a week of digging, everything was removed and the part that I’m really diggin’ (badum-tss), namely the building part, could start!

I’m diggin’ it!

I got some help from my brother- and father-in-law who were kind enough to buy me the building materials and drive them to our house. I also need to thank them for loaning me much of the equipment I needed for this build. So thank you!

Placing anti-root fabric and gravel

After placing the support structure, the final layer of wood could be build. While doing this I attempted for the first time to make a time-lapse video, which turned out exceptionally well.

And when all the sawing, screwing and building was done the end result looks like this:

Jump! Jump! Jump!