This article is based in this very good one

I added some comments, examples, circuits and Zabbix configuration.

The main goal is having a common interface to read analog values and generate graphs, alarms, actions etc. with Zabbix.

Analog Sensors Reading with Raspberry Pi as Interface

The Raspberry Pi has no built in analogue inputs which means it is a bit of a pain to use many of the available sensors. We need a A/D interface easy to configure in the RPi and the MCP3008 is the answer.

The MCP3008 is a 10bit 8-channel Analogue-to-digital converter (ADC). It is cheap, easy to connect and doesn’t require any additional components. It uses the SPI bus protocol which is supported by the Pi’s GPIO header.

This article explains how to use an MCP3008 device to provide 8 analogue inputs which you can use with a range of sensors. In the example circuit below I use a MCP3008 to read a light sensor and control/supervise the light inside Zabbix.

The hardware:

  • Raspberry Pi
  • MCP3008 8 channel ADC
  • Light dependent resistor (LDR)
  • 10 Kohm resistor
  • Breadboard
  • Some wiring


The MCP3008 read the analog value and give a 10 bits number that is transmitted by the SPI Bus. SPI
The Serial Peripheral Interface bus or SPI bus is a synchronous serial data link standard, that operates in full duplex mode.

Devices communicate in master/slave mode where the master device initiates the data frame. Multiple slave devices are allowed with individual slave select lines.

Sometimes SPI is called a four-wire serial bus, contrasting with three-, two-, and one-wire serial buses. SPI is often referred to as SSI (Synchronous Serial Interface).

To enable hardware SPI on the RPi we need to make a modification to one of the system files:

sudo nano /etc/modprobe.d/raspi-blacklist.conf

Add a ‘#’ character in front of the line spi-bcm2708. Use CTRL-X, then Y, then Return to save the file and exit. Reboot using the following :

sudo reboot

To check the change has worked run the following command :


You should see “spi_bcm2708″ listed in the output.

Install Python SPI Wrapper

In this project we are going to use Python and In order to read data from the SPI bus in Python we can install a library called ‘py-spidev’. To install it we first need to install ‘python-dev’ :

sudo apt-get install python-dev

Then to finish we can download ‘py-spidev’ and compile it ready for use :

mkdir py-spidev
cd py-spidev
sudo python install


The following list shows how the MCP3008 can be connected. It requires 4 GPIO pins on the Pi P1 Header.mcp3008

MCP3008 RPi
VDD 3.3V
CLK GPIO11 (P1-23)
DOUT GPIO9 (P1-21)
DIN GPIO10 (P1-19)
CS GPIO8 (P1-24)

The CH0-CH7 pins are the 8 analogue inputs.

Next we can see the schematic of the circuit:


Here is the breadboard circuit :


It uses CH0 for the light sensor. The other 7 inputs are spare.

Here is a photo of my test circuit on a small piece of breadboard:


Light Dependent Resistor

I chose a LDR EG & G Vactec, VT43, CdS, 8 Ω to 300 KΩ. Under normal lighting its resistance is approximately 10Kohm while in the dark this increases to over 2Mohm.ldr_example

When there is lots of light the LDR has a low resistance resulting in the output voltage dropping towards 0V.

When it is dark the LDR resistance increases resulting in the output voltage increasing towards 3.3V. In this project has been used a LDR but whatever device changing his resistance depending of some phenomenon can be used and wired in the IC to be controlled.

Reading The Data

The ADC is 10bit so it can report a range of numbers from 0 to 1023 (2 to the power of 10). A reading of 0 means the input is 0V and a reading of 1023 means the input is 3.3V. Our 0-3.3V range would equate to a 0-10000 Lux range.

To read the data I used this Python script


import spidev
import time
import os

# Open SPI bus
spi = spidev.SpiDev(),0)

# Function to read SPI data from MCP3008 chip
# Channel must be an integer 0-7

def ReadChannel(channel):
  adc = spi.xfer2([1,(8+channel)<<4,0])
  data = ((adc[1]&3) << 8) + adc[2]
  return data

# Function to convert data to voltage level,
# rounded to specified number of decimal places.

def ConvertVolts(data,places):
  volts = (data * 3.3) / 1023
  volts = round(volts,places)
  return volts

# Define sensor channels
light_channel = 0

# Define delay between readings
delay = 1

while True:
  # Read the light sensor data
  light_level = 1024 - ReadChannel(light_channel)
  light_volts = ConvertVolts(light_level,2)

  # Print out results
  print "--------------------------------------------"
  print("Light: {} ({}V)".format(light_level,light_volts))

  # Wait before repeating loop

The output with normal light is:

pi@pi-access-lab ~ $ ./
Light: 904 (2.92V)
Light: 895 (2.89V)
Light: 903 (2.91V)
Light: 895 (2.89V)
Light: 904 (2.92V)
Light: 906 (2.92V)
Light: 896 (2.89V)
Light: 887 (2.86V)
Light: 894 (2.88V)
Light: 906 (2.92V)

ZABBIX Integration

Zabbix Agent

The Zabbix Agent must be installed in the RPi in order to receive the requests from the server and send the value read. Install the agent with:

sudo apt-get update && sudo apt-get install zabbix-agent

The script written in Python has to be modified a bit. we want to have 100% light for the maximum light and 0% for the minimum.

SSM Server request light to RPi → Zabbix Agent send only the percent as a number.

Here is the python code modified:


import spidev
import time
import os

# Open SPI bus
spi = spidev.SpiDev(),0)

# Function to read SPI data from MCP3008 chip
# Channel must be an integer 0-7
def ReadChannel(channel):
  adc = spi.xfer2([1,(8+channel)<<4,0])
  data = ((adc[1]&3) << 8) + adc[2]
  return data

# Function to convert data to voltage level,
# rounded to specified number of decimal places.
def ConvertVolts(data,places):
  volts = (data * 3.3) / 1023
  volts = round(volts,places)
  return volts

# Define sensor channels
light_channel = 0

# Read the light sensor data
light_level = (1024 - ReadChannel(light_channel)) / 10.24
light_volts = ConvertVolts(light_level,2)

# Print out results

The output with normal light is:

pi@pi-access-lab ~ $ ./

The zabbix_agent must be configured as usual with the Zabbix Server server etc, and add the command lines at the end of the configuration file. When the server request light the agent must know what to do. That is done editing the file:


and adding:

### Option: UserParameter

# User-defined parameter to monitor. There can be several user-defined parameters.
# Format: UserParameter=,
# Note that shell command must not return empty string or EOL only.
# See 'zabbix_agentd' directory for examples.
# Mandatory: no
# Default:

UserParameter=light,sudo /home/pi/

Another important hack is that the user running the zabbix_agent (in my case zabbix) must have the rights to execute the command as root since we are accessing to the SPI port of the RPi. If we want to avoid writing the passwords in the scripts we can authorise the user zabbix in the sudoers file only for the command or in my case more general:

# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d

Zabbix Server

To check the installation before adding the host and checks in the server we can run in the Zabbix Server:

[root@ssm ~]# zabbix_get -s pi-access-lab -k light

If that works and return the value, we can add the RPi in the Zabbix Server and create an item called light or whatever we want and associate an external check:

We can create screens for the data, graphs or whatever we need. Refer to the Zabbix documentation to do it. The result after 2 or 3 days getting data in my desk is:


The requirements for my monitoring projects are simple:

  • Want to be mostly cabling free.

One of the things than makes a good monitoring system at home is don’t having to make new cabling all around the house each time you put a new sensor or want to check a new temperature room.

  • Want to use open-source products.

There are several reasons for that. Despite what most people think that we use open-source because is free (like free beer ;-)) in my case is not true. The fact of using open-source products is because the support, the driver availability, the modifications to adapt the product, etc. etc. Several times I did donations to products so at the end, has never be free as a free beer.


  • Cheap sensors for temperature, humidity, electrical power consumption, digital status, barometric pressure,
  • Long distances > 20 meters
  • Cheap controllers.
  • Easy deployment
  • Mobile, distance and independent data display
  • Database for making complex requests if needed


  • Sensors: DS18B20 with isolation for the heating system, normal one for standard temperatures, DHT21 for temperature and hygrometers, counters and opto-couplers  for electrical consumption, BMP085 Barometric Pressure,
  • Arduino Models: Uno, Mega, Mini Pro, Yún
  • Raspberry Pi: Version 2, 512 Model
  • Servers: Mac mini Server, Standard Desktop PC, HP Proliant.
  • Electronics: 433 Mhz radio transmitters, relays, resistors, diodes, etc.
  • Screens and displays: TV, Standard screens, 1.8″ TFT LCD Displays, Car Cameras


  • ARM Compilers for Arduino, Raspberry Pi.
  • Raspbian
  • Debian with LAMP
  • Mac OS X with LAMP
  • MySQL, SQLite, RRDtools Databases

In the next posts I’ll explain all the projects.

Long time working with the Raspberry Pi and having a lot of interfaces I didn’t find anywhere how to make requested to the Oracle DB from the OS Raspbian.

Here are my experiences:

Install Raspbian as usual. There is thousand of how to all around.

Install Java SDK (I’m not a fan of Java… But I didn’t find another system.)  The OCI libraries from Oracle doesn’t work on ARM architectures. Now Java SDK is in the raspbian repositories.

I’ve been using Instant Client from Oracle on Debian host without problems but there are not drivers for Raspbian yet.

I’m using always root to avoid using sudo for all commands!

root@host:~# apt-get install oracle-java7-jdk

Get the ojdbc7 driver from Oracle

Test that java is working well with:

root@host:~# java -version
java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) Client VM (build 24.0-b56, mixed mode)

Write a file with the following code:

import java.sql.*;
class Conn {
public static void main (String[] args) throws Exception
Class.forName ("oracle.jdbc.OracleDriver");

Connection conn = DriverManager.getConnection
("jdbc:oracle:thin:@//ip_or_dns_name_of_oracle_server:port_server/SID_Database", "login_database", "password_database");
                // @//machineName:port/SID,   userid,  password
try {
  Statement stmt = conn.createStatement();
  try {
    ResultSet rset = stmt.executeQuery("select BANNER from SYS.V_$VERSION");
    try {
      while (
        System.out.println (rset.getString(1));   // Print colon 1
    finally {
      try { rset.close(); } catch (Exception ignore) {}
  finally {
    try { stmt.close(); } catch (Exception ignore) {}
  finally {
    try { conn.close(); } catch (Exception ignore) {}

Now, you can compile with:


and run with:

java -cp /wherever_you_put_the_file/ojdbc7.jar:. Conn

Posiblemente el CERN , el laboratorio de investigación de partículas físicas, es la joya de la corona de la ciencia en Europa, en el que colaboran más de 20 países.  Mientras los científicos del CERN se dedican a sus tareas de investigación todos los días por nuestras latitudes nos dedicamos a recortar la inversión en ciencia y tecnología, Bárcenas se dedica a mover por todo el mundo decenas de millones de euros y España logra hacer mayor de los ridículos al convertirse en el  único país de los 20 participantes que ha convertido en  moroso del CERN con una deuda superior a los 50 millones de euros.

La cifra no es elevada y el retraso en el pago no es nada del otro mundo para la Administración Pública española, pero no deja de chocar algo con las prácticas habituales de pago en el resto del mundo. Es más los responsables del CERN andan algo alborotados y preocupados y están empezando a plantearse revocarle a España sus derechos de voto por moroso.

Así lo ha explicado Rolf-Dieter Heuer, director del CERN al Financial Times:

” Esto no es normal, porque lo normal es que los países paguen puntualmente su cuota cada año. Ahora debemos intentar trabajar de forma constructiva para intentar que la deuda no se vaya acumulando”

Parece que Rolf-Dieter Heuer debe haber hecho sus deberes y se debe haber enterado que la administración española no sólo tiene costumbre de retrasar el pago de sus facturas sino que tiene una cierta tendencia a ir acumulando deuda. Bueno de hecho el bueno de Rolf-Dieter Heuer debe andar algo desesperado porque una delegación del CERN ya lleva varios viajes a Madrid en los últimos 6 meses para intentar cobrar la deuda y establecer un plan de pagos.

La última vez que España pagó su contribución al CERN fue en Diciembre de 2011 (pago con un año de retraso) y en 2012 sólo pagó el 25% de la cuota que le tocaba, dejando una deuda de 50 millones de euros. Para 2013 le toca pagar 75 millones de euros, aunque los presupuestos españoles contemplan sólo pagar 50 millones de euros (pequeño recorte de la cuota por la cara sin consenso con el resto de países) y en teoría si en 2013 no paga la cuota que le corresponde y la deuda acumulada verá como se le revocan sus derechos de voto en el CERN.

Pero no es preocupéis, la prima de riesgo baja, todo el mundo parece feliz y que España no pague sus facturas no es un síntoma de insolvencia, nosotros somos los más solventes del mundo, estamos en la Chanmpions de la economía mundial y nuestro sistema financiero es de lo más sólido que te puedes encontrar sobre la faz del planeta tierra.

Hay una nueva generación de piratas que he decidido llamarles “Piratas de Domingo”, también podríamos llamarles “toca-pelotas”, “aficionados al mamoneo informático” o “yo si que sé de pirateo y tú no”.

En fin, todo esto para contaros lo mal que está Internet. Está mal y se pondrá peor porque aunque todo el mundo se queja de lo lento de su conexión, se pregunta porque solo tenemos XX Megas de banda pasante, etc,etc, nadie hace nada para evitar el consumismo excesivo de Internet

Cuando veo lo que veo en los informes de seguridad de los sitios web, me dan ganas de llorar. Llorar, pero de risa, porque no os equivoquéis, los piratas domingueros no consiguen nada! Pero eso si, me los imagino tomándose unas cervezas en el bar con sus amigos. La conversación podría desarrollarse así entre 2 seudo-piratas:

– Yo, el otro día me bajé: Adobe X, Photoshop 34, Autocad 16 y la última versión de SAP, las pirateé y las tengo instaladas…

–> Conclusión 1: Tienes 4 programas que valen 20000 Euros, que no sabes utilizarlos, que no sabes para que sirven, que nunca vas a pasar de la primera página y que en el próximo borrado de disco van a desaparecer, si borrego-pirata si, porque te van a poner 45 espiones y 23 virus y al final tu ordenador va a ser “de los otros”, no tuyo. Los pirataste siguiendo las instrucciones de 56 foros, a cual más rocambolesco, con 60 links de publicidad que dieron 2 euros a los que publican el foro… claro, eso, el pirata aficionado no lo sabe!)

El otro pseudo-piratilla, con una sonrisa en la boca, y mirándole, le dice:

– Puaj… Yo ya paso de piratear programas, yo hago “jaquing” de sitios web….(silencio)…el otro le mira y le pregunta:

– Ya, y que has “jaqueado” ?

– Mira…he entrado en el sitio de, y JA…. eso si que es duro!

–> Explicación 2: El Piratilla2 buscando, buscando, ha encontrado un programa que “piratea” sitios web…ya… Esto lo hace “barriendo” literalmente Internet, buscando IPs que respondan al puerto 80 y en cada dirección buscando: /var/www/phpmyadmin, /var/www/manager, /www/var/judge.php, etc.etc. Resultado, cuando lo encuentran, buscan vulnerabilidades, ésto lo hace el software, no el payaso-pirata que no sabe hacer la “O” con un canuto! Si encuentran vulnerabilidades, las envían al fichero central de los verdaderos piratas para ser analizado y ver si pueden encontrar información interesante: datos, bancos, tarjetas de crédito, etc.

La conclusión de todo esto es que tenemos los logs llenniiittoos de los petardos-piratas con búsquedas incesantes de todo tipo de cosas (hay algunos que he contado más de 1000 búsquedas), que los bloqueamos con potentes firewalls y que lo único que hacen es perder el tiempo y lo peor, llenar la red de millones de bytes que no sirven para nada y hacen que cada vez consumamos más energía.

Otro dato importante es que los gili-piratas no tienen ni idea de como funciona Internet! Si, si, como os lo cuento! Para la mayoría de ellos, un router es un aparato que le has dado Telefónica y que está debajo de la mesa del ordenador! Un puerto es algo que hay que abrir para poder utilizar Emule y Cisco es el presente del verbo Ciscar, “yo cisco” o “me cisco” sinónimo de “yo jiño” o “me jiño”.

Como dato final os diré que en un sitio web, lo normal es encontrar un 20 o 30 % de esos bellotos-piratas intentando entrar y en general os diré que el 89% del tráfico total de correos son spam… Para llorar.




Suiza no deja de sorprenderme… Se ha lanzado una Iniciativa popular para pagar 2500 CHF (~2000 Euros) a todas las personas que vivan legalmente en Suiza.

Al principio me hizo reír, os imagináis que os dieran un dinero sin hacer nada! Solo por el simple hecho de tener una nacionalidad? Nadie trabajaría, no? Después he mirado con detenimiento el texto y el razonamiento es mucho más inteligente de lo que parece… De hecho, es posible que se ahorrara dinero.

Para hacerlo sencillo, imaginad que un país tiene como presupuesto un millón de euros para ayudas sociales… Parados de larga duración, gente sin recursos, ayuda al alquiler y todos los cientos de ayudas y modalidades que existen para ayudar a las personas que tienen problemas. Imaginemos que hay 1000 personas que se benefician de ese millón. Bien, pues la iniciativa dice: Porque no repartir 1 millón entre las 1000 personas directamente sin tener que hacer nada? Con esto, les damos 1000 Euros a cada uno, y asunto arreglado.

Lo que no se ve, es que para asignar 1 millón entre 1000 personas, con los sistemas actuales en los países modernos, esto cuesta otro millón para pagar a 100 personas que se ocupan de recibir las demandas de ayuda, tramitarlas, rechazarlas, facturarlas, etc, etc. Con lo cual, con este procedimiento nos ahorramos los 100 funcionarios que están tramitando todo.

Este es uno de los puntos evocados en la iniciativa, hay alguno más muy bien pensado. Por ejemplo, la persona que gane, digamos, 4000 CHF, no pasará a cobrar 6500! Su sueldo será: 2500 fijos + 1500 sueldo por su trabajo. Al final se quedaría igual.

No creo que la iniciativa sea finalmente aceptada pero es una idea muy buena para acabar con la burocracia, con los abusos y sobre todo con el estrés que provoca en la gente sin recursos tener que justificar decenas de veces su situación.


Tras la presentación de la colaboración OPERA en el CERN el 23 de septiembre, no se ha parado de buscar la velocidad del neutrino, la partícula más estudiada por la comunidad de la física.

Una prueba clave fue la repetición de la medición con pulsos de muy corta frecuencia. Esto permitió que el tiempo de extracción de los protones que finalmente conducen al haz de neutrinos se pueda  medir con más precisión.

El haz enviado por el CERN consistió en pulsos de tres nanosegundos de largo separados por hasta 524 nanosegundos. Unos 20 eventos de neutrinos se midieron en el Laboratorio Nacional Gran Sasso. Esta prueba confirma la exactitud de la medición de tiempo de OPERA, descartando una posible fuente de error sistemático. Las nuevas medidas no cambian la conclusión inicial. Sin embargo, la anomalía observada en el tiempo de viaje de los neutrinos desde el CERN hasta el Gran Sasso todavía necesita más controles y mediciones independientes antes de que pueda ser refutada o confirmada.
El 17 de noviembre, la colaboración presentó un documento sobre esta medida para la revista revisada por JHEP. Este documento está disponible en el servidor

Si fuera fácil ser feliz….

Hay veces que una canción, unas palabras, un desliz, hacen que te sientas feliz. En este mundo raro en que no sabemos donde vamos, quien queremos ser, donde queremos estar, nos perdemos en pequeñeces y no miramos lo fundamental.

Hoy me he sentido mal viendo un reportaje sobre la comida que tiramos, que las grandes superficies tiran porque caducan o simplemente porque están a punto de caducar y me he sentido pequeño y muy estúpido viviendo en esta sociedad que hace del negocio un todo, sin buscar lo fundamental, intentar ser feliz sin que otros sufran.

Con reflexiones nocturnas sobre la realidad me he encontrado llorando entre caminos torcidos sobre los pedazos de mi propio ser. No tengo donde ir, donde caerme dormido, como un niño. Huir del dolor es algo difícil, es como escribir en páginas en blanco, como estar de paso, sin ningún sitio donde ir.

Estamos de paso, sin un sitio claro donde ir, que prisa por vivir!!! Me gustaría aprender a dormir, a despertar soñando en otra realidad, otra verdad. Hay heridas que no ayudan a vivir y que no se curan con el tiempo.

Con todas estas reflexiones pienso en las cosas que son importantes, las que de verdad me importan, las que no importan a los demás, en las que me matan o me salvan pero que al final me hacen mejor, mas libre.




Hace tiempo que no escribo por falta de tiempo, de ganas o posiblemente un poco de las dos cosas. Hoy es un día importante, si, y no porque en el CERN, la experiencia OPERA ha medido el tiempo de vuelo de los neutrinos que se envian a Gran Sasso, poniendo en duda uno de los dogmas que mas han excitado a profanos y eruditos, el límite absoluto de la velocidad de la luz y con ella, la famosa fórmula de Einstein E=mc2. Estas medidas parecen demostrar que los neutrinos viajan más rápido que la luz.

Esto es muy importante porque puede hacer temblar algunos fundamentos de la física cuántica y…humm…y yo, para que estaba aquí hoy? Ah, si… para hablaros de Tim.

Y quién es Tim, os preguntareis? Pues Tim es mi hijo que acaba de nacer en Ginebra y es grande, guapo, fuerte y… en fin, ya sabeis como va esto, no? No os voy a dar los datos técnicos porque no cuento con su autorización, pero os aseguro que son impresionantes :-)

Estoy contento porque está aquí y porque todo ha salido bien, muy bien. La madre es una mujer que hoy me ha impresionado por su entereza, su fuerza y su “saber estar” incluso cuando las cosas no van al 100% bien. Tiene madera de ganadora y hoy me lo ha demostrado con creces.

Solo quería compartir con vosotros este momento de alegría y muy pronto os daré mas datos y alguna foto.





El último haz del LHC fue extraído del 2010 ayer a las 18 horas y esta ocasión merece ser celebrada. 2010 fue un gran año, no sólo para el LHC, sino para todo el programa del CERN. Las cifras hablan por sí solas: el SPS envió 4,03 * 10E19 protones contra el objetivo CNGS, 5% por encima del objetivo. Para el n-TOF, la cifra superó el objetivo en un 16% y la eficiencia general de la MSF ha logrado resultados notables del 82%.

Aguas arriba de la cadena de inyección, las cosas fueron igual de bien. El complejo PS ha proporcionado los haces con su habitual fiabilidad, permitiendo que el AD funcionara con una fiabilidad cercana al 100%, e Isolde ha estado operando cerca de 500 períodos de explotación para más de 40 experimentos diferentes. Con estas máquinas, se obtuvo una gran cantidad de nuevos resultados, entre ellos algunos resultados muy importantes en el programa del anti-hidrógeno.

Las cifras para el LHC ya se han mencionado, pero vale la pena repetir. A principios de este año, nos pusimos una meta que, con la ambición y la prudencia combinadas,  fuera razonable: queríamos llegar a una luminosidad máxima de 10 * 32 cm2 * s-1. Hemos alcanzado esta cifra antes de lo previsto, y, de hecho, se ha duplicado al final de la operación con los protones. La operación con los iones de plomo también funcionó muy bien, la cantidad de datos fue casi tres veces mayor de lo inicialmente previsto. Estos resultados son impresionantes.

En el espacio de ocho meses, se ha encontrado en las mediciones y las publicaciones de los experimentos del LHC prácticamente todos los resultados físicos de los últimos cincuenta años. Es en sí una hazaña notable, pero eso no es todo. Los resultados obtenidos en la nueva física también se han publicado. Todo esto es particularmente prometedor para el 2011.

El éxito del programa del LHC este año es crucial no sólo para la física de partículas, sino también para la ciencia en general. Con el LHC, hablamos de la ciencia mucho más de lo que se ha hecho hace mucho tiempo. Hemos oído hablar un presentador de televisión en Inglés usar el término “pueblo de colisionador de hadrones” para describir una gran reunión de personas. Esto puede parecer trivial, pero significa que cuando estamos estudiando la ciencia, ésta despierta el interés, así cuando tenemos algo importante que decir, la gente está escuchando. La cobertura de los medios que hemos tenido en su mayoría ha sido muy positiva y precisa.

El CERN es un laboratorio de ciencia básica, es importante que el público entienda y aprecie el valor de la ciencia básica. Pero también debemos tener en cuenta que sin la ciencia básica, no habría ciencia aplicada. Por lo tanto, es importante celebrar el éxito del CERN.

Sergio Bertolucci y Steve Myers