Just a short post, of a small project that I just thought was fun to film.
I’ve sanded the entire veranda down and put some fresh stain on it. Before doing the last bit I decided to film and share it.
Cheers!
Just a short post, of a small project that I just thought was fun to film.
I’ve sanded the entire veranda down and put some fresh stain on it. Before doing the last bit I decided to film and share it.
Cheers!
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:
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.
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:
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 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.
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.
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 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.
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.
Having learned from the first light post I’d now made the following improvements:
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.
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.
The final 2 light posts, standing upside down and ready for transport.
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.
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?
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.
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.
The first test. They all light up!
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.
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:
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:
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:
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.
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.
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.
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.
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.
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:
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.
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!
Sometimes when I’m browsing the web I come across something I just feel I have to try. The other day I was recommended a video of somebody who built a system that can receive NOAA Weather Satellite images. The cool thing about these satellites (NOAA-15, NOAA-18 and NOAA-19) is that they fly overhead roughly twice a day and beam down weather information as they pass by. This includes a visual scan of the earth, participation measurements and a bunch of other values. The data is free to be picked up by anybody who owns an antenna and is able to tune in to the correct frequency (~137MHz).
People naturally have already developed tools to receive and process this information into readily available pictures. One such tool is this project, a software collection that runs on a Raspberry Pi. Since I have a few of them unused laying around I practically only lacked an antenna and a SDR (Software Defined Radio). So I went ahead and ordered a kit that includes both. The antenna is a bit primitive but will surely do to get started.
If tests are successful my plan is to build a proper antenna (a QHF antenna seems pretty good) and place it at our cabin. From there I can auto-upload the pictures to my server and have them displayed on my Magic Mirror once they come in.
I own a Yamaha Diversion XJ600S from 2001. I bought this beauty in February of 2015 back in the Netherlands, right after I got my A2 driver’s license. Since then I’ve ridden over 20.000km with it, and over time I have installed some upgrades to improve safety, appearance and comfort.
In 2015, my Diversion had the following:
In 2018 I built a custom digital display. This is a 1.3″ OLED display with 128 x 64 pixels. I installed this board inside the speedometer cockpit.
The display shows me the following information:
It also has the possibility to add an SD-card to log the trip and a secondary temperature sensor which can measure the engine temperature. I however never implemented these options in the software, which I’ve also written myself.
In parallel with this change I swapped all the incandescent lightbulbs inside the speedometer unit for LED lights. They light up brighter, increasing the visibility of the analogue meters and indicator lights. Lastly I changed the backlight from an incandescent bulb to a unit which has LED’s and has a smoked screen.
In April 2021 my Diversion was in need of its usual yearly service. Transporting it to the workshop was done inside a closed trailer, and when the doors of the trailer opened it showed that my Div had fallen over on both sides, breaking both the left & right mirror and the windshield.
The shop didn’t feel much for repairing such an old bike, so after a bit of mental revalidation I decided to take this opportunity and order many other parts of the bike that I deemed needed upgrading. So in addition to a good clean and some silicon spray to make it shine nicely, the following parts ended up being replaced/added:
This headlight unit is actually made by a Norwegian, who developed this kit specifically for the newer Yamaha Diversion XJ600S models. The standard headlight of the Diversion lit the road quite poorly, so this upgrade was much needed. It also changes the appearance of the Diversion quite drastically, shaving off at least 5 years of its visible age.
At this point I have recently done the upgrades written above, and I’d like to get some kilometers with them to see what I like and don’t like. I have plans to install engine protectors, which ‘catch’ the bike in case it falls over. At some point in time I also need to upgrade my A2 driver’s license to an A license, which would allow me to unleash the full 61 horses inside the engine (or however many are left after 20 years).
I’m also considering installing handlebar protectors, but my main point of irritation has been the indicator lights on the back. I haven’t been able to find a good replacement of the incandescent bulbs due to the way they are mounted on the GIVI rack, nor have I been able to find clear covers for the lights which would allow the placement of yellow LED bulbs. Those bulbs are right now the last non-LED’s on my Diversion, and replacement of these two is in my opinion way overdue.
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.
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.
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.
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.
A few hours of work, and suddenly we had running water!
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.
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.
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.
While we were working outside I installed some Christmas lights to make it a bit more cozy.
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.
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.
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 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
My parents and I, who come from the Netherlands, have recently bought a cabin in Norway. We have a lot of wishes and ideas for this cabin, but one of the first projects I started on right after we signed the contract was the setup of a VPN server on a Raspberry Pi. The goal is to have any device connecting to the WiFi in the cabin appearing to be in the Netherlands, so that my parents can ‘work from home’ from the cabin and can stream Dutch TV and Dutch Netflix. For this to work, we need a router that can act as a VPN Client and a VPN Server to connect to.
By having the router connecting to the VPN Server, any device that connects to the router will also be connected via the same tunnel to the internet. By installing the VPN server on a Raspberry Pi, I can just ship a readily installed unit to the Netherlands with minimal setup steps for my parents while they remain 100% in control of their VPN endpoint. This is important to ensure that for example Netflix will not block their stream, as any data appears to come from their own home instead of a (known) VPN provider.
For this project we use the following components:
I recently bought an Asus RT-AC66U B1 router, which I know can act as a VPN Client. The Asus 4G-AC68U is a model from the same product line, which also includes a 4G simcard slot.
Software-wise, we only need only a handful of services/programs:
The first step is obviously to flash Raspbian on an SD-card and shuf it into the Raspberry. I’m using Raspbian Lite since we know exactly which software packages we are going to use, and any dependencies will be installed with them. This will keep the overall system performance as high as possible.
After setting up Raspbian, we use SSH to log in as root and install PiVPN. PiVPN will install either OpenVPN or WireGuard, in our case OpenVPN as this is also supported in the Asus router. I have set up the IP configuration to be dynamic, so it can adapt to the setup in my parent’s house once it arrives in the post. Other than that I’ve used the standard settings, obviously choosing the right DNS Provider (Google Domains). I had also set up a Dynamic DNS entry in Google Domains prior to the Raspberry Pi installation, which will be used for this VPN setup.
Since I don’t know the public IP address of my parents house (and they might have a dynamic IP address that changes every once in a while), one can use Dynamic DNS. Basically, Dynamic DNS checks the current public IP address of the host and sends this to a pre-configured DNS provider. The provider matches the IP address, for example 185
I generated two OpenVPN configuration files which can be uploaded to VPN Clients and allows them to connect to the server, one for the Asus router and one for my private PC so I can test & debug the entire setup. These configuration files include instructions to use one of my subdomains to find the current public IP address of the OpenVPN Server in the Netherlands. This keeps the setup easy and flexible.
Lastly, I entered the Wi-Fi credentials of my parents house in a file called ‘wpa-supplicant.conf’ and placed this in the /boot/ folder of the Raspberry Pi, so they can use it both in wired and wireless mode. After running a few tests it was then ready to send it in the post, and hope that all works! I also included a guide for my father to set up the required port forwarding in his router in the Netherlands, so the VPN Server can be found from the internet.
When the Raspberry Pi had arrived in the Netherlands it was time to put it to the test. We forwarded the required port in the router, gave it a static local IP address and attempted to connect from Norway.
Connecting was successful!
However, the test-pc did not have internet access.
Some debugging later revealed that the ethernet port did not have the default eth0 name, but something more tropical. Changing the name of the ethernet port in the configuration (iptables) fixed the problem and allowed internet access through the VPN tunnel. Hooray!
Lastly we installed Log2Ram, which limits the logging done to the SD-card to extend the lifetime of the system. SD-cards can get corrupted when written too often to, so in order to limit the amount of write cycles Log2Ram will save all logs in RAM memory and only once a day write the entire logfiles to the SD-card.
A reboot to make sure everything works and it was finally time to check the speed of the connection!
Honestly, this is 10x as high as expected when we started on this project so we’re certainly very happy about this! This will allow my parents to comfortably travel to their cabin and use the internet, while they appear to be in the Netherlands.
In my search for a way to display the data being collected by Homey I often have seen Grafana as an option. Grafana is a tool to visualize data in graphs, gauges, tables, etc. It reads data from a database, is very responsive and easy to work with. As a bonus, FreeNAS offers a community plug-in which has both Grafana and InfluxDB installed and ready to go, so I could easily set up a jail to try it out.
Homey by itself does not log any data. To have it upload its variables to the InfluxDB database I just had to install the InfluxDB App, fill in the IP address of the Grafana jail & credentials of the database, et voila! From the Grafana interface I started seeing the potential Query fields being populated with all the data that Homey had to offer. Not much time after that, I had my first Dashboard populated with energy measurements, real-time power consumption and temperature data from different rooms in the house. With a little more playing around this Dasboard was shown as an iframe on my Magic Mirror.
After doing this I realized that FreeNAS is also a great source of data (CPU usage, network & HDD speeds, RAM usage etc.) and a place where I’d like to get some more overview of what’s happening. Naturally, a quick Google-search yielded tons of people who had done this before, and I followed this guide to get FreeNAS to upload its data to a separate InfluxDB database and create a Dashboard in Grafana. I then used this dashboard as an inspiration to create a similar one for Homey and by the end of the day I had 3 different dashboards which give me a neat insight in how well my core-components from my smart home are working.
An additional line in the reverse proxy configuration and the Grafana jail was accessible through the internet. Curious on how it looks? You can find it here: cloud.jessendelft.org/grafana/.
Username: viewer
Password: viewer123
I am not sure yet if I want to keep using this system, as I ultimately want some form of 2D/3D interactive map of my house to show this information. As an interim solution though, this is quite nice and I was surprised by how easy it was to include this in my system. I like the fact that all the ground-work is up and running (FreeNAS, Reverse Proxy, Homey, etc.), and that it apparently is working so well that it is easy to build layers of complexity upon them with for example the Grafana dashboards. If you have comments/ideas on what I can do with my data, or how I can improve my system even more, please let me know in the comments!
Cheers!
Jesper
I can’t believe this project took me almost a year to complete! In August 2019 I was browsing around Thingiverse for some cool idea’s to 3D print, when I found a Steampunk Tap Handle made by Fuzzie/The Beergineer:
I knew I wanted this as well, so I 3D printed the parts, spray-painted them and assembled them together with some scrap tubing and 8mm screwing rods. I also had some leftover APA102 LED strip from the Ambilight system laying around which could be used to light up the tap handle, and I ordered a couple of Arduino Nano’s to control this LED strip.
The prototype was up and running rather quickly. I put the Arduino on a breadboard, connected the light strip to it and uploaded the code from The Beergineer. Before it worked though I made some changes to the code, which can be found on Bitbucket (including the changelog). Most notably I introduced interrupt-based reading of the push button opposed to polling it. This push button is used to change the light pattern shown inside the tab handle. I also programmed it so that every time the button is pressed, the new state is written to EEPROM so the same light pattern is shown after a power outage. Lastly I changed the main loop from an if-else loop (which had 4 if-statements) to a switch, to prevent unnecessary calculations.
And it was at this moment where this project ended up in a moving box, and didn’t find it’s way out until June 2020…
Almost 10 months after I started this project I dug up the beer tap as we would be going to our cabin during the holiday, which is where I planned on installing this. Before installation the Arduino was put inside a plastic box and covered in hot glue, to give it some resistance against rain. I soldered the wires to the headers, installed a push button on the outside of the case and put a Molex connector on the wires to make installation easy. Additionally I added a switch connected to the Arduino, which can turn the LED’s inside the handle on and off.
At our cabin we have a refrigerator with a beer tab on top. Installation was a matter of unscrewing the old tab and screwing on the new tab.
During the night, the LED’s inside the Tab Handle create a very cool looking scene:
I think this was a fun little project to do. Unfortunately I wasn’t able to properly hide the cables as the metal in the tab tower was too strong to drill through with the tools we had available at the cabin. Therefore, they run on top to the black box which holds the Arduino. Other than that, I am very happy with the result.
Cheers! And don’t forget, keep Beergineering!
Jesper
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.
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.
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.
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!
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!).
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.
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!