Category Archives: HowTo’s

Refrigerator control Part 3 #VSCP #IoT #m2m

The refrigerator again. It takes more time then expected of course. It always do. This time because I have a lot of other things to attend to at the moment.  I understand if you ask some questions about this project. So I answer them here (before you actually ask them)

Why this project?

Our refrigerator broke down two weeks ago. And we need one also in my family.  Of course we do, open source programmers may not afford much buying stuff but we also want our milk to be cold.  Luckily it is winter here now and we have some other storage that is at about four/five degrees so it is no immediate panic,  but as weather is getting better (the spring is coming)  this is not a good long-term solution.

When our fridge broke down some years ago I decided to try to rescue it and if it was possible I would take standard VSCP modules to do so.  The compressor was OK and if it is this is a simple  project mostly.  This project has worked perfectly well since then and became a nice VSCP demo project.

Yes, Yes, YES it’s an overkill using VSCP standard modules for this. An Arduino or some other simple board would have done the job. But I wanted to use the modules to see if they did their job also over time. The best way to actually see if things are working the way you thought is to put them in some critical system in your house (the heating in our house is already controlled this way). If there is some bugs or design problems things will be solved by necessity. To have them in a demo system on a workbench is just not the same thing.

So for the refrigerator the first question was to check if the compressor still worked. If it was dead it is just a pieces of junk and not a refrigerator.  But just as with the fridge it was the control logic that had broken also this time. Make me wonder how many perfectly fine refrigerators/fridges are thrown away out there that could have new  control added for a few bucks and do the job they were designed for for many years more.

How?

As with the fridge I decided to go for standard VSCP modules for the refrigerator project to make it a demo project.  It is easier this time as I have the CAN4VSCP bus connected to the fridge that stands next to the refrigerator. I just need to connect the two together.

So I put in a Kelvin NTC10K module and a Bejing I/O module in the refrigerator and hook it up to the CAN4VSCP bus so I am able to monitor temperatures and change temperature settings and get possible alarms from the unit.  As with all VSCP modules they form a self-contained unit.  There is actually no need for a server after they have been configured. The second video here show the configuration process and the first show how the modules are connected together.

The Kelvin NTC 10K module is a module that one can connect a couple of temperature sensors to.  It can be programmed to alarm at low and high temperatures and as in this case turn on and off things when certain temperature thresholds are reached.

In the fridge project a Paris module is used together with the Kelvin NTC module. The Paris module is constructed to control relays and have all the electronics on board to do that. It also include protection timers and a lot more.

In the refrigerator project I decided to use the Beijing module instead of the Paris module. Mostly because it did not matter to have standard I/O channels  as I use a solid state relay to switch on and off the compressor, but my main reason was that  I got a chance to use it in a real life demo system.

So the Kelvin NTC10K module sense the temperature in the refrigerator and the Beijing module is used to switch the compressor on or off and to sense if the refrigerator door is open or not and if it is light the lamp inside the box.

It is possible to  sound s siren if the door to the refrigerator is opened between midnight and six in the morning. But some things just hit you right in the face so I will not implement that functionality. At least not now.

Next?

Connect cables and putting it in the refrigerator where the old control logic was located. No programming is needed just configuration.  The second video above show a bit of this configuration but I will go through it in a more precise way in a future post. Hopefully things will work as thy should tomorrow. The VCSP modules are very flexible and can be used in most control situations to form self-contained systems that can be connected together and be connected to the world in a safe and secure way.

Raspberry Pi and 1-wire temperature sensors to VSCP #rpi #iot #1wire

This article is based on this tutorial from AdaFruit. Read it before you continue. Here is an extended version. It explains how to connect 1-wire sensors to a Raspberry Pi system (Works on other Linux systems also of course).

As explained in the above article there is support for 1-wire in the Linux Kernel.  You will get a folder for every  each temperature sensor you attach to the system under /sys/bus/w1/devices

The script send_pi_onewire.py  will read information from each on the attached sensors and send to a VSCP daemon for further processing.  This script originally comes from Adafruit but has been extended and changed, see the original article.

The usage is

./send_pi_onewire.py  host user password

The script will use the 1-wire sensor GUID to construct a valid unique VSCP GUID.

Only sensors that has been read correctly will be sent to the VSCP daemon.

The script can of course be added to cron if one for example want to have temperature reported every minute. There are other howto’s on this blog that explains how this is done.

note

A good reading of a sensor gives this data on the filesystem

2a 00 4b 46 ff ff 0f 10 40 : crc=40 YES
2a 00 4b 46 ff ff 0f 10 40 t=20812

May be worth checking that you have this content in the file(s) there before using the script.

Monitor GPU temp of a Raspberry Pi #rpi #vscp #iot

If you want to know the GPU temperature of your Raspberry Pi you issue

  /opt/vc/bin/vcgencmd measure_temp

and will get a response like

  temp=45.5’C

form this command.

We will show a script here that send this temperature to a VSCP daemon so that you can handle, display, diagram, react on the measured value etc

The script to do this is here.

You use it like this

./send_pi_gpu_temp.py 192.168.1.6 admin secret –

First remember to make it executable (chmod a+x send_pi_gpu_temp.py ).

The parameters are.

  • IP address to server (192.168.1.9) where VSCP daemon resides.
  • User name for TCP/IP connection, obviously you should use anther user than the admin user in most cases.
  • Passsword for TCP/IP connection.
  • GUID to use for the temperature event. This is an optional parameter and if not given “-” wil be used which is the same as a GUID with all zeros and mans that the event will have the GUID of the interface. It is better to give an explicit GUID but this works for now.

So issuing this and watching it in VSCP Works

now we can add this to a cron script to get the temperature sent to the VSCP daemon every minute.

We add a script send_gpu_temp to /etc/cron.d looking like this

* * * * * root cd /root;./send_pi_gpu_temp.py 192.168.1.6 admin secret 00:00:00:00:00:00:00:00:00:00:00:00:00:01:00:03

Note that a GUID has been assigned here for the sensor. The

00:00:00:00:00:00:00:00:00:00:00:00:xx:xx:xx:xx

can be used for lab usage and I put a id for some hardware in byte 2/3 in this case 00:01 and index in byte 0/1 ( 00:03). We could have used the MAC address or the IP address  of the Raspberry Pi as a base for this or a privately assigned GUID series. You can read more about the GUID’s here.

Thats it. You can now alarm yourself when the temperature reach critical levels or just diagram the data or collect it in a database.

Monitor CPU temp of a Raspberry Pi #rpi #vscp #iot

The CPU temperature of a Raspberry Pi can be checked with

  cat /sys/class/thermal/thermal_zone0/temp

what you get is the CPU temperature in degrees Celsius times 1000. A typical output would therefore be

  44388

which is 44.388 degrees Celsius.

If we want to react on this temperature or collect it or diagram we need to send it to the VSCP daemon.  There is many ways to do this but the probably easiest way is to send it to the VSCP daemon over the TCP/IP interface. If you like MQTT more or websocket or a REST interface you can choose any of them instead as they all are supported by the VSCP daemon.

On a Raspberry Pi we usually have Python so we do this with a Python script for simplicity.  We can add this python script to cron and as we will see later get the CPU temperature every minute.

The script by the way is general. It can send any temperature times 1000 expressed in degrees Celsius and stored in a file to the VSCP daemon. It is possible to have the conversion as an input parameter but we skip that in this case.

The script is easy and looks like this

You use it like this

./send_pi_cpu_temp.py 192.168.1.6 admin secret –

First remember to make it executable (chmod a+x send_pi_cpu_temp.py ).

The parameters are.

  • IP address to server (192.168.1.9) where VSCP daemon resides.
  • User name for TCP/IP connection, obviously you should use anther user than the admin user in most cases.
  • Passsword for TCP/IP connection.
  • GUID to use for the temperature event. This is an optional parameter and if not given “-” wil be used which is the same as a GUID with all zeros and mans that the event will have the GUID of the interface. It is better to give an explicit GUID but this works for now.

So issuing this and watching it in VSCP Works

now we can add this to a cron script to get the temperature sent to the VSCP daemon every minute.

We add a script send_cpu_temp to /etc/cron.d looking like this

* * * * * root cd /root;./send_pi_cpu_temp.py 192.168.1.6 admin secret 00:00:00:00:00:00:00:00:00:00:00:00:00:01:00:02

Note that a GUID has been assigned here for the sensor. The

00:00:00:00:00:00:00:00:00:00:00:00:xx:xx:xx:xx

can be used for lab usage and I put a id for some hardware in byte 2/3 in this case 00:01 and index in byte 0/1 ( 00:02). We could have used the MAC address or the IP address  of the Raspberry Pi as a base for this or a privately assigned GUID series. You can read more about the GUID’s here.

Thats it. You can now alarm yourself when the temperature reach critical levels or just diagram the data or collect it in a database.

A note
VSCP base measurements on the SI system.  So a measurement has a base unit that is standardized and well specified. For convenience you can often use other units also. As an example, for temperature, the base unit (0) is Kelvin. But you can send the temperature data as degrees Celsius (unit=1) or degrees Fahrenheit (unit=2) also. The important thing is that it will always be well specified.

The format of the data is also well specified. In VSCP there is no questions raised about big/little endian or decimal point formats and such things. The number can come in many formats (string/integer/float…) but they are all well specified and have a clear conversion path between each other.

Well why? you may ask. What can we gain from this?

The thing is that as soon as we have the data in a common format routines for handling one type of measurement will work equally well for another type of measurements. Write once use many times.  You can even see this in the above sample. Only the unit and the class type will have a new meaning if we wanted to send a sound level measurement instead of a temperature measurement to the VSCP daemon.

In this case all VSCP Level I is used. That means max. 8 bytes of data.  Even the smallest device out there can handle this. It’s both practical and economical.

And all this is true for turning on/off things etc also of course.