Fibaro Universal Sensor (Z-Wave) Review
This is a both a review and a project, featuring the latest 'universal sensor' from Fibaro. This Z-Wave module provides two generic digital inputs and a 1-Wire network gateway for up to four temperature sensors. Our goal is to test the device whilst applying it to this project. We plan to measure the temperature at the top, middle and bottom of the hot water tank. We also plan to measure the temperature in the airing cupboard. The digital input sensors will be used to detect if the airing cupboard door is opened and whether the hot water heating (currently controlled by a simply controller) is on.
This module can be controlled with any Z-Wave controller and is compatible with regular and parametric alarm lines (supporting up to 2 alarm detectors). We are using it with our MiCasaVerde VeraLite controller.
In The Box
Our sensor was supplied by Swarm Automation. It comes in the standard size (65mm × 65mm × 45mm) Fibaro box and contains the device and an A4 Operation Manual (PDF document). As you can see from above photo, the device is tiny (30mm × 14mm × 12mm). Most of the volume consists of the 4 screw terminals and there are six 140mm long flying leads and an 80mm long aerial lead. There is also a small push-button on the module to support Z-wave inclusion.
These are the pins/wires:
The device requires a dc supply voltage between 9 and 30V. This means it could be battery or transformer powered and as such it could be used for a wide range of applications.
The I/O capability supported by the device is:
- A pair of binary input sensors.
- A 1-Wire network interface/bridge (1-Wire to Z-Wave) that can support up to four DS18B20 temperature sensors.
- The two inputs are mirrored as outputs that can drive loads up to 150mA.
Installation & Configuration
The plan is to wire the module up with four DS1820 temperature sensors. The DS1820 temperature sensors are mounted into holes in the tank insulation with one at the bottom of the tank, one in the middle and one at the top of the tank. The distance between the sensors is about 55cm. The other one sits in the airing cupboard, next to the Universal Sensor module (about half-way up the cupboard). Wires will run to the door contact switch (uses a reed relay and magnet hidden in the door and door frame).
First job was to solder up the string of four temperature sensors. These are spaced out at 60cm intervals. The leads are soldered and covered in heat-shrink sleeving to stop any shorts.
Each one is then sleeved in heat-shrink again to enable it to be pushed through the tank insulation. In places this is 65mm thick.
This is the completed wiring 'loom'. When we powered the module up it took 11.1mA at 12Vdc.
Before we started, we installed the latest software update for our MiCasaVerde VeraLite controller. This prompts you to save a backup of your Z-Wave configuration, which is advisable.
The next thing to do was the Z-Wave Z-wave inclusion. This is achieved by putting the Vera into inclusion mode and pressing the button on the module quickly, three times.
The device was picked up and appeared in the Vera UI as four '_Generic IO' devices and two '_Motion Sensor' devices:
This is a known configuration problem, which can be fixed. For each device showing up as 'Generic IO', we went into 'Settings', then 'Advanced' and changed the 'device_file' entry to 'D_TemperatureSensor1.xml'. This then changed the view in the Vera UI to this:
This is good! The temperature sensors all showed the same value of 23ºC, which is because they were in our study as we tested it. It could now be installed in the airing cupboard.
Before the sensors are installed onto the hot water tank though, we needed to know which one was which in the Vera UI. This is simply a matter of holding the DS1820 sensors and seeing which recorded the temperature increase. We then changed the advanced settings to rename these temperature sensors, 'HW Tank Top', 'HW Tank Middle', 'HW Tank Bottom' and 'Airing Cupboard'. We installed the sensors and taped over the wires to stop them getting caught on anything by accident. Checking the sensors once installed we could see the following values: 'HW Tank Top' = 39ºC, 'HW Tank Middle' = 36ºC, 'HW Tank Bottom' = 34ºC and 'Airing Cupboard' was 27ºC. These values were as expected since there were measured at 1pm and since the water went off at 8am, several baths and showers had been run.
Z-Wave Universal Sensor
The Universal Sensor has a large number of advanced settings, which are exposed via the controller UI.
Parameters 1 to 4 are for the binary inputs.
Parameters 5 to 9 are about Z-wave association.
Parameter 10 is the interval between reading the sensors and we left this at its default value of 20s.
Parameter 11 is the interval between forced sendings of the temperature reading back to the controller. The default value is 200s but we want a more frequent updates as the temperature of the water in the tank will change quite quickly. We set this to 30s.
Parameter 12 sets the granularity of temperature reporting by the module. The default value is 8, which equates to 0.5ºC. We left it at this value as we are working to ±1ºC anyway.
Other Possible Applications
This device is small enough to fit within standard PIR sensor, to Z-Wave enable it. It would then also be quite simple to add a single DS1820 device to capture temperature but, PIR sensors are not usually well located for this purpose. We know that there are Z-Wave devices available that do this already but, this enables the same sensors to be used throughout your home, regardless of the interfacing technology used. In our case, these would also then be powered by our 12V UPS.
This module could be interfaced to pretty much any sensor, to Z-Wave enable it. Gas leak detectors, rain sensors, etc.
Because of the low current consumption, binary inputs and temperature sensing capability, we can see this being a useful sensor to add to our shed project. We will use it to provide a door contact sensor on the shed door, twilight sensor for our garden lighting and temperature sensors inside the shed, outside and to also measure ground temperature.
The plan is that we can monitor the temperature in the hot water tank at three points and from this estimate how much hot water is available. This could then be used to intelligently control the hot water heating system, which is gas powered in our current house. This would save a lot of energy because the hot water is currently controlled by a simple programmable timer. The Universal Sensor is simply being used here to wirelessly collect temperature information and report it back wirelessly, over the Z-Wave network. All that is required in the airing cupboard is a 12Vdc power feed.
We used an 8mm masonry drill bit (because it is not sharp and won't puncture the copper water tank) and did this next bit by hand. The last thing we wanted to do was damage the hot water tank! We made holes in the foam insulation in the marked locations and cleaned them out, so that we could see shiny copper at the bottom of the hole. The sensors were then pushed in to ensure a good contact on the tank and sealed in place using silicon sealant.
We have run a 12V dc power line into our airing cupboard from our 12V UPS. This also ensures that the whole of our Home Control System (HCS) and Z-Wave network will remain operational during power cuts.
We have configured a scene called '1min' on the VeraLite, which is scheduled to run every 60 seconds. This scene uses has the following Luup code to send temperatures to our Home Control System (HCS) using socket layer comms:
local socket = require("socket")
host = "192.168.x.x" local sensor = luup.variable_get("urn:upnp-org:serviceId:TemperatureSensor1","CurrentTemperature", 18)
c = assert(socket.connect(host, xxxx))
c:send("Zwave,Airing Cupboard,Airing Cupboard Temp," .. sensor)
c:close() local sensor = luup.variable_get("urn:upnp-org:serviceId:TemperatureSensor1","CurrentTemperature", 19)
c = assert(socket.connect(host, xxxx))
c:send("Zwave,Airing Cupboard,Water Tank Top Temp," .. sensor)
c:close() local sensor = luup.variable_get("urn:upnp-org:serviceId:TemperatureSensor1","CurrentTemperature", 20)
c = assert(socket.connect(host, xxxx))
c:send("Zwave,Airing Cupboard,Water Tank Bottom Temp," .. sensor)
c:close() local sensor = luup.variable_get("urn:upnp-org:serviceId:TemperatureSensor1","CurrentTemperature", 21)
c = assert(socket.connect(host, xxxx))
c:send("Zwave,Airing Cupboard,Water Tank Middle Temp," .. sensor)
The Home Control System (HCS) receives these messages and if the values have changed, it logs them in our HCS log. These can then be processed at a later date to generate graphs and are also used in our HCS web interface, to generate dynamic graphs.
We have yet to wire these up.
What Can We Learn?
In this application there are a number of things we hope to learn from monitoring the hot water tank temperatures:
- We want to know how long it takes for the tank to heat up from cold (i.e. hot water has been off for many days) and how long it takes to heat up from the previous day (the water holds some residual heat for quite a long time). This would allow us to better control the hot water and save a lot of money on gas. The majority of our energy spend is on heating hot water in the summer months. If we could only have the hot water heating on when needed, we think we could cut the amount of energy used significantly. This project aims to prove this.
- If we manually boosted the hot water heating, we could control it, so that the water heating is switched off when the tank is up to temperature. Currently this is a manual switch that we have to switch on and then off. Some controllers have a 'boost' button, which heats water for a defined period (e.g. +1 hour). We think this method of control would be much more efficient.
- It is quite likely that there is enough hot water generated in the evening and residual heat, such that we don't need to heat the water in the morning. This project aims to validate this.
- We would like to see for what % of time the hot water is currently on and the hot water tank is up to temperature. In the short term this would allow us to make better use of the existing manual controller.
- Given the data and evidence above, it should be easy to form a 'business case' to support full automation of our hot water system.
What Have We Learnt?
We did a quick test and plotted some initial data collected below. The first thing is showed us is that the hot water takes longer to heat up than we thought. The middle of the tank took 12 minutes to rise just 6ºC. The other thing to notice is that the bottom of the tank heats up quicker than the middle of the tank and sometimes appears a degree hotter than the top of the tank. This is because the heated water is entering at the bottom of the tank.
Having left the hot water system running for a few hours, the steady state we see is: 'HW Tank Top' = 42ºC, 'HW Tank Middle' = 41ºC, 'HW Tank Bottom' = 43ºC. This means that we could switch the hot water off once these values are reached.
From this state, a single bath being run in the house caused the temperatures to drop to: 'HW Tank Top' = 41ºC, 'HW Tank Middle' = 38ºC, 'HW Tank Bottom' = 38ºC.
30th July 2012
This next graph is the first complete day of captured data and shows a 24-hour period as rendered by the web UI for our Home Control System (HCS). You can read more about how it was generated on our data visualisation project page.
You can see the temperatures in the tank settle down and slowly drop through the night. At 6am the hot water (gas boiler) heating kicks in and at 07:00 a shower is run. This has a greater impact on the water temperature at the top of the tank and less so in at the middle. At 07:55 a bath is also started to be run and at 08:00 the boiler goes off. The water temperature thus drops off much faster. At 16:00 the boiler is started again and at 20:05 a bath is run again.
What can we imply from this graph?
- It is hard to tell as the shower was used whilst the boiler was on and the bath was run when it wasn't but, the shower seems to have much less impact on the tank water temperatures (less water used). We will specifically try to measure this though to confirm it.
- So far, 46ºC is the hottest temperature we have seen in the tank. This is lower than we expected.
- The boiler can heat the tank up in the morning in less than 26 minutes.
- It's not being shown here but we are also logging the temperature in the airing cupboard too. It has never exceeded 28ºC, which implies the tank insulation is pretty good. The airing cupboard temperatures are also quite even, which implies that it is quite well insulated too (it is a double skinned with plasterboard and insulation between). In our next house we would make even more of an effort to insulate the hot water tank(s).
During a holiday in August we recorded how the hot water system behaved when not in use. This gave us a baseline to measure from and a feel for how well the tank retains heat.
The focus has been on trying to relate tank temperatures to an accurate measure of hot water capacity in the tank. We want to be able to say that there is enough hot water in the tank to run a bath or shower. We are well on the way to doing this now and have a calibrated measure as a percentage from 0% to 100%.
To achieve this we started with a fully heated tank and summed the temperatures at the top, middle and bottom of the tank. The number equates to 100%. We then used water from the tank until the temperature from the taps was no longer hot. At this point we summed the three temperatures again and called this level 0%. This assumes a linear relationship between the sum of these temperatures and capacity but, that's our starting point for now.
We then worked out how much hot water a bath and shower used, to validate the above assumptions and calculations. If we plot them on a graph we can see a pretty good correlation.
This is a really impressive little device! It's very compact dimensions mean it could be used in a large number of applications. It has been designed for battery use in mind but, we would like a version that powered by a 12V power network and thus improved by having the ability to relay Z-Wave messages. This permanent power supply would also allow the device to be polled.
When used with our MiCasaVerde VeraLite controller, the temperature resolution is limited to ±1ºC despite the DS18B20 devices capturing temperature to much higher granularity. This is not a limitation of the Fibaro device but, a limitation of the VeraLite controller. With this application a 0.5ºC resolution would be better.
We notice that these new temperature sensors do not show up in our iPhone Vera Mobile app. We haven't tested it out yet but apparently, the Android Home Buddy app for VeraLite does register the temperature sensors correctly.