Todas las colecciones
Para Desarrolladores
Shelly
Para desarrolladores - Contar activaciones de shelly y almacenarlos en base de datos
Para desarrolladores - Contar activaciones de shelly y almacenarlos en base de datos
Xavier Guereque avatar
Escrito por Xavier Guereque
Actualizado hace más de una semana

Requisitos previos:

  • Dispositivo Shelly registrado en la app Shelly Cloud

  • Servidor web

  • Servidor de base de datos

En este ejemplo se utilizó un Shelly1 y ShellyPro1, un servidor Apache con Php y una base de datos MySQL Server. Simularemos el conteo de las veces que se abren varias puertas mediante un contacto seco.

En primer paso crearemos una base de datos:

CREATE DATABASE `shelly` /*!40100 DEFAULT CHARACTER SET utf8 */;

luego una tabla donde se registrarán los datos:

CREATE TABLE `data_input` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fecha` date DEFAULT NULL,
`hora` time DEFAULT NULL,
`tipo` varchar(20) COLLATE utf8_spanish_ci DEFAULT NULL,
`dato` varchar(20) COLLATE utf8_spanish_ci,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

posterior a esto, creamos un archivo público en nuestro servidor web (index.php), en este ejemplo utilizamos php para registrar el dato:


<?php

$host="localhost";
$user="root";
$password="kuyfuigf54453d";
$database = "otros";
$port = 3306;

date_default_timezone_set("America/Mexico_City");
$fecha = date("Y/m/d", time());
$hora = date("H:i:s", time());

$dato = $_GET["nombre"];

$conexion = mysqli_connect($host, $user, $password, $database, $port);
mysqli_set_charset($conexion, 'utf8');

$query = "insert into otros.data_input (fecha,hora,tipo,dato) values ('$fecha','$hora','shelly','$dato')";
mysqli_query($conexion,$query);

http_response_code(200);

Pasos en Shelly1 (primera generación, sólo http)

Abrimos la app Shelly Cloud, damos touche sobre el dispositivo a contabilizar, luego famos touche en Acciones de E/S y habilitamos Botón encedido (URLs)

Nota: Sólo contabilizará las veces que fué precionado el botón de switch físico (representado en color verde en el diagrama de arriba).

En url envidos cuando se completa la acción (máximo 5) escribiremos la url pública de nuestro archivo index.php

En este ejemplo es:

http://ingenieria.syscom.mx/shelly/?nombre=puerta1

donde:

  • http://ingenieria.syscom.mx/shelly/ es la ruta del archivo index.php, (acepta sólo http)

  • nombre es la variable tipo GET que utilizaremos en el archivo index.php

  • puerta1 es el dato que se almacenará en la base de datos

Esto debemos hacerlo en cada dispositivo que queramos contabilizar, siempre cambiando el valor de nombre. Ejemplos:

Para la puerta 2

http://ingenieria.syscom.mx/shelly/?nombre=puerta2

Para la puerta 3

http://ingenieria.syscom.mx/shelly/?nombre=puerta3

Para la puerta 4

http://ingenieria.syscom.mx/shelly/?nombre=puerta4

Pasos en ShellyPro1 (segunda generación, http/https)

Abrimos la app de Shelly Cloud, y damos touche sobre el dispositivo a contabilizar, luego damos touche en Acciones de E/S y touche en añadir.

Tecleamos un nombre y seleccionamos una hora de inicio y fin en a cual queremos que cuente, en este ejemplo lo dejamos en 00:00 hasta 00:00 para que siempre esté realizando esta acción.

En este ejemplo contaremos las veces que se activa el dispositivo, pero existen 7 detonadores de la acción.

En url activas escribiremos la url pública de nuestro archivo index.php

En este ejemplo es:

https://ingenieria.syscom.mx/shelly/?nombre=puerta1

donde:

  • https://ingenieria.syscom.mx/shelly/ es la ruta del archivo index.php, (acepta http y https)

  • nombre es la variable tipo GET que utilizaremos en el archivo index.php

  • puerta1 es el dato que se almacenará en la base de datos

Esto debemos hacerlo en cada dispositivo que queramos contabilizar, siempre cambiando el valor de nombre. Ejemplos:

Para la puerta 2

https://ingenieria.syscom.mx/shelly/?nombre=puerta2

Para la puerta 3

https://ingenieria.syscom.mx/shelly/?nombre=puerta3

Para la puerta 4

https://ingenieria.syscom.mx/shelly/?nombre=puerta4

Resultado

Así se verán los datos almacenados en crudo:

SELECT * FROM shelly.data_input order by id desc limit 10;

y así aplicándole una clausula count():

select tipo, dato, count(dato) as 'cantidad'
from shelly.data_input where tipo = 'shelly' and fecha between '2023-01-23' and '2023-01-23'
group by tipo, dato;

¿Ha quedado contestada tu pregunta?