Subido por Ernesto Riccardi

Memoria TFG DRL - entrega

Anuncio
Trabajo Fin de Grado
Grado en Ingeniería de las Tecnologías de
Telecomunicación
Desarrollo de sensor de temperatura gestionable
Autor: Daniel Rodríguez León
Tutor: Antonio Estapa Alonso
Equation Chapter 1 Section 1
Departamento de Ingeniería Telemática
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2017
Trabajo Fin de Grado
Grado en Ingeniería de las Tecnologías de Telecomunicación
Desarrollo de sensor de temperatura gestionable
Autor:
Daniel Rodríguez León
Tutor:
Antonio Estepa Alonso
Profesor titular
Departamento de Ingeniería Telemática
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2017
iii
Trabajo Fin de Grado: Desarrollo de sensor de temperatura gestionable
Autor:
Daniel Rodríguez León
Tutor:
Antonio Estepa Alonso
El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:
Presidente:
Vocales:
Secretario:
Acuerdan otorgarle la calificación de:
Sevilla, 2017
El Secretario del Tribunal
v
A mi familia
A mis maestros
A mis compañeros
vii
Agradecimientos
A mi familia y amigos, sin su esfuerzo y apoyo no me habría sido posible llegar hasta aquí.
Daniel Rodríguez León
Sevilla, 2017
ix
Resumen
En el mercado existen hoy numerosas soluciones comerciales para diferentes usos en nuestras casas, desde
dispositivos de vigilancia o domótica para la regulación de la temperatura, luz interior y calefacción, hasta
dispositivos que te permiten estar en contacto con tu mascota desde cualquier lugar. Además, existen numerosas
aplicaciones open source para el uso y disfrute de funcionalidades como las descritas anteriormente.
El objetivo de este Trabajo de Fin de Grado es implementar un agente SNMP para Raspberry Pi para la
monitorización de un conjunto de elementos que recogen el estado en tiempo real de un terrario casero. Esto es,
una serie de sensores (humedad, temperatura, luz) y actuadores (bombillas) que son monitorizados por un agente
SNMP funcionando en una Raspberry Pi conectada al router casero que permite hacer consultas mediante el uso
del protocolo SNMP. Se mostrará el camino seguido para el desarrollo de unos scripts de lectura de sensores, la
creación de un módulo Mib y el desarrollo de un agente SNMP.
xi
Abstract
Nowadays, there are lots of commercial products with a variety of uses at our homes, from surveillance devices
or domotics devices to regulate temperature, indoor light or heat; to devices that allow you to keep in contact
with your pet from anywhere. Furthermore, there is also a great number of open source applications that provide
those previous functionalities.
The aim of this thesis is to implement a SNMP agent for Raspberry Pi, in order to monitor a set of elements that
describe the state of a homemade terrarium in real time. More specifically, a set of sensors (temperature, light
and humidity) and an actuator (light bulb) which are managed by a SNMP agent running in a Raspberry Pi
connected to a home router, allowing the user to send requests using the SNMP protocol.
The development process will be shown within this document, such as how to use scripts with the sensors, how
to create a MIB module and how to implement a SNMP agent.
Índice
Agradecimientos ........................................................................................................................................... ix
Resumen ........................................................................................................................................................x
Abstract ....................................................................................................................................................... xii
Índice .......................................................................................................................................................... xiii
Índice de Tablas ........................................................................................................................................... xv
Índice de Figuras ......................................................................................................................................... xvi
Notación .................................................................................................................................................... xvii
1
Introducción .......................................................................................................................................... 1
1.1. Antecedentes ............................................................................................................................................... 1
1.2. Objetivos....................................................................................................................................................... 1
1.3. Metodología................................................................................................................................................. 2
1.4. Estructura de la Memoría ........................................................................................................................... 2
1.5. Diagrama de Gantt ...................................................................................................................................... 3
2
Puesta en marcha del sistema de control .............................................................................................. 5
2.1. Conexión de sensores a Raspberry Pi ......................................................................................................... 6
2.2. Conexión de actuadores a Raspberry Pi ..................................................................................................... 7
2.3. Manejo de sensores mediante script.......................................................................................................... 9
2.3.1
Script de sensor luz .............................................................................................................................. 9
2.3.2
Script de sensor temperatura y humedad .......................................................................................10
3
Diseño de sistema de gestión .............................................................................................................. 13
3.1. Escenario de sistema de gestión ...............................................................................................................13
3.2. Objetos de gestión .....................................................................................................................................14
3.3. Diseño de módulo TERRARIO-MIB ............................................................................................................16
3.3.1
Árbol de objetos del modulo ............................................................................................................17
3.3.2
Comprobación validez MIB – librería libsmi ....................................................................................22
4
Desarrollo del Agente SNMP................................................................................................................ 26
4.1. Librerías necesarias para el agente ..........................................................................................................26
4.1.1
PySNMP ..............................................................................................................................................26
4.1.2
Net-SNMP...........................................................................................................................................27
4.2. Diseño e implementación del agente .......................................................................................................28
4.2.1
Librerías importadas ..........................................................................................................................28
4.2.2
Clase Mib ............................................................................................................................................29
4.2.3
Clase SNMPAgent ..............................................................................................................................29
4.2.4
Clase Worker ......................................................................................................................................29
4.2.5
Clase VigilanteTraps...........................................................................................................................29
4.3. Funciones para los OIDs ............................................................................................................................30
4.3.1
Compilación del modulo TERRARIO-MIB .........................................................................................30
4.3.2
Funciones asociadas a los OIDs ........................................................................................................32
4.3.3
Funciones auxiliares ..........................................................................................................................33
4.4. Ejecución del agente ..................................................................................................................................34
xiii
5
Gestor SNMP ....................................................................................................................................... 37
6
Pruebas y validación ............................................................................................................................ 39
6.1. Informe de pruebas realizadas ................................................................................................................. 39
6.1.1
Ejecución snmpwalk, P01B ............................................................................................................... 40
6.1.2
snmpget con nombre de OID, P02B................................................................................................. 40
6.1.3
snmpget con identificadores numéricos, P03B............................................................................... 40
6.1.4
snmpset con nombres de OID y comunidad public, P04B ............................................................. 41
6.1.5
snmpset con nombres de OID y comunidad private, P05B ........................................................... 41
6.1.6
snmpset con nombres de OID de nivel read-only, P06B ................................................................ 41
6.1.7
snmpget con OID no accesibles, P07B ............................................................................................. 41
6.1.8
snmpget a los elementos de tipo notificación, P08B ..................................................................... 42
6.1.9
Reiniciar el agente, P09B .................................................................................................................. 42
6.1.10 Recepción de traps en Equipo B, P10B ............................................................................................ 42
6.1.11 Recepción de traps en Equipo B y puerto diferente, P11B ............................................................ 42
6.1.12 Recepción de traps en Equipo B y paro del envío, P12B ................................................................ 43
6.1.13 Paro de funcionamiento de sensor luz, P13B.................................................................................. 43
6.1.14 Paro de funcionamiento de sensor luz y puesta en funcionamiento P14B .................................. 43
6.1.15 Paro de funcionamiento de sensor temperatura y humedad, P15B............................................. 43
6.1.16 Paro de funcionamiento de sensor temperatura y humedad y puesta en funcionamiento, P16B
44
6.1.17 Cambiar el valor máximo de temperatura aceptable a uno no válido, P17B ............................... 44
6.1.18 Cambiar el valor mínimo de temperatura aceptable a uno no válido, P18B................................ 44
6.1.19 Cambiar el valor máximo de humedad aceptable a uno no válido, P19B .................................... 44
6.1.20 Cambiar el valor mínimo de humedad aceptable a uno no válido, P20B ..................................... 45
6.1.21 Cambio de estado de la bombilla, apagado y encendido, P21B .................................................... 45
6.1.22 Apagado de bombilla y poner temporizador a 3 minutos, P22B................................................... 45
6.1.23 Poner un segundo temporizador para la bombilla, P23B .............................................................. 46
6.2. Informe de resultados ............................................................................................................................... 46
7
Conclusiones y desarrollos futuros....................................................................................................... 48
7.1. Conclusiones del proyecto......................................................................................................................... 48
7.2. Desarrollos futuros .................................................................................................................................... 48
Referencias.................................................................................................................................................. 50
Anexos ........................................................................................................................................................ 11
Anexo A: Módulo TERRARIO-MIB ................................................................................................................ 11
Anexo B: Plan de Pruebas ............................................................................................................................. 20
ÍNDICE DE TABLAS
Tabla 1-1. Actividades del proyecto con fechas de inicio y fin.
3
Tabla 1-2. Diagrama de Gantt del proyecto.
3
Tabla 6-3. Resultados de las pruebas.
47
Tabla 6-4. Resumen de resultados.
47
xv
ÍNDICE DE FIGURAS
Figura 2-1. Sensores AM2302 y TSL2561, respectivamente.
5
Figura 2-2. Distribución pines Raspberry Pi 1.
6
Figura 2-3. Circuito de conexión de sensores a Raspberry Pi.
7
Figura 2-4. Conexión de actuador a Raspberry Pi.
8
Figura 2-5. Diagrama de flujo de sensores.
9
Figura 3-1. Escenario de sistema de gestión.
14
Figura 3-2. Esquema de objetos de gestión del elemento agente.
14
Figura 3-3. Esquema de objetos de gestión del elemento sensor temperatura y humedad.
15
Figura 3-4. Esquema de objetos de gestión del elemento bombilla.
15
Figura 3-5. Esquema de objetos de gestión del elemento sensor luz.
16
Figura 3-6. Árbol de OIDs de TERRARIO-MIB.
18
Figura 3-7. Árbol OID TERRARIO-MIB, rama generalConfig.
19
Figura 3-4. Árbol OID TERRARIO-MIB, rama sensorLuzConfig.
20
Figura 3-9. Árbol OID TERRARIO-MIB, rama sensorTemperaturaHumedadConfig.
21
Figura 3-10. Árbol OID TERRARIO-MIB, rama bombillaLuzConfig.
22
Figura 3-11. Texto añadido a TERRARIO-MIB.
24
Figura 4-1. Estructuras internas de SNMPv3 (izquierda) y PySNMP (derecha).
26
Figura 4-2. Conexión entre el módulo TERRARIO-MIB y el programa agente.
31
Figura 4-3. Relación entre los objetos gestionables de TERRARIO-MIB
33
Figura 6-1. Escenario de pruebas.
39
Notación
Código
Inglés
Comando
Fichero
iso.org.dod.internet
Texto de código de un fichero
Palabra en inglés
Comando de la terminal
Nombre de fichero
OID – Identificador de Objeto
xvii
1 INTRODUCCIÓN
Nuestra recompensa se encuentra en el esfuerzo y no en
el resultado. Un esfuerzo total es una victoria completa.
- Mohandas Karamchand Gandhi -
D
esde la década de los 90, cuando surgió el primer RFC para la primera versión del protocolo SNMP, el
uso de dicho protocolo se ha extendido a prácticamente cualquier lugar en el que se necesite gestionar
de manera sencilla y flexible los elementos interconectados en la red sin importar el fabricante.
En 2012, la Fundación Raspberry Pi lanzaba al mercado un computador de placa reducida de bajo coste con el
objetivo de contribuir a la enseñanza de ciencias de la computación en el ámbito académico. Éste consistía
básicamente en un ordenador de tamaño pequeño sin periféricos, con una serie de puertos y pines para conectar
elementos externos y corriendo sistemas operativos como Debian o Ubuntu optimizados para el dispositivo.
Aunque las especificaciones de aquel primer modelo eran bastante humildes, los modelos actuales cuentan con
salida HDMI, 1GB RAM, Bluetooth 4.1 e incluso con procesadores 1.2GHz 64-bit quad-core ARMv8. Su uso
se ha generalizado hoy en día y no sólo en la enseñanza, sino que cuenta con una gran comunidad de
desarrolladores que crean aplicaciones útiles para otros usuarios [1].
Por ello, aprovechando el potencial de un dispositivo como Raspberry Pi y la flexibilidad del protocolo SNMP,
se pretende realizar una serie de programas que permitan la supervisión de un terrario casero. Para ello, se
utilizará el lenguaje de programación Python.
1.1. Antecedentes
El actual TFG es una continuación del trabajo de curso de la asignatura Gestión de Redes de Telecomunicación.
Esta asignatura es del tercer curso del Grado en Ingeniería de las Tecnologías de Telecomunicación.
1.2. Objetivos
El objetivo de este TFG es la implementación de un sistema de gestión totalmente funcional en un dispositivo
Raspberry Pi para el escenario de un terrario casero. Para ello, se desarrollará un agente SNMP por lo que se
profundizará en la implementación del protocolo SNMP. Como consecuencia del desarrollo de un agente, será
necesario crear un módulo MIB complejo con ramas específicas para cada sensor y notificaciones trap. Además,
se incluye en una parte del proyecto, el desarrollo de scripts que se encarguen del manejo de sensores.
A diferencia de otros proyectos ya existentes sobre el tema de monitorización casera de temperatura, humedad
y/o luz que utilizan Arduino en vez de Raspberry Pi como GardenBot [2] o que utilizan Raspberry Pi, pero se
1
Introducción
2
centran en la realización de programas para ser gestionados mediante servidores web; este proyecto utiliza para
ese mismo fin el protocolo SNMP como elemento estructurador. Además, un objetivo fijado para el futuro del
proyecto es la adaptación del manejo de sensores a cualesquiera que se encuentren conectados, de manera que
puedan ser usados sin importar su fabricante.
1.3. Metodología
Para el desarrollo del sistema de gestión de red será necesario el diseño de un módulo MIB, la obtención de
sensores adecuados, y su manejo; y la implementación de un agente SNMP en el entorno de desarrollo.
Para el desarrollo del software se utilizará Python como ya se ha comentado anteriormente. Las razones son que
es un lenguaje sencillo de aprender, bastante libre en cuanto a la manera de estructurar el código, multiplataforma
(Linux - Windows - Mac), potente y con una gran documentación y librerías existentes para su uso tanto con
sensores como para la implementación de SNMP.
Además, se estructurará el proyecto de forma distribuida y el programa principal del agente de manera multihilo.
De forma distribuida por constar de no un único programa sino varios programas que colaboran para tomar los
datos (scripts de lectura de sensores) y atender las peticiones SNMP (programa agente). De esta manera se
simplifica el funcionamiento del proyecto, se puede depurar una parte del proyecto mientras las otras siguen
totalmente operativas e incluso permite la extensibilidad de cada parte hacia nuevos objetivos y funcionalidades.
Para el proyecto se ha utilizado el entorno de desarrollo detallado a continuación:

Raspberry Pi 1 model B.

Sistema Operativo: Raspbian 8 (jessie).

Kernel: 4.1.7+.

Entorno de ejecución: Terminal Unix de comandos Bash.

Editor de texto: Vim, configuración estándar.

Intérprete: Python 3.4.2.

Protocolo de gestión: SNMP versión 2c.
1.4. Estructura de la Memoría
Esta memoria se divide en 7 bloques que detallan la motivación del proyecto, las fases de diseño del conjunto
del proyecto, la implementación del mismo, pruebas realizadas y conclusiones finales.
En la Sección 1, Introducción, se da información sobre el ánimo del TFG como el origen de la idea del proyecto,
el entorno de trabajo y la estructura de la memoria.
En la Sección 2, Puesta en marcha del sistema de control, se incluyen los scripts realizados específicamente para
los sensores usados para captar la humedad, la temperatura y diferentes valores de luz.
En la Sección 3, Diseño de sistema de gestión, se habla del estándar que define las reglas de los RFCs para
escribir un modulo MIB válido y se detalla el módulo específicamente creado para este proyecto.
En la Sección 4, Desarrollo del Agente SNMP, se listan las librerías necesarias usadas para el desarrollo de un
agente SNMP en Python, se describe el esqueleto del agente SNMP en Python, se describen las funciones
específicas para cada OID y se describe cómo poner a funcionar el agente SNMP.
En la Sección 5, Gestor SNMP, se describe un gestor que recibe los traps generados por el agente para cerciorarse
de la entrega de los avisos en las situaciones de alarma descritos por la MIB.
En la Sección 6, Pruebas y validación, Se describen las pruebas realizadas para certificar el buen funcionamiento
del agente SNMP. Asímismo, se listan los casos límites a los que se ha sometido el agente y sus limitaciones de
uso.
3
Desarrollo de sensor de temperatura gestionable
Por último, en la Sección 7, Conclusiones y desarrollos futuros, se describen las conclusiones como resultado
del proyecto y se describen las actuales vías de mejora del conjunto.
1.5. Diagrama de Gantt
Para la planificación del proyecto se ha procedido a la realización de un Diagrama de Gantt con las principales
actividades previstas. Estas actividades se describen a continuación:
Actividades
A. Búsqueda sensores y librerías compatibles.
B. Desarrollo de scripts para sensores.
C. Creación de módulo TERRARIO-MIB.
D. Creación de programa del agente SNMP.
E. Fase de pruebas.
F. Corrección de errores e implementación de mejoras.
G. Documentación del proyecto.
Inicio
21/09/2016
11/10/2016
22/10/2016
29/10/2016
01/12/2016
10/12/2016
13/01/2017
Duración
19 días
10 días
6 días
32 días
8 días
33 días
32 días
Fin
10/10/2016
21/10/2016
28/10/2016
30/11/2016
09/12/2016
12/01/2017
14/02/2017
Tabla 1-1. Actividades del proyecto con fechas de inicio y fin.
Estas actividades se desarrollan según la línea temporal descrita en el Diagrama de Gantt siguiente:
21/09/16
11/10/16
31/10/16
20/11/16
10/12/16
30/12/16
19/01/17
A
B
C
D
E
F
G
Tabla 1-2. Diagrama de Gantt del proyecto.
3
08/02/17
28/02/17
2 PUESTA EN MARCHA DEL SISTEMA DE
CONTROL
If you want to find the secrets of the universe, think
in terms of energy, frequency and vibration.
- Nikola Tesla -
L
os sensores que se utilizarán finalmente serán el sensor de luz TSL2561 y el sensor de temperatura y
humedad AM2302. Actualmente, estos sensores son ampliamente utilizados y por ello disponen de
bastantes librerías para su uso con varios lenguajes de programación. De inicio, en la página del fabricante
Adafruit [3] están disponibles librerías para su manejo en Arduino mayormente, y un número reducido para
Raspberry Pi, además de foros donde se da soporte a los usuarios. En la Figura 2-1 se puede comprobar el
aspecto de los sensores que se usarán.
Figura 2-1. Sensores AM2302 y TSL2561, respectivamente.
5
Puesta en marcha del sistema de control
6
2.1. Conexión de sensores a Raspberry Pi
Los sensores se conectan a la Raspberry Pi mediante sus pines, conocidos como GPIO (general purpose
input/output). Éstos, constituyen una interfaz física entre la Raspberry Pi y el mundo exterior. En algunos casos,
estos pines se pueden utilizar como interruptores pues se pueden configurar en modo de salida (OUTPUT) para
que aporten una tensión de 3.3V de salida para, por ejemplo, encender un LED en un circuito externo. En otros
casos, se pueden configurar en modo de entrada (INPUT) para recibir datos del exterior. En mi caso, se utilizarán
algunos pines como entrada para recibir datos de los sensores ya comentados [4].
En la web de Adafruit, al buscar los sensores utilizados en el proyecto, se puede encontrar información detallada
sobre las características de ambos sensores, explicación de cómo conectar los sensores a Arduino y cómo usarlo
en esta plataforma. Debido a que la plataforma usada es Raspberry Pi, se van a describir unos pasos para
conectarlo a Raspberry Pi. Es importante conocer qué usos tienen los pines de la Raspberry Pi 1. Para ello, se
muestra en la Figura 2-2, la distribución de los pines con su uso. La distribución consiste en 13 pares con el
orden incrementándose de izquierda a derecha. Así, la primera fila son el pin de orden 1 (izquierda) y 2 (derecha),
la siguiente fila el 3 y 4, la siguiente el 5 y 6, etc.
Figura 2-2. Distribución pines Raspberry Pi 1.
El sensor TSL2561 dispone de 4 pines que van a ser usados para su conexión:

VCC – a este pin se debe conectar una fuente de alimentación de 3.3V o 5V. En la Raspberry Pi lo
conectaremos al pin número 2 (5V).

GND – este pin se debe conectar al polo negativo de la fuente de alimentación o tierra. En la Raspberry
Pi lo conectaremos al pin número 6 (GND).

SDA – este pin se debe conectar a otro pin I2C SDA Data en la Raspberry Pi. En la Raspberry Pi lo
conectaremos al pin número 3 (SDA).

SCL – este pin se debe conectar a otro pin I2C SCL clock en la Raspberry Pi. En la Raspberry Pi lo
conectaremos al pin número 5 (SCL).
7
Desarrollo de sensor de temperatura gestionable
El sensor AM2302 dispone de 3 pines que van a ser usados en su conexión (el restante se deja sin conectar:

VCC – este pin se conecta a una fuente de alimentación de 5V. En la Raspberry Pi lo conectaremos al
pin número 1 (3.3V).

DATA – este pin se conecta a un pin GPIO de las Raspberry Pi, el número 7 (el sistema lo reconoce
como GPIO 4). Se necesita, además, conectar una resistencia de valor 10kΩ entre este pin y el pin VCC
de este sensor.

GND – este pin se conecta a tierra al pin número 6 (GND).
Con todo esto, las conexiones quedarían como se describe en la Figura 2-3.
Figura 2-3. Circuito de conexión de sensores a Raspberry Pi.
2.2. Conexión de actuadores a Raspberry Pi
Como se ha comentado, el sistema de gestión hará uso de un actuador que permitirá iluminar el terrario, una
bombilla. Para su uso será necesario la intermediación de un relé, que permite que un circuito actúe de interruptor
de la bombilla conectada a la corriente eléctrica. Para ello, se utilizará cualquier placa de relé del tipo “Relay
SRD-05VDC-SL-C” [5] que tenga a la entrada pines para alimentación a 5V, pin GND y un pin que actúa de
interruptor al proporcionarle una tensión de 3V. Además, en la salida tiene 3 pines: el pin Normalmente Abierto
(N.O.), el pin Normalmente Cerrado (N.C.) y el pin Común. De los dos cables conectados a la corriente eléctrica
de casa, uno de ellos se conectará directamente a un polo del actuador y el otro se conectará al pin Común de la
placa de relé.
7
Puesta en marcha del sistema de control
8
En función de como se quiera plantear la funcionalidad de la placa de relé, se encuentran dos casos:

Cuando la placa de relé no está funcionando, el actuador conectado se encuentra encendido → para ello
se conecta un cable desde el pin N.C. al otro polo del actuador.

Cuando la placa de relé no está funcionando, el actuador conectado se encuentra apagado → para ello
se conecta un cable desde el pin N.O. al otro polo del actuador.
En el caso de este proyecto, se conectará el actuador a la Raspberry de la siguiente manera en la Figura 2-4,
permaneciendo desactivado el actuador cuando la placa de relé no está activada:
Figura 2-4. Conexión de actuador a Raspberry Pi.

Pin GND placa de relé conectado al pin GND de Raspberry Pi.

Pin 5V placa de relé conectado al pin 5V de Raspberry Pi.

Pin de señal placa de relé conectado al pin GPIO 17 (pin número 11) de Raspberry Pi.
Para uso de este circuito dentro del proyecto, lo único que se necesita es exportar el pin GPIO en el que se
encuentra conectado el pin “Señal” y cambiar su valor entre ‘0’ y ‘1’, implicando la aportación de una tensión
de 3.3V suficiente para la activación del relé.
Para la exportación, se realizan los siguientes comandos:
sudo echo 17 > /sys/class/gpio/export
sudo echo out > /sys/class/gpio/gpio17/direction
Y para encender/apagar la bombilla sólo se necesita ejecutar el siguiente comando:
sudo echo <valor> > /sys/class/gpio/gpio17/value
donde <valor> es ‘1’ para encender y ‘0’ para apagar.
Para “des-exportar” el pin previamente exportado, sólo se necesita ejecutar el siguiente comando:
9
Desarrollo de sensor de temperatura gestionable
sudo echo 17 > /sys/class/gpio/unexport
2.3. Manejo de sensores mediante script
Ambos scripts utilizados para la lectura de los sensores funcionarán de la siguiente manera:
La información que los scripts lean de los sensores se almacenará en archivos con nombres descriptivos de la
información que contienen en un directorio accesible para el agente SNMP. El modo de funcionamiento de
ambos scripts es continuo, es decir, cuando el script es puesto en marcha se mantendrá en un bucle de lectura de
los sensores y volcado de la información en los archivos, seguido de un tiempo de espera determinado para
volver a leer. Estos diagramas de flujo describen el funcionamiento de los sensores:
Inicio
Inicio
While (true)
While (true)
Lectura de sensor
- infrarrojo
- luminosidad
- lux
- visible
Lectura de sensor
- temperatura
- humedad
Volcado de
lectura a archivo
Volcado de
lectura a archivo
Espera de 5
segundos
Espera de 5
segundos
Figura 2-5. Diagrama de flujo de sensores.
Para la creación de los dos scripts de lectura de sensores se ha creado un directorio identificado con la variable
de entorno $TERRARIO_SNMP_AGENT_DIR en el cual se encontrarán los dos scripts.
2.3.1
Script de sensor luz
El sensor TSL2561 es una excelente herramienta para medir diferentes tipos de luz que habrá en el terrario.
Tiene diodos que pueden captar tanto luz en frecuencias del rango visible para el ojo humano como aquellas en
las frequencias de infrarrojos. Además, tiene la funcionalidad de aportar resultados de medición en Lux, una
unidad de medida del Sistema Internacional de Unidades para la iluminancia o nivel de iluminación. Esta medida
proporciona un valor sobre la cantidad de iluminación que incide por unidad de superficie.
El script que permite leer la información del sensor está escrito para la versión 3 de Python y tiene como nombre
TSL2561.testsensorluz-int.py y se describe a continuación. Se describirá con extractos del fichero de código
9
Puesta en marcha del sistema de control
10
fuente para no masificar la explicación con código menos importante.
El script, en primer lugar, importa la librería llamada “TSL2561” [6] que no es más que un fichero que contiene
la definición de la clase TSL2561. Esta clase representa al sensor real y contiene atributos y funciones por las
que se puede leer el sensor TSL2561. Para el uso de esta librería, se necesitan otras librerías, las cuales se listan
en la página web del autor. Luego, crea una instancia de la clase TSL2561 de manera que se puedan usar, de
hecho, las funciones definidas para leer el sensor y comprueba si el sensor se encuentra conectado a la Raspberry
Pi. Si está conectado el sensor entonces entra en un bucle while infinito.
#!/usr/bin/env python3
from TSL2561 import *
tsl = TSL2561()
Además, el script del sensor mantiene un fichero de log con las medidas tomadas y la marca temporal. Para ello,
utiliza la clase “logging”. Se configura el log de la siguiente manera:
logging.basicConfig(filename='sensor_luz.log',format='%(asctime)s
%(levelname)s::%(message)s',
datefmt='%d/%m/%Y
%I:%M:%S
level=logging.DEBUG)
-%p',
De esta manera, el fichero sensor_luz.log se creará en el mismo directorio del script con el formato “Timestamp
– nivel de log::mensaje” para las líneas de log.
Ahora procede a determinar si el sensor está conectado al equipo con la función “foundSensor”.
if (tsl.foundSensor()):
while(1):
Dentro del bucle, se lee la información del sensor mediante el uso de la función “getLuminosity” a la cual se le
pasa un argumento que indica qué rango de frecuencias debe captar el sensor para obtener un valor. La función
“calculateLux” permite obtener el valor de lux mediante las medidas de luminosidad de todo el espectro y la de
infrarrojos.
full = tsl.getLuminosity(tsl.FULLSPECTRUM)
visible = tsl.getLuminosity(tsl.VISIBLE)
infrared = tsl.getLuminosity(tsl.INFRARED)
lux = tsl.calculateLux(full, infrared)
Registra las mediciones en el log.
logging.info("LUM "+str(luminosidad)+" | FULL "+str(full)+"
VISIBLE "+str(visible)+" | IR "+str(infrared)+" | LUX "+str(lux) )
|
Entonces, se escribirán los datos en cada fichero correspondiente. A continuación, un ejemplo de escritura para
el dato “visible” correspondiente al valor de luz visible. Aclarar que “d” es un variable que contiene el camino
al directorio donde están los ficheros, que es un subdirectorio de $TERRARIO_SNMP_AGENT_DIR llamado
“param-values”.
fvis = open( d + '/visible'
fvis.write(str(visible))
,"w")
fvis.close()
Por último, se manda a esperar al programa un tiempo hasta volver a ejecutar el mismo procedimiento.
time.sleep(TIEMPO)
2.3.2
Script de sensor temperatura y humedad
El sensor AM2302 también es una excelente herramienta para medir tanto temperatura como humedad de
11
Desarrollo de sensor de temperatura gestionable
manera sencilla. Proporciona medidas de temperatura en un rango de -40 a 80 ºC y de humedad en un rango
de 0 a 100%, lo cual es adecuado para cualquier animal viviendo en un terrario. Para su uso se necesita la
instalación de la librería “Adafruit_Python_DHT” [7].
El script que lee las medidas del sensor se llama AM2302.simple_tofile-int.py y está escrito para el intérprete
de Python versión 3. Como en el caso anterior, se describirá con extractos del fichero de código fuente para no
masificar la explicación con código menos importante.
En primer lugar, se importa la librería “Adafruit_DHT” y se crea una instancia de la clase “AM2302” para poder
usar las funciones para leer del sensor.
#!/usr/bin/env python3
import Adafruit_DHT
import logging
sensor_AM2302 = Adafruit_DHT.AM2302
Tras crear la instancia del sensor, se procede como en el anterior caso; se entra en un bucle infinito en el que se
lee, se almacena la información y se espera un tiempo determinado.
Además, el script del sensor mantiene un fichero de log con las medidas tomadas y la marca temporal. Para ello,
utiliza la clase “logging”. Se configura el log de la siguiente manera:
logging.basicConfig(filename='sensor_th.log',format='%(asctime)s
%(levelname)s::%(message)s',
datefmt='%d/%m/%Y
%I:%M:%S
level=logging.DEBUG)
-%p',
De esta manera, el fichero sensor_th.log se creará en el mismo directorio del script con el formato “Timestamp
– nivel de log::mensaje” para las líneas de log.
En este caso, se lee del lector de la siguiente manera:
while ( 1 ):
humidity, temperature = Adafruit_DHT.read_retry(sensor_AM2302, pin)
Así, mediante la función “read_retry” se reciben los valores de temperatura y humedad directamente. Además,
se le indica por argumento el pin donde está conectado el sensor.
Para el fichero de log, se registra cada medida tomada con las siguientes líneas:
logging.info("TEMPERATURA "+str(temperature))
logging.info("HUMEDAD "+str(temperature))
Por último, se escribe la información en el mismo directorio que el anterior script y se manda al programa a
esperar durante unos secundos para volver a repetir el proceso.
fhum = open( d + '/humidity', "w")
fhum.write(str(int(humidity)))
fhum.close()
NOTA: denotar que el valor “humidity” y “temperature” son convertidos explícitamente a tipo “int”
(entero) en la función “write”. Esto se debe hacer al escribir cualquier valor que contenga decimales (tipos
“float”, por ejemplo) ya que el agente SNMP deberá manejar valores enteros.
time.sleep(TIEMPO)
11
3 DISEÑO DE SISTEMA DE GESTIÓN
E
l término MIB se refiere a un tipo de base de datos que contiene una serie de objetos siguiendo una
estructura arbolada. Estos objetos son variables usadas por el protocolo SNMP para supervisar y gestionar
una máquina en una red. Cada uno de esos objetos tiene un identificador único e información sobre su
sintaxis (entero, cadena de caracteres, contador), el nivel de acceso (lectura y escritura), restricciones de tamaño
y otros detalles como la descripción del mismo.
Como se comentó en la introducción, el fin de SNMP y, por tanto, también de la MIB es hacer posible gestionar
máquinas de distintos fabricantes. Para ello, se recurre a un subconjunto de tipos de ASN.1 (Notación Sintáctica
Abstracta). ASN describe la forma en la que se almacena la información de manera que mediante su uso se
pueden representar datos independientemente del fabricante de la misma. ASN.1 es la segunda versión de la
Estructura de la Información de Gestión (Structure of Management Information Version 2 o SMIv2) definido
en el RFC 2578 [8].
3.1. Escenario de sistema de gestión
En un sistema de gestión de red, se encuentran dos roles: el gestor y el agente (o nodo gestionado). Este tipo de
sistema sigue la arquitectura Cliente - Servidor.
 El agente es el equipo instrumentalizado que gestiona los objetos de la base de datos de gestión (o MIB).
Recibe comandos que actúan sobre esos objetos de gestión. Además, puede generar notificaciones de aviso
en determinadas ocasiones o ante determinados eventos. Estas notificaciones se denominan traps y sirven
para informar al gestor de los eventos ante los que debe tomar decisiones y actuar.
 El gestor es el equipo que usa el operador humano para comunicarse con el agente. Aquí se generan las
peticiones y se reciben las notificaciones.
En este caso, el sistema de gestión estará compuesto por uno o varios gestores, ya sea ordenador u otra Raspberry
Pi y por un único agente. Este agente, como ya se ha comentado, funciona en una Raspberry Pi 1.
La base de datos de gestión estará compuesta por objetos que representan el estado del agente, objetos que
permiten configurar ciertos parámetros del agente, objetos sobre el estado de los sensores usados y objetos que
permiten realizar acciones sobre sensores y actuadores usados por el agente.
El escenario descrito se describe en la siguiente Figura 3-1:
13
14
Diseño de sistema de gestión
Figura 3-1. Escenario de sistema de gestión.
3.2. Objetos de gestión
El agente utiliza una base de datos de objetos de gestión llamada MIB. Esos objetos modelan (hacen referencia
a) recursos lógicos o físicos: configuraciones, estados, estadísticas de uso, etc.
Los recursos se centrarán en la configuración y estado del agente, de los sensores y en proporcionar
funcionalidades al agente.
A continuación, se ofrece una lista de las ideas sobre los objetos que se debe gestionar de cada elemento.
Para el agente (como elemento del sistema), el esquema es el siguiente:
•Tiempo de
funcionamiento.
Versión de software
•¿Dónde se encuentra
instalado en la casa?
•¿Qué sensores tiene
conectados? ¿Qué
mide?
estado
AGENTE
configura
ción
funcionali
dades
•¿El envío de traps está
activado?
•¿Adónde se envían los
traps?
•Envío de traps.
•Reinicio.
Figura 3-2. Esquema de objetos de gestión del elemento agente.
15
Desarrollo de sensor de temperatura gestionable
Para el sensor de temperatura y humedad, el esquema es el siguiente:
• ¿Está funcionando?
• ¿Qué modelo de
sensor?
• ¿Rango de
temperatura y
humedad máximas y
mínimas
aceptables?
estado
SENSOR
TEMPERATURA
y HUMEDAD
configurac
ión
• Lectura humedad.
• Lectura
temperatura.
• Avisos de alerta.
funcionali
dades
Figura 3-3. Esquema de objetos de gestión del elemento sensor temperatura y humedad.
Para el actuador bombilla, el esquema es el siguiente:
•¿Está encendida?
•¿Qué tiempo
programado le queda
para apagarse?
estado
BOMBILLA
configura
ción
funcionali
dades
•Apagar / encender.
•¿De qué potencia es la
bombilla?
•Temporizador de
apagado.
•Consumo de energía
(desarrollos futuros).
Figura 3-4. Esquema de objetos de gestión del elemento bombilla.
15
16
Diseño de sistema de gestión
Y, por último, el esquema del sensor de luz es el siguiente:
• ¿Está funcionando?
• ¿Qué modelo de
sensor?
estado
configurac
ión
• Lectura distintos
valores de luz:
- luz infrarroja.
- lux.
- luz visible.
- luminosidad.
SENSOR LUZ
funcionali
dades
Figura 3-5. Esquema de objetos de gestión del elemento sensor luz.
Este conjunto de objetos de gestión permite establecer un sistema de gestión de un terrario para un animal que
necesite unas condiciones ambientales específicas.
3.3. Diseño de módulo TERRARIO-MIB
Para poder crear un modulo cualquiera de MIB, primero se necesita revisar al menos el RFC2578 para entender
cómo se definen los tipos de datos que se pueden necesitar y seleccionar los más útiles para el módulo.
En este caso, al usar SNMP versión 2c, se necesita revisar también el RFC1442 (“Structure of Management
Information for versión 2 of the Simple Network Management Protocol”) [9] que es un RFC más específico a
la situación de este TFG. En este RFC se definen los tipos de datos para su uso con SNMP versión 2c.
De este RFC1442 se ha extraido la información con la que se ha creado el módulo “SNMPv2-SMI”, el cual será
importado en la definición del módulo TERRARIO-MIB para hacer posible la creación del módulo propio.
Para poder importar un módulo, es necesario que el fichero con el mismo nombre se encuentre en un directorio
donde el sistema operativo busca las MIBs y que pueda ser accesible. Para obtener el fichero se puede
simplemente buscar el nombre del archivo en Internet.
El conjunto de objetos gestionables que existen están organizados como objetos en una jerarquía administrada
por la organización ITU-T y la organización OSI. Cada objeto en la jerarquía dispone de un identificador
númerico, llamado Object Identifier (OID), y un nombre simbólico de forma que cada objeto posee un
identificador único que además representa su localización relativa a la raíz del árbol.
La mayoría de esos objetos son de dominio público, pero existen ramificaciones para estructuras privadas. Estas
ramificaciones privadas se sitúan debajo de la rama “private”, de identificador iso.org.dod.internet.private o
1.3.6.1.4 en forma numérica. Para situar una empresa, organización u otro dentro del árbol, se debe hacer por
debajo del elemento “enterprise” de identificador 1.3.6.1.4.1. Sin embargo, para poder incluir un objeto, se
necesita licencia por parte de la organización IANA; pero se puede hacer libremente siempre que sea para uso
estrictamente privado, evitando problemas con elementos ya existentes en el árbol de manera oficial.
17
Desarrollo de sensor de temperatura gestionable
Entonces, suponiendo que el módulo MIB que se cree será para uso privado y denotando al objeto que representa
al proyecto como “terrarioproject” con identificador 54321, se identificará de manera global como
iso.org.dod.internet.private.enterprise.terrarioproject o 1.3.6.1.4.1.54321.
Para crear el módulo TERRARIO-MIB se ha creado un directorio llamado “mibs-terrario” dentro del anterior
directorio $TERRARIO_SNMP_AGENT_DIR, de manera que sea accesible para el programa del agente
SNMP. Dentro de este directorio, se ha creado el fichero TERRARIO-MIB que contiene la definición del
módulo de este proyecto.
3.3.1
Árbol de objetos del modulo
Los objetos que han sido definidos en el modulo se encuentran descritos en las siguientes Figuras. En cada
elemento de las figuras se encuentra el nombre identificativo del objeto y su índice dentro de la rama.
En la Figura 3-6 se muestra el módulo TERRARIO-MIB completo. En él, se encuentra el objeto
“generalConfig”, que contiene los objetos de gestión y configuración de carácter general; el objeto
“sensorLuzConfig”, que contiene los objetos de configuración y de medidas del sensor de luz; el objeto
“sensorTemperaturaHumedadConfig”, que contiene los objetos de configuración y de medidas del sensor; y el
objeto “bombillaLuzConfig”, que contiene los objetos de configuración del actuador “bombilla”.
Estos objetos son grupos, actúan como “directorios” de objetos y contienen objetos relacionados.
En la siguiente Figura 3-6 se muestra el módulo completo de TERRARIO-MIB como un árbol de OIDs.
17
18
Diseño de sistema de gestión
Figura 3-6. Árbol de OIDs de TERRARIO-MIB.
19
Desarrollo de sensor de temperatura gestionable
A continuación, se describirán los objetos contenidos en las diferentes ramas, su información de objeto y su uso.
Recordar que el nivel de acceso especificado en los objetos es máximo, es decir, cuando se diga que un objeto
es de escritura significará que también es posible leerlo.
En la rama “generalConfig” se encuentran los objetos siguientes:

“agenteUpTime” es un tipo entero de sólo lectura y muestra el tiempo de funcionamiento del agente en
segundos.

“localización” es un tipo cadena de caracteres de posible escritura y muestra la localización del terrario.

“versiónSoftware” es un tipo cadena de caracteres de sólo lectura y muestra la versión del software del
agente.

“disponibilidadSensorLuz” muestra con ‘1’ si el sensor de luz está disponible para el agente. Es de tipo
entero y de sólo lectura.

“disponibilidadSensorTH” ídem al anterior con el sensor de temperatura y humedad. Es de tipo entero y de
sólo lectura.

“disponibilidadBombillaLuz” ídem al primero con la bombilla. Es de tipo entero y de sólo lectura.

“resetAgente” es un tipo entero y de escritura. Cuando se introduce el valor ‘1’ se reinicia el agente.

“envioTraps” es un tipo entero y de escritura. Permite activar o desactivar el envío de traps.

“destinoIPTraps” es un tipo IpAddress y de escritura. Indica con una dirección IP, la máquina a la que se
deben enviar los traps.

“destinoPortTraps” es un tipo entero y de escritura. Indica el puerto al que se deben enviar los traps.
En la Figura 3-7 se aprecia la rama “generalConfig” y los objetos descritos.
Figura 3-7. Árbol OID TERRARIO-MIB, rama generalConfig.
19
20
Diseño de sistema de gestión
En la rama “sensorLuzConfig” se encuentran los siguientes objetos:

“modeloSensorLuz” es un tipo cadena y de escritura. Indica el nombre, referencia o modelo del sensor.

“estadoSensorLuz” es un tipo entero y de escritura. Permite iniciar o parar el funcionamiento del sensor.

“luzInfrarroja” cantidad de luz de rango infrarrojo medida por el sensor. Es de tipo entero y de sólo
lectura.

“lux” cantidad de lux medido por el sensor. Es de tipo entero y de sólo lectura.

“luzVisible” cantidad de luz de rango visible medida por el sensor. Es de tipo entero y de sólo lectura.

“luminosidad” cantidad de iluminación de todo el rango de frecuencias medida por el sensor. Es de tipo
entero y de sólo lectura.
En la figura 3-8 se aprecia la rama “sensorLuzConfig” y los objetos descritos anteriormente.
Figura 3-4. Árbol OID TERRARIO-MIB, rama sensorLuzConfig.
En la rama “sensorTemperaturaHumedadConfig” se encuentran los objetos siguientes:

“modeloSensorTH” es un tipo cadena y de escritura. Indica el nombre, referencia o modelo del sensor

“estadoSensorTH” es un tipo entero y de escritura. Permite iniciar o parar el funcionamiento del sensor.

“funcionalidadesSensorTH” es un objeto vacío que contiene las diferentes mediciones que puede hacer
el sensor y otros parámetros de configuración. Todos los objetos en su interior son de tipo entero.
o
“temperatura” es de sólo lectura y muestra la temperatura medida por el sensor.
o
“maxTemperatura” es de escritura y define la temperatura máxima aceptable para el terrario.
o
“trapMaxTemperatura” es una notificación (trap) que se envía cuando la temperatura medida
sobrepasa el valor máximo aceptable.
o
“minTemperatura” es de escritura y define la temperatura mínima aceptable para el terrario.
o
“trapMinTemperatura” es una notificación (trap) que se envía cuando la temperatura medida
sobrepasa el valor mínimo aceptable.
21
Desarrollo de sensor de temperatura gestionable
o
“humedad” es de sólo lectura y muestra la humedad medida por el sensor.
o
“maxHumedad” es de escritura y define la humedad máxima aceptable para el terrario.
o
“trapMaxHumedad” es una notificación (trap) que se envía cuando la humedad medida
sobrepasa el valor máximo aceptable.
o
“minHumedad” es de escritura y define la humedad mínima aceptable para el terrario.
o
“trapMinHumedad” es una notificación (trap) que se envía cuando la humedad medida
sobrepasa el valor mínimo aceptable.
En la Figura 3-9 se aprecia la rama “sensorTemperaturaHumedadConfig” y los objetos descritos anteriormente.
Figura 3-9. Árbol OID TERRARIO-MIB, rama sensorTemperaturaHumedadConfig.
En la rama “bombillaLuzConfig” se encuentran los siguientes objetos:

“potenciaBombillaLuz” es de tipo entero y de escritura. Muestra la potencia de la bombilla usada en
vatios. Este OID tiene uso por motivos de consumo de energía.

“estadoBombillaLuz” es de tipo entero y de escritura. Permite encender y apagar la bombilla.
21
22
Diseño de sistema de gestión

“temporizadorBombillaEncendida” es de tipo entero y de escritura. Permite iniciar un temporizador que
mantiene la bombilla encendida. Al indicar un valor de minutos a este OID, se enciende la bombilla y
al terminar ese periodo de tiempo se apagará.
En la Figura 3-10 se aprecia la rama “bombillaLuzConfig” y los objetos citados anteriormente.
Figura 3-10. Árbol OID TERRARIO-MIB, rama bombillaLuzConfig.
3.3.2
Comprobación validez MIB – librería libsmi
El modulo TERRARIO-MIB ya está casi listo para su uso con SNMP. Antes de pasar a la fase de desarrollo
del agente, se necesita comprobar la validez de la sintaxis y semántica del modulo creado acorde con SMIv2.
Para ello se utilizará la herramienta “smilint”. Dicha herramienta forma parte de la libreria “libsmi”, desarrollada
por el Instituto de Sistemas Operativos y Redes de Computadoras de la Universidad Técnica de Braunschweig.
La librería libsmi es una librería que permite a las aplicaciones de gestión acceder a las definiciones de módulos
MIB. Proporciona herramientas para la comprobación, análisis, compilación, conversion y comparación de
módulos MIB.
Se ha procedido a descargar la version “0.4.8”, desde la página del proyecto de la Universidad de Braunschweig,
y a su instalación según las indicaciones de la página.
Si, por cuestión de la distribución del Sistema Operativo usado o cualquier otro motivo, fuera imposible instalar
la librería libsmi en el sistema; se puede recurrir al apartado “Tools” – “Web Interface” de la página web del
proyecto libsmi. En este apartado se puede usar la herramienta “smilint” de manera online subiendo un fichero
del equipo para ser comprobado.
Smilint proporciona como salida un número de nivel de severidad de los errores encontrados. Los errores de
nivel 0 a nivel 3 necesitan ser solucionados para dar validez a la MIB. Errores de nivel 4, 5 o 6 no se consideran
errores como tal, sino que se recomienda su solución o se consideran como correcto; pero “posiblemente
problemático” en determinadas situaciones.
Si, dentro del directorio donde se encuentra el modulo TERRARIO-MIB, se ejecuta la herramienta smilint con
el argumento “-s” que detalla el nivel de severidad de los errores, obtenemos la siguiente salida:
pi $ raspberrypi: smilint -s ./TERRARIO-MIB
./TERRARIO-MIB-2:188:
[5]
{notification-not-reversible}
notification `trapMaxTemperatura' is not reverse mappable
warning:
./TERRARIO-MIB-2:201:
[5]
{notification-not-reversible}
notification `trapMinTemperatura' is not reverse mappable
warning:
./TERRARIO-MIB-2:222:
[5]
{notification-not-reversible}
notification `trapMaxHumedad' is not reverse mappable
warning:
./TERRARIO-MIB-2:235:
warning:
[5]
{notification-not-reversible}
23
Desarrollo de sensor de temperatura gestionable
notification `trapMinHumedad' is not reverse mappable
./TERRARIO-MIB-2:27: [4] {group-membership} warning: node `agenteUpTime'
must be contained in at least one conformance group
./TERRARIO-MIB-2:36: [4] {group-membership} warning: node `localizacion'
must be contained in at least one conformance group
./TERRARIO-MIB-2:43:
[4]
{group-membership}
warning:
node
`versionSoftware' must be contained in at least one conformance group
Como se ve, se producen básicamente dos errores: uno de nivel 5 que es tolerable, y afecta a los objetos de tipo
notificación (traps) definidos en el módulo; y otro de nivel 4 que se recomienda ser solucionado y afecta a todos
los objetos del módulo.

El error de nivel 5 se produce por un problema de incompatibilidad en la traducción entre los traps de
SNMPv1, SNMPv2 y SNMPv3. Como en este caso la versión usada de SNMP es la version 2, se
ignorará este error.

El error de nivel 4 se produce por la inexistencia de un grupo de conformidad en el módulo, el cual es
requerido por el RFC2580 [10]. Para solucionar este error se necesita recurrir a las macros “OBJECTGROUP”, “NOTIFICATION-GROUP” y “MODULE-COMPLIANCE” del propio RFC2580.
Realmente, el módulo MIB es válido sin errores de sintaxis ni de semántica, pero con intención de realizar un
módulo más válido; se resolverá el error de nivel 4. Por lo tanto, se introducen las siguientes macros y cláusulas:
La macro “OBJECT-GROUP” se utiliza para definir una colección de objetos relacionados entre ellos. La
cláusula “OBJECTS” identifica los objetos contenidos dentro del grupo en cuestión. Se ha creado un grupo
llamado “terrarioGroup” que contiene todos los objetos del módulo que no son notificaciones.
La macro “NOTIFICATION-GROUP” se utiliza con el mismo propósito que la macro anterior, pero en el caso
de los objetos tipo notificación. La cláusula “NOTIFICATIONS” identifica los objetos contenidos dentro del
grupo. Se ha creado igualmente un grupo llamado “notificacionesGroup” que contiene los cuatro objetos tipo
notificación del módulo.
Finalmente, la macro “MODULE-COMPLIANCE” (en castellano, módulo de conformidad) se utiliza para
expresar un mínimo conjunto de requerimientos sobre la implementación de uno o más módulos MIBs. Con las
cláusulas “MODULE” y “MANDATORY-GROUPS” se identifican qué grupos son de obligada conformidad
con este módulo de conformidad, entre los cuales se encuentran los grupos definidos anteriormente.
En la Figura 3-11 se muestra el texto añadido al fichero TERRARIO-MIB y que soluciona los errores de nivel
4.
23
24
Diseño de sistema de gestión
-- definicion de grupos
terrarioGroup OBJECT-GROUP
OBJECTS { agenteUpTime,
localizacion,
versionSoftware,
disponibilidadSensorLuz,
disponibilidadSensorTH,
disponibilidadBombillaLuz,
resetAgente,
envioTraps,
destinoIPTraps,
destinoPortTraps,
modeloSensorLuz,
estadoSensorLuz,
luzInfrarroja,
lux,
luzVisible,
luminosidad,
modeloSensorTH,
estadoSensorTH,
temperatura,
maxTemperatura,
minTemperatura,
humedad,
maxHumedad,
minHumedad,
potenciaBombillaLuz,
estadoBombillaLuz,
temporizadorBombillaEncendida }
STATUS current
DESCRIPTION "Grupo de configuracion general."
::= { terrarioproject 5 }
notificacionesGroup NOTIFICATION-GROUP
NOTIFICATIONS { trapMaxTemperatura,
trapMinTemperatura,
trapMaxHumedad,
trapMinHumedad }
STATUS current
DESCRIPTION "Grupo de notificaciones."
::= { terrarioproject 6 }
-- modulo de conformidad
terrarioCompliance MODULE-COMPLIANCE
STATUS current
DESCRIPTION "Modulo de conformidad del proyecto."
MODULE
MANDATORY-GROUPS { terrarioGroup,
notificacionesGroup }
::= {terrarioproject 7}
Figura 3-11. Texto añadido a TERRARIO-MIB.
25
Desarrollo de sensor de temperatura gestionable
Ahora, al ejecutar la herramienta Smilint con el argumento “-s” se produce la siguiente salida, lo que confirma
que se ha solucionado el error de nivel 4.
pi $ raspberrypi: smilint -s ./TERRARIO-MIB
./TERRARIO-MIB:188: [5] warning: notification `trapMaxTemperatura' is not
reverse mappable
./TERRARIO-MIB:201: [5] warning: notification `trapMinTemperatura' is not
reverse mappable
./TERRARIO-MIB:222: [5] warning: notification `trapMaxHumedad' is not
reverse mappable
./TERRARIO-MIB:235: [5] warning: notification `trapMinHumedad' is not
reverse mappable
En este punto ya se ha creado el módulo TERRARIO-MIB y se ha validado. Se puede proceder con la
compilación del módulo para su uso con el agente SNMP.
Antes de pasar al siguiente apartado, se debe copiar el módulo a un directorio donde el sistema buscará las MIBs
disponibles. Puede haber casos específicos, pero generalmente el sistema busca las MIBs en los siguientes
directorios:

$HOME/.snmp/mibs

/usr/local/share/snmp/mibs
25
26
Desarrollo del Agente SNMP
4 DESARROLLO DEL AGENTE SNMP
Un agente SNMP es un programa que se ejecuta en cada uno de los nodos de una red que se deseen gestionar o
monitorizar. Para su funcionamiento, emplea una base de datos con los objetos que se quieren gestionar llamada
MIB.
El agente recibe comandos de los gestores que actúan sobre esos objetos, bien para consultar sus valores o bien
para cambiarlos. Incluso puede generar notificaciones de aviso ante la ocurrencia de eventos en el propio agente,
ya sean cambios de estado de un objeto de gestión, una alerta o un aviso.
Un agente SNMP se sitúa en la capa OSI de aplicación. El protocolo SNMP sigue la implementación de Cliente
– Servidor. Los comandos se encapsulan en APDUs y existen 5 diferentes en el protocolo SNMP:

GetRequest – es una consulta sobre uno o una lista de objetos de gestión.

GetNextRequest – parecido a GetRequest pero lo que se devuelve en la respuesta es el valor de la
instancia del objeto que está a continuación lexicográficamente.

SetRequest – es un mensaje de actualización de valor del objeto u objetos a los que se refiere.

GetResponse – es la contestación a una PDU del tipo GetRequest, GetNextRequest o SetRequest.

Trap – es utilizada para comunicar de forma asíncrona información sobre un evento.
4.1. Librerías necesarias para el agente
4.1.1
PySNMP
Para el desarrollo del agente SNMP, se utilizará la librería PySNMP [11]. PySNMP es una implementación de
un motor SNMP puramente escrito en Python. Este motor puede funcionar en los roles de
Agente/Manager/Proxy, con las versiones v1/v2c/v3 de SNMP sobre los protocolos IPv4/IPv6. La versión actual
más estable, la 4.3, puede funcionar con Python en las versiones desde la 2.4 hasta la 3.5. Es una herramienta
open-source (libre) y su código fuente está disponible en GitHub. Su página oficial se encuentra en la web
pysnmp.sourceforge.net.
La arquitectura de PySNMP ha ido evolucionando a la par con el protocolo SNMP hasta una versión modular
tal y como SNMPv3. Así, PySNMP está forma por un gran número de componentes con interfaces bien
definidas. La siguiente Figura 4-1 refleja su estructura interna en comparación con la de SNMPv3.
Figura 4-1. Estructuras internas de SNMPv3 (izquierda) y PySNMP (derecha).
27
Desarrollo de sensor de temperatura gestionable
Para instalar la librería PySNMP, se necesita instalar primero instalar el gestor de paquetes Pip. Para ello:
sudo apt-get install python-pip
Luego, se necesitan ejecutar los siguientes comandos:
pi $ raspberrypi: sudo apt-get install python-pysnmp-common --fix-missing
pi $ raspberrypi: pip install pysnmp
Requirement already satisfied (use
/usr/lib/python2.7/dist-packages
--upgrade to upgrade): pysnmp in
Requirement already satisfied (use --upgrade to upgrade): pyasn1>=0.1.2 in
/usr/lib/python2.7/dist-packages (from pysnmp)
Requirement already satisfied (use --upgrade to upgrade): pycrypto>=2.4.1
in /usr/lib/python2.7/dist-packages (from pysnmp)
Cleaning up...
Al ejecutar el comando anterior con pip, la salida debe ser similar a la anterior para entender que se ha instalado
correctamente.
Ahora ya se encuentra instalada la librería PySNMP. Como se puede intuir, el fin del uso de esta librería dentro
de este TFG es que, en la construcción del agente, el mismo haga uso de ese motor SNMP.
4.1.2
Net-SNMP
Net-SNMP es una suit de aplicaciones usada para implementar SNMP en sus tres versiones. Entre otras cosas,
incluye aplicaciones de línea de comandos que permiten obtener información de dispositivos que implementan
SNMP. Algunas de estas herramientas son: snmpget, snmpgetnext, snmpwalk, snmptable, snmpset y
snmptranslate.
Para instalar Net-SNMP [12], se puede entrar en su web www.net-snmp.org donde se explica el proceso de
instalación.
Básicamente, el fin de la librería Net-SNMP dentro de este TFG es tener a disposición unas herramientas para
probar el agente SNMP implementado. Se usarán las herramientas snmpget, snmpwalk, snmpset y
snmptranslate.
Previamente a la implementación del agente, se pueden hacer consultas de los objetos de la MIB para comprobar
si son correctos o si están en el orden deseado. Para ello, se utilizará snmptranslate que realiza la traducción del
nombre del objeto a su OID.
Para obtener el OID del objeto proporcionando su nombre como argumento, situados en el directorio del módulo
TERRARIO-MIB:
snmptranslate
-m
./TERRARIO-MIB
-IR
-On
<nombre_objeto>
Si el módulo MIB definido fue copiado a un directorio donde el sistema pueda encontrarlo, entonces la opción
“-m” no es necesaria y se puede realizar el comando de la siguiente manera:
snmptranslate
-IR
-On
TERRARIO-MIB::<nombre_objeto>
Un ejemplo de funcionamiento de la herramienta snmptranslate para el caso del módulo MIB, produce la
siguiente salida con el primer y el último elemento del módulo TERRARIO-MIB:
pi $ raspberrypi: snmptranslate -m ./TERRARIO-MIB -IR -On agenteUpTime
27
28
Desarrollo del Agente SNMP
.1.3.6.1.4.1.54321.1.1
pi $ raspberrypi: snmptranslate -IR -On TERRARIO-MIB::agenteUpTime
.1.3.6.1.4.1.54321.1.1
pi $ raspberrypi: snmptranslate -m./TERRARIO-MIB -IR -On
temporizadorBombillaEncendida
.1.3.6.1.4.1.54321.4.3
pi $ raspberrypi: snmptranslate -IR -On TERRARIOMIB::temporizadorBombillaEncendida
.1.3.6.1.4.1.54321.4.3
4.2. Diseño e implementación del agente
En el programa del agente se usará la programación multihilo. La programación multihilo aporta concurrencia
a su funcionamiento, pudiento gestionar las peticiones SNMP y supervisar las variables sensibles al envío de
avisos traps al mismo tiempo. Pero, sobre todo, permite no bloquear funcionalidades independientes. Debido a
su programación, la supervisión de las variables necesita de un bucle infinito de comprobación de sus valores
(bucle while infinito). Ésto sería interrumpido por el despachador del objeto agente para atender las peticiones
SNMP en un mismo hilo.
Para el esqueleto del agente se ha utilizado un fichero de ejemplo de la página nealc.com [13] donde se describe
un esqueleto básico sacado de la documentación de la página de PySNMP.
El programa agente elabora un fichero de log para tener constancia de las consultas realizadas, cambios y errores.
Para ello, utiliza la librería “logging” y se configura de la siguiente manera:
logging.basicConfig(filename='agente_terrario.log',format='%(asctime)s -%(levelname)s::%(message)s',
datefmt='%d/%m/%Y
%I:%M:%S
%p',
level=logging.DEBUG)
Esta configuración indica que se elabora un fichero de nombre agente_terrario.log en el mismo directorio de
ejecución del agente en el formato “timestamp -- nivel de log::mensaje”.
El programa agente hace uso de unas instancias de clases, a modo de esqueleto, que le permite articular todas
las actividades que corresponden a un agente SNMP.
En dicho esqueleto se encuentran las siguientes clases, que serán descritas en sus respectivos apartados.
4.2.1
Librerías importadas
Como se aprecia en el fichero, se importan de algunas librerías los módulos: “engine”, “config”, “cmdrsp”,
“context”, “ntforg”, “v2c”, “udp”, “builder”, “threading”, “time”, “collections”, “os”, “rfc1902”, “Popen”, “re”
y “sys”.
Estos módulos serán usados en el programa del agente para hacer posible ciertas acciones.
Algunos como “engine”, “config”, “context”, “cmdrsp”, “ntforg”, “udp”, “builder”, “threading”, “v2c”, “time”
o “collections” se utilizan para implementar el agente SNMP.
Otros como “os”, “rfc1902”, “Popen”, “re” y “sys” se utilizan en las funciones que se ejecutan con las consultas
SNMP o con otras funciones auxiliares.
29
Desarrollo de sensor de temperatura gestionable
4.2.2
Clase Mib
La clase Mib contiene todos los datos que podrán ser servidos e implementa el concepto de MIB dentro del
programa del agente como un objeto. Como cualquier clase de un lenguaje de programación orientado a objeto,
la clase contiene los atributos y los métodos que dan funcionalidad a la misma.
Los atributos que contiene la clase Mib son variables que tienen que ver con el estado de los objetos de gestión
y con otros parámetros de importancia.
Los métodos de la clase implementan las funciones de consulta y de actualización de los objetos de gestión.
Estos métodos serán referenciados en la clase SNMPAgent para indicar la relación entre el objeto de la MIB y
sus funciones asociadas de consulta y actualización.
4.2.3
Clase SNMPAgent
La clase SNMPAgent contiene a la MIB, al motor SNMP, implementa la capacidad de envío de traps y la
capacidad de servir ininterrumpidamente a las peticiones SNMP.
PySNMP exige que se utilice un motor SNMP por cada instancia de agente SNMP funcionando. Por ello, se
instancia un objeto de la clase “SnmpEngine” de la librería PySNMP en el programa. Si se utilizara una copia
de este programa en otra máquina se crearía otra instancia de “SnmpEngine” al ser ejecutado el programa, así
que esta directiva de PySNMP quedaría satisfecha.
En el código dentro de esta clase también se configura el agente, indicándole una interfaz de red en la que atender
peticiones SNMP; se configura la comunidad del agente; se carga la MIB proporcionada en el argumento de la
clase (una instancia de la clase Mib); y se indican qué peticiones SNMP que deben ser atendidas.
A continuación, encontramos las funciones “setTrapReceiver” y “sendTrap” que permiten configurar el destino
de los traps e implementan el envío de los mismos.
Por último, la función “serve_forever” permite registrar una tarea para el agente, de manera que mantenga el
despachador de entrada/salida funcionando ininterrumpidamente.
4.2.4
Clase Worker
La clase Worker utiliza las anteriores definiciones de clases y sus instancias, de manera que al ejecutar el
programa se crea un hilo en el que se puede atender las peticiones SNMP.
Nótese que en la propia definición de esta clase se indica, entre paréntesis, la clase “threading.Thread”. Esto se
utiliza en Python para indicar de qué clase se debe heredar la definición de la clase corriente. De esta manera se
pretende utilizar definir la clase Worker como una subclase de “Thread”.
En la función “init” se redefine el constructor de la clase hilo (“Thread”) con las instancias de las clases Mib y
SNMPAgent a su disposición como atributos. Esto quiere decir, que se redefine el constructor de la clase hilo
de manera que se crea el hilo, pero con las instancias de clases Mib y SNMPAgent. Así, este bloque de código
se ejecuta en un hilo diferente al del programa principal, permitiendo la atención a las consultas SNMP de forma
independiente.
En la función “run”, que se ejecuta al llegar al comando “Worker(agent, mib).start()”, se encuentran varias
sentencias que permiten poner en funcionamiento los sensores y que inicia la monitorización de las variables
que activan el envío de traps SNMP.
Por lo tanto, esta clase es la clave en el funcionamiento del programa del agente para atender peticiones SNMP.
4.2.5
Clase VigilanteTraps
Esta clase se ha creado de manera similar a la anterior, Worker, para poder monitorizar los OID que generan
traps en un hilo diferente al del programa principal. Así mismo, dentro de la clase, se establece un bucle while
29
30
Desarrollo del Agente SNMP
infinito que permite el envoi de traps de la siguiente forma:
Primero, si el envío de traps se encuentra activo se pasa a comprobar si el sensor está funcionando y tomando
lecturas. Segundo, si las anteriores condiciones se cumplen, se comprueba cada valor de OID si supera los límites
fijados. Por ultimo, si se superara el límite de alguno de ellos, se configuraría el receptor de los traps y se
procedería al envío del trap mediante la función “sendTrap”.
4.3. Funciones para los OIDs
4.3.1
Compilación del modulo TERRARIO-MIB
Como se comentó al principio de la memoria, se utilizará python como lenguaje de programación para el agente
SNMP. Para el uso de python como lenguaje en un Sistema de Monitorización de Red (Network Management
System, en inglés), se necesita convertir el actual módulo en texto plano a un módulo en el lenguaje que pueda
entender el motor SNMP que atiende las consultas SNMP.
Para este apartado se utilizará una herramienta de la librería PySNMP llamada “build-pysnmp-mib” que
convertirá el módulo en texto plano en un módulo python que PySNMP pueda leer.
Para ello, será necesario ejecutar el siguiente comando. El argumento “-o” indica el nombre del archivo de salida,
que será el mismo que el del módulo, pero con la extensión “.py” característica del lenguaje python.
pi $ raspberrypi: build-pysnmp-mib -o TERRARIO-MIB.py ./TERRARIO-MIB
Si se revisa el archivo surgido, se aprecian diferentes apartados escritos en lenguaje python:
La clase “mibBuilder” es usada para contener toda la información del módulo MIB. Es un constructor
de MIBs que permite cargar MIBs en el agente. Dicha clase “mibBuilder”, será utilizada en el programa
principal del agente SNMP para cargar este módulo y poder utilizarlo.

El primer apartado etiquetado con “# Imports” contiene la parte del módulo TERRARIO-MIB que
enumera los objetos que se importan y de qué otros módulos mediante la función “importSymbols”, en
lenguaje python.

Luego, en el apartado “# Objects”, se aprecia cómo se define el módulo como una instancia de un objeto
python “terrarioproject” con su identificación y la demás información dentro de la macro “MODULEIDENTITY”. El objeto “generalConfig” (que era un objeto vacío en el módulo MIB) es transformado
en una instancia de un objeto python mediante la función “MibIdentifier” al igual que “agenteUpTime”
con la función “MibScalar”. Este último, además, es llenado con su información de la MIB mediante
las funciones “setMaxAccess”, “setUnits” y “setDescription”.
Este procedimiento se aplica de igual manera con el resto de objetos del módulo MIB que no son de
tipo notificación.

En el apartado “# Notifications” se definen los cuatro objetos tipo notificación mediante la función
“NotificationType” y se llena con información del módulo MIB del objeto con la función
“setDescription”.

En el apartado “# Groups” se definen los grupos del módulo MIB como objetos python mediante la
función “ObjectGroup” y se listan los objetos que lo componen mediante la función “setObjects”.

En el apartado “# Compliances” se define el módulo de conformidad descrito en el módulo MIB como
objeto python mediante la función “ModuleCompliance”. Además, se listan los objetos que forman
parte del módulo, los grupos “terrarioGroup” y “notificacionesGroup”, mediante la función
“setObjects”.

Por último, en el apartado “# Exports”, se exportan todos los elementos de la MIB como objetos python
31
Desarrollo de sensor de temperatura gestionable
para poder ser usados por el agente SNMP.
En este momento, el módulo MIB está compilado y listo para ser usado por Python en el programa del agente
SNMP.
En la Figura 4-2, se ha descrito gráficamente cómo es el proceso de compilación de la MIB y cómo se conecta
ese archivo compilado con el programa del agente para hacer uso de esos objetos gestionables.
Como ya se ha dicho, al compilar TERRARIO-MIB se obtiene el archivo para Python TERRARIO-MIB.py
(A). Este archivo es usado en el programa del agente por la instancia de la clase “mibBuilder” para cargar dicho
módulo y poder usar el módulo.
Tras indicar dónde se encuentran los módulos que debe manejar el agente (B), se procede a instanciar los objetos
del módulo para poder hacer uso de ellos (en los lenguajes orientados a objeto, se necesitan instanciar objetos
de las clases para poder ser usados) y para ello se necesita aún un par de datos más: ¿Cuáles son las funciones a
las que debe recurrir el agente al recibir peticiones SNMP del tipo GetRequest y SetRequest?
Para indicar cuáles son dichas funciones, se necesita elaborar una lista con tuplas en las que se tenga la siguiente
relación lógica: ( MÓDULO, NOMBRE_OID, FUNCION_GET, FUNCION_SET ).
Esa lista es la variable “mibObjects” (C) y es usada junto con la información extraída por mibBuilder del archivo
TERRARIO-MIB.py en la instanciación de los objetos (D).
Figura 4-2. Conexión entre el módulo TERRARIO-MIB y el programa agente.
31
32
Desarrollo del Agente SNMP
4.3.2
Funciones asociadas a los OIDs
En el módulo TERRARIO-MIB existe un total de 27 objetos gestionables. Algunos objetos deben disponer de
dos funciones para las consultas de gestión, aquellos con nivel de acceso “read-write”; cada una de ellas
asociadas a una petición SNMP de consulta (GetRequest, GetNextRequest) y a una petición SNMP de
actualización (SetRequest). Mientras tanto, otros objetos sólo necesitan de una función para las consultas de
gestión, aquellos con nivel de acceso “read-only”; de manera que esa función será la asociada a la petición
SNMP de consulta (GetRequest, GetNextRequest).
A continuación, se muestra el conjunto de objetos gestionables del módulo MIB con sus OIDs relativos a la
rama “enterprise” y sus funciones asociadas para responder a las peticiones SNMP. La primera función, que
comienza normalmente con “Get” o “Read”, se ejecuta con las peticiones GetRequest y GetNextRequest. La
segunda función, que comienza normalmente con “Update” o “Set”, se ejecuta con las peticiones SetRequest.
Estos objetos junto con sus funciones asociadas compondrán tuplas que serán pasados a la instancia de la clase
SNMPAgente como argumento y que permitirá establecer la relación entre el objeto de gestión, su función
asociada a las peticiones Get y su función asociada a las peticiones Set. Como se ha comentado antes, se puede
apreciar en la Figura 4-2 esta lista de tuplas.
La Figura 4-3 muestra los objetos de la lista de tuplas con su nombre de identificación y sus funciones asociadas.
agenteUpTime
localizacion
versionSoftware
.54321.1.1
.54321.1.2
.54321.1.3
• ReadAgenteUpTime
• ReadLocalizacion
• UpdateLocalizacion
• ReadVersionSW
• UpdateVersionSW
disponibilidadSensorLuz
disponibilidadSensorTH
disponibilidadBombillaLuz
.54321.1.4
.54321.1.5
.54321.1.6
• CheckSensorLuz
• CheckSensorTH
• CheckBombillaLuz
resetAgente
envioTraps
destinoIPTraps
.54321.1.7
.54321.1.8
.54321.1.9
• ReadResetAgente
• InitResetAgente
• CheckEstadoEnvioTraps
• UpdateEstadoEnvioTraps
• ReadDestinoIPTraps
• UpdateDestinoIPTraps
destinoPortTraps
modeloSensorLuz
estadoSensorLuz
.54321.1.10
.54321.2.1
.54321.2.2
•ReadDestinoPortTraps
•UpdateDestinoPortTraps
•ReadModeloSensorLuz
•UpdateModeloSensorLuz
•ReadEstadoSensorLuz
•UpdateEstadoSensorLuz
33
Desarrollo de sensor de temperatura gestionable
luzInfrarroja
lux
luzVisible
.54321.2.3
.54321.2.4
.54321.2.5
• ReadLuzInfrarroja
• ReadLux
• ReadLuzVisible
luminosidad
modeloSensorTH
estadoSensorTH
.54321.2.6
.54321.3.1
.54321.3.2
• ReadLuminosidad
• ReadModeloSensorTH
• UpdateModeloSensorTH
• CheckStatusSensorTH
• UpdateStatusSensorTH
temperatura
maxTemperatura
minTemperatura
.54321.3.3
.54321.3.4
.54321.3.6
• ReadTemperatura
• ReadMaxT
• SetMaxT
• ReadMinT
• SetMinT
humedad
maxHumedad
minHumedad
.54321.3.8
.54321.3.9
.54321.3.11
• ReadHumedad
• ReadMaxH
• SetMaxH
• ReadMinH
• SetMinH
temporizadorBombilla
potenciaBombillaLuz
estadoBombillaLuz
Encendida
.54321.4.1
.54321.4.2
.54321.4.3
• ReadPotenciaBombilla
• UpdatePotenciaBombilla
• GetBombillaEstado
• SetBombillaEstado
• GetTemporizador
BombillaEncendida
• InitTemporizador
BombillaEncendida
Figura 4-3. Relación entre los objetos gestionables de TERRARIO-MIB
y sus funciones asociadas para consultar y modificación.
4.3.3
Funciones auxiliares
Así mismo, existen otras funciones auxiliares para hacer posible el trabajo del agente SNMP. Éstas son:

“EncuentraSensorLuz” utiliza la función “foundSensor” de la librería “TSL2561” del propio sensor
para devolver un valor si se encuentra el sensor disponible para el sistema (conectado a un pin).

“EncuentraSensorTH” utiliza la función “read_retry” de la librería “Adafruit_DHT” del propio sensor
para hacer una lectura del sensor. Si la lectura devuelve un valor, entonces la función devuelve un valor
33
34
Desarrollo del Agente SNMP
indicando que el sensor está disponible.

“compruebagpio” se utiliza para comprobar si el pin que utiliza un sensor ha sido exportado en el
directorio adecuado en el sistema Raspbian. Si se descubre que el pin ha sido exportado, entonces
significaría que el pin además ha sido debidamente configurado en el sistema y se devolvería un valor
indicando este hecho.

“iniciagpio” se utiliza para inicializar un pin en el sistema exportándolo si no se ha hecho ya, para lo
que se utiliza la anterior función “compruebagpio”.

“CierraAgente” se utiliza cuando se quiere finalizar el funcionamiento del agente. Se llama a la función
que cancela los posibles temporizadores activos, se para el funcionamiento de los sensores y se “desexportan” los pines previamente exportados. Esta función proporciona una salida limpia del programa
para el sistema operativo.

“CancelTimers” se utiliza para comprobar si existe algún temporizador activo y, en ese caso, pararlo.

“controlminutos” es una de las dos funciones a las que a los temporizadores se les indica ejecutar al
finalzar los mismos. Ésta, en particular permite decrementar el valor del OID
“temporizadorBombillaEncendida” que permite al Gestor conocer cuánto tiempo queda del
temporizador de la bombilla encendida.

“apagabombilla” es la otra de las dos funciones que ejecutan los temporizadores. Ésta simplemente
permite apagar la bombilla cuando el tiempo indicado en el OID “temporizadorBombillaEncendida”
llega al valor ‘0’.

“EscribirInformacionAgenteDisps” se utiliza para escribir información sobre el agente en unos ficheros
que luego serán leídos por el propio agente en respuesta a peticiones de lectura sobre algunos OIDs.

“ReiniciaAgente” se utiliza para reiniciar el programa del agente.
4.4. Ejecución del agente
Para la ejecución del programa del agente SNMP, se necesita tener los ficheros que se utilizarán para la lectura
de los sensores y el programa del propio agente en el mismo directorio. Lo siguiente que se necesita es tener el
fichero MIB legible para python TERRARIO-MIB.py en un subdirectorio. Además, es necesario comprobar
que los scripts tanto del agente como de los sensores tengan los permisos necesarios (755 – lectura y ejecución
mínimos para cualquier usuario) al igual que el fichero de MIB de python (644 – lectura mínima para cualquier
usuario).
A continuación, para la ejecución, se necesita ejecutar el programa con privilegios de administrador. Para ello,
se hará como usuario root o utilizando el comando “sudo”. Así:
pi $ raspberrypi: sudo ./agente-snmp_pyv3-int.py
Agente SNMP listo!
Sensor TSL2561 encontrado, sensor listo!
Sensor AM2302 listo!
El programa del agente ya está funcionando y podemos realizar una prueba de su funcionamiento ejecutando
desde otra máquina el comando “snmpwalk”. Para ello, se necesita tener el fichero del módulo TERRARIOMIB en un directorio donde el sistema busca las MIBs disponibles. En otro caso, se utilizará la opción “-m” del
comando indicando el fichero del módulo. Se utiliza la comunidad “private”, con la opción “-c”, del usuario
SNMPv2 “agent-private”. Ésta será la salida del comando:
35
Desarrollo de sensor de temperatura gestionable
pi $ raspberrypi: snmpwalk -m ./TERRARIO-MIB -v 2c -c private 192.168.1.110
1.3.6.1.4.1.54321
TERRARIO-MIB::agenteUpTime.0 = Counter32: 489 Segundos
TERRARIO-MIB::localizacion.0 = STRING: "Interior, cocina"
TERRARIO-MIB::versionSoftware.0 = STRING: "4.0"
TERRARIO-MIB::sensorLuz.0 = INTEGER: 1
TERRARIO-MIB::sensorTemperaturaHumedad.0 = INTEGER: 1
TERRARIO-MIB::bombillaLuz.0 = INTEGER: 1
TERRARIO-MIB::resetAgente.0 = INTEGER: 0
TERRARIO-MIB::envioTraps.0 = INTEGER: 1
TERRARIO-MIB::destinoIPTraps.0 = IpAddress: 192.168.1.110
TERRARIO-MIB::destinoPortTraps.0 = INTEGER: 162
TERRARIO-MIB::modeloSensorLuz.0 = STRING: "TSL2561"
TERRARIO-MIB::estadoSensorLuz.0 = INTEGER: 1
TERRARIO-MIB::luzInfrarroja.0 = INTEGER: 0
TERRARIO-MIB::lux.0 = INTEGER: 0 Lux
TERRARIO-MIB::luzVisible.0 = INTEGER: 0
TERRARIO-MIB::luminosidad.0 = INTEGER: 0
TERRARIO-MIB::modeloSensorTH.0 = STRING: "AM2302"
TERRARIO-MIB::estadoSensorTH.0 = INTEGER: 1
TERRARIO-MIB::temperatura.0 = INTEGER: 24 grados C
TERRARIO-MIB::maxTemperatura.0 = INTEGER: 80 grados C
TERRARIO-MIB::minTemperatura.0 = INTEGER: -40 grados C
TERRARIO-MIB::humedad.0 = INTEGER: 35 %
TERRARIO-MIB::maxHumedad.0 = INTEGER: 100 %
TERRARIO-MIB::minHumedad.0 = INTEGER: 0 %
TERRARIO-MIB::potenciaBombillaLuz.0 = INTEGER: 75 W
TERRARIO-MIB::estadoBombillaLuz.0 = INTEGER: 1
TERRARIO-MIB::temporizadorBombillaEncendida.0 = INTEGER: 0 Minutos
Como se ve, cada OID devuelve un valor adecuado a su tipo y además, gracias a la cláusula “UNITS” de SMIv2;
se indican las unidades de algunos OIDs como “Segundos” o “W” (Vatios).
El usuario asociado a la comunidad “private” tiene permisos de lectura y escritura para los objetos gestionables.
Prueba de ello es la posibilidad de realizar una petición “SetRequest” al objeto “localización”.
pi $ raspberrypi: snmpget -m TERRARIO-MIB -v 2c -c private 192.168.1.110
TERRARIO-MIB::localizacion.0
TERRARIO-MIB::localizacion.0 = STRING: "Interior, cocina"
pi $ raspberrypi:
pi $ raspberrypi: snmpset -m TERRARIO-MIB -v 2c -c private 192.168.1.110
35
36
Desarrollo del Agente SNMP
TERRARIO-MIB::localizacion.0 s "Interior, Sala de estar"
TERRARIO-MIB::localizacion.0 = STRING: "Interior, Sala de estar"
pi $ raspberrypi:
pi $ raspberrypi: snmpget -m TERRARIO-MIB -v 2c -c private 192.168.1.110
TERRARIO-MIB::localizacion.0
TERRARIO-MIB::localizacion.0 = STRING: "Interior, Sala de estar"
Por otro lado, la comunidad “public” asociada al usuario “agent” sólo tiene accesos de lectura. Por lo que si se
intenta realizar un cambio en algún objeto gestionable devolverá información de error.
pi $ raspberrypi: snmpget -m TERRARIO-MIB -v 2c -c public 192.168.1.110
TERRARIO-MIB::localizacion.0
TERRARIO-MIB::localizacion.0 = STRING: "Interior, Sala de estar"
pi $ raspberrypi:
pi $ raspberrypi: snmpset -m TERRARIO-MIB -v 2c -c public 192.168.1.110
TERRARIO-MIB::localizacion.0 s "Exterior"
Error in packet.
Reason: notWritable (That object does not support modification)
Failed object: TERRARIO-MIB::localizacion.0
pi $ raspberrypi:
Por último, cuando se cierra el agente presionando “Ctrl+C” en el teclado, se muestra la siguiente salida:
^CCerrando agente...
pi $ raspberrypi:
37
Desarrollo de sensor de temperatura gestionable
5 GESTOR SNMP
El gestor también tiene un papel importante en este proyecto, pues será el que reciba las notificaciones traps y
las mostrará al operador humano. Éste, tomará decisiones sobre si actuar y cómo hacerlo en función de la
información obtenida del agente y mostrada por el gestor. Para la recepción de traps se utilizará “snmptrapd”.
La herramienta “snmptrapd” forma parte de la suite de aplicaciones Net-SNMP y consiste en un daemon (o
demonio) que permite recibir notificaciones SNMP. Si no estuviera instalada la herramienta, simplemente
ejecute el comando “sudo apt-get install snmptrapd --fix-missing”.
Por defecto, esta herramienta escucha en el puerto UDP 162 de todas las interfaces IPv4. Esta configuración por
defecto se dejará tal como está y conllevará el uso de privilegios de administrador para su ejecución al ser un
puerto menor a 1024. Siguiendo la guía de configuración de snmptrapd proporcionada en la propia página de
Net-SNMP, se han realizado las siguientes acciones sobre la configuración de la herramienta:

Se necesita proporcionar a la herramienta la comunidad del agente para poder recibir esos traps. Para
ello, en el fichero de configuración snmptrapd.conf se han incluido las siguientes líneas.
authCommunity log,execute,net traps
[snmp] logOption f /home/pi/Proyecto21-09/scripts-python/trapsterrario
pidFile /home/pi/Proyecto21-09/scripts-python/traps-terrario
La primera línea establece que las notificaciones recibidas con la comunidad “traps” pueden ser tanto
logueadas como reenviadas a otra red y, además, permite la realización de acciones en el sistema.
La segunda línea establece que las notificaciones recibidas con la comunidad “traps” deberán ser
logueadas en el fichero indicado.
La tercera línea establece que se almacene el PID del proceso en el fichero indicado.
La herramienta snmptrapd se encuentra ahora configurada para nuestro uso como servidor de traps del agente
SNMP. A continuación, se informará de cómo se ejecutará la herramienta por línea de comandos y cuál es la
salida que se espera en su fichero de log.
Para poner a funcionar el servidor de traps “snmptrapd”, se ejecutará el siguiente comando:
sudo snmptrapd -m +TERRARIO-MIB -A
La opción “-A” le indica al programa que continúe completando el fichero de log ya que en otro caso borraría
lo que estuviera en el fichero y empezaría escribiendo por el principio. Así mismo, la opción “-m +TERRARIOMIB” indica un módulo MIB adicional que tendrá cargar la herramienta en su ejecución. Por último, recordar
que la herramiento por defecto carga su configuración del fichero por defecto; el que se había modificado
previamente. Esa configuración previa no entra en conflicto con estas opciones indicadas por línea de comandos.
A continuación, se configura el agente para que se envíe un trap de cada tipo. Ahora, si se comprueba el fichero
de log indicado, se encontrarán las siguientes líneas:
32190
NET-SNMP version 5.7.2.1
<UNKNOWN> [UDP: [192.168.1.110]:161->[192.168.1.110]:162]: Trap , DISMANEVENT-MIB::sysUpTimeInstance = Timeticks: (1561) 0:00:15.61, SNMPv2MIB::snmpTrapOID.0 = OID: TERRARIO-MIB::maxTemperatura.0, TERRARIO37
38
Gestor SNMP
MIB::temperatura = INTEGER: 21 grados C
<UNKNOWN> [UDP: [192.168.1.110]:161->[192.168.1.110]:162]: Trap , DISMANEVENT-MIB::sysUpTimeInstance = Timeticks: (1683) 0:00:16.83, SNMPv2MIB::snmpTrapOID.0 = OID: TERRARIO-MIB::minTemperatura.0, TERRARIOMIB::temperatura = INTEGER: 21 grados C
<UNKNOWN> [UDP: [192.168.1.110]:161->[192.168.1.110]:162]: Trap , DISMANEVENT-MIB::sysUpTimeInstance = Timeticks: (1806) 0:00:18.06, SNMPv2MIB::snmpTrapOID.0
=
OID:
TERRARIO-MIB::maxHumedad.0,
TERRARIOMIB::humedad = INTEGER: 50 %
<UNKNOWN> [UDP: [192.168.1.110]:161->[192.168.1.110]:162]: Trap , DISMANEVENT-MIB::sysUpTimeInstance = Timeticks: (1956) 0:00:19.56, SNMPv2MIB::snmpTrapOID.0
=
OID:
TERRARIO-MIB::minHumedad.0,
TERRARIOMIB::humedad = INTEGER: 50 %
2017-01-29 20:15:14 NET-SNMP version 5.7.2.1 Stopped.
Stopping snmptrapd
Como se puede apreciar, se encuentran los siguientes elementos en el fichero de log del servidor de traps:

El número de proceso PID al inicio del fichero “32190”. De esta manera se puede matar el proceso con
ese ID para apagar el servidor de traps.

A continuación, se muestra el mensaje “NET-SNMP version 5.7.2.1” sin ningún mensaje adicional de
aviso o error, lo que indica que el programa snmptrapd ha sido iniciado con éxito.

Los traps recibidos del agente, de los cuatro tipos disponibles “maxTemperatura”, “minTemperatura”,
“maxHumedad” y “minHumedad”. En las notificaciones se aprecia como, acompañando al tipo de trap,
se encuentra el OID de la temperatura o humedad y el valor del mismoque ha provocado el aviso.

Por último, tras matar el proceso del servidor de traps, se encuentra el mensaje “2017-01-29 20:15:14
NET-SNMP version 5.7.2.1 Stopped.” indicando la finalización de su ejecución y su marca temporal.
Llegados a este punto, ya se ha explicado cómo implementar el agente y cómo configurar el servidor de los traps
que dará los avisos. Se tiene un sistema de monitorización de red totalmente operativo para su uso.
39
Desarrollo de sensor de temperatura gestionable
6 PRUEBAS Y VALIDACIÓN
En esta sección se ofrece un compendio de pruebas realizadas para certificar el buen funcionamiento del sistema
y conocer las limitaciones del mismo. Como proyecto de software, necesita la inversión de una vasta cantidad
de tiempo en la comprobación de las funcionalidades del mismo y corrección de errores e incluso en la
incorporación de mejoras.
Con motivo de esta sección, se ha redactado un documento aparte que detalla la metodología seguida en las
pruebas, los criterios de superación de las mismas y demás detalles. Dicho documento se incluye como el Anexo
2 al final de la memoria y, con motivos orientativos, se detallan a continuación las pruebas en versión resumida.
6.1. Informe de pruebas realizadas
Como se detalla en el Anexo 2, el escenario de prueba consiste en el siguiente:

Una subred interna compuesta por un Router y una serie de elementos conectados. La dirección de
subred es 192.168.1.0/24 y no es necesaria la conexión a Internet para la realización de las pruebas.

Un agente SNMP en el equipo Raspberry Pi 1 (Equipo A) conectado al Router y con dirección IP
192.168.1.110. En este equipo es en el único que se encontrará funcionando el programa del agente.
Además, tendrá funcionando el servidor de traps en el puerto 162 para ciertos casos de prueba y aquí se
deberá consultar el log del programa agente para certificar que el programa ha recibido consultas
SNMP. Este equipo sólo responderá a las peticiones del gestor y enviará los Traps.

Un gestor SNMP en el equipo Raspberry Pi 3 (Equipo B) conectado al Router y con dirección IP
192.168.1.151. Desde este equipo se generarán las peticiones SNMP hacia el agente. Así mismo, en
este equipo se encuentra funcionando el servidor de traps en el puerto 162 para determinados casos de
prueba.
En ambos equipos se encuentran instaladas las herramientas necesarias para los casos de prueba (suite NetSNMP), y configuradas acorde con los apartados de esta memoria.
El anterior escenario se encuentra descrito gráficamente en la Figura 6-1.
Figura 6-1. Escenario de pruebas.
39
40
Pruebas y validación
Se procede a listar las diferentes pruebas realizadas en el escenario. Cada subapartado se titulará según el nombre
de la prueba junto con el número identificativo de la misma. Para más detalles, consulte el Anexo 2.
6.1.1
Ejecución snmpwalk, P01B
Se realiza un snmpwalk sobre el agente SNMP. Espera recibir información de todos los OIDs del módulo
TERRARIO-MIB. Usa tanto la comunidad “public” como “private” y “otra”.
Comando:
snmpwalk -v 2c -m +TERRARIO-MIB -c public 192.168.1.110
1.3.6.1.4.1.54321
snmpwalk -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
1.3.6.1.4.1.54321
snmpwalk -v 2c -m
1.3.6.1.4.1.54321
Criterio:
+TERRARIO-MIB
-c
otra
192.168.1.110
Para los dos primeros comandos: el Equipo A debe responder al B y mostrar los OIDs del
módulo, así como sus valores. El agente debe registrar las peticiones en el log.
Para el tercer comando: el Equipo A NO debe responder al B. El agente NO debe registrar
la petición en el log.
6.1.2
snmpget con nombre de OID, P02B
Realizar una petición GetRequest con la herramienta snmpget para cada OID individual del módulo
TERRARIO-MIB. Se puede usar tanto la comunidad “public” como “private” indiferentemente.
Comando:
snmpget -v
<nombre>.0
Criterio:
El agente responde con el valor del OID para cada caso. El agente debe registrar las
peticiones en el log.
6.1.3
2c
-m
+TERRARIO-MIB
-c
public
192.168.1.110
snmpget con identificadores numéricos, P03B
Realizar una petición GetRequest con la herramienta snmpget en cada OID individual del módulo
TERRARIO-MIB en su formato numérico. Se puede usar tanto la comunidad “public” como “private”
indiferentemente.
Comando:
snmpget -v 2c -m
<identificador>
Criterio:
El agente responde con el valor del OID. El agente debe registrar las peticiones en el log.
+TERRARIO-MIB
-c
public
192.168.1.110
41
Desarrollo de sensor de temperatura gestionable
6.1.4
snmpset con nombres de OID y comunidad public, P04B
Realizar una petición SetRequest con la herramienta snmpset en cada OID modificable del módulo
TERRARIO-MIB, con la comunidad que no permite la modificación del valor de los OIDs
Comando:
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
<nombre>.0 <tipo> <valor>
Criterio:
El agente responde con el mensaje de error de modificación. El agente NO debe registrar las
peticiones en el log.
6.1.5
snmpset con nombres de OID y comunidad private, P05B
Realizar una petición SetRequest con la herramienta snmpset en cada OID modificable del módulo
TERRARIO-MIB. con la comunidad que sí permite la modificación del valor de los OIDs.
Comando:
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
<nombre>.0 <tipo> <valor>
Criterio:
El agente responde con el nuevo valor del OID. El agente debe registrar las peticiones en el
log con el valor nuevo.
6.1.6
snmpset con nombres de OID de nivel read-only, P06B
Realizar una petición SetRequest con la herramienta snmpset en cada OID NO modificable del módulo
TERRARIO-MIB. En este caso, se debe comprobar con la comunidad “private”.
Comando:
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
<nombre>.0 <tipo> <valor>
Criterio:
El agente responde con el mensaje de OID no modificable. El agente NO debe registrar las
peticiones en el log.
6.1.7
snmpget con OID no accesibles, P07B
Realizar una petición GetRequest a los OIDs del módulo que son no accesible por su definición.
Comando:
snmpget -v
<nombre>.0
Criterio:
Al realizar la petición, la respuesta del agente debe ser “No Such Object available on this
agent at this OID”.
2c
-m
+TERRARIO-MIB
41
-c
public
192.168.1.110
42
6.1.8
Pruebas y validación
snmpget a los elementos de tipo notificación, P08B
Realizar una petición GetRequest a los OIDs del módulo que son de tipo notificación (traps). Se puede usar
tanto la comunidad “public” como “private” indiferentemente.
Comando:
snmpget -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
<nombre>.0
Criterio:
Al realizar la petición, la respuesta del agente debe ser “No Such Object available on this
agent at this OID”.
6.1.9
Reiniciar el agente, P09B
Realizar una petición SetRequest con la herramienta snmpset al OID “resetAgente” del módulo TERRARIOMIB con tipo “i” (integer) y valor “1”. La comunidad debe ser “private”.
Comando:
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::resetAgente.0 i 1
Criterio:
El agente al reiniciarse muestra un valor de tiempo de funcionamiento menor que el previo
al reinicio.
6.1.10 Recepción de traps en Equipo B, P10B
Configurar ambos equipos A y B para el envío de traps de A hacia B y controlar el registro de dichos sucesos
mediante sus archivos de log.
Comando:
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::maxTemperatura.0 i 10 TERRARIOMIB::minTemperatura.0 i 30 TERRARIO-MIB::maxHumedad.0 i 20
TERRARIO-MIB::minHumedad.0 i 70
tail -f <archivo-log>
Criterio:
El log del agente debe registrar el envío de los traps. El log del Equipo B debe registrar la
recepción de los traps indicando su tipo y valor.
6.1.11 Recepción de traps en Equipo B y puerto diferente, P11B
Continuar la prueba anterior P10B que consistía en configurar ambos equipos A y B para el envío de traps de
A hacia B y controlar el registro de dichos sucesos mediante sus archivos de log. En este caso, el puerto
destino de los traps será modificado en destinoPortTraps. Además, se reiniciará la herramienta snmtrapd en
Equipo B con una nueva configuración.
Comando:
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::envioTraps i 0
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB:: destinoPortTraps i 9999
sudo pkill -9 <PID>
43
Desarrollo de sensor de temperatura gestionable
snmptrapd -A udp:9999
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::envioTraps i 1
Criterio:
El log del agente debe registrar el envío de los traps. El log del Equipo B debe registrar la
recepción de los traps indicando su tipo y valor.
6.1.12 Recepción de traps en Equipo B y paro del envío, P12B
El propósito es cortar el envío de traps cambiando el valor de envioTraps durante el envío de traps.
Comando:
Criterio:
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::envioTraps i 0
El log del Equipo B deja de registrar la recepción de traps y el log del Equipo A deja de
registrar el envío de los mismos.
6.1.13 Paro de funcionamiento de sensor luz, P13B
Parar el funcionamiento del sensor de luz, previamente funcionando, modificando el valor de
estadoSensorLuz.
Comando:
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::estadoSensorLuz i 0
snmpget -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::estadoSensorLuz.0
Criterio:
En las dos respuestas del agente, el OID estadoSensorLuz tiene el valor ‘0’.
6.1.14 Paro de funcionamiento de sensor luz y puesta en funcionamiento P14B
Continuar el escenario de la prueba anterior P13B y cambiar de nuevo el valor de estadoSensorLuz a ‘1’.
Comando:
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::estadoSensorLuz i 1
snmpget -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::estadoSensorLuz.0
Criterio:
En las dos respuestas del agente, el OID estadoSensorLuz tiene el valor ‘1’.
6.1.15 Paro de funcionamiento de sensor temperatura y humedad, P15B
Parar el funcionamiento del sensor de temperatura y humedad, previamente funcionando, modificando el
valor de estadoSensorTH.
Comando:
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::estadoSensorTH i 0
snmpget -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::estadoSensorTH.0
43
44
Criterio:
Pruebas y validación
En las dos respuestas del agente, el OID estadoSensorTH tiene el valor ‘0’.
6.1.16 Paro de funcionamiento de sensor temperatura y humedad y puesta en funcionamiento,
P16B
Continuar el escenario de la prueba anterior P15B y cambiar de nuevo el valor de estadoSensorTH a ‘1’.
Comando:
Criterio:
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::estadoSensorTH i 1
snmpget -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::estadoSensorTH.0
En las dos respuestas del agente, el OID estadoSensorTH tiene el valor ‘1’.
6.1.17 Cambiar el valor máximo de temperatura aceptable a uno no válido, P17B
El sensor de temperatura y humedad toma lecturas en un rango de temperaturas de -40ºC a 80ºC. Por lo tanto,
los OID que marcan la temperatura máxima/mínima aceptable tienen que encontrarse dentro de este rango.
En esta prueba se intentarán introducir valores de temperatura fuera de este rango.
Comando:
Criterio:
snmpset -v 2c -m +TERRARIO-MIB
TERRARIO-MIB::maxTemperatura.0
snmpset -v 2c -m +TERRARIO-MIB
TERRARIO-MIB::maxTemperatura.0
-c private 192.168.1.110
i 90
-c private 192.168.1.110
i -60
Las respuestas, en sus valores devueltos, deben devolver el valor original que tenía el OID
como si no hubiera sido modificado.
6.1.18 Cambiar el valor mínimo de temperatura aceptable a uno no válido, P18B
El sensor de temperatura y humedad toma lecturas en un rango de temperaturas de -40ºC a 80ºC. Por lo tanto,
los OID que marcan la temperatura máxima/mínima aceptable tienen que encontrarse dentro de este rango.
En esta prueba se intentarán introducir valores de temperatura fuera de este rango.
Comando:
Criterio:
snmpset -v 2c -m +TERRARIO-MIB
TERRARIO-MIB::minTemperatura.0
snmpset -v 2c -m +TERRARIO-MIB
TERRARIO-MIB::minTemperatura.0
-c private 192.168.1.110
i 90
-c private 192.168.1.110
i -60
Las respuestas, en sus valores devueltos, deben devolver el valor original que tenía el OID
como si no hubiera sido modificado.
6.1.19 Cambiar el valor máximo de humedad aceptable a uno no válido, P19B
El sensor de temperatura y humedad toma lecturas en un rango de humedad de 0% a 100%. Por lo tanto, los
OID que marcan la humedad máxima/mínima aceptable tienen que encontrarse dentro de este rango. En esta
prueba se intentarán introducir valores de humedad fuera de este rango.
Comando:
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::maxHumedad.0 i 110
45
Desarrollo de sensor de temperatura gestionable
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::maxHumedad.0 i -20
Criterio:
Las respuestas, en sus valores devueltos, deben devolver el valor original que tenía el OID
como si no hubiera sido modificado.
6.1.20 Cambiar el valor mínimo de humedad aceptable a uno no válido, P20B
El sensor de temperatura y humedad toma lecturas en un rango de humedad de 0% a 100%. Por lo tanto, los
OID que marcan la humedad máxima/mínima aceptable tienen que encontrarse dentro de este rango. En esta
prueba se intentarán introducir valores de humedad fuera de este rango.
Comando:
Criterio:
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::minHumedad.0 i 110
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::minHumedad.0 i -20
Las respuestas, en sus valores devueltos, deben devolver el valor original que tenía el OID
como si no hubiera sido modificado.
6.1.21 Cambio de estado de la bombilla, apagado y encendido, P21B
Hacer dos cambios de valor del OID estadoBombillaLuz que determina el estado de la bombilla, primero
apagándola y luego encendiéndola.
Comando:
Criterio:
snmpset -v 2c -m +TERRARIO-MIB -c
TERRARIO-MIB::estadoBombillaLuz i
snmpset -v 2c -m +TERRARIO-MIB -c
TERRARIO-MIB::estadoBombillaLuz i
private 192.168.1.110
0
private 192.168.1.110
1
La bombilla se apaga con el primer comando y se enciende con el segundo.
6.1.22 Apagado de bombilla y poner temporizador a 3 minutos, P22B
Programar un temporizador de 3 minutos para la bombilla.
Comando:
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::temporizadorBombillaEncendida.0 i 3
snmpget -m +TERRARIO-MIB -v 2c -c private 192.168.1.110
temporizadorBombillaEncendida.0
snmpget -m +TERRARIO-MIB -v 2c -c private 192.168.1.110
estadoBombillaLuz.0
snmpget -m +TERRARIO-MIB -v 2c -c private 192.168.1.110
temporizadorBombillaEncendida.0
snmpget -m +TERRARIO-MIB -v 2c -c private 192.168.1.110
estadoBombillaLuz.0
Criterio:
La bombilla se mantiene encendida hasta que pasan 3 minutos. El temporizador va
45
46
Pruebas y validación
disminuyendo su valor con cada minuto que pasa.
6.1.23 Poner un segundo temporizador para la bombilla, P23B
Intentar programar un segundo temporizador de 3 minutos para la bombilla.
Comando:
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::temporizadorBombillaEncendida.0 i 3
snmpget -m +TERRARIO-MIB -v 2c -c private 192.168.1.110
temporizadorBombillaEncendida.0
snmpget -m +TERRARIO-MIB -v 2c -c private 192.168.1.110
estadoBombillaLuz.0
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::temporizadorBombillaEncendida.0 i 3
Criterio:
La respuesta muestra los minutos restantes del primer temporizador y no el nuevo valor dado.
El agente debe registrar los sucesos en el log y se encontrará un mensaje de advertencia
“WARNING::Temporizado bombilla existente no finalizado”.
6.2. Informe de resultados
A continuación, se muestra una tabla con las identificaciones de pruebas realizadas y resultados según sus
criterios.
ID PRUEBA RESULTADO
P01B
Funciona
P02B
Funciona
P03B
Funciona
P04B
Funciona
P05B
Funciona
P06B
Funciona
P07B
Funciona
P08B
Funciona
P09B
Funciona
P10B
Funciona
47
Desarrollo de sensor de temperatura gestionable
P11B
Funciona
P12B
Funciona
P13B
Funciona
P14B
Funciona
P15B
Funciona
P16B
Funciona
P17B
Funciona
P18B
Funciona
P19B
Funciona
P20B
Funciona
P21B
Funciona
P22B
Funciona
P23B
Funciona
Tabla 6-2. Resultados de las pruebas.
Con lo que, el resumen de los resultados es:
Nº pruebas
Aprobadas
No aprobadas
Índice de éxito
Resultado
23
23
0
100%
Exitoso.
Tabla 6-3. Resumen de resultados.
Basándose en los resultados de las pruebas realizadas previamente, se le concede al sistema el nivel correcto de
funcionamiento.
47
48
Conclusiones y desarrollos futuros
7 CONCLUSIONES Y DESARROLLOS FUTUROS
En esta última sección se pretende resumir el proyecto desarrollado con sus conclusiones y puntos de mejora y
de futuro desarrollo.
7.1. Conclusiones del proyecto
En primer lugar, se ha conseguido implementar un sistema de gestión para Raspberry Pi basado en el protocolo
SNMP. Éste, dispone de un módulo de monitorización de variables y envío de notificaciones trap.
En segundo lugar, se hace uso de varios scripts para el manejo de los sensores seleccionados para el proyecto.
Estos sensores son los únicos que funcionarán con el agente en esta versión. Se marca como punto de mejora la
implementación de los scripts de sensores con independencia del fabricante.
El módulo MIB desarrollado cuenta con un amplio número de objetos gestionables relacionados con los sensores
y con el estado y configuración del agente. Además, estos objetos proporcionan no sólo información sino
funcionalidades diversas como, por ejemplo, temporizador de encendido para la bombilla.
Así mismo, el proyecto ha sido desarrollado de manera que pueda ser fácilmente reproducible en otros equipos
que cuenten con hardware y software compatibles; y cuenten con los sensores adecuados. Su posible adaptación
a otras plataformas o a otro hardware queda supeditado a los desarrollos futuros del proyecto.
Como resultado, se ha obtenido un sistema de gestión de red para el caso específico de un terrario casero que
actualmente está siendo usado por el desarrollador en un terrario casero real y sigue en continuo desarrollo.
Por último, se ha conseguido desarrollar la memoria de manera suficientemente ilustrativa para aquellos alumnos
que deseen implementar un agente SNMP para sus propios proyectos. Si el lector ha llegado hasta aquí de
manera exitosa, le transmito mucho ánimo para su proyecto de aquí en adelante.
7.2. Desarrollos futuros
A continuación, se exponen ideas de mejora y desarrollo que han estado en mente, pero por cuestión de tiempo
no se han podido llevar a cabo.
Desde el primer momento se planteó que el funcionamiento del agente se mantuviera ajeno al manejo de los
scripts de gestión de los sensores. Esto planteaba un tremendo potencial a la hora de distribuir el desarrollo en
dos variantes específicas, una centrada en el desarrollo y mejora del agente SNMP; y otra centrada en la mejora
de la funcionalidad en el manejo de los sensores en términos de homogeneidad del fabricante, del tipo de sensor
o del circuito usado. Por ello, en el momento en el que tome este proyecto un equipo de dos personas, se podría
convertir los actuales scripts en scripts “multiplataforma” (para múltiples sensores diversos).
Así mismo, quedó en mente el desarrollo de una interfaz gráfica en el equipo donde trabaja el agente SNMP
mediante el uso de una página web y el servidor Apache. De esta manera se podría supervisar el estado del
terrario de manera atractiva mediante acceso web y proporcionar algunas funcionalidades de gestión sobre el
mismo sistema.
Siguiendo con las ideas expuestas en cuanto a la programación multihilo en el proyecto, se ha marcado el
objetivo de generar hilos para atender peticiones SNMP de manera individual. De esta manera, se hace posible
atender peticiones simultáneas provenientes de diferentes orígenes o de múltiples peticiones sistemáticas.
Como continuación del punto anterior, se establece la idea de la creación de un Manager SNMP que permita
mostrar a un usuario información y recopilar información en una base de datos remota. Así mismo, esta
funcionalidad permitiría a un técnico encontrar fallos de funcionamiento y arreglar el sistema para un futuro
cliente. Además, siguiendo la creciente tendencia de ciertas empresas en crear dispositivos “tontos” que
desarrollan tareas sencillas mientras un único equipo inteligente gestionar esos dispositivos y realiza tareas más
49
Desarrollo de sensor de temperatura gestionable
complejas, se marca este objetivo como más interesante.
Para esa comunicación producido entre el propietario del sistema y el equipo se marca la creación de una red
VPN que conecte un Manager SNMP funcionando en un Smartphone, por ejemplo, con el equipo agente.
Incluso se marca para el futuro la adaptación del funcionamiento del agente de manera individual hacia un
funcionamiento en cooperación con otros agentes del mismo tipo en una red más grande para monitorización a
mayor escala.
49
50
Referencias
REFERENCIAS
[1] Severance, C. (2013). Eben upton: Raspberry pi. Computer, 46(10), 14-16.
[2] Frueh, Andrew. (2017). GardenBot Org. [online] GardenBot. Available at: http://www.gardenbot.
[3] Industries, A. (2017). Adafruit Industries, Unique & fun DIY electronics and kits. Adafruit.com. Retrieved
from https://www.adafruit.com/.
[4] Raspberrypi.org. (2017). GPIO: Raspberry Pi Models A and B - Raspberry Pi Documentation. [online]
Available at: https://www.raspberrypi.org/documentation/usage/gpio/ [Accessed 13 Feb. 2017].
[5] Microjpm.com. (2017). Relay SRD-05VDC-SL-C / SPDT / 5VDC :: Micro JPM. [online] Available at:
http://www.microjpm.com/products/relay-srd-05vdc-sl-c-spdt-5vdc [Accessed 13 Feb. 2017].
[6] GitHub. (2017). janheise/TSL2561. [online] Available at: https://github.com/janheise/TSL2561 [Accessed
13 Feb. 2017].
[7]
GitHub.
(2017).
adafruit/Adafruit_Python_DHT.
[online]
https://github.com/adafruit/Adafruit_Python_DHT [Accessed 13 Feb. 2017].
Available
at:
[8] McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., Rose, M. and Waldbusser, S., "Structure of
Management Information Version 2 (SMIv2)", STD 58, RFC 2578, April 1999.
[9] Case, J., McCloghrie, K., Rose, M. and Waldbusser, S., "Structure of Management Information for version
2 of the Simple Network Management Protocol (SNMPv2)”, RFC1442, April 1993.
[10] McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., Rose, M. and S. Waldbusser, "Conformance
Statements for SMIv2", STD 58, RFC 2580, April 1999.
[11] Ilya Etingof, Pysnmp.sourceforge.net. (2017). Documentation — PySNMP. [online] Available at:
http://pysnmp.sourceforge.net/docs/tutorial.html [Accessed 13 Feb. 2017].
[12] Burger, A. (2017). Net-SNMP. [online] Net-snmp.org. Available at: http://www.net-snmp.org/ [Accessed
13 Feb. 2017].
[13] Charbonneau, Neal. “Writing an SNMP Agent With a Custom MIB Using Pysnmp”. February 2013.
(http://www.nealc.com/blog/blog/2013/02/23/writing-an-snmp-agent-with-a-custom-mib-using-pysnmp)
ANEXOS
Anexo A: Módulo TERRARIO-MIB
TERRARIO-MIB DEFINITIONS ::= BEGIN
IMPORTS
OBJECT-TYPE, NOTIFICATION-TYPE, MODULE-IDENTITY,
Integer32, Counter32, enterprises FROM SNMPv2-SMI
IpAddress,
OBJECT-GROUP, NOTIFICATION-GROUP, MODULE-COMPLIANCE FROM SNMPv2CONF;
terrarioproject MODULE-IDENTITY
LAST-UPDATED "201702051400Z"
ORGANIZATION "Wildlife Pi"
CONTACT-INFO "Daniel Rodriguez Leon
[email protected]
Sevilla, Espana.
Febrero, 2017."
DESCRIPTION
"Este modulo MIB recoge los OIDs necesarios
para la creacion de un proyecto TFG que
desarrolla una aplicacion de
monitorizacion de un terrario.
Desarrollado por Daniel Rodriguez Leon.
Universidad de Sevilla. 2017."
REVISION
"201702051400Z"
DESCRIPTION "Cuarta Version - modificada para "
REVISION
"201701071600Z"
DESCRIPTION
"Tercera version - completados algunos detalles."
REVISION
"201612101600Z"
DESCRIPTION
"Segunda version - estructura mas compleja con
ramas."
REVISION
"201610041600Z"
DESCRIPTION
"Primera version - estructura plana sin ramas."
::= { enterprises 54321 }
11
12
Anexos
-- nombres de grupos
generalConfig OBJECT IDENTIFIER ::= { terrarioproject 1 }
sensorLuzConfig OBJECT IDENTIFIER ::= { terrarioproject 2 }
sensorTemperaturaHumedadConfig OBJECT IDENTIFIER ::= { terrarioproject 3
}
bombillaLuzConfig
OBJECT IDENTIFIER ::= { terrarioproject 4 }
-- definicion de grupos
terrarioGroup
OBJECT-GROUP
OBJECTS { agenteUpTime,
localizacion,
versionSoftware,
disponibilidadSensorLuz,
disponibilidadSensorTH,
disponibilidadBombillaLuz,
resetAgente,
envioTraps,
destinoIPTraps,
destinoPortTraps,
modeloSensorLuz,
estadoSensorLuz,
luzInfrarroja,
lux,
luzVisible,
luminosidad,
modeloSensorTH,
estadoSensorTH,
temperatura,
maxTemperatura,
minTemperatura,
humedad,
maxHumedad,
minHumedad,
12
13
Desarrollo de sensor de temperatura gestionable
potenciaBombillaLuz,
estadoBombillaLuz,
temporizadorBombillaEncendida }
STATUS current
DESCRIPTION "Grupo de configuracion general."
::= { terrarioproject 5 }
notificacionesGroup
NOTIFICATION-GROUP
NOTIFICATIONS { trapMaxTemperatura,
trapMinTemperatura,
trapMaxHumedad,
trapMinHumedad }
STATUS current
DESCRIPTION "Grupo de notificaciones."
::= { terrarioproject 6 }
-- modulo de conformidad
terrarioCompliance MODULE-COMPLIANCE
STATUS current
DESCRIPTION "Modulo de conformidad del proyecto."
MODULE
MANDATORY-GROUPS { terrarioGroup,
notificacionesGroup }
::= {terrarioproject 7}
agenteUpTime OBJECT-TYPE
SYNTAX
Counter32
UNITS
"Segundos"
MAX-ACCESS
read-only
STATUS
current
DESCRIPTION
"Tiempo de funcionamiento del agente."
::= { generalConfig 1 }
localizacion OBJECT-TYPE
SYNTAX
OCTET STRING
13
14
Anexos
MAX-ACCESS
read-write
STATUS
current
DESCRIPTION
"Lugar donde esta emplazado el terrario."
::= { generalConfig 2 }
versionSoftware OBJECT-TYPE
SYNTAX
OCTET STRING
MAX-ACCESS
read-only
STATUS
current
DESCRIPTION
"Version actual del software."
::= { generalConfig 3 }
disponibilidadSensorLuz OBJECT-TYPE
SYNTAX
Integer32 (0..1)
MAX-ACCESS
read-only
STATUS
current
DESCRIPTION
"Muestra con un '1' que el dispositivo esta
disponible o un '0' en caso contrario."
::= { generalConfig 4 }
disponibilidadSensorTH OBJECT-TYPE
SYNTAX
Integer32 (0..1)
MAX-ACCESS
read-only
STATUS
current
DESCRIPTION
"Muestra con un '1' que el dispositivo esta
disponible o un '0' en caso contrario."
::= { generalConfig 5 }
disponibilidadBombillaLuz OBJECT-TYPE
SYNTAX
Integer32 (0..1)
MAX-ACCESS
read-only
STATUS
current
DESCRIPTION
"Muestra con un '1' que el dispositivo esta
disponible o un '0' en caso contrario."
::= { generalConfig 6 }
resetAgente OBJECT-TYPE
SYNTAX
Integer32 (0..1)
MAX-ACCESS
read-write
14
15
Desarrollo de sensor de temperatura gestionable
STATUS
current
DESCRIPTION
poniendo el valor '1'."
"Permite reiniciar el servicio agente snmp
::= { generalConfig 7 }
envioTraps OBJECT-TYPE
SYNTAX
Integer32 (0..1)
MAX-ACCESS
read-write
STATUS
current
DESCRIPTION
"Este objeto permite indicar si se desean enviar
traps a la maquina indicada por destinoIPTraps ('1') o no se debe permitir
que se envien ('0'). Cuando esta desativado ('0'), los traps se envian
a la maquina donde esta funcionando el agente."
::= { generalConfig 8 }
destinoIPTraps OBJECT-TYPE
SYNTAX
IpAddress
MAX-ACCESS
read-write
STATUS
current
DESCRIPTION
"Indica a que maquina se deben enviar los traps.
Necesita que se pase una direccion IP correcta. Si el objeto 'envioTraps'
contiene el valor ('0'), los traps se envian a la maquina donde esta
funcionando el agente. Si no se indica ninguna direccion IP, los traps
se envian a la maquina donde esta funcionando el agente."
DEFVAL {'7f000001'H} -- 127.0.0.1
::= { generalConfig 9 }
destinoPortTraps OBJECT-TYPE
SYNTAX
Integer32 (1..65535)
MAX-ACCESS
read-write
STATUS
current
DESCRIPTION
"Indica a que puerto de la maquina se deben
enviar los traps. Necesita que se pase un puerto correcto, (1-65535)."
::= { generalConfig 10 }
-- rama sensorLuzConfig
modeloSensorLuz OBJECT-TYPE
SYNTAX
OCTET STRING
MAX-ACCESS
read-write
STATUS
current
15
16
Anexos
DESCRIPTION
nombre)"
"Tipo de sensor de luminosidad (referencia o
::= { sensorLuzConfig 1 }
estadoSensorLuz OBJECT-TYPE
SYNTAX
Integer32 (0..1)
MAX-ACCESS
read-write
STATUS
current
DESCRIPTION
"Estado de funcionamiento del sensor. Se puede
indicar que se inicie '1' o que pare '0'."
::= { sensorLuzConfig 2 }
luzInfrarroja OBJECT-TYPE
SYNTAX
Integer32
MAX-ACCESS
read-only
STATUS
current
DESCRIPTION
de luminosidad."
"Cantidad de luz infrarroja medida por el sensor
::= { sensorLuzConfig 3 }
lux OBJECT-TYPE
SYNTAX
Integer32
UNITS
"Lux"
MAX-ACCESS
read-only
STATUS
current
DESCRIPTION
"Cantidad de luz Lux (lumenes/m2 SI) medida por
el sensor de luminosidad."
::= { sensorLuzConfig 4 }
luzVisible
OBJECT-TYPE
SYNTAX
Integer32
MAX-ACCESS
read-only
STATUS
current
DESCRIPTION
luminosidad."
"Cantidad de luz visible medida por el sensor de
::= { sensorLuzConfig 5 }
16
17
Desarrollo de sensor de temperatura gestionable
luminosidad
OBJECT-TYPE
SYNTAX
Integer32
MAX-ACCESS
read-only
STATUS
current
DESCRIPTION
luminosidad."
"Cantidad de luminosidad medida por el sensor de
::= { sensorLuzConfig 6 }
-- rama sensorTemperaturaHumedadConfig
modeloSensorTH OBJECT-TYPE
SYNTAX
OCTET STRING
MAX-ACCESS
read-write
STATUS
current
DESCRIPTION
"Modelo de sensor de temperatura y humedad."
::= { sensorTemperaturaHumedadConfig 1 }
estadoSensorTH OBJECT-TYPE
SYNTAX
Integer32 (0..1)
MAX-ACCESS
read-write
STATUS
current
DESCRIPTION
"Estado de funcionamiento del sensor. Se puede
indicar que se inicie '1' o que pare '0'."
::= { sensorTemperaturaHumedadConfig 2 }
temperatura
OBJECT-TYPE
SYNTAX
Integer32
UNITS
"grados C"
MAX-ACCESS
read-only
STATUS
current
DESCRIPTION
"Temperatura medida por el sensor."
::= { sensorTemperaturaHumedadConfig 3 }
maxTemperatura
OBJECT-TYPE
SYNTAX
Integer32
UNITS
"grados C"
17
18
Anexos
MAX-ACCESS
read-write
STATUS
current
DESCRIPTION
"Temperatura
sobrepasa este limite se envia un Trap."
maxima
aceptable.
Cuando
se
sobrepasa
la
::= { sensorTemperaturaHumedadConfig 4 }
trapMaxTemperatura NOTIFICATION-TYPE
STATUS
current
DESCRIPTION
Temperatura Max."
"Notificacion
para
cuando
se
::= { sensorTemperaturaHumedadConfig 5 }
minTemperatura
OBJECT-TYPE
SYNTAX
Integer32
UNITS
"grados C"
MAX-ACCESS
read-write
STATUS
current
DESCRIPTION
"Temperatura
sobrepasa este limite se envia un Trap."
minima
aceptable.
Cuando
se
sobrepasa
la
::= { sensorTemperaturaHumedadConfig 6 }
trapMinTemperatura NOTIFICATION-TYPE
STATUS
current
DESCRIPTION
Temperatura Min."
"Notificacion
para
cuando
se
::= { sensorTemperaturaHumedadConfig 7 }
humedad
OBJECT-TYPE
SYNTAX
Integer32
UNITS
"%"
MAX-ACCESS
read-only
STATUS
current
DESCRIPTION
"Humedad medida por el sensor."
::= { sensorTemperaturaHumedadConfig 8 }
maxHumedad
OBJECT-TYPE
SYNTAX
Integer32
UNITS
"%"
18
19
Desarrollo de sensor de temperatura gestionable
MAX-ACCESS
read-write
STATUS
current
DESCRIPTION
"Humedad maxima aceptable. Cuando se sobrepasa
este limite se envia un Trap."
::= { sensorTemperaturaHumedadConfig 9 }
trapMaxHumedad NOTIFICATION-TYPE
STATUS
current
DESCRIPTION
"Notificacion para cuando se sobrepasa la Humedad
Max."
::= { sensorTemperaturaHumedadConfig 10 }
minHumedad
OBJECT-TYPE
SYNTAX
Integer32
UNITS
"%"
MAX-ACCESS
read-write
STATUS
current
DESCRIPTION
"Humedad minima aceptable. Cuando se sobrepasa
este limite se envia un Trap."
::= { sensorTemperaturaHumedadConfig 11 }
trapMinHumedad NOTIFICATION-TYPE
STATUS
current
DESCRIPTION
"Notificacion para cuando se sobrepasa la Humedad
Min."
::= { sensorTemperaturaHumedadConfig 12 }
-- rama bombillaLuzConfig
potenciaBombillaLuz
OBJECT-TYPE
SYNTAX
Integer32
UNITS
"W"
MAX-ACCESS
read-write
STATUS
current
DESCRIPTION
"Potencia de la bombilla en W (vatios)."
::= { bombillaLuzConfig 1 }
estadoBombillaLuz
SYNTAX
OBJECT-TYPE
Integer32 (0..1)
19
20
Anexos
MAX-ACCESS
read-write
STATUS
current
DESCRIPTION
'1' es encendido."
"Estado de la bombilla de luz, '0' es apagado y
::= { bombillaLuzConfig 2 }
temporizadorBombillaEncendida
OBJECT-TYPE
SYNTAX
Integer32
UNITS
"Minutos"
MAX-ACCESS
read-write
STATUS
current
DESCRIPTION
"Se inicia un temporizador que mantenga la
bombilla encendida un periodo de tiempo en MINUTOS mayor que 0. Si la
bombilla estaba previamente encendida, el temporizador se inicia
igualmente y al terminar el periodo de tiempo la bombilla se apaga."
::= { bombillaLuzConfig 3 }
END
Anexo B: Plan de Pruebas
Las pruebas serán realizadas en dos equipos. Un equipo será el propio del agente SNMP (Equipo A). El otro
equipo, un equipo situado en la misma subred del agente SNMP, con IP 192.168.1.151 (Equipo B). En este
equipo se realizará la configuración para servidor de traps descrita en la memoria del TFG.
En el Equipo B se necesita tener el fichero TERRARIO-MIB en el directorio $HOME/.snmp/mibs y el
archivo snmptrapd.conf configurado acorde a la memoria TFG.
20
21
Desarrollo de sensor de temperatura gestionable
Nombre
Ejecución snmpwalk.
Propósito
Realizar un snmpwalk sobre el agente SNMP. Espera recibir información de
todos los OIDs del módulo TERRARIO-MIB. Usa tanto la comunidad “public”
como “private” y “otra”.
Prerrequisitos
En el Equipo A, ejecutar el programa del agente con el comando
ID
Prueba
P01B
sudo ./agente-snmp_pyv3-int.py
Pasos
Ejecutar el comando en el Equipo B:
snmpwalk -v 2c
1.3.6.1.4.1.54321
-m
+TERRARIO-MIB
-c
public
192.168.1.110
-m
+TERRARIO-MIB
-c
private
192.168.1.110
Esperar la respuesta.
Segundo comando:
snmpwalk -v 2c
1.3.6.1.4.1.54321
Esperar la respuesta.
Tercer comando:
snmpwalk -v 2c -m +TERRARIO-MIB -c otra 192.168.1.110 1.3.6.1.4.1.54321
Esperar la respuesta.
Criterio
Para los dos primeros comandos: el Equipo A debe responder al B y mostrar los
21
22
Anexos
OIDs del módulo, así como sus valores. El agente debe registrar las peticiones
en el log.
Para el tercer comando: el Equipo A NO debe responder al B. El agente NO debe
registrar la petición en el log.
Resultado
Funciona
No Funciona
Archivo de log
P01B.log
Archivo log de trap
Nombre
snmpget con nombres de OID.
Propósito
Realizar una petición GetRequest con la herramienta snmpget para cada OID
individual del módulo TERRARIO-MIB. Se puede usar tanto la comunidad
“public” como “private” indiferentemente.
Prerrequisitos
En el Equipo A, ejecutar el programa del agente con el comando
ID
Prueba
P02B
sudo ./agente-snmp_pyv3-int.py
Pasos
Tomar la siguiente lista de nombre identificadores de los OIDs del módulo:
TERRARIO-MIB::agenteUpTime.0
TERRARIO-MIB::localizacion.0
TERRARIO-MIB::versionSoftware.0
TERRARIO-MIB::disponibilidadSensorLuz.0
TERRARIO-MIB::disponibilidadSensorTH.0
TERRARIO-MIB::disponibilidadBombillaLuz.0
TERRARIO-MIB::resetAgente.0
TERRARIO-MIB::envioTraps.0
TERRARIO-MIB::destinoIPTraps.0
TERRARIO-MIB::destinoPortTraps.0
TERRARIO-MIB::modeloSensorLuz.0
TERRARIO-MIB::estadoSensorLuz.0
TERRARIO-MIB::luzInfrarroja.0
TERRARIO-MIB::lux.0
TERRARIO-MIB::luzVisible.0
TERRARIO-MIB::luminosidad.0
TERRARIO-MIB::modeloSensorTH.0
TERRARIO-MIB::estadoSensorTH.0
TERRARIO-MIB::temperatura.0
TERRARIO-MIB::maxTemperatura.0
TERRARIO-MIB::minTemperatura.0
22
23
Desarrollo de sensor de temperatura gestionable
TERRARIO-MIB::humedad.0
TERRARIO-MIB::maxHumedad.0
TERRARIO-MIB::minHumedad.0
TERRARIO-MIB::potenciaBombillaLuz.0
TERRARIO-MIB::estadoBombillaLuz.0
TERRARIO-MIB::temporizadorBombillaEncendida.0
Tomar el siguiente comando con la variable <nombre>:
snmpget -v 2c -m +TERRARIO-MIB -c public 192.168.1.110 <nombre>
Ejecutar el comando anterior sustituyendo <nombre> por cada elemento de la
lista de nombres previamente dada. Esperar la respuesta del agente.
Criterio
El agente responde con el valor del OID para cada caso. El agente debe registrar
las peticiones en el log.
Resultado
Funciona
No Funciona
Archivo de log
P02B.log
Archivo log de trap
Nombre
snmpget con identificadores numéricos.
Propósito
Realizar una petición GetRequest con la herramienta snmpget en cada OID
individual del módulo TERRARIO-MIB en su formato numérico. Se puede usar
tanto la comunidad “public” como “private” indiferentemente.
Prerrequisitos
En el Equipo A, ejecutar el programa del agente con el comando
ID
Prueba
P03B
sudo ./agente-snmp_pyv3-int.py
Pasos
Tomar la siguiente lista de identificadores numéricos de los OIDs del módulo:
.1.3.6.1.4.1.54321.1.1.0
.1.3.6.1.4.1.54321.1.2.0
.1.3.6.1.4.1.54321.1.3.0
.1.3.6.1.4.1.54321.1.4.0
.1.3.6.1.4.1.54321.1.5.0
.1.3.6.1.4.1.54321.1.6.0
.1.3.6.1.4.1.54321.1.7.0
.1.3.6.1.4.1.54321.1.8.0
.1.3.6.1.4.1.54321.1.9.0
.1.3.6.1.4.1.54321.1.10.0
.1.3.6.1.4.1.54321.2.1.0
23
24
Anexos
.1.3.6.1.4.1.54321.2.2.0
.1.3.6.1.4.1.54321.2.3.0
.1.3.6.1.4.1.54321.2.4.0
.1.3.6.1.4.1.54321.2.5.0
.1.3.6.1.4.1.54321.2.6.0
.1.3.6.1.4.1.54321.3.1.0
.1.3.6.1.4.1.54321.3.2.0
.1.3.6.1.4.1.54321.3.3.0
.1.3.6.1.4.1.54321.3.4.0
.1.3.6.1.4.1.54321.3.6.0
.1.3.6.1.4.1.54321.3.8.0
.1.3.6.1.4.1.54321.3.9.0
.1.3.6.1.4.1.54321.3.11.0
.1.3.6.1.4.1.54321.4.1.0
.1.3.6.1.4.1.54321.4.2.0
.1.3.6.1.4.1.54321.4.3.0
Tomar el siguiente comando con la variable <nombre>:
snmpget -v 2c -m +TERRARIO-MIB -c public 192.168.1.110 <identificador>
Ejecutar el comando anterior sustituyendo <identificador> por cada elemento de
la lista de identificadores previamente dada. Esperar la respuesta del agente.
Criterio
El agente responde con el valor del OID. El agente debe registrar las peticiones
en el log.
Resultado
Funciona
No Funciona
Archivo de log
P03B.log
Archivo log de trap
Nombre
snmpset con nombres de OID y comunidad public.
Propósito
Realizar una petición SetRequest con la herramienta snmpset en cada OID
modificable del módulo TERRARIO-MIB, con la comunidad que no permite la
modificación del valor de los OIDs.
Prerrequisitos
En el Equipo A, ejecutar el programa del agente con el comando
ID
Prueba
P04B
sudo ./agente-snmp_pyv3-int.py
Pasos
Tomar la siguiente lista de nombre identificadores de los OIDs del módulo que
son modificables:
24
25
Desarrollo de sensor de temperatura gestionable
TERRARIO-MIB::localizacion.0
TERRARIO-MIB::resetAgente.0
TERRARIO-MIB::envioTraps.0
TERRARIO-MIB::destinoIPTraps.0
TERRARIO-MIB::destinoPortTraps.0
TERRARIO-MIB::modeloSensorLuz.0
TERRARIO-MIB::estadoSensorLuz.0
TERRARIO-MIB::modeloSensorTH.0
TERRARIO-MIB::estadoSensorTH.0
TERRARIO-MIB::maxTemperatura.0
TERRARIO-MIB::minTemperatura.0
TERRARIO-MIB::maxHumedad.0
TERRARIO-MIB::minHumedad.0
TERRARIO-MIB::potenciaBombillaLuz.0
TERRARIO-MIB::estadoBombillaLuz.0
TERRARIO-MIB::temporizadorBombillaEncendida.0
Tomar el siguiente comando con la variable <nombre>:
snmpset -v 2c -m +TERRARIO-MIB -c public 192.168.1.110 <nombre>
<tipo> <valor>
O el comando del script script-test.sh
./ script-test.sh set public <nombre> <tipo> <valor>
Ejecutar el comando anterior sustituyendo <nombre> por cada elemento de la
lista de nombres previamente dada. Para modificar el valor se debe dar un valor
y un tipo adecuados a cada uno de los OIDs. La comunidad “public” no tiene
permisos de modificación para el agente.
Esperar la respuesta del agente.
Criterio
Resultado
Archivo de log
El agente responde con el mensaje de error de modificación. El agente NO debe
registrar las peticiones en el log.
Funciona
No Funciona
Archivo log de trap
25
26
Anexos
Nombre
snmpset con nombres de OID y comunidad private.
Propósito
Realizar una petición SetRequest con la herramienta snmpset en cada OID
modificable del módulo TERRARIO-MIB. con la comunidad que sí permite la
modificación del valor de los OIDs.
Prerrequisitos
En el Equipo A, ejecutar el programa del agente con el comando
ID
Prueba
P05B
sudo ./agente-snmp_pyv3-int.py
Pasos
Tomar la siguiente lista de nombre identificadores de los OIDs del módulo que
son modificables:
TERRARIO-MIB::localizacion.0
TERRARIO-MIB::resetAgente.0
TERRARIO-MIB::envioTraps.0
TERRARIO-MIB::destinoIPTraps.0
TERRARIO-MIB::destinoPortTraps.0
TERRARIO-MIB::modeloSensorLuz.0
TERRARIO-MIB::estadoSensorLuz.0
TERRARIO-MIB::modeloSensorTH.0
TERRARIO-MIB::estadoSensorTH.0
TERRARIO-MIB::maxTemperatura.0
TERRARIO-MIB::minTemperatura.0
TERRARIO-MIB::maxHumedad.0
TERRARIO-MIB::minHumedad.0
TERRARIO-MIB::potenciaBombillaLuz.0
TERRARIO-MIB::estadoBombillaLuz.0
TERRARIO-MIB::temporizadorBombillaEncendida.0
Tomar el siguiente comando con la variable <nombre>:
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110 <nombre>
<tipo> <valor>
Ejecutar el comando anterior sustituyendo <nombre> por cada elemento de la
lista de nombres previamente dada. Para modificar el valor se debe dar un valor
y un tipo adecuados a cada uno de los OIDs. La comunidad “private” sí tiene
permisos de modificación para el agente.
Esperar la respuesta del agente.
Criterio
El agente responde con el nuevo valor del OID. El agente debe registrar las
peticiones en el log con el valor nuevo.
26
27
Desarrollo de sensor de temperatura gestionable
Resultado
Funciona
No Funciona
Archivo de log
P05B.log
Archivo log de trap
Nombre
snmpset con nombres de OID de nivel read-only.
Propósito
Realizar una petición SetRequest con la herramienta snmpset en cada OID NO
modificable del módulo TERRARIO-MIB. En este caso, se debe comprobar con
la comunidad “private”.
Prerrequisitos
En el Equipo A, ejecutar el programa del agente con el comando
ID
Prueba
P06B
sudo ./agente-snmp_pyv3-int.py
Pasos
Tomar la siguiente lista de nombre identificadores de los OIDs del módulo que
NO son modificables:
TERRARIO-MIB::agenteUpTime.0
TERRARIO-MIB::versionSoftware.0
TERRARIO-MIB::sensorLuz.0
TERRARIO-MIB::sensorTemperaturaHumedad.0
TERRARIO-MIB::bombillaLuz.0
TERRARIO-MIB::luzInfrarroja.0
TERRARIO-MIB::lux.0
TERRARIO-MIB::luzVisible.0
TERRARIO-MIB::luminosidad.0
TERRARIO-MIB::temperatura.0
TERRARIO-MIB::humedad.0
Tomar el siguiente comando con la variable <nombre>:
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110 <nombre>.0
<tipo> <valor>
Ejecutar el comando anterior sustituyendo <nombre> por cada elemento de la
lista de nombres previamente dada. Para modificar el valor se debe dar un valor
y un tipo adecuados a cada uno de los OIDs.
Esperar la respuesta del agente.
Criterio
El agente responde con el mensaje de OID no modificable. El agente NO debe
registrar las peticiones en el log.
27
28
Anexos
Resultado
Funciona
Archivo de log
No Funciona
Archivo log de trap
Nombre
snmpget con OID no accesibles.
Propósito
Realizar una petición GetRequest a los OIDs del módulo que son no accesible
por su definición.
Prerrequisitos
En el Equipo A, ejecutar el programa del agente con el comando
ID
Prueba
P07B
sudo ./agente-snmp_pyv3-int.py
Pasos
Tomar la lista de OIDs no accesibles del módulo:
generalConfig
dispositivosDisponibles
sensorLuzConfig
funcionalidadesSensorLuz
sensorTemperaturaHumedadConfig
funcionalidadesSensorTH
bombillaLuzConfig
terrarioGroup
terrarioCompliance
notificacionesGroup
Ejecutar el comando en el Equipo B:
snmpget -v 2c -m +TERRARIO-MIB -c public 192.168.1.110 <nombre>
Ejecutar el comando anterior sustituyendo <nombre> por cada elemento de la
lista de nombres previamente dada. Esperar la respuesta.
Criterio
Resultado
Archivo de log
Nombre
Al realizar la petición, la respuesta del agente debe ser “No Such Object available
on this agent at this OID”. El agente NO debe registrar las peticiones en el log.
Funciona
No Funciona
Archivo log de trap
snmpget a los elementos de tipo notificación.
28
ID
Prueba
P08B
29
Desarrollo de sensor de temperatura gestionable
Propósito
Realizar una petición GetRequest a los OIDs del módulo que son de tipo
notificación (traps). Se puede usar tanto la comunidad “public” como “private”
indiferentemente.
Prerrequisitos
En el Equipo A, ejecutar el programa del agente con el comando
sudo ./agente-snmp_pyv3-int.py
Pasos
Tomar la lista de OIDs de traps del módulo:
trapMaxTemperatura
trapMinTemperatura
trapMaxHumedad
trapMinHumedad
Ejecutar el comando en el Equipo B:
snmpget -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 <nombre>
Ejecutar el comando anterior sustituyendo <nombre> por cada elemento de la
lista de nombres previamente dada. Esperar la respuesta.
Criterio
Resultado
Al realizar la petición, la respuesta del agente debe ser “No Such Object available
on this agent at this OID”. El agente NO debe registrar las peticiones en el log.
Funciona
Archivo de log
No Funciona
Archivo log de trap
Nombre
Reiniciar el agente.
Propósito
Realizar una petición SetRequest con la herramienta snmpset al OID
“resetAgente” del módulo TERRARIO-MIB con tipo “i” (integer) y valor “1”. La
comunidad debe ser “private”.
Prerrequisitos
En el Equipo A, ejecutar el programa del agente con el comando
ID
Prueba
P09B
sudo ./agente-snmp_pyv3-int.py
Pasos
Primero, ejecutar el comando en el Equipo B:
snmpget -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::agenteUpTime.0
Esperar la respuesta. Anotar el valor dado.
A continuación, proceder al reinicio del agente:
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::resetAgente.0 i 1
29
30
Anexos
Esperar 10 segundos.
Ahora, volver a ejecutar el comando:
snmpget -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::agenteUpTime.0
Comparar con el valor anotado. Confirmar que el agente ha sido reiniciado.
El agente al reiniciarse muestra un valor de tiempo de funcionamiento menor que
el previo al reinicio.
Criterio
Resultado
Funciona
No Funciona
Archivo de log
P09B.log
Archivo log de trap
Nombre
Recepción de traps en Equipo B.
Propósito
Configurar ambos equipos A y B para el envío de traps de A hacia B y controlar el registro
de dichos sucesos mediante sus archivos de log.
Prerrequisi
tos
En el Equipo A, ejecutar el programa del agente con el comando
ID Prueba
P10B
sudo ./agente-snmp_pyv3-int.py
En el Equipo B, configurar la herramienta snmptrapd acorde a la sección 5 de la memoria
e iniciarla de la manera indicada en la misma. Para este caso, en la línea “[snmp] logOption
f ” se debe indicar un fichero en el sistema.
Pasos
Primero, asegurarse que el envío de traps está activo en el Equipo A con envioTraps valor
‘1’ y que el valor de destinoIPTraps es la IP del Equipo B.
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::envioTraps.0 i 1
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::destinoIPTraps.0 a 192.168.1.151
Se supone que la configuración de envío de traps está por defecto en los puertos 161 para
el envío y el 162 para recepción.
Segundo, se prepara al agente para que envíe un trap de cada tipo. Para ello, se marcan unos
valores máximos y mínimos acorde con la temperatura y humedad actuales pero que
provoquen el envío de los traps. Por ejemplo, con 20 ºC y 40% humedad, se establecen:
30
31
Desarrollo de sensor de temperatura gestionable
TERRARIO-MIB::maxTemperatura.0 = 10
TERRARIO-MIB::minTemperatura.0 = 30
TERRARIO-MIB::maxHumedad.0 = 20
TERRARIO-MIB::minHumedad.0 = 70
Ejecutar el comando en el Equipo B:
snmpset -v 2c -m +TERRARIO-MIB -c private 192.168.1.110
TERRARIO-MIB::maxTemperatura.0 i 10 TERRARIOMIB::minTemperatura.0 i 30 TERRARIO-MIB::maxHumedad.0 i
20 TERRARIO-MIB::minHumedad.0 i 70
Ahora, para seguir el log del agente y el log del servidor de traps ejecutamos el siguiente
comando en ambos equipos, con sus respectivos ficheros de log sustituyendo <archivolog>:
tail -f < archivo-log>
Esperar la recepción de los traps en Equipo B.
Criterio
El log del agente debe registrar el envío de los traps. El log del Equipo B debe registrar la
recepción de los traps indicando su tipo y valor.
Resultado
Funciona
No Funciona
Archivo de
log
P10B.log
Archivo log de trap
P10B-trap.log
Nombre
Recepción de traps en Equipo B y puerto diferente.
Propósito
Continuar la prueba anterior P10B que consistía en configurar ambos equipos A
y B para el envío de traps de A hacia B y controlar el registro de dichos sucesos
mediante sus archivos de log. En este caso, el puerto destino de los traps será
modificado en destinoPortTraps. Además, se reiniciará la herramienta snmtrapd
en Equipo B con una nueva configuración.
Prerrequisitos
Realizar la prueba anterior P10B.
Pasos
Ejecutar el comando en el Equipo B:
ID
Prueba
P11B
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::envioTraps i 0
Y el comando:
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB:: destinoPortTraps i
9999
Ahora, consultar el PID de snmptrapd del log en el Equipo B y matar el proceso
31
32
Anexos
con dicho PID con sudo killall snmptrapd
Iniciar snmptrapd de la siguiente manera indiciando el nuevo puerto de
recepción:
snmptrapd -A udp:9999
Ejecutar el comando en el Equipo B:
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::envioTraps i 1
Esperar la recepción de traps en el Equipo B.
Criterio
El log del agente debe registrar el envío de los traps. El log del Equipo B debe
registrar la recepción de los traps indicando su tipo y valor.
Resultado
Funciona
No Funciona
Archivo de log
P11B.log
Archivo log de trap
P11B-trap.log
Nombre
Recepción de traps en Equipo B y paro del envío.
Propósito
El propósito es cortar el envío de traps cambiando el valor de envioTraps durante
el envío de traps.
Prerrequisitos
Realizar la prueba P10B.
Pasos
Dado el escenario de la prueba P10B y asumiendo que se están enviando traps
en este momento, ejecutar el comando en el Equipo B:
ID
Prueba
P12B
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::envioTraps i 0
Esperar el cambio de comportamiento en el agente.
Criterio
El log del Equipo B deja de registrar la recepción de traps y el log del Equipo A
deja de registrar el envío de los mismos.
Resultado
Funciona
No Funciona
Archivo de log
P12B.log
Archivo log de trap
Nombre
Paro de funcionamiento de sensor luz.
Propósito
Parar el funcionamiento del sensor de luz, previamente funcionando,
modificando el valor de estadoSensorLuz.
32
ID
Prueba
P13B
33
Desarrollo de sensor de temperatura gestionable
Prerrequisitos
En el Equipo A, ejecutar el programa del agente con el comando
sudo ./agente-snmp_pyv3-int.py
Asegurarse que el OID estadoSensorLuz tiene el valor ‘1’.
Pasos
Ejecutar el comando en el Equipo B:
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::estadoSensorLuz i 0
Esperar la respuesta del agente.
Ahora ejecutar:
snmpget -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::estadoSensorLuz.0
Esperar la segunda respuesta del agente.
Criterio
En las dos respuestas del agente, el OID estadoSensorLuz tiene el valor ‘0’.
Resultado
Funciona
No Funciona
Archivo de log
P13B.log
Archivo log de trap
Nombre
Paro de funcionamiento de sensor luz y puesta en ID
funcionamiento.
Prueba
P14B
Propósito
Continuar el escenario de la prueba anterior P13B y cambiar de nuevo el valor
de estadoSensorLuz a ‘1’.
Prerrequisitos
Realizar la prueba anterior P13B.
Pasos
Continuando el escenario de la prueba P13B, ejecutar el comando en el Equipo
B:
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::estadoSensorLuz i 1
Esperar la respuesta.
Ahora ejecutar:
snmpget -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::estadoSensorLuz.0
Esperar la segunda respuesta del agente.
Criterio
En las dos respuestas del agente, el OID estadoSensorLuz tiene el valor ‘1’.
Resultado
Funciona
No Funciona
Archivo de log
P14B.log
Archivo log de trap
Nombre
Paro de funcionamiento de sensor temperatura y humedad. ID
33
P15B
34
Anexos
Prueba
Propósito
Parar el funcionamiento del sensor de temperatura y humedad, previamente
funcionando, modificando el valor de estadoSensorTH.
Prerrequisitos
En el Equipo A, ejecutar el programa del agente con el comando
sudo ./agente-snmp_pyv3-int.py
Asegurarse que el OID estadoSensorTH tiene el valor ‘1’.
Pasos
Ejecutar el comando en el Equipo B:
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::estadoSensorTH i 0
Esperar la respuesta del agente.
Ahora ejecutar:
snmpget -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::estadoSensorTH.0
Esperar la segunda respuesta del agente.
Criterio
En las dos respuestas del agente, el OID estadoSensorTH tiene el valor ‘0’.
Resultado
Funciona
No Funciona
Archivo de log
P15B.log
Archivo log de trap
Nombre
Paro de funcionamiento de sensor temperatura y humedad ID
y puesta en funcionamiento.
Prueba
P16B
Propósito
Continuar el escenario de la prueba anterior P15B y cambiar de nuevo el valor
de estadoSensorTH a ‘1’.
Prerrequisitos
Realizar la prueba anterior P15B.
Pasos
Continuando el escenario de la prueba P15B, ejecutar el comando en el Equipo
B:
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::estadoSensorTH i 1
Esperar la respuesta.
Ahora ejecutar:
snmpget -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::estadoSensorTH.0
Esperar la segunda respuesta del agente.
Criterio
Resultado
En las dos respuestas del agente, el OID estadoSensorTH tiene el valor ‘1’.
Funciona
No Funciona
34
35
Desarrollo de sensor de temperatura gestionable
Archivo de log
P16B.log
Archivo log de trap
Nombre
Cambiar el valor máximo de temperatura aceptable a uno ID
no válido.
Prueba
P17B
Propósito
El sensor de temperatura y humedad toma lecturas en un rango de temperaturas
de -40ºC a 80ºC. Por lo tanto, los OID que marcan la temperatura
máxima/mínima aceptable tienen que encontrarse dentro de este rango. En esta
prueba se intentarán introducir valores de temperatura fuera de este rango.
Prerrequisitos
En el Equipo A, ejecutar el programa del agente con el comando
sudo ./agente-snmp_pyv3-int.py
Pasos
Primero, ejecutar el comando en el Equipo B:
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::maxTemperatura.0 i 90
Esperar la respuesta.
Segundo, ejecutar este otro comando en Equipo B:
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::maxTemperatura.0 i -60
Esperar la respuesta.
Criterio
Las respuestas, en sus valores devueltos, deben devolver el valor original que
tenía el OID como si no hubiera sido modificado.
Resultado
Funciona
No Funciona
Archivo de log
P17B.log
Archivo log de trap
Nombre
Cambiar el valor mínimo de temperatura aceptable a uno ID
no válido.
Prueba
P18B
Propósito
El sensor de temperatura y humedad toma lecturas en un rango de temperaturas
de -40ºC a 80ºC. Por lo tanto, los OID que marcan la temperatura
máxima/mínima aceptable tienen que encontrarse dentro de este rango. En esta
prueba se intentarán introducir valores de temperatura fuera de este rango.
Prerrequisitos
En el Equipo A, ejecutar el programa del agente con el comando
sudo ./agente-snmp_pyv3-int.py
Pasos
Primero, ejecutar el comando en el Equipo B:
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::minTemperatura.0 i 90
35
36
Anexos
Esperar la respuesta.
Segundo, ejecutar este otro comando en Equipo B:
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::minTemperatura.0 i -60
Esperar la respuesta.
Criterio
Las respuestas, en sus valores devueltos, deben devolver el valor original que
tenía el OID como si no hubiera sido modificado.
Resultado
Funciona
No Funciona
Archivo de log
P18B.log
Archivo log de trap
Nombre
Cambiar el valor máximo de humedad aceptable a uno no ID
válido.
Prueba
P19B
Propósito
El sensor de temperatura y humedad toma lecturas en un rango de humedad de
0% a 100%. Por lo tanto, los OID que marcan la humedad máxima/mínima
aceptable tienen que encontrarse dentro de este rango. En esta prueba se
intentarán introducir valores de humedad fuera de este rango.
Prerrequisitos
En el Equipo A, ejecutar el programa del agente con el comando
sudo ./agente-snmp_pyv3-int.py
Pasos
Primero, ejecutar el comando en el Equipo B:
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::maxHumedad.0 i 110
Esperar la respuesta.
Segundo, ejecutar este otro comando en Equipo B:
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::maxHumedad.0 i -20
Esperar la respuesta.
Criterio
Las respuestas, en sus valores devueltos, deben devolver el valor original que
tenía el OID como si no hubiera sido modificado.
Resultado
Funciona
No Funciona
Archivo de log
P19B.log
Archivo log de trap
36
37
Desarrollo de sensor de temperatura gestionable
Nombre
Cambio de valor mínimo de humedad aceptable a uno no ID
válido.
Prueba
P20B
Propósito
El sensor de temperatura y humedad toma lecturas en un rango de humedad de
0% a 100%. Por lo tanto, los OID que marcan la humedad máxima/mínima
aceptable tienen que encontrarse dentro de este rango. En esta prueba se
intentarán introducir valores de humedad fuera de este rango.
Prerrequisitos
En el Equipo A, ejecutar el programa del agente con el comando
sudo ./agente-snmp_pyv3-int.py
Pasos
Primero, ejecutar el comando en el Equipo B:
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::minHumedad.0 i 110
Esperar la respuesta.
Segundo, ejecutar este otro comando en Equipo B:
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::minHumedad.0 i -20
Esperar la respuesta.
Criterio
Las respuestas, en sus valores devueltos, deben devolver el valor original que
tenía el OID como si no hubiera sido modificado.
Resultado
Funciona
No Funciona
Archivo de log
P20B.log
Archivo log de trap
Nombre
Cambar el estado de la bombilla, apagado y encendido.
Propósito
Hacer dos cambios de valor del OID estadoBombillaLuz que determina el estado
de la bombilla, primero apagándola y luego encendiéndola.
Prerrequisitos
En el Equipo A, ejecutar el programa del agente con el comando
ID
Prueba
P21B
sudo ./agente-snmp_pyv3-int.py
En el Equipo B, ejecutar
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::estadoBombillaLuz.0 i 1
y comprobar que la bombilla está encendida.
Pasos
Ejecutar el comando en el Equipo B:
37
38
Anexos
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::estadoBombillaLuz.0 i 0
Esperar la respuesta. Comprobar que la bombilla se ha apagado.
Ahora, ejecutar:
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::estadoBombillaLuz.0 i 1
Esperar la respuesta. Comprobar que la bombilla se ha vuelto a encender.
Criterio
La bombilla se apaga con el primer comando y se enciende con el segundo.
Resultado
Funciona
No Funciona
Archivo de log
P21B.log
Archivo log de trap
Nombre
Apagado de bombilla y poner temporizador a 3 minutos.
ID
Prueba
P22B
Propósito
Prerrequisitos
En el Equipo A, ejecutar el programa del agente con el comando
sudo ./agente-snmp_pyv3-int.py
Apagar la bombilla:
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::estadoBombillaLuz.0 i 0
Pasos
Ejecutar el comando en el Equipo B para poner el temporizador a 3 minutos:
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIOMIB::temporizadorBombillaEncendida.0 i 3
Esperar 1 minuto y consultar el temporizador y el estado de la bombilla:
snmpget -m +TERRARIO-MIB -v 2c -c private
192.168.1.110 temporizadorBombillaEncendida.0
snmpget -m +TERRARIO-MIB -v 2c -c private
192.168.1.110 estadoBombillaLuz.0
Esperar 2 minutos y consultar el temporizador y el estado de la bombilla:
snmpget -m +TERRARIO-MIB -v 2c -c private
192.168.1.110 temporizadorBombillaEncendida.0
snmpget -m +TERRARIO-MIB -v 2c -c private
192.168.1.110 estadoBombillaLuz.0
38
39
Desarrollo de sensor de temperatura gestionable
Criterio
La bombilla se mantiene encendida hasta que pasan 3 minutos. El temporizador
va disminuyendo su valor con cada minuto que pasa.
Resultado
Funciona
No Funciona
Archivo de log
P22B.log
Archivo log de trap
Nombre
Poner un segundo temporizador para la bombilla.
ID
Prueba
P23B
Propósito
Prerrequisitos
En el Equipo A, ejecutar el programa del agente con el comando
sudo ./agente-snmp_pyv3-int.py
Apagar la bombilla:
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIO-MIB::estadoBombillaLuz.0 i 0
Pasos
Programar un temporizador de bombilla a 3 minutos:
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIOMIB::temporizadorBombillaEncendida.0 i 3
Comprobar que ciertamente, está encendida la bombilla y puesto el temporizador
a 3 minutos.
snmpget -m +TERRARIO-MIB -v 2c -c private
192.168.1.110 temporizadorBombillaEncendida.0
snmpget -m +TERRARIO-MIB -v 2c -c private
192.168.1.110 estadoBombillaLuz.0
Programar un segundo temporizador con el actual aún activo.
snmpset -v 2c -m +TERRARIO-MIB -c private
192.168.1.110 TERRARIOMIB::temporizadorBombillaEncendida.0 i 3
Esperar la respuesta.
Criterio
Resultado
La respuesta muestra los minutos restantes del primer temporizador y no el nuevo
valor dado. El agente debe registrar los sucesos en el log y se encontrará un
mensaje de advertencia “WARNING::Temporizado bombilla existente no
finalizado”.
Funciona
No Funciona
39
40
Anexos
Archivo de log
P23B.log
Nombre fichero de log
Archivo log de trap
P01B.log
11/02/2017 12:55:12 PM -- INFO::
11/02/2017 12:55:12 PM -- INFO::.
11/02/2017 12:55:12 PM -- INFO::..
11/02/2017 12:55:12 PM -- INFO::Fecha y hora de inicio 11-02-2017 12:55:12 PM
11/02/2017 12:55:12 PM -- INFO::
11/02/2017 12:55:12 PM -- INFO::'compruebagpio' pin 17 NO ENCONTRADO - result is 0
11/02/2017 12:55:13 PM -- INFO::'iniciagpio' pin17 EXPORTADO...
11/02/2017 12:55:13 PM -- INFO::'compruebagpio' pin 4 NO ENCONTRADO - result is 0
11/02/2017 12:55:13 PM -- INFO::'iniciagpio' pin4 EXPORTADO...
11/02/2017 12:55:15 PM -- INFO::Arrancando agente...
11/02/2017 12:55:15 PM -- INFO::Escrita Informacion Agente Disps...
11/02/2017 12:55:15 PM -- INFO::SensorLuz puesto a funcionar...
11/02/2017 12:55:19 PM -- INFO::SensorTH puesto a funcionar...
11/02/2017 12:55:19 PM -- INFO::'compruebagpio' pin17 ENCONTRADO...
11/02/2017 12:59:53 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 1, 0)
11/02/2017 12:59:53 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 2, 0)
11/02/2017 12:59:54 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 3, 0)
11/02/2017 12:59:54 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 4, 0)
11/02/2017 12:59:54 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 5, 0)
11/02/2017 12:59:54 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 6, 0)
11/02/2017 12:59:54 PM -- INFO::'compruebagpio' pin17 ENCONTRADO...
11/02/2017 12:59:54 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 7, 0)
11/02/2017 12:59:55 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 8, 0)
11/02/2017 12:59:55 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 9, 0)
11/02/2017 12:59:55 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 10, 0)
11/02/2017 12:59:55 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 1, 0)
11/02/2017 12:59:55 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 2, 0)
11/02/2017 12:59:55 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 3, 0)
11/02/2017 12:59:55 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 4, 0)
11/02/2017 12:59:55 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 5, 0)
11/02/2017 12:59:55 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 6, 0)
11/02/2017 12:59:56 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 1, 0)
40
41
Desarrollo de sensor de temperatura gestionable
11/02/2017 12:59:56 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 2, 0)
11/02/2017 12:59:56 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 3, 0)
11/02/2017 12:59:56 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 4, 0)
11/02/2017 12:59:56 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 6, 0)
11/02/2017 12:59:56 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 8, 0)
11/02/2017 12:59:56 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 9, 0)
11/02/2017 12:59:56 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 11, 0)
11/02/2017 12:59:56 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 1, 0)
11/02/2017 12:59:57 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 2, 0)
11/02/2017 12:59:57 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 3, 0)
Nombre fichero de log
P02B.log
11/02/2017 01:15:16 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 1, 0)
11/02/2017 01:15:17 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 2, 0)
11/02/2017 01:15:19 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 3, 0)
11/02/2017 01:15:20 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 4, 0)
11/02/2017 01:15:21 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 5, 0)
11/02/2017 01:15:23 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 6, 0)
11/02/2017 01:15:23 PM -- INFO::'compruebagpio' pin17 ENCONTRADO...
11/02/2017 01:15:24 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 7, 0)
11/02/2017 01:15:25 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 8, 0)
11/02/2017 01:15:26 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 9, 0)
11/02/2017 01:15:28 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 10, 0)
11/02/2017 01:15:29 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 1, 0)
11/02/2017 01:15:30 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 2, 0)
11/02/2017 01:15:31 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 3, 0)
11/02/2017 01:15:33 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 4, 0)
11/02/2017 01:15:34 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 5, 0)
11/02/2017 01:15:35 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 6, 0)
11/02/2017 01:15:36 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 1, 0)
11/02/2017 01:15:38 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 2, 0)
11/02/2017 01:15:39 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 3, 0)
11/02/2017 01:15:40 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 4, 0)
41
42
Anexos
11/02/2017 01:15:41 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 6, 0)
11/02/2017 01:15:42 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 8, 0)
11/02/2017 01:15:44 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 9, 0)
11/02/2017 01:15:45 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 11, 0)
11/02/2017 01:15:46 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 1, 0)
11/02/2017 01:15:47 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 2, 0)
11/02/2017 01:15:49 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 3, 0)
Nombre fichero de log
P03B.log
11/02/2017 01:37:08 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 1, 0)
11/02/2017 01:37:26 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 2, 0)
11/02/2017 01:37:32 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 3, 0)
11/02/2017 01:37:37 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 4, 0)
11/02/2017 01:37:41 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 5, 0)
11/02/2017 01:37:59 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 6, 0)
11/02/2017 01:38:00 PM -- INFO::'compruebagpio' pin17 ENCONTRADO...
11/02/2017 01:38:13 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 7, 0)
11/02/2017 01:38:21 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 8, 0)
11/02/2017 01:38:26 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 9, 0)
11/02/2017 01:38:31 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 10, 0)
11/02/2017 01:38:40 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 1, 0)
11/02/2017 01:38:49 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 2, 0)
11/02/2017 01:39:00 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 3, 0)
11/02/2017 01:39:04 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 4, 0)
11/02/2017 01:39:09 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 5, 0)
11/02/2017 01:39:13 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 6, 0)
11/02/2017 01:39:25 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 1, 0)
11/02/2017 01:39:46 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 2, 0)
11/02/2017 01:39:56 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 3, 0)
11/02/2017 01:40:01 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 4, 0)
11/02/2017 01:40:11 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 6, 0)
11/02/2017 01:40:19 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 8, 0)
11/02/2017 01:40:36 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 9, 0)
42
43
Desarrollo de sensor de temperatura gestionable
11/02/2017 01:40:47 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 11, 0)
11/02/2017 01:40:57 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 1, 0)
11/02/2017 01:41:02 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 2, 0)
11/02/2017 01:41:07 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 3, 0)
Nombre fichero de log
P05B.log
11/02/2017 01:49:45 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 1, 2, 0)
11/02/2017 01:49:45 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 1, 2, 0) - OTRO
11/02/2017 01:49:45 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 2, 0)
11/02/2017 01:50:17 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 1, 7, 0)
11/02/2017 01:50:17 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 1, 7, 0) - 0
11/02/2017 01:50:17 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 7, 0)
11/02/2017 01:50:35 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 1, 8, 0)
11/02/2017 01:50:35 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 1, 8, 0) - 0
11/02/2017 01:50:35 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 8, 0)
11/02/2017 01:50:59 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 1, 9, 0)
11/02/2017 01:50:59 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 1, 9, 0) 11/02/2017 01:50:59 PM -- INFO::Nueva IP Introducida 1.1.1.1
11/02/2017 01:50:59 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 9, 0)
11/02/2017 01:51:48 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 1, 10, 0)
11/02/2017 01:51:48 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 1, 10, 0) - 1234
11/02/2017 01:51:48 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 10, 0)
11/02/2017 01:52:20 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 2, 1, 0)
11/02/2017 01:52:20 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 2, 1, 0) - MODELO
11/02/2017 01:52:20 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 1, 0)
11/02/2017 01:52:35 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 2, 2, 0)
11/02/2017 01:52:35 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 2, 2, 0) - 0
11/02/2017 01:52:35 PM -- INFO::SensorLuz parado...
11/02/2017 01:52:35 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 2, 0)
11/02/2017 01:52:55 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 2, 2, 0)
11/02/2017 01:52:55 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 2, 2, 0) - 1
11/02/2017 01:52:55 PM -- INFO::SensorLuz puesto a funcionar...
11/02/2017 01:52:55 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 2, 0)
11/02/2017 01:53:33 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 3, 1, 0)
43
44
Anexos
11/02/2017 01:53:33 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 3, 1, 0) - MODEL
11/02/2017 01:53:33 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 1, 0)
11/02/2017 01:53:52 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 3, 2, 0)
11/02/2017 01:53:52 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 3, 2, 0) - 0
11/02/2017 01:53:52 PM -- INFO::SensorTH parado...
11/02/2017 01:53:52 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 2, 0)
11/02/2017 01:54:22 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 3, 4, 0)
11/02/2017 01:54:22 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 3, 4, 0) - 50
11/02/2017 01:54:22 PM -- INFO::MAX T 50
11/02/2017 01:54:22 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 4, 0)
11/02/2017 01:54:34 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 3, 6, 0)
11/02/2017 01:54:34 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 3, 6, 0) - 45
11/02/2017 01:54:34 PM -- INFO::MIN T 45
11/02/2017 01:54:34 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 6, 0)
11/02/2017 01:55:04 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 3, 9, 0)
11/02/2017 01:55:04 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 3, 9, 0) - 80
11/02/2017 01:55:04 PM -- INFO::MAX H 80
11/02/2017 01:55:04 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 9, 0)
11/02/2017 01:55:23 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 3, 11, 0)
11/02/2017 01:55:23 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 3, 11, 0) - 10
11/02/2017 01:55:23 PM -- INFO::MIN H 10
11/02/2017 01:55:23 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 11, 0)
11/02/2017 02:00:31 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 4, 1, 0)
11/02/2017 02:00:31 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 4, 1, 0) - 34
11/02/2017 02:00:31 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 1, 0)
11/02/2017 02:00:50 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 4, 2, 0)
11/02/2017 02:00:50 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 4, 2, 0) - 0
11/02/2017 02:00:50 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 2, 0)
11/02/2017 02:01:14 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 4, 3, 0)
11/02/2017 02:01:14 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 4, 3, 0) - 3
11/02/2017 02:01:14 PM -- INFO::Iniciado el temporizador
11/02/2017 02:01:14 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 3, 0)
Nombre fichero de log
P09B.log
44
45
Desarrollo de sensor de temperatura gestionable
11/02/2017 04:25:55 PM -- INFO::
11/02/2017 04:25:55 PM -- INFO::.
11/02/2017 04:25:55 PM -- INFO::..
11/02/2017 04:25:55 PM -- INFO::Fecha y hora de inicio 11-02-2017 16:25:55 PM
11/02/2017 04:25:55 PM -- INFO::
11/02/2017 04:25:56 PM -- INFO::'compruebagpio' pin 17 NO ENCONTRADO - result is 0
11/02/2017 04:25:56 PM -- INFO::'iniciagpio' pin17 EXPORTADO...
11/02/2017 04:25:56 PM -- INFO::'compruebagpio' pin 4 NO ENCONTRADO - result is 0
11/02/2017 04:25:57 PM -- INFO::'iniciagpio' pin4 EXPORTADO...
11/02/2017 04:25:59 PM -- INFO::Escrita Informacion Agente Disps...
11/02/2017 04:25:59 PM -- INFO::SensorLuz puesto a funcionar...
11/02/2017 04:26:00 PM -- INFO::Arrancando agente...
11/02/2017 04:26:00 PM -- INFO::SensorTH puesto a funcionar...
11/02/2017 04:26:00 PM -- INFO::'compruebagpio' pin17 ENCONTRADO...
11/02/2017 04:26:25 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 1, 0)
11/02/2017 04:26:39 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 1, 7, 0)
11/02/2017 04:26:39 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 1, 7, 0) - 1
11/02/2017 04:26:39 PM -- INFO::Reiniciando agente...
11/02/2017 04:26:39 PM -- INFO::SensorTH parado...
11/02/2017 04:26:39 PM -- INFO::SensorLuz parado...
11/02/2017 04:26:39 PM -- INFO::Cerrando agente...
11/02/2017 04:26:44 PM -- INFO::
11/02/2017 04:26:44 PM -- INFO::.
11/02/2017 04:26:44 PM -- INFO::..
11/02/2017 04:26:44 PM -- INFO::Fecha y hora de inicio 11-02-2017 16:26:44 PM
11/02/2017 04:26:44 PM -- INFO::
11/02/2017 04:26:44 PM -- INFO::'compruebagpio' pin 17 NO ENCONTRADO - result is 0
11/02/2017 04:26:44 PM -- INFO::'iniciagpio' pin17 EXPORTADO...
11/02/2017 04:26:44 PM -- INFO::'compruebagpio' pin 4 NO ENCONTRADO - result is 0
11/02/2017 04:26:45 PM -- INFO::'iniciagpio' pin4 EXPORTADO...
11/02/2017 04:26:47 PM -- INFO::Escrita Informacion Agente Disps...
11/02/2017 04:26:47 PM -- INFO::SensorLuz puesto a funcionar...
11/02/2017 04:26:48 PM -- INFO::SensorTH puesto a funcionar...
11/02/2017 04:26:48 PM -- INFO::Arrancando agente...
11/02/2017 04:26:49 PM -- INFO::'compruebagpio' pin17 ENCONTRADO...
45
46
Anexos
11/02/2017 04:26:54 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 1, 0)
Nombre fichero de log
P10B.log
11/02/2017 04:26:54 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 1, 0)
11/02/2017 04:43:57 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 3, 4, 0)
11/02/2017 04:43:57 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 3, 6, 0)
11/02/2017 04:43:57 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 3, 9, 0)
11/02/2017 04:43:57 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 3, 11, 0)
11/02/2017 04:43:57 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 3, 4, 0) - 10
11/02/2017 04:43:57 PM -- INFO::MAX T 10
11/02/2017 04:43:57 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 3, 6, 0) - 30
11/02/2017 04:43:57 PM -- INFO::MIN T 30
11/02/2017 04:43:57 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 3, 9, 0) - 20
11/02/2017 04:43:57 PM -- INFO::MAX H 20
11/02/2017 04:43:57 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 3, 11, 0) - 70
11/02/2017 04:43:57 PM -- INFO::MIN H 70
11/02/2017 04:43:57 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 4, 0)
11/02/2017 04:43:57 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 6, 0)
11/02/2017 04:43:57 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 9, 0)
11/02/2017 04:43:57 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 11, 0)
11/02/2017 04:44:05 PM -- INFO::Enviado trap trapMaxTemperatura-21
11/02/2017 04:44:07 PM -- INFO::Enviado trap trapMinTemperatura-21
11/02/2017 04:44:08 PM -- INFO::Enviado trap trapMaxHumedad-52
11/02/2017 04:44:09 PM -- INFO::Enviado trap trapMinHumedad-52
Nombre fichero de log
P10B-trap.log
NET-SNMP version 5.7.2.1 AgentX subagent connected
4880
NET-SNMP version 5.7.2.1
<UNKNOWN> [UDP: [192.168.1.110]:161->[192.168.1.151]:162]: Trap , DISMAN-EVENTMIB::sysUpTimeInstance = Timeticks: (116764) 0:19:27.64, SNMPv2-MIB::snmpTrapOID.0 =
OID: TERRARIO-MIB::maxTemperatura.0, TERRARIO-MIB::temperatura = INTEGER: 21
46
47
Desarrollo de sensor de temperatura gestionable
grados C
<UNKNOWN> [UDP: [192.168.1.110]:161->[192.168.1.151]:162]: Trap , DISMAN-EVENTMIB::sysUpTimeInstance = Timeticks: (116921) 0:19:29.21, SNMPv2-MIB::snmpTrapOID.0 =
OID: TERRARIO-MIB::minTemperatura.0, TERRARIO-MIB::temperatura = INTEGER: 21
grados C
<UNKNOWN> [UDP: [192.168.1.110]:161->[192.168.1.151]:162]: Trap , DISMAN-EVENTMIB::sysUpTimeInstance = Timeticks: (117052) 0:19:30.52, SNMPv2-MIB::snmpTrapOID.0 =
OID: TERRARIO-MIB::maxHumedad.0, TERRARIO-MIB::humedad = INTEGER: 52 %
<UNKNOWN> [UDP: [192.168.1.110]:161->[192.168.1.151]:162]: Trap , DISMAN-EVENTMIB::sysUpTimeInstance = Timeticks: (117175) 0:19:31.75, SNMPv2-MIB::snmpTrapOID.0 =
OID: TERRARIO-MIB::minHumedad.0, TERRARIO-MIB::humedad = INTEGER: 52 %
Nombre fichero de log
P11B.log
11/02/2017 06:57:24 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 1, 10, 0)
11/02/2017 06:57:24 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 1, 10, 0) - 9999
11/02/2017 06:57:24 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 10, 0)
11/02/2017 06:58:39 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 1, 8, 0)
11/02/2017 06:58:39 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 1, 8, 0) - 1
11/02/2017 06:58:39 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 8, 0)
11/02/2017 06:58:49 PM -- INFO::Enviado trap trapMaxTemperatura-25
11/02/2017 06:58:50 PM -- INFO::Enviado trap trapMinTemperatura-25
11/02/2017 06:58:51 PM -- INFO::Enviado trap trapMaxHumedad-46
11/02/2017 06:58:52 PM -- INFO::Enviado trap trapMinHumedad-46
Nombre fichero de log
P11B-trap.log
1406
NET-SNMP version 5.7.2.1
<UNKNOWN> [UDP: [192.168.1.110]:161->[192.168.1.151]:9999]: Trap , DISMAN-EVENTMIB::sysUpTimeInstance = Timeticks: (15195) 0:02:31.95, SNMPv2-MIB::snmpTrapOID.0 =
OID: TERRARIO-MIB::maxTemperatura.0, TERRARIO-MIB::temperatura = INTEGER: 25
grados C
<UNKNOWN> [UDP: [192.168.1.110]:161->[192.168.1.151]:9999]: Trap , DISMAN-EVENTMIB::sysUpTimeInstance = Timeticks: (15321) 0:02:33.21, SNMPv2-MIB::snmpTrapOID.0 =
OID: TERRARIO-MIB::minTemperatura.0, TERRARIO-MIB::temperatura = INTEGER: 25
grados C
<UNKNOWN> [UDP: [192.168.1.110]:161->[192.168.1.151]:9999]: Trap , DISMAN-EVENTMIB::sysUpTimeInstance = Timeticks: (15441) 0:02:34.41, SNMPv2-MIB::snmpTrapOID.0 =
47
48
Anexos
OID: TERRARIO-MIB::maxHumedad.0, TERRARIO-MIB::humedad = INTEGER: 46 %
<UNKNOWN> [UDP: [192.168.1.110]:161->[192.168.1.151]:9999]: Trap , DISMAN-EVENTMIB::sysUpTimeInstance = Timeticks: (15563) 0:02:35.63, SNMPv2-MIB::snmpTrapOID.0 =
OID: TERRARIO-MIB::minHumedad.0, TERRARIO-MIB::humedad = INTEGER: 46 %
Nombre fichero de log
P12B.log
11/02/2017 06:58:49 PM -- INFO::Enviado trap trapMaxTemperatura-25
11/02/2017 06:58:50 PM -- INFO::Enviado trap trapMinTemperatura-25
11/02/2017 06:58:51 PM -- INFO::Enviado trap trapMaxHumedad-46
11/02/2017 06:58:52 PM -- INFO::Enviado trap trapMinHumedad-46
11/02/2017 06:58:57 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 1, 8, 0)
11/02/2017 06:58:57 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 1, 8, 0) - 0
11/02/2017 06:58:57 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 1, 8, 0)
Nombre fichero de log
P13B.log
11/02/2017 07:20:33 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 2, 2, 0)
11/02/2017 07:20:33 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 2, 2, 0) - 0
11/02/2017 07:20:33 PM -- INFO::SensorLuz parado...
11/02/2017 07:20:33 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 2, 0)
11/02/2017 07:20:50 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 2, 0)
Nombre fichero de log
P14B.log
11/02/2017 07:20:33 PM -- INFO::SensorLuz parado...
11/02/2017 07:20:33 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 2, 0)
11/02/2017 07:20:50 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 2, 0)
11/02/2017 07:22:37 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 2, 2, 0)
11/02/2017 07:22:37 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 2, 2, 0) - 1
11/02/2017 07:22:37 PM -- INFO::SensorLuz puesto a funcionar...
48
49
Desarrollo de sensor de temperatura gestionable
11/02/2017 07:22:37 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 2, 0)
11/02/2017 07:23:10 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 2, 2, 0)
Nombre fichero de log
P15B.log
11/02/2017 07:30:40 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 2, 0)
11/02/2017 07:30:48 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 3, 2, 0)
11/02/2017 07:30:48 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 3, 2, 0) - 0
11/02/2017 07:30:48 PM -- INFO::SensorTH parado...
11/02/2017 07:30:48 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 2, 0)
11/02/2017 07:31:41 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 2, 0)
Nombre fichero de log
P16B.log
11/02/2017 07:30:48 PM -- INFO::SensorTH parado...
11/02/2017 07:30:48 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 2, 0)
11/02/2017 07:31:41 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 2, 0)
11/02/2017 07:33:34 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 3, 2, 0)
11/02/2017 07:33:34 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 3, 2, 0) - 1
11/02/2017 07:33:34 PM -- INFO::SensorTH puesto a funcionar...
11/02/2017 07:33:34 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 2, 0)
Sensor AM2302 listo!
11/02/2017 07:33:44 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 2, 0)
Nombre fichero de log
P17B.log
11/02/2017 07:38:48 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 4, 0)
11/02/2017 07:38:56 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 3, 4, 0)
11/02/2017 07:38:56 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 3, 4, 0) - 90
49
50
Anexos
11/02/2017 07:38:56 PM -- INFO::MAX T 10
11/02/2017 07:38:56 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 4, 0)
11/02/2017 07:39:33 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 3, 4, 0)
11/02/2017 07:39:33 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 3, 4, 0) - -60
11/02/2017 07:39:33 PM -- INFO::MAX T 10
11/02/2017 07:39:33 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 4, 0)
Nombre fichero de log
P18B.log
11/02/2017 07:43:41 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 6, 0)
11/02/2017 07:43:55 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 3, 6, 0)
11/02/2017 07:43:55 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 3, 6, 0) - 90
11/02/2017 07:43:55 PM -- INFO::MIN T 30
11/02/2017 07:43:55 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 6, 0)
11/02/2017 07:44:00 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 3, 6, 0)
11/02/2017 07:44:00 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 3, 6, 0) - -60
11/02/2017 07:44:00 PM -- INFO::MIN T 30
11/02/2017 07:44:00 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 6, 0)
Nombre fichero de log
P19B.log
11/02/2017 07:46:15 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 9, 0)
11/02/2017 07:50:53 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 3, 9, 0)
11/02/2017 07:50:53 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 3, 9, 0) - 110
11/02/2017 07:50:53 PM -- INFO::MAX H 20
11/02/2017 07:50:53 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 9, 0)
11/02/2017 07:51:03 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 3, 9, 0)
11/02/2017 07:51:03 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 3, 9, 0) - -20
11/02/2017 07:51:03 PM -- INFO::MAX H 20
11/02/2017 07:51:03 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 9, 0)
50
51
Desarrollo de sensor de temperatura gestionable
Nombre fichero de log
P20B.log
11/02/2017 07:53:13 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 11, 0)
11/02/2017 07:53:23 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 3, 11, 0)
11/02/2017 07:53:23 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 3, 11, 0) - 110
11/02/2017 07:53:23 PM -- INFO::MIN H 70
11/02/2017 07:53:23 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 11, 0)
11/02/2017 07:53:28 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 3, 11, 0)
11/02/2017 07:53:28 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 3, 11, 0) - -20
11/02/2017 07:53:28 PM -- INFO::MIN H 70
11/02/2017 07:53:28 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 3, 11, 0)
Nombre fichero de log
P21B.log
11/02/2017 07:55:23 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 2, 0)
11/02/2017 07:56:02 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 4, 2, 0)
11/02/2017 07:56:02 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 4, 2, 0) - 0
11/02/2017 07:56:03 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 2, 0)
11/02/2017 07:56:11 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 4, 2, 0)
11/02/2017 07:56:11 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 4, 2, 0) - 1
11/02/2017 07:56:11 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 2, 0)
Nombre fichero de log
P22B.log
11/02/2017 08:44:35 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 4, 3, 0)
11/02/2017 08:44:35 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 4, 3, 0) - 3
11/02/2017 08:44:35 PM -- INFO::Iniciado el temporizador
11/02/2017 08:44:36 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 3, 0)
11/02/2017 08:44:47 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 2, 0)
11/02/2017 08:44:50 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 3, 0)
11/02/2017 08:45:36 PM -- INFO::'controlminutos' en minuto 2
11/02/2017 08:45:43 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 3, 0)
11/02/2017 08:47:03 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 3, 0)
11/02/2017 08:47:36 PM -- INFO::APAGADA BOMBILLA EN TIEMPO: 1486842456.174689
11/02/2017 08:47:47 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 3, 0)
51
52
Anexos
Nombre fichero de log
P23B.log
11/02/2017 08:28:24 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 4, 3, 0)
11/02/2017 08:28:24 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 4, 3, 0) - 3
11/02/2017 08:28:24 PM -- INFO::Iniciado el temporizador
11/02/2017 08:28:24 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 3, 0)
11/02/2017 08:28:31 PM -- INFO:: Testing var...(1, 3, 6, 1, 4, 1, 54321, 4, 3, 0)
11/02/2017 08:28:31 PM -- INFO:: Setting var...(1, 3, 6, 1, 4, 1, 54321, 4, 3, 0) - 6
11/02/2017 08:28:31 PM -- WARNING::Temporizado bombilla existente no finalizado
11/02/2017 08:28:31 PM -- INFO:: Getting var...(1, 3, 6, 1, 4, 1, 54321, 4, 3, 0)
52
Descargar