Instalacion de Grafana en Windows


Grafana es un software libre basado en licencia de Apache 2.0,​ que permite la visualización y el formato de datos métricos. Permite crear cuadros de mando y gráficos a partir de múltiples fuentes, incluidas bases de datos de series de tiempo como Graphite, InfluxDB y OpenTSDB​ Originalmente comenzó como un componente de Kibana y que luego le fue realizado una bifurcación.​

Lanzado en 2013 por Grafana Labs,Grafana es una de las soluciones de monitoreo de más rápido crecimiento en uso en 2019. Es multiplataforma sin ninguna dependencia y también se puede implementar con Docker. Está escrito en lenguaje Go y tiene un HTTP API completo. Además de administrar cuadros de mando clásicos (adiciones, eliminaciones, favoritos), Grafana ofrece compartir un cuadro de mando actual mediante la creación de un enlace o una instantánea estática del mismo.

Todos los paneles de control y las fuentes de datos están vinculados a una organización, y los usuarios de la aplicación están vinculados a organizaciones a través de roles.Evita que los usuarios sobrescriban accidentalmente un panel de control. Existe una protección similar cuando se crea un nuevo panel de control cuyo nombre ya existe. La herramienta tambien ofrece la posibilidad de configurar alertas.

Es una solución de dashboarding que conecta a una amplia variedad de orígenes de datos (la mayoría de las bases de datos de series temporales) con el fin de visualizar datos casi en tiempo real siendo uilizada por muchas grandes empresas como el CERN, Digital Ocean o PayPal,Grafana también se utiliza en pequeñas y medianas corporaciones dispuestas a tener retroalimentación sobre la salud de su infraestructura.

Descarga del archivo Grafana desde el sitio web oficial

Para Windows, abra su navegador web y vaya a la página de descargas de Grafana.

Seleccione “Windows” en la lista de sistemas operativos disponibles y haga clic en “Descargar el instalador“.

Grafana for Windows download option

La descarga de MSI debe comenzar.

Cuando haya terminado, simplemente ejecute el instalador msi.

Grafana MSI on Windows

Instalar Grafana en Windows

Al ejecutar el MSI, esto es lo que debería ver.

Grafana installation first step

Haga clic en “Siguiente“.

Grafana installation second step

Acepte los términos del contrato de licencia y haga clic en“Siguiente”.

Grafana installation third  step

Asegúrese de que el sistema operativo Grafana (el servidor Grafana) y la opción Grafana como servicio estén correctamente seleccionados.

Si este es el caso, haga clic en “Siguiente” y en “Instalar

Grafana installation fourth step

En este punto, la instalación de Grafana debe comenzar.

Si en algún momento se le solicita una excepción de firewall, asegúrese de autorizar a Grafana a realizar cambios en el sistema.

Cuando se realiza la instalación, esta es la pantalla que debería ver.

Grafana installation last step

¡Impresionante! Acaba de instalar Grafana en Windows.

Compruebe que su servicio Grafana se está ejecutando

Antes de ir más lejos, debe comprobar que el servidor Grafana se está ejecutando correctamente como un servicio de Windows.

En muchos casos, es posible que el puerto predeterminado de Grafana (3000) ya esté tomado, lo que impide que Grafana se inicie correctamente.

Como consecuencia, así es como puede comprobar que se está ejecutando.

En el menú de búsqueda de Windows, escriba “Servicios” y abra la ventana Servicios.

Windows services panel

En la ventana Servicios, desplácese hasta llegar al servicio Grafana.

Grafana service on Windows

 El servicio Grafana puede comprobar que ya está en funcionamiento.

Iniciar Grafana v6 Web UI

Si el servicio se está ejecutando correctamente, debería poder acceder a la interfaz de usuario de Grafana v6.

Como recordatorio, Grafana se ejecuta de forma predeterminada en el puerto 3000.

Como consecuencia, abra un navegador web y vaya a http://localhost:3000.

Esta es la pantalla que debería ver.

Grafana v6.3 default web UI on Windows

En Grafana, las credenciales predeterminadas son admin (como nombre de usuario) y admin (como contraseña) de forma predeterminada.

En la siguiente ventana, se le pedirá que cambie su contraseña. Elija una contraseña segura para evitar brechas de seguridad.

Grafana change password window

Cuando lo haya hecho pulsar en “Save“.

Ahora debería ver la pantalla predeterminada para Grafana v6.3 en Windows.

Grafana welcome default screen

Antes de crear sus propios paneles, hay algunos pasos de configuración que debe realizar para una nueva instancia.

Definición de su propio archivo de configuración

En las últimas distribuciones grafana para Windows, el servicio es lanzado por NSSM (que es un administrador de servicios para Windows).

De forma predeterminada, Grafana se basa en los archivos de configuración ubicados en la carpeta conf del directorio de instalación.

Mine se encuentra en C:\Program Files\GrafanaLabs\grafana como ejemplo.

Este es el contenido de la carpeta conf.

Grafana configuration folder on Windows

De forma predeterminada, Grafana va a usar el contenido del archivo .ini predeterminado, pero vamos a sobrescribir eso para tener nuestro propio archivo de configuración personalizado.

En caso de que estemos teniendo algunos problemas con nuestro propio archivo de configuración, podemos volver al archivo predeterminado fácilmente.

Haga una copia del archivo predeterminado y asígnele el nombre “custom.ini”

Adding a custom configuration file

Al ejecutar la instalación MSI, Grafana va a almacenar un ejecutable de NSSM en la carpeta GrafanaLabs de la carpeta de instalación.

NSSM executable on Windows

Abra una instancia de Powershell en el equipo como administradory vaya a esta carpeta.

No olvide las comillas alrededor de la ruta de acceso, de lo contrario obtendrá una excepción de Powershell.

$ cd "C:\Program Files\GrafanaLabs"
$ .\nssm.exe edit grafana

Se debe abrir una ventana similar a esta.

NSSM window edit service

Al final de la variable path, agregue una marca –config con el nombre del archivo de configuración que acabamos de crear.

Adding a custom argument on NSSM
Argumentos: --config conf\custom.ini

pulsar en “Edit Service” y debderia ver el siguinte mensajesuccess message.

Service Grafana edit successfully

Reinicie el servicio y asegúrese de que Grafana sigue ejecutándose correctamente (http://localhost:3000)

Avtivar sign-up en Grafana

De forma predeterminada, la creación de la cuenta se encuentra en http://localhost:3000/signup en la instancia de Grafana.

En Grafana v6.3, el registro de la cuenta está deshabilitado de forma predeterminada.

Sign up option on Grafana

Sin embargo, es posible que desee habilitar esta opción en su servidor Grafana, si autoriza a los invitados a tener una cuenta para mostrar algunos paneles especiales.

Para habilitar el registro, diríjase al archivo de configuración personalizado.ini (ubicado en la carpeta conf) y vaya a la sección [usuarios] del archivo.

Modifique la entrada allow_sign_up a true..

Allowing user sign up on Grafana

Para comprobar que todo funciona correctamente, vaya a http://localhost:3000/signup e intente crear una cuenta.

Grafana sign up page

Haga clic en “Registrarse” y debe ser redirigido a la página principal.

Grafana user panel

Activar acceso anonimo

De forma predeterminada, el acceso anónimo está deshabilitado en Grafana.

El acceso anónimo significa que cualquier usuario no autenticado puede examinar la instancia de Grafana, al menos para la organización predeterminada que se les ha asignado.

Grafana anonymous access option

Si va http://localhost:3000, se le redirigirá a la pantalla de inicio de sesión si es un usuario anónimo.

Para cambiar eso, edite el archivo de configuración personalizado.ini y edite la sección [auth.anonymous].

Grafana anonymous access configuration file

Reinicie el servicio Grafana y busque http://localhost:3000 como usuario anónimo (en modo privado, por ejemplo).

Ahora debe tener un permiso viewer para los paneles permitidos.

Access allowed for anonymous users on Grafana on Windows

Aquí hay una selección de artículos que debe leer para mejorar con Grafana :

Seguridad en IOT


El término Internet de las Cosas, en inglés Internet of Things ,hace referencia a la digitalización de todo tipo de dispositivos:

  • Sensores y actuadores 
  • Objetos comunes como vehículos
  • Cámaras de grabación
  • implantes médicos, ropa, etc. 

La conectividad digital de estos dispositivos permite enviar y recibir información para realizar tareas que hasta no hace mucho podrían parecer imposibles como monitorizar el estado de una flota de vehículos ,ver las cámaras de seguridad de la empresa desde un Smartphone, controlar cualquier electrodoméstico de forma remota, etc

Crecimiento

La consultora Gartner  pronostica que para el año 2021 habrá unos 25 mil millones de dispositivos IoT conectados en sectores tan dispares como:

  • Domótica 
  • Salud
  • Transporte y logística 
  • Seguridad y vigilancia

Se podría decir que con el IoT se inicia una revolución en la forma en que vivimos y trabajamos.Sus aplicaciones son muy diversas: monitorización salud , domótica en edificios y ciudades, aplicaciones en industria 4.0.

El acceso a la tecnología ha democratizado el IoT   reduciendo los costes  y con capacidades  avanzadas

  • REDUCIDOS COSTES:
    Los chips para dar inteligencia a los objetos
    Los módulos para dar conectividad a los objetos
    Los entorno de desarrollo para programarlo
    Los costes de hacer un prototipo
  • CAPACIDADES AVANZADAS
    Soluciones de gran capacidad a bajos coste
    Infinidad de tecnologías de comunicación
    Enorme comunidad desarrolladora

El    problema  viene  con algunas aplicaciones de IOT donde nos cuestionamos  hasta que punto los riesgos son mayores que las ventajas  y marabillas en el uso de esta tecnologías: es decir Seguridad vs Confort o lo que es lo mismo RIESGO VS RECOMPENSA

Estas son algunas  brechas que debemos superar:

  • Interacción humana de baja fricción
  • Identificación única de dispositivos
  • Autenticación de dispositivos
  • Asociación dispositivos-usuarios
  • Naturaleza de los datos

Ademas por si fuera poco, tenemos  grandes  retos  y desfios

  • Capacidades limitadas de encriptación
  • Recursos limitados (RAM/ROM)
  • Limitada sincronización
  • El fw debe ser actualizado tiempo al tiempo

Como vemos en la grafica de abajo  pues una de las grandes barreras  para adaptar el IOT es la seguridad:

 

Y es que el mal nunca descansa , como lo demuestran los innumerables ejemplos de  ataques:

Caso Mirai
La botnet Mirai ha sido utilizada en algunos de los ataques del tipo DDoS más grandes y bruscos de la historia, dentro de los que se incluyen el realizado al sitio web de Brian Krebs , y al proveedor Dyn en octubre de 2016.

Mirai es un malware de la familia de las botnets destinada a infectar los equipos conformantes del IoT.​ El objetivo principal de este malware es la infección de routers y cámaras IP, usando estos para realizar ataques de tipo DDoS

Amenazas para el propio dispositivo
Los dispositivos IoT pueden ser una presa fácil para los ciberdelincuentes que buscan este tipo de dispositivos como punto de entrada a las redes de las empresas o a otros puntos que se encuentran más protegidos.

Además, los propios dispositivos IoT no son inmunes a las amenazas pues los ciberdelincuentes pueden enfocar sus esfuerzos en atacar su funcionalidad, siendo la denegación de servicio uno de los principales peligros, dejándolos inoperativos o no accesibles.

Amenazas para el propio dispositivo
Las amenazas a los dispositivos IoT no se reducen a las derivadas de su conectividad a Internet. Muchos de estos aparatos cuentan también con capacidades de conexión inalámbrica como wifi, Bluetooth o Zigbee, lo que puede suponer otro vector de ataque para ciberdelincuentes si se encuentran dentro de su rango de acción

+Amenazas para el dispositivo

Consecuencias graves para la seguridad como:

  • Infectarlos para formar parte de una red zombi que los utilicen para realizar ciberataques, por ejemplo, de denegación de servicio distribuida o DDoS
  • Utilizarlos como puente o punto de entrada para atacar otros equipos de la misma red, para robar información o comprometer servidores o para realizar otras acciones delictivas
  • Reconfigurarlos para inhabilitarlos o cambiar sus condiciones de utilización

Como resumen , estos algunos de los vectores de ataque para los dispositivos IoT:

  • Fallos en la implementación
  • Interceptar datos de tránsito(ataque Man in the Middle)
  • Acceso a la plataforma de administración
  • Vulnerabilidad en el software
  • Configuraciones por defecto
  • Acceso físico al dispositivo
  • Los propios usuarios por ingeniería social

 

Medidas de seguridad

En los dispositivos IoT no se suelen utilizar las soluciones habituales de ciberseguridad como antivirus o cortafuegos; por ello, las siguientes medidas de seguridad están destinadas a proteger el propio dispositivo y, por consiguiente, toda la organización:

  • Acceso seguro al dispositivo (evitar conf. por defecto)
  • Comunicaciones seguras
  • Actualizaciones de seguridad
  • Dispositivos de seguridad perimetral
  • Seguridad física ( ej.: puertos, usb,sd, etc)
  • Concienciación en seguridad de los usuarios

Y  estas son algunas recomendaciones de seguridad:

  • Se comprobará cada cierto tiempo la visibilidad de los dispositivos IoT en Internet con herramientas específicas como Shodan.
  • Si el dispositivo lo permite se habilitará un registro de logs que guarde los eventos que se producen como accesos, cambios de contraseña, actualizaciones, etc.
  • En caso de ser posible, se ha de habilitar algún mecanismo de notificación cuando se produce un evento que pueda afectar a la seguridad del dispositivo.
  • Se monitorizarán de forma centralizada los dispositivos IoT para comprobar su correcto funcionamiento y que no se producen eventos que puedan afectar a su seguridad o a la de la empresa.
  • Se comprobará regularmente la web del fabricante en busca de nuevas actualizaciones de seguridad tanto de firmware como de software siempre que no exista un método alternativo que avise sobre ello
  • Uso de herramientas adicionales (ejemplo https://www.shodan.io)

DISEÑO en IOT:  REGLAS DE DISEÑO

En caso de estar diseñando un nuevo dispositivo IoT , algunos principios que de deberiamos  seguir

Seguridad:

  • CONSTRUIR CON SEGURIDAD INCLUIDA ( NO PUEDE SER AÑADIDA DESPUES)
  • Mantener mecanismos de seguridad simples
  • Usar estándares de seguridad
  • La oscuridad no provee seguridad
  • Encriptar datos sensibles en reposo y en transito
  • Usar bloques criptográficos bien estudiados
  • Identidad y gestión de acceso deben ser parte del diseño
  • Desarrollar un modelo de amenazas realista

Servicios de red

  • ASEGURARSE DE QUE DATOS Y CREDENCIALES SON ENCRIPTADOS MIENTRAS ESTAÑEN TRANSITO
  • USAR CANALES ENCRIPTADOS SEGUROS
  • USAR OPTIMAS LONGITUDES DE CLAVES Y BUENOS ALGORITMOS ( CURVA ELÍPTICA PROVEE UNA ENCRIPTACIÓN EFICIENTE)
  • PROTEGERSE CONTRA ATAQUES REPETITIVOS
  • Encriptación del transporte:
    • ASEGURAR SOLAMENTE LOS PUERTOS ABIERTOS NECESARIOS.
    • ASEGURAR QUE LOS SERVICIOS NO SON VULNERABLES.
    • DESPORDAMIENTO DE BUFEFR Y ATAQUES FUZZING.
    • ASEGURAR QUE LOS SERVICIOS NO SON VULNERABLES A ATAQUES DDNS

Privacidad como parte del diseño

  • Recolectar solamente los datos mínimos para el funcionamiento del dispositivo
  • Asegurarse que datos sensibles recogidos son protegidos con encriptación
  • Asegúrese de que el dispositivo protege adecuadamente los datos personales

Web, movilidad e interfaces cloud

  • No permita credenciales por defecto
  • Asumir accesos al dispositivos internamente y externamente
  • Las credenciales no deberían almacenarse en ficheros planos de texto ni viajar por canales no encriptados
  • Protegerse contra XSS,CSRF,SQLi
  • Implementar un sistema IAM/IRM
  • Protegerse contra la enumeración de cuentas e implementar el bloqueo de cuentas
  • Asegúrese de que su fw no contenga credenciales codificadas ni datos confidenciales
  • Utilice un canal seguro para transmitir el fw durante las actualizaciones
  • Asegúrese de que la actualización esté firmada y verificada antes de permitir la actualización.
  • No envíe la clave pública con el fw, use un hash
  • Asegúrese de que sus repositorios SVN/ GIT no contengan las claves privadas

SOFWARE/ FIRMWARE

  • Seguridad Física
  • Asegurar que el acceso físico a su dispositivo está controlado
  • Los puertos USB o SD accesibles pueden ser eficientes
  • ¿Se puede desmontar fácilmente para acceder al almacenamiento interno (RAM / ROM)?
  • Si los datos locales son confidenciales, considere la posibilidad de cifrarlos

 

Photo by Sebastian Palomino on Pexels.com

DECALOGO SOBRE RECOMENDACIONES DE SEGURIDAD

  1. Minimizar el uso de dispositivos IoT especialmente en empresas utilizando únicamente los que sean estrictamente necesarios.
  2. No usar, en la medida de lo posible, dispositivos IoT que transmitan información o cuya gestión se realice desde servidores externos aunque sea del fabricante.
  3. Comprobar las configuraciones por defecto del dispositivo, especialmente antes de permitir su acceso desde Internet y, de ser posible, elegir aquellos dispositivos que permitan un elevado
    nivel de seguridad.
  4. Si no es posible establecer configuraciones de seguridad robustas no se permitirá el acceso al dispositivo desde Internet y preferiblemente tampoco desde la red local.
  5. Establecer siempre contraseñas de acceso y administración robustas. Siempre que sea posible se forzará su uso.
  6. Establecer siempre contraseñas de acceso y administración robustas. Siempre que sea posible se forzará su uso.
  7. Mantener actualizado el dispositivo a la última versión.
  8. Mantener abiertos a Internet únicamente aquellos servicios que sean necesarios para su administración remota y los que no lo sean se deben deshabilitar. También hay que cambiar los puertos de los servicios cuando sea posible.
  9. Utilizar dispositivos de seguridad perimetral como cortafuegos para proteger la seguridad del dispositivo IoT.
    DECALOGO SOBRE RECOMENDACIONES DE SEGURIDAD
  10. Emplear mecanismos que permitan asegurar la autenticidad,integridad y confidencialidad de las comunicaciones especialmente si estas se realizan vía wifi.
  11. Auditar periódicamente los dispositivos IoT.
  12. Concienciar especialmente a los empleados sobre la importancia de la ciberseguridad en el día a día de su trabajo y en la administración y uso de este tipo de dispositivos.
  13. Comprobar la seguridad física del dispositivo y aplicar
    las medidas necesarias que eviten manipulaciones de terceros
    DECALOGO SOBRE RECOMENDACIONES DE SEGURIDAD

Fuentes
HTTPS://WWW.GARTNER.COM
HTTPS://WWW.INCIBE.ES
HTTPS://WWW.COMPUTING.ES
HTTPS://UNAALDIA.HISPASEC.COM
HTTPS://BLOG.F-SECURE.COM
HTTPS://SOLOELECTRONICOS.COM

 

 

 

Controlar un potenciometro con Arduino Iot Cloud


En este post vamos avanzar en las posibilidades de la placa MKR1000 (o MKR 1010) a la nube de Arduino IoT  de modo que podremos hacer cosas mas complejas mas allá de encender o apagar un led  a distancia ( como vimos en este post ). En esta ocasión como ejemplo de la gran potencia de de esta solución  vamos a   leer en remoto las posición de un potenciometro  a través de Internet utilizando el sitio web de Arduino IoT Cloud.

Si le  interesa  como hacerlo, vera que es muy sencillo,  pues como vamos a ver  casi todo esta hecho, pero antes, volvamos a  ver  las semejanzas   y diferencias de ambas placas,  y después veremos paso a paso como lograrlo.

Arduino MKR1000

Arduino MKR1000 es una placa diseñada para ofrecer una solución práctica y rentable para cualquiera que busque agregar conectividad WiFi a sus proyectos con una experiencia mínima en redes.  Su precio no es excesivo  teniendo en cuenta que integra la conectividad  wifi (unos 38€ en Amazon).

El diseño incluye un circuito de carga Li-Po que permite que el Arduino MKR1000 funcione con una  batería o 5V externos, cargando la batería Li-Po mientras funciona con energía externa: el cambio de una fuente a otra se realizara automáticamente  y por tanto no tendremos que preocuparnos de nada más.

El MKR1000 tiene un procesador Arm Cortex-M0 + de 32 bits  corriendo a 2.4ghz ,  y cuenta con  el rico conjunto habitual de interfaces de E / S . Sin duda uno de su punto fuertes  es que integra  WiFi de baja potencia con un chip criptográfico para una comunicación segura.

Una de las grandes ventajas  es que puede programarlo utilizando el software Arduino (IDE) al que estamos  todos familiarizados  siendo muy  fácil de usar.

Todas estas características hacen de esta placa la opción preferida para los proyectos emergentes que funcionan con baterías de IoT en un factor de forma compacto.

 

 Como   se puede  ver en la imagen de  mas abajo , los pines disponibles son casi los mismos que los que solemos tener en un Arduino convencional  : los pines A0  a A6   para entradas  y salidas analógicas , los pines 0 al 14  para entradas salidas binarias y los típicos de alimentación externa(VIN,VCC 5v y GND)   , la referencia (AREF )  y  RESET.

 

Si le interesa esta placa la puede comprar en Amazon por unos 38€

Arduino MKR1010

Hablamos ahora de una placa muy similar a la anterior   algo mas barata que la la Mkr1000 ( unos  33€  en Amazon , es decir unos 5€ mas barato que la MKR1000)

Esta placa  está compuesta por tres bloques principales:

  • Microchip ATSAMD21 MCU basado en un procesador Arm Cortex-M0 
  • Serie u-blox NINA-W10 de baja potencia 2.4GHz IEEE 802.11 b / g / n Wi-Fi ECC508 CryptoAuthentication
  • El diseño incluye un Li-Po Circuito de carga que permite que Arduino MKR WiFi 1010 funcione con batería o 5V externos, cargando la batería Li-Po mientras funciona con energía externa. El cambio de una fuente a otra se realiza automáticamente.

Como  vemos , la gran diferencia  es  el Microcontrolador que es menos potente  pues  cuenta con el  Microchip ATSAMD21 (procesador Arm Cortex-M0 +)  en contraste  con el Arm Cortex-M0 + de 32 bits  corriendo a 2.4ghz del MKR100.

Respecto a la conectividad,  es similar al  MKR1000  contando con WiFi u-blox NINA-W102 (ESP32)

La alimentación se puede hacer con una fuente de alimentación externa de 5v DC  bien por  USB  o bien por el pin VIN , pero  cuenta   además  con conexión para Batería compatible (*) Li-Po de celda única, 3,7 V, 700 mAh  siendo el voltaje mínimo de funcionamiento del circuito 3,3 V .

 

Como   se puede  ver en la imagen de  mas abajo , los pines disponibles son casi los mismos que los que solemos tener en un Arduino convencional  ( y los mismo que el  MKR100)   : los pines A0  a A6   para entradas  y salidas analógicas , los pines 0 al 14  para entradas salidas binarias y los típicos de alimentación externa(VIN,VCC 5v y GND)   , la referencia (AREF )  y  RESET.

Si le interesa esta placa la puede comprar en Amazon por unos 33€

Agregar un potenciómetro 

Ahora que tenemos confirmación de todo lo que funciona ( como vimos en este post ), podemos agregar nuevas propiedades a nuestra Cosa. Vincularemos la nueva propiedad a un potenciómetro que necesita ser añadido al circuito. El potenciómetro está conectado a la alimentación y a tierra a través de sus respectivos pines y el pin de señal está conectado al Pin analógico A1 de la placa Arduino.

Adding an analog sensor to our breadboard

Para agregar una nueva propiedad vamos a proceder como lo hicimos anteriormente: mientras que en nuestra vista de propiedades de Thing, hagamos clic en el botón + y cree una propiedad denominada .

Establezca el tipo en Int con valor mínimo y valor máximo establecido en 0 y 270 respectivamente.

El permiso debe establecerse en Solo lectura y la propiedad debe actualizarse cuando cambie el valor;

Asimismo podemos establecer un valor Delta mayor que cero si queremos introducir alguna tolerancia para la actualización (por ejemplo: si establecemos Delta en 5, el valor de propiedad se actualizará a través de la nube solo cuando la diferencia entre el nuevo valor y el valor antiguo sea mayor que 5, de lo contrario se omitirá el cambio).

Al hacer clic en CREATE, se agregará la nueva propiedad a nuestra cosa y nos traerá de vuelta a la vista de edición de la propiedad.

Aunque no lo vemos, nuestro boceto se ha actualizado para reflejar los cambios, así que hagamos clic en EDIT CODE para volver al editor.

Mirando thingProperties.h, nos daremos cuenta de que se han añadido dos nuevas líneas:

int angle;

Esta linea declara la variable que representa la propiedad que acabamos de crear

ArduinoCloud.addProperty(angle, READ, ON_CHANGE, NULL, 5.000000);

Este código conecta la variable a su propiedad correspondiente, con permisos READ (es decir: no vamos a poder establecerla desde el panel). Debido al permiso de solo lectura, no se generará ninguna función de devolución de llamada y el penúltimo argumento del método se establece en . El último argumento representa el valor Delta descrito anteriormente.

Para hacer que el potenciómetro interactúe con la nube necesitamos definir el pin al que está conectado:

#define POTENTIOMETER_PIN A1

Luego, en la función, leemos la entrada analógica del potenciómetro y la mapeamos a la variable. De este modo, al girar el potenciómetro se refleja, se cambia el valor de propiedad correspondiente en el panel de la nube.

int angleSensor = analogRead(POTENTIOMETER_PIN);
angle = map(angleSensor, 0, 1023, 0, 270);

Vamos a subir nuestro boceto de nuevo y ver lo que sucede en el tablero de nuestra cosa cuando giramos la perilla del potenciómetro. Deberíamos ver el valor subiendo y bajando de 0 a 270 (esto puede variar con la calidad de construcción del potenciómetro).

Por último, vamos a agregar una última propiedad.  Esta nueva propiedad se asociará a un botón pulsador agregado al circuito anterior como se muestra en los esquemas siguientes: un pin del botón está conectado al riel de alimentación positivo (Vcc), el otro pin está conectado al pin digital 5 (a través del cable blanco) y a tierra a través de una resistencia desplegable de 10k.

Esta configuración fuerza un nivel lógico LOW en nuestro pin cuando el botón está en reposo, mientras que rutea Vcc a través cuando se presiona (nivel lógico HIGH).

Desde el editor, vaya a IOT CLOUD y cree una nueva propiedad denominada , con Tipo ON/OFF (Boolean),Solo lectura de permisos y Actualizar cuando cambie el valor. toggle

Una vez más EDIT CODE y volveremos al editor. Un vistazo rápido a thingProperties.h mostrará que una nueva variable se ha definido y asociado a su propiedad a través de .ToggleArduinoCloud.addProperty(...)

En nuestro archivo .ino definiremos el nuevo pin y dos variables relacionadas con el estado del botón : es decir el estad actual ( btnState) y el estado anterior(btnPrevState) .btnPrevState es necesario porque queremos que la propiedad se actualice solo una vez cuando se presiona el botón y no cuando se libera.

#define BUTTON_PIN 5
int btnState;
int btnPrevState = 0;

Entonces,es importante destacar   la linea que establece como entrada  este pin para

pinMode(BUTTON_PIN, INPUT);

Y finalmente añadimos estas líneas hacia el final de la loop()

btnState = digitalRead(BUTTON_PIN);
if (btnPrevState == 0 && btnState == 1) {
 toggle = !toggle;
}
btnPrevState = btnState;

Con este sencillo código  el botón actúa como un interruptor y al presionarlo debemos ver el interruptor en la nube cambiando en consecuencia alternando  entre ON y OFF.

En este código hay un pequeño problema  pues como puede adivinar no hay gestión de los rebotes (debounce en ingles  )  , es decir la cantidad de ruido ocurrido tras el flanco cuando actuamos sobre el pulsador(en esencia, en el rango de unos microsegundos la señal es puro ruido) . Todos esos picos pueden provocar disparos múltiples de una interrupción. Disponemos de dos formas de aplicar el rebote :añadiendo dispositivos electrónicos que filtren la señal o modificando nuestro código para eliminar el rebote 

 Vamos a ir más allá y simplificar nuestro código de administración de botones usando una biblioteca adicional.

 Usar una biblioteca de anti-rebotes

El código que hemos visto se basa en variables temporales porque necesitábamos almacenar el estado anterior del botón, lo que no hace que el boceto sea sencillo de implementar  , pero  la cosa se complica con los efectos de los rebotes  o la necesidad  de utilizar varios botones ( que añadiría muchas variables).

Una solución fácil es utilizar una biblioteca de rebote,y vamos a confiar en FTDebouncer que se puede instalar a través del Administrador de bibliotecas.

Simplemente vamos a Bibliotecas desde el menú de la barra lateral, ingresamos “FTDebouncer” en el campo de búsqueda en la parte superior y presionamos Intro: aparecerá la biblioteca y podemos añadirla a nuestro boceto pulsando el botón INCLUIR.

Esto agregará la siguiente línea a la pestaña seleccionada actualmente

#include <FTDebouncer.h>

Antes de esto podemos  reemplazar la definición de variables relacionadas con el estado del botónsetup()

int btnState;
int btnPrevState = 0;

con la declaración de una variableFTDebouncer

FTDebouncer buttons;

a continuación, reemplazar la línea donde inicializamos el pin del botón

pinMode(BUTTON_PIN, INPUT);

con las siguientes dos líneas

buttons.addPin(BUTTON_PIN, LOW);
buttons.init();

Al principio le podemos a añadimos este comando antes de loop()

buttons.update();

y eliminar todo el código escrito previamente relacionado con el botón

btnState = digitalRead(BUTTON_PIN);
if (btnPrevState == 0 && btnState == 1) {
    toggle = !toggle;
}
btnPrevState = btnState;

Finalmente, al final del boceto vamos a añadir una función

void onPinActivated(uint8_t pinNr){
	Serial.println(pinNr);
	toggle = !toggle;
}
void onPinDeactivated(uint8_t pinNr){
	Serial.println(pinNr);
}

Gracias a la biblioteca, se llamará a la función (sólo una vez) cuando se pulse el botón. Cuando esto suceda, le diremos a nuestra propiedad que cambie a su valor opuesto. Si es cierto, se volverá falso y viceversa. Esta acción la realiza el operador “!”,también conocido como LogicalNOToperator.FTDebounceronPinActivated()toggle

Si queremos que se ejecute algún código cuando se suelte el botón, la biblioteca llamará a la siguiente función cuando eso suceda.