August 27, 2014

Troubleshooting the Wireless Pulse Counter

In most cases the Wireless Pulse Counter is just plug and play. But if you do have problems getting readings from your Wireless Pulse Counter, please have a look at this trouble shooting guideline.
I will update this post when needed.

First. Make sure your Tellstick DUO/NET have a firmware equal to, or higher than 12 for DUO or 17 for NET or 79 for RFXtrx433. Here is more information for the Tellsticks, http://developer.telldus.com/blog/2014/04/03/tellduscenter_2.1.2. In this firmware version there has been a correction in the Fineoffset protocol that enables the checksum feature in the protocol. This will ensure that you do not get any false readings.


The WPC does not show up in TelldusCenter (or similar):
  • Make sure that the LED on the WPC is blinking once every minute. The LED blink when it transmit data. Even if it has not detected any blinks.
  • Make sure that the Tellstick blinks at the same time the WPC LED blink. This indicates that the Tellstick have received and decoded the data.

The WPC show up in TelldusCenter (or similar), but the counter value is not changing:
  • Make sure that the "eye" of the WPC can receive pulses. Aim a standard TV-remote to the "eye" and press a button. Make sure that you do this where there is very dim light. The next transmission you get should then be seen as an increased value.
  • If the LED blinks more often than once every minute. If it blinks every 10 seconds or so. Then it is likely that you use a USB power pack that is too "smart" for the WPC. Some of the power packs automatically shut down if there is no load. The WPC draws so little power that some of the power packs thinks that nothing is connected and turns off and on. When it restarts all the time, it will always send the same value.

The WPC show up in TelldusCenter (or similar), but the counter value is unreasonably high:
  • It is likely that there are false detections. This could be due to light coming in from the sides of the WPC and the Electric meter. Use for example styrofoam to make a tight mounting. Cut out a sheet and make a small hole for the WPC "eye" (the phototransistor) and place it all right on top of the LED on the Electric meter.

August 20, 2014

WMS Mk2 - Currently supported devices

Here is a list of currently supported devices (WMS Mk2 sold after August 1st, 2014).
http://foogadgets.tictail.com

EDIT (2014-09-15): I have removed the support for DS276X since the configuration of the chip and also the extra calculations needed to present a valid sensor reading, was too complex.
To read Thermocouples I recommend the MAX31850 instead.


1-wire networks could be big as long as they are well built. The WMS Mk2 has successfully been tested in a network with 33 sensors and 75m length.


August 13, 2014

New Firmware and Manual for the WMS Mk2

Just before the summer vacations I finalized the Wireless Multi-sensor Mk2 firmware that I have been working with for quite some time.

News,

  • CO2 sensor S8 from SenseAir is now supported. It can be connected to the Event Input after changing the input mode of the Event Input (c.f. Manual). You can get the CO2-sensor here.
  • MAX31850K support. This chip is a Thermocouple Type K to 1-wire chip. This makes it possible to make a Type K thermocouple wireless. It can output 409.6°C as the highest temperature. It is a limitation set by the protocol I use. Here you can find a MAX31850K-module, m.nu.
  • DS2450 support. This is a 4 channel AD converter. All 1-wire sensors based on this chip will be compatible with the WMS Mk2. This,  this, this, this and this is also compatible modules since they are based on the DS2450 chip.

Improvements,

  • Events are now sent as a LMST-606 device. An ON or OFF signal will be sent depending on if the input pin is pulled up or pulled down.
  • The Manual is out in a first revision.

All Wireless Multi-sensors Mk2 will be shipped with this new firmware from now on.

May 13, 2014

The Wireless Pulse Counter will take over from the old Wireless Energy Meter

EDIT (2014-09-21): I have added RFXMeter compatibility so that the WPC will show up as a RFXMeter and thus be natively supported in Domoticz. Available in WPC sold from this date. Here is an instruction for how you configure it in Domoticz.

EDIT (2014-09-15): Added information about support for the LED-pulse detector from m.nu.


The old Wireless Energy meter serves its purpose, but it has a few shortcomings.

Here is a new product that I call Wireless Pulse Counter (WPC). This is a better name compared to the old Wireless Energy Meter, since it is actually only counting pulses, not energy or liters.



Since it is only counting pulses it is also much more versatile.

  • You can combine the WPC with a reflex detector (TCRT5000) and measure water flow, gas consumption or electric energy consumption if it is of the rotating disk type.
  • You can count the amount of blinks from an Electric energy meter. Both LED and S0 output is supported.
This is how you connect the WPC to a S0 interface. The current through the S0 port need to be limited.
A resistor value of R=330Ω is OK.
The LED-pulse detector from m.nu is very very sensitive. The sensitivity can be reduced by adding a resistor R between S0- and GND on the WPC. A value between 820Ω and 4k7Ω seem to be reasonable values. Lower value => lower sensitivity.

From the counted pulses you can then calculate the consumed water/energy/gas/events etc.

The new WPC will fit perfectly in a plastic box from Hammond, with the dimensions 20x35x50mm. Note! I have not decided on a box with or without flanges as in the pdf.



The power feed is changed to a micro-USB instead of a mini-USB connector. In this way you will very likely already have a power source for it. You can just reuse an old Android-mobile charger to power it.

Most people do not have a soldering station at home. This version comes with screw terminals so that a  soldering station will never be needed.

It is professionally assembled with perfectly soldered components.

Further more, I have changed the protocol to a simpler variant. All credits to Stefan Strömberg at OpenNetHome for this suggestion.
With this new protocol you can drop several packages. Lots of packages. Still, even with only a few packages received, you can trust that they reflect the consumed energy. The solution is utilise the Humidity data field as counter data in the same way as with the temperature data field. In this way it is possible to have an always increasing counter.
It will wrap around, but the maximum counter value will be so big so that there will need to pass several hours of lost packages to mess up the energy logging.

Note that in the normal case you do not loose many packages, so the above text describes the extreme situation.

As soon as I have finished the verification of the hardware, I will make it available in the foogadgets store.

EDIT: It is now available in the web-store foogadgets.tictail.com.

March 20, 2014

Assembly instruction for the Wireless Multi-sensor KIT

If you have decided to buy the KIT, you will have some SMD soldering in front of you.
It is not very hard to solder, but if you have a steady hand, a magnifier glass and strong light, it is of great help.

This is the first project for me where I use SMD-components, and with the size of the SMD components that I use, it is actually as fast or faster to solder compared to the old fashion through hole soldering.

Here is an excellent SMD soldering tutorial from the user lizerdboy79 at Youtube, https://www.youtube.com/watch?v=PxeWVCS15RU

When you receive your kit you first need to make sure all components are there.
Things you will need is,
  • Soldering station
  • Solder tin
  • Flux
  • Side cutter

Good to have,
  • Tweezers (to place components)
  • Magnifier
  • Strong light

You start to solder the components that build the lowest height from the PCB. That is the resistors, capacitor and LED. The orientation of the resistors and capacitor is not important. The resistors however must have the black side up.
The LED must be soldered with the right orientation. The bottom side of the LED has an arrow. This arrow should point to the (-)-marking on the PCB where the LED should be soldered.
Bottom side of the SMD LED

Marking on the PCB is the Cathode. The LED also has a green spot on the top that marks the location of the Cathode.


Start with cleaning the soldering pads on the PCB where the components will go. Then put some solder on one of the soldering pads for each component.
Take one component with the Tweezers and place it on the PCB. Pre-heat the pad where you put the soldering tin, and push in the component into the melted tin. Be quick. Remove the soldering tip. Let cool, and release the tweezers.
Once this is done, you can go ahead and solder the other side of the component.

Repeat for the rest of the SMD resistors, capacitor and LED component.

R1 - 1k
R2, R3 - 4k7
R4 - 4k7 (This resistor is optional. In the kit I have provided a 3-pin-header and a jumper instead)

Next is the mini USB type B connector (If you will use it).
The red arrows marks the power-pins. The yellow marks the data-pins.
You must solder the power-pins. Some USB power supplies automatically shut down if they do not sense any load between the data-pins (D+ and D-). This can be overcome by putting a solder blob between pin 2 and 3.

Add some flux to all the soldering pads.
Put some solder on one of the chassi pads.
Press the connector in place and apply heat to the soldering pad where you added the tin.
You should notice that the component sinks into place.
Solder the rest of the 3 chassi pads.
Last you solder pin 1 and pin 5 of the usb connector. They represent Vcc and GND.
If you want you can put a tin blob shortening pin 2 and 3. This will make sure that you can use any USB-charger to power the Wireless Multi-sensor.


Next up is the DIP 8 IC socket for the PIC12F675 microcontroller.



The orientation of the socket is not as important as the PIC12F675 orientation. However, there is a marking in the PCB that corresponds to the marking in the DIP-socket. Orient it accordingly. The red ring marks where pin 1 on the PIC12F675 goes.

Add some flux.
Place the DIP-socket in place and turn the PCB upside down.
Solder two of the pins in opposite corners. Pin 1 and 5 for instance.
Pick up the PCB and apply pressure on the DIP-socket and heat the pins where you soldered one at the time.
You should feel the socket sinks into place.
Solder the rest of the pins.

Place the PIC12F675 into the DIP-socket oriented as in the picture below.


The last thing to solder is the 3-pin header in the EI position (EI = Event Input).
Put the pin header in place and turn the PCB on the back and solder one pin.
At this point the pin header is probably not very straight positioned. Pick the PCB up and put one of your fingers on top of the pin header while you heat the pin you just soldered.
Make the pin header straight and let cool. Lay the PCB down again on the back, and solder the remaining pins. Once you have soldered all pins you can install the mini jumper, shortening the two pins closest to the LED. This makes sure that the Input pin is pulled to ground when it is not in use. If you forget this jumper and leave the pin header open, you will get sporadic PIR-events.

Continue read about how you mount the additional sensors in another blogpost.

March 19, 2014

Connection guide for the Wireless Multi-sensor

Here are the different connections to the Wireless Multi-sensor version 1.1.

First I start with presenting the different ways to connect sensors,

  • Temperature and Temperature/Humidity sensors
  • PIR and COsensors
  • Passive switch-type of sensors

In the end I show how you can power the Multi-sensor and where you can feed it, under the section Power.




Temperature and Temperature/Humidity sensors

The 1-wire network is ideally a straight bus. But it could as well be pure star-shaped. This shape is however not recommended by Maxim. For more detailed information about the network topology I recommend reading Guidelines for Reliable Long Line 1-Wire Networks.
A network length of about 50 meters have been reported to work OK with the Multi-sensor, but do not see this as the maximum limit. Maximum network length is still to be found. Cable type is important if you plan to build a large network. Pair-twisted EKKX 2x2x0,5 is one of the recommended cables to successfully build a large working 1-wire network.

The following 1-wire sensors have been verified to work, DS18B20, DS18S20, DS18B22, DS1820 and MAX31820.

With the DS2423-firmware the Multi-sensor will support the DS2423-2-channel counter commonly used when logging energy consumption. however there is a simpler way.

The DHT22 can be connected with up to 100m cable according to the specification.


PIR or CO2 sensor

You can choose from many different types of sensors to connect to the PIR-input. Any of those types (or similar) can be connected right into the pin connector after removing the read jumper thing.


Passive switch-type of sensors

Any passive switch-type of sensor can be connected to the PIR-input. With this type of sensor you will need to add a Pull-down resistor to force the DATA-line low when the switch is open. The pull-down resistor should have a value of about 4k7 to 10kOhm, but it is not critical.
A transmission will only be done as soon as the DATA-line goes high.

Power

You can power the Multi-sensor in one of two ways. Either you use the USB-port, or you use the solder pads on the PCB marked BAT for battery, to power it with the power source of your choice.
The table below will guide you with what minimum and maximum voltages that are allowed.

The numbers within the parenthesis are the maximum ratings for each sensor. However, the PIC-microprocessor limits the maximum voltage to 5.5V. I have tested it successfully with 6.5V, but that is outside the PIC12F675 specification and not recommended.

You will be safe to feed the Multi-sensor with 4.5-5.5V independently of which sensors you combine. The easiest way is to use a USB-charger or similar. The USB port is only there to give power to the Multi-sensor. The D+ and D- pins are not used.

If you want to minimise the form factor you will likely want to choose a small battery. It can be useful to know that you can go as low as 3.0V as long as you only use 1-wire DS18X20 sensors. I have successfully powered a Multi-sensor and one DS18B20 with a CR2032 cell battery (3V). The test was speed up with increased transmission interval. The estimated lifetime of this configuration is estimated to more than 1.5 years.

The transmitting range of the Multi-sensor will depend on the voltage level.
Here is the specification for the Radio module used in the Multi-sensor (FS1000A):
Operating Voltage2.5 V to 12 V
Operating Current4mA @ 5V, 15mA @ 9V
Quiescent Current10uA
Operating Temperature-10C - 60C
ModulationASK
Max. Data Rate2.4K
Data InputTTL
RF Power20 mW@5V

For the advanced user it could probably be possible to boost the transmission range by feeding the RF module with 12V separate from the rest of the Multi-sensor.


March 9, 2014

Update: CO2 sensor support for the Wireless Multi-sensor

I am getting closer to a working version of the firmware that support the CO2-sensor S8 from SenseAir®.
You can get it from m.nu.

The sensor measures CO2 levels from 0 to 2000ppm and the Wireless Multi-sensor outputs this as 0.0°C - 100.0°C which corresponds to 0.0% - 100.0% of 2000ppm.

Here is a graph from the bedroom last night,
It averages around 50% during the night. This corresponds to around 1000ppm.
At first the sensor was placed outside, where the level is quite steady at 400ppm. The Wireless Multi-sensor outputs 20%.

We started the night with me and my two sons in the bedroom. The CO2 level increases until 3 o'clock, to a maximum of 56%. At 3 o'clock my eldest son leaves the bedroom and the CO2-level decreases to about 50%. After 6 o'clock me and my youngest son leaves the room and my wife enters and continue to sleep alone in the bedroom. The peak is probably me breathing too close to the sensor when checking its position.

The remaining task is to make this work together with DHT22 and the 1-wire-network. The Wireless multi-sensor is supposed to automatically detect if you have connected a CO2-sensor or if you have a PIR-sensor or other type of TTL logic type of sensor.

UPDATE: Here is another graph that shows the CO2-ppm level on the y-axis. The snapshot is taken after one night sleep with my wife and my eldest son in his bedroom.

Top notation is 1306ppm just before 7 o'clock in the morning.


February 22, 2014

Wireless Multi-sensor soon to support a CO2 sensor

I am working on a new firmware for the Wireless Multi-sensor that will add support for a CO2-sensor from SenseAir.
Most of the code is written and it is "only" the troubleshooting left. I hope I will manage to get it to work soon. However, I will not be able to code in about a week.

The sensor will be connected on the PIR-input and will be plug-and-play. The multi-sensor will be able to tell if a PIR-sensor or a CO2-sensor has been connected.
The CO2-sensor need 4.5V-5.25V and will draw 300mA peak and 30mA in avareage. This makes it not so suitable for being battery powered with this sensor.

The CO2-sensor is able to measure CO2 levels from 0ppm to 2000ppm. Due to the oscillator frequency the readings will be limited to even readings, 400, 402, 404, etc.

January 8, 2014

Wireless Energy Meter

Hi again,

In our croft (summer house) I can turn on and off a couple of radiators just by sending an SMS. This is very convenient in the autumn to spring time. If we plan to visit the torp i just send an SMS some hours before our ETA, and that is all it takes to have a warm comfortable summer house to arrive to.

But I also wanted a way to measure the energy consumption in some way. From the electric meter in the barn to the torp where the logging computer is located, it is about 40 meter. And I really did not want to dig down a cable from there into the torp. Wireless would be so much more convenient.

Since I already had the Wireless Multi-sensor I figured I could reuse parts of the code and use the same PIC12F675 micro controller. I could not use the same multi-sensor since it was too crowded among the input/output pins. I had to start all over with a new device.

The electrical meter have a LED that blink 1000 times/kWh, but there are also electrical meters that blink 10,000 times/kWh. My Wireless Electrical Meter is however not dependent on the amount of blinks per kWh since the calculations is done in scripts on the receiving side (received by a tellstick or rfxtrx433) and are thus adapted there to the right blink frequency. Examples will follow later in this post.

This is the kind of Electric meter I have in our croft.

This is a close-up of the blinking LED:s. It is only the lower LED in this case that is interesting. That is the consumed energy that I pay for.


It is however important to know that this Wireless Energy Meter is only sending the detected amount of blinks as a temperature. It does not do any calculations or generate any timestamps locally on the device itself.

The Wireless Energy Meter phototransistor (looks like a LED) need to be mounted face-to-face to the blinking LED on the electrical meter. Care should be taken so that as little light as possible is exposed to the phototransistor, as this can generate false detections.

Once mounted and powered, it will start to send the data approximately once every minute.

Viking temperature/humidity sensor

The Wireless Energy Meter is seen by the Tellstick DUO or Rfxtrx433 as two separate Viking temperature+humidity sensors. Both sending data synchronous once every 60 seconds (approximately).

The primary Viking sensor is sending the last minutes number of detected blinks from the energy meters LED. The secondary Viking sensor is sending the penultimate minutes number of detected blinks.

The temperature that is sent is the amount of detected blinks divided by 10. So for example if the Wireless Energy Meter have detected 342 blinks it will send this as a temperature of 34.2°C.


Here is the PCB. The size of this PCB is 50x50mm.

This is the side that should face the Electric meter. The PT1 is the phototransistor that detects the blinks.

This is the back. The size is compared to 1 Swedish Krona. The PCB is 25x25mm but the TX433 transmitter builds 13mm on the side.

The humidity field I use as a data package number that increases from 0 to 99 and then wraps around. The humidity data can thus be used on the receiving side to detect if there have been any lost packages. If one detect a lost package on the receiving side one can recover the lost data by using the secondary sensors data since this is the penultimate data. For this reason, once every minute I send the penultimate data first, followed by the most recent data. In this way I will be sure to already have the penultimate data available when the most recent data is received. It is first when I get the most recent data I can detect if I need to recover.

Since this device is only sending raw counter data, it will be compatible with many home automation applications such as Beyond MeasureSwitch King, Automagically, tellmon.net or any other solution used.

This flexibility come with a drawback. It is very much up to the user of this device to implement the code on the receiving side, to get a complete solution. I will in this blogpost share some of the algorithms and scripts that I have used.

Logging

The most interesting part of the energy reading activity is the logging. Then you can actually see the history of the energy consumption and correlate that to the inside and outside temperatures. You can also possibly detect any energy hogging device by looking at the periodicity of a peak power usage.

For this Wireless Energy Meter I first tried RRD (rrdtool). The RRD is the round robin database that is very good to use when you need to limit the size of the database. One of the drawbacks is that you need to specify at the time of creation, with what periodicity you will log your data. My sensor is sending new data once every 60 seconds ... approximately. I use the internal oscillator to clock the sleeping time of the PIC. The internal oscillator is not very accurate. The accuracy should however be within 60s +-2s. This will of course affect the accuracy of the energy calculations. The clock is also dependent on the surrounding temperature.

A better way to log the data is to use a SQL-database. Then you can save the timestamp of the data at the time of arrival, and then do calculations based on the counted pulses and time passed since last the previous package was received.

The following algorithm can be used to detect lost packages and also log to a database. See it as pseudo code,

// Callback function (If it looks similar to Telldus it is because it is based on an example from them)
void sensorEvent( int sensorId, const char *value, char *temp) {
  if ( sensorId == 69 ) { //Store the secondary virtual sensor value
    f_temp[sensorId] = atof( temp );
    i_seqno[sensorId] = atoi( value );
    return;

  } else if ( sensorId == 68 ) { //Store the Primary virtual sensor value
    f_temp[sensorId] = atof( temp );
    i_seqno[sensorId] = atoi( value );
    i_diff[sensorId] = i_seqno[sensorId] - i_prev[sensorId];
    switch ( i_diff[sensorId] ) {
      case 1:
      case -99: // All OK
                // Log f_temp in a MySql-db or send it to Xively for example.
      case 2:
      case -98: // One transmission lost. Check if we can recover.
        if ( (i_seqno[sensorId]-i_seqno[sensorId+1]) == 1 ||
             (i_seqno[sensorId]-i_seqno[sensorId+1]) == -99 ) {
                // It seem like we can recover. Log the f_temp[sensorId+1] and the f_temp[sensorId] value.
        } else {
                // If we are here, we have lost one transmission and can not recover. Anyway, we log the current value f_temp[sensorId] and do a best guess of what the lost value was. We could use an average number or the same as current value f_temp[sensorId]. This would likely be less wrong than leaving it empty.
        }
        break;
      default : // If we are here we have lost more than one complete transmission. If this occur frequently you have to look over your setup.
    }
    i_prev[sensorId] = i_seqno[sensorId];
  }
  return;
}



The formulas for total consumed Energy (Wh) and the current Power consumption (W), goes something like this,
TotalEnergi = Start_value + SUM(temp*10)/1000
The Start_value is optional and can be used when starting the measurements. You get it from the display on the electric meter. If you add this you will hopefully get the same numbers in the graphs as on the electric meter. The Start_value should be given in kWh. TotalEnergy is kWh.
SUM() is the sum of all incoming "temperatures". In C++ it would be written sumkWh += temp*10/1000;
Result in kWh.

Pmom = temp*10/1000*60* 60/(Time_now - Time_previous)
temp is the incoming data from the Wireless Energy Meter.
60/(Time_now - Time_previous) is a compensation factor that need to be added to compensate for the low precision oscillator in the PIC. The oscillator frequency depends on temperature and voltage. It is wise not to skip this compensation factor.
Result in kW


It can also be used in Domoticz. See this thread over at temperatur.nu.
Also check in Automagically and Tellmon.net that have native support for my Wireless Energy meter.
Further more, there is also a plugin for Beyond Measure, see this thread.





If you like it, you can also buy the Wireless Energy meter here, http://foogadgets.tictail.com

January 6, 2014

Getting closer ...

Last evening I made som updates of the assembly code for the Wireless Energy meter.
The code will not be open source, but you will anyway be able to change configuration parameters without recompiling any code.

I am using the EEPROM area to store configurable parameters that are interesting to change, such as time in between transmissions, amount of retransmissions for each sensor, and the sensor-ID.

What you will need in order to change any of the EEPROM data is a Pickit 2/3 or similar.


January 3, 2014

New version of the Wireless Multi-sensor PCB

Here is my latest version of the Wireless Multi-sensor PCB (Version 1.1).

Last night I assembled 12 units. I only had time to test two units very quickly, but all is sound so far. The only missing part is the PIC12F675. I have been waiting since 12th November :(. It will arrive any day now :)

As can be seen in the picture below, there are three inputs. One for the DHT22, one for the 1-wire bus and one event sensor input. The event sensor-input have the same pin-configuration as the PIR-sensor HC-SR501.
I have also added a power supply input (marked BAT) to the right of the DHT22 input where you have the possibility to add your own power supply.

The changelog for version 1.1,
  *A pull-down resistor can be soldered in the spot marked R4. It will not needed if the input is not used since there will be a jumper grounding the data input pin.
  *The 2.1mm DC-jack has been exchanged to a mini USB type B connector. I have also added the possibility to add your own power supply.
  *The hardware bug has been corrected.