Domotizing XI – DAQ for kWh – Part I (yes, in English)

The blog is read most by people that is not from Spain so … although I don’t like too much the idea of beginning to write in English (because my English is incredibly awesome, you will discover it) … I think it is a ‘must do’ … so how’s your English then?? xD


Last time I wrote about power consumption management system in my house I started manipulating files, arrays of characters, editing configuration files, and so on… and then I decided that I was wasting my time because I was programing a data/files management system without having any data adquiring system or even data!

Well, I have been programming since then a system with which I could store power data from everyday in a little bit organised style.

First of all I made a little modification to the program that gives all the data when capturing current (A) waveform. This program normally gave me all this info:

Captura de pantalla 2016-09-16 a las 17.50.17.png

The thing is that, for adquiring information about the power consumption I don’t need the graph, the number of samples, time, current peak, … Indeed, I only need ‘Potencia’ (power) value.

The modification I made to have only the power value, was to insert input parameters into the C program I had made before:

Captura de pantalla 2016-09-16 a las 17.54.23.png

As you can appreciate in the screen capture I ‘filtered’ the additional information with ‘argc’ input parameter in ‘main’. In addition to that, if the parameter introduced when we make the call to the program is “pg”, I give only power value and also I generate the graphic of current.

I also  made a little help screen so as to remember how to work with this program. We get to this information by typing the parameter ‘?’ on the program call. It returns this:

Captura de pantalla 2016-09-16 a las 18.00.28.png

  • Parameter ‘p’ gives only the actual power value in W.
  • Parameter ‘pg’ gives actual power value in W and generates current graphic.
  • No parameters gives all information and generates current graphic

OK then, this was the first step to start generating power information data files, now I would need to make another program that catches data every X seconds and stores all this information in files.

The initial idea was to create files with the actual day information on its name like this:

  • data_01_01_2016.txt

(The format is in Spanish DD/MM/YYYY). I was tempted to do it in Basque as it is the normal format I use (YYYY/MM/DD) but day-month-year format I think is easier for this context.

So, inside that .txt file the information would be stored in columns:

Captura de pantalla 2016-09-17 a las 11.30.15.png

First column would be time of day and second column is the Wh at that moment. For example, 16.13 with 45.62 Wh means that from 15.13 to 16.13 we have a power consumption of 45.6 W.

This would be OK but I don’t like it too much because my idea was to store this data in a file with the format:

data_DD_MM_YYYY.dat

… and also the information on every specific time of day like this:

data_DD_MM_YYYY_HHMM.dat

Probably your are thinking that storing the data with that filename is not complex, and indeed you’re right, complexity = 0… but, what would happen when you have to access to that specific hour/minute of the day to show the informatio? How could you know if you have to write in ‘HHMM’ 1613, 1713, 2134, …?

So the solution is easy: force MM to be ALWAYS ’00’:

captura-de-pantalla-2016-09-25-a-las-10-47-12

I created this function that generates a string with the specific path and name of the data file. Parameters ‘crear_ruta’ and ‘crear_ruta_hora’ will indicate this function if the returning string has in the name the actua day and also the hour or if it has only the actual day. The comment there ‘Para que se cree el fichero ….’ means: This is to force the data file to has ceros in the minute field in all cases’.

So after all this I have only created a file ‘pathing’.Let’s start with the rest of the program.

I created in the beginning of the program a ‘samples’ (muestra) tag. In my case this is 360, and it is configurable. For example, if you set 3600 this will store data every second, with 360 it will be every 10 seconds, and so on … The next screen capture shows this constant value in the beginning of the program:

captura-de-pantalla-2016-09-25-a-las-11-11-42

(360 samples means 1 sample every 10 seconds in 1 hour; 3600 samples would be 1 sample every second in 1 hour).

Now we go to main program structure.

Captura de pantalla 2016-09-25 a las 10.52.32.png

Here you can see the tags declaration. There are timing variables, buffering strings, double data arrays for storing power reads. Remember that ‘muestra’ means ‘sample’ in Spanish.

captura-de-pantalla-2016-09-25-a-las-10-55-42

We create the file that will contain Wh every hour in the beginning as you see in the previous capture. We open with “a” so as not to overwrite if the file exists and append the information in the end of it.

Captura de pantalla 2016-09-25 a las 10.58.31.png

And finally we start with the main loop.

As you see it is infinite loop that is catching the time data the whole time (first paragraph). Second paragraph named ‘CHEQUEAMOS EL DIA….’ means ‘we check that the actual day has not finished’. With this we detect a flank if the day is increasing so as to increase the path file for the new day.

captura-de-pantalla-2016-09-25-a-las-11-01-50

I got the previous piece of code from the internet as I did not really know how to get the output data of an executable file to come into another program. I thought that it coul be done by ‘./lecturaA p > potencia.dat‘ and then read ‘potencia.dat’ file but I thought there must be another more elegant method … so that is what I found and it works!.

‘lecturaA’ is the executable file I modified in the beginning. With ‘p’ parameter I get only the actual power read.

Captura de pantalla 2016-09-25 a las 11.05.50.png

Finally this bunch of code. Lots of letters, but don’t worry, most of them are comments :P. What I do here (I remind you we are inside the while loop yet) is checking if the counter is equal to the constant defined value ‘samples’ (muestras).

Normally we will be storing power data and timing data so if we pay attention to what is under ‘most-left-else’ we see an ‘IF’ that is checking that we read correctly the power value. If the reading is good it assigns ‘potencia’ (power) value we catched before. If not read a valid number it assigns 44.0 W by defect. (Need to check this last thing as my current sensor does not read less than 44 W :/ On low currents the information is not accurate).

The sprintf stores the time information in the 2D array I created in the beginning and counter (contador) increases by 1.

When ‘contador’ gets to ‘muestras-1’ then we store the information in 2 different files. The first one is the one I created before with the data ‘dat_DD_MM_YYYY.txt’ and what I make is a sum of all power data (360 values) and divide them by ‘muestras’ => this value will be the ‘Wh‘ in the just passed hour. We store this with the hour information with ’00’ in the minute (as told before, I don’t really care about the minute as I could only get troubles with it).

Next I store ALL samples taken (360 in my case) in a file ‘dat_DD_MM_YYYY_HH00.txt’ I create with the function I described before (fc_crear_ruta….). I create, then record all data and then close the file so as to restart the process again.

As you see I set ‘contador’ to 0 and store the actual power read as indeed a power has been read but I have been storing the previous ones but I need to do this for first power data within the next hour.

And YES, the code that is under ‘contador = 0’ should have been written before the ‘sleep’ as it is common for both xDDD. I will make this modification as it is very easy right now, don’t get angry…

Ok, I think I have written too much today … Next time I will talk about plotting all this information and get a monthly report of power consumption.

Philips Hue ¿¿White??

Pueees si… cogí una bombilla de philips hue (que he de decir son excesivamente caras) de las que se denominan ‘white’ porque quería únicamente luz blanca en algunos puntos de la casa.

Elegí este modelo porque como digo quería color blanco con posibilidad de manejar la intensidad desde el bridge de philips (o sea, desde el movil en mi caso). El precio de esta bombilla es de unos 18€ (como digo bastante cara), ¿cara? sí, pero más barata que los 58€ que cuestan las Philips Hue white and color… (que los de philips se han venido un poco arriba con los precios)

Llegué a casa todo ilusionado para probar mi super-bombilla-led-zigbee-manejabledesdelmóvil (la envié y recogí en donde trabajo) y cuando la pongo en la lámpara de casa cual fue mi sopresa que ….

IMG_5350.JPG

(NOTA: La philips white es la amarilla de la imagen superior…)

Me dije: a ver… igual desde la aplicación se puede manejar la tonalidad de blanco, o algo …

.

.

.

Pos no… no se podía…

Ante esta situación sólo había 2 opciones ….

1ª – Devolver la bombilla

2ª – ¿Se podrán cambiar los leds para hacerla blanca?

Joder, estaba claro que la segunda opción es bastante más atractiva … jejejej.

Vale, empecemos por el principio…. ¿De cuántos watios estamos hablando? En el casquillo pone:

‘9.5W 50mA’

Venga va, que seguro que encuentro alguna equivalente… en concreto ¿por qué no coger la que está en la imagen superior? Es el tono de blanco que quiero!.

Abrir la bombilla blanca (que por cierto es de Leroy Merlin) fue bastante sencillo… Girando un poco el casquillo y sujetando la capota (de plástico por cierto) sale bastante fácil. Sin embargo para abrir la bombilla de Philips, éstos se lo han currado un poco más y he de decir que la han pegado con dos coj**** el cuerpo de la bombilla al casquillo de cristal plástico.

Total, que había que tirar de dremel y así quedó el percal …

IMG_5813.JPG

Me acojoné un poco al meterle la dremel a la bombilla de philips porque podía haber algo vital para la bombilla en el interior pero no… el concepto de las bombillas led parece que es el mismo para todos… Consiste en una plaquita de leds sujeta con unos tornillos a una chapita que hay en el interior a modo de refrigerador.

Antes de empezar a romper (más) cosas medí la tensión en los dos cables que salen de ambas bombillas y que van a la placa de leds. La medida inicial no fue nada prometedora:

En contínua la luz de led de leroy merlin daba 100V y sin embargo, la de philips da 30V … :/

Pero bueno, aquí hemos venido a jugar… ya que estamos vamos a probar así que siguiente paso! vamos a poner la placa de led de la de leroy en la philips.

Cómo no, para la bombilla “made in Leroy Merlin” bastó soltar los tornillos que sujetan la plaquita de los led a la estructura de la bombilla y salió bastante fácil. Únicamente tenía un poco de pasta térmica entre la plaquita de leds y la chapa interior.

Una vez cambie la placa de leds paso lo que todos sospechamos: no funciona; de 30V a 100V son demasiados voltios para no tener en cuenta…

Plan B, vamos con otra táctica.

La bombilla de Phlips tenía pegada igualmente la placa de leds a la base, pero, al igual que el casquillo al plástico, estaba pegada con dos coj**** a la chapa. Va pegada con una especie de pegamento gomoso bastante resistente.

 Aunque al final salio!

Captura de pantalla 2016-09-15 a las 19.33.47.png

… con un poco de violencia, pero bueno …

La cosa es que hacía algunos meses había comprado estos leds por internet para hacer pruebas y asi, aunque no los había llegado a usar nunca, tocaba ya:

IMG_5826.JPG

Segun las características, estos leds son de 12V y 10W, y la “bombilla” da hasta 30V y 9.6W …. bueno… watio arriba watio abajo tampoco nos vamos a poner quisquillosos, que somos ingenieros :P.

Por otro lado si pongo 2 en serie son 24V y la bombilla me daba 30V cuando esta a tope… bah! 6 voltios arriba 6 voltios abajo… voy a meterlos en serie y que sea lo que dios quiera… jejeje.

img_5816

Pues aquí esta el resultado final …. creo bastante interesante atar lo que son los leds a la chapa de la bombilla porque me huele que se van a calentar un poco. Para uno de ellos lo he tenido facil porque he aprovechado un agujero donde va un tornillo pero para el otro sin embargo … malamente he podido colocarlo gracias a la placa que asoma por el agujero central:

IMG_5827.JPG

Se me ocurrió pensar que con loctite todo es posible y con un poco de pasta térmica para rematar me habría valido bien para seguir adelante, pero no tengo (no tengo pasta térmica, loctite sí).

Pero no me iba a quedar mirando porque estoy había que ponerlo ya!

Tirando un poco te internet he hecho pasta térmica con pasta de dientes y aceite de girasol (una auténtica guarrada…) y bueno, se quedará así, como se suele decir, temporalmente pa siempre (donde “pa siempre” puede sustituirse perfectamente por “hasta que pete” porque casi seguro que petará … actualizaré esta entrada del blog si es así ;).

Bueno, había que probar, no?

Bueno, no tiene mala pinta … ahora hasta la luz blanca de detras parece amarilla !!!

Vamos a poner la capota de plástico a ver cómo queda:

Bueno, cosas del destino … ahora resulta que la luz que era amarilla hace que parezcan más amarillas las que eran blancas porque ahora SI es BLANCA! jeje

Podemos decir que hemos hecho una Philips Hue White, pero white white !!

La intensidad de blanco se puede manejar de igual forma que antes desde la aplicación o con comandos POST como anteriormente sin problemas:

IMG_5838.JPG

Me hace gracia cómo ha salido en la fotografía la bombilla de philips que he bajado la intensidad (al mínimo, por cierto) … parece que haya hecho una mierda de edición en Photoshop o algo, pero creedme que no: la foto ha salido asi! Será que los leds que le he metido ahora son de altísima calidad? Cuando peten lo sabremos ….