Tabla de contenido:

Reciba un correo electrónico de notificación cuando un canal en ThingSpeak no se actualizó durante un tiempo: 16 pasos
Reciba un correo electrónico de notificación cuando un canal en ThingSpeak no se actualizó durante un tiempo: 16 pasos

Video: Reciba un correo electrónico de notificación cuando un canal en ThingSpeak no se actualizó durante un tiempo: 16 pasos

Video: Reciba un correo electrónico de notificación cuando un canal en ThingSpeak no se actualizó durante un tiempo: 16 pasos
Video: Google I/O, Microsoft Build, Especialidad de IoT en CódigoFacilito - #FNews 2024, Noviembre
Anonim
Reciba un correo electrónico de notificación cuando un canal de ThingSpeak no se haya actualizado durante un tiempo
Reciba un correo electrónico de notificación cuando un canal de ThingSpeak no se haya actualizado durante un tiempo

Historia de fondo

Tengo seis invernaderos automatizados repartidos por Dublín, Irlanda. Al usar una aplicación de teléfono móvil personalizada, puedo monitorear e interactuar de forma remota con las funciones automatizadas en cada invernadero. Puedo abrir / cerrar las ventanas manualmente cuando la temperatura es demasiado alta / baja; Puedo iniciar / detener el riego cuando la humedad del suelo es demasiado baja / alta; y puedo encender / apagar el ventilador de ventilación cuando la humedad del aire es demasiado alta / baja. O simplemente puedo cambiar el sistema al modo automático, y el cerebro Arduino se encargará de las verduras. Puede encontrar más detalles sobre este proyecto aquí:

La conexión remota a las placas Arduino en los seis invernaderos es posible con la ayuda de dongles USB GPRS, uno en cada ubicación (compré el mío desde aquí https://www.aliexpress.com/item/Unlocked-New-Huawei-E353 -E353s-2-Con-Antena-3G-Módem-USB-21-6-Mbps-HSPA-Mobile / 32979630201.html? Spm = a2g0s.9042311.0.0.44cb4c4dzVUThU). Como es el caso de la conexión de datos móviles (al menos en Dublín), se cae al azar, a veces durante unos minutos, a veces puede ser durante un par de horas. Si la conexión se cae, el Arduino está programado para reiniciar el dongle USB cada 10 minutos, para que intente iniciar una nueva conexión. A veces, sin embargo, debido a razones (aún) desconocidas, incluso si la conexión de datos GPRS está nuevamente activada, el Arduino (y el escudo Ethernet adjunto) no se da cuenta del evento. Este es el momento en el que necesito ir a esa ubicación específica y restablecer manualmente todo el sistema.

Cuando la conexión de datos se cae en algún lugar, quería que me notificaran por correo electrónico lo antes posible, para poder vigilar esa ubicación específica. Como la comunicación entre la aplicación del teléfono y Arduino se lleva a cabo a través de un servicio en línea proporcionado por https://thingspeak.com, hasta hace poco (y hasta el 31 de marzo de 2019), esto era posible mediante el uso de otro servicio proporcionado por https:// ifttt.com/discover, y estableciendo un ThingHTTP y un React en cada canal, monitoreando el hecho de si ese canal en particular no se ha actualizado durante algún tiempo. Sin embargo, según un correo electrónico que recibí de Google, a partir del 31 de marzo de 2019, debido al incumplimiento de sus requisitos de privacidad de datos actualizados (https://cloud.google.com/blog/products/g-suite/elevating-user -confianza-en-nuestros-ecosistemas-api), el acceso a algunos datos en mi cuenta de Google ya no estará disponible para IFTTT, y como en mi caso, el correo electrónico era el único recurso al que tenía acceso IFTTT, entendí que la notificación el servicio descrito anteriormente dejaría de funcionar.

Por lo tanto, aquí estamos, implementando una solución alternativa para que las notificaciones por correo electrónico sigan llegando cuando la conexión de datos en mis ubicaciones se interrumpe. Esto todavía usa las funciones ThingHTTP y React en mis canales, solo el enlace a IFTTT se volvió a apuntar a Google Drive. Entonces, aparte del hardware (Arduino en mi caso) que pueda tener comunicándose con su cuenta de ThingSpeak, necesitará crear una cuenta de Google, que en caso de que aún no tenga una… ¡y comencemos!

Paso 1:

Imagen
Imagen

En Google Drive

Primero, en Google Drive (https://drive.google.com) necesitamos crear una hoja de cálculo y un formulario simple. Abra su Google Drive y haga clic en Nuevo - Hojas de cálculo de Google - Hoja de cálculo en blanco.

Paso 2:

Imagen
Imagen

Cambié el nombre de la mía "Ubicación abajo de la hoja de cálculo". Luego vaya a Herramientas - Crear un formulario.

Paso 3:

Imagen
Imagen

Cambié el nombre del formulario como "Formulario de ubicación abajo", y cambié "Pregunta sin título" a "Estado", y el tipo de "Opción múltiple" a "Respuesta corta".

Paso 4:

Imagen
Imagen

Luego eliminé la opción para recopilar direcciones de correo electrónico: haga clic en "Cambiar configuración" y desmarqué todas las opciones en la ventana que apareció. Haga clic en "Guardar".

Paso 5:

Imagen
Imagen

Cierre la pestaña del navegador actual que contiene su formulario y debería volver a la pestaña principal de Google Drive, donde debería tener tanto el formulario como la hoja de cálculo que acaba de crear. Abra la hoja de cálculo y vaya a "Archivo - Compartir …". En la nueva ventana, haga clic en "Avanzado"

Paso 6:

Imagen
Imagen

A continuación, haga clic en "Cambiar …" junto a la etiqueta "Privado: solo usted puede acceder".

Paso 7:

Imagen
Imagen

y cambie a "Activado: cualquier usuario con el vínculo" y también a "Puede editar"

Paso 8:

Imagen
Imagen

Haga clic en "Guardar" y "Listo" para volver a su hoja de cálculo. Una vez allí, haga clic en "Archivo - Publicar en la web …", y luego haga clic en "Publicar" y "Aceptar" para la ventana de diálogo. Cierre la ventana "Publicar en la web".

Mientras todavía está en la hoja de cálculo, haga clic en "Formulario - Ir al formulario en vivo". Haga clic con el botón derecho del mouse (estoy usando el navegador Google Chrome) y elija "Ver código fuente de la página".

Paso 9:

Imagen
Imagen

En la nueva página que se abre, busque "acción de formulario" y luego ubique el enlace que se parece a https://docs.google.com/forms/d/e/XXXXXXXXXXXXXXXXXXXXXXXXX/formResponse. Seleccione ese enlace, cópielo y péguelo en algún documento de texto. Lo usará para formar el enlace final que debe ingresarse en ThingHTTP para ThingSpeak.

Paso 10:

Imagen
Imagen

Regrese a la vista de origen de su formulario y ahora busque "entrada". Busque y seleccione el texto completo, algo así como "entrada. XXXXX". Cópielo y péguelo en el mismo documento de texto que el anterior. Ahora puede cerrar la vista de origen de su formulario de Google.

Paso 11:

Imagen
Imagen

En el nuevo documento de texto (donde ahora tiene el enlace y la entrada que pegamos antes), cree el enlace final, que debería verse así

docs.google.com/forms/d/e/XXXXXXXXXXXXXXXXXXXXXXXXX/formResponse?entry. XXXXX = UBICACIÓN + NOMBRE & enviar = Enviar

En mi caso, "UBICACIÓN + NOMBRE" sería reemplazado por el nombre real de cada ubicación en particular que necesito monitorear. El correo electrónico de notificación por correo electrónico que recibiré cuando la conexión se interrumpa contendrá este texto, para que sepa exactamente qué ubicación tiene problemas. De hecho, este texto se enviará como contenido de texto breve para el campo "estado" en el formulario de Google. El "& submit = Submit" enviará el formulario silenciosamente, sin la necesidad de realizar ninguna otra acción, cuando ThingHTTP y React lo invoquen.

Finalmente, necesitamos agregar un script que enviará automáticamente una notificación por correo electrónico cada vez que se agregue una nueva entrada en la hoja de cálculo. Abra la hoja de cálculo y luego haga clic en "Herramientas - Editor de secuencias de comandos". En la nueva ventana que se abre, agregue el siguiente código (con los cambios necesarios para reflejar sus necesidades):

función newEntryNotification (e)

{

tratar

{

var timestamp = e.values [0];

var ubicación = e.values [1];

var mensaje = ubicación + 'la ubicación está ABAJO / n' + marca de tiempo;

MailApp.sendEmail ("SU DIRECCIÓN DE CORREO ELECTRÓNICO", "¡Atención, ubicación ABAJO!", Mensaje);

}

atrapar (e)

{

MailApp.sendEmail ("SU DIRECCIÓN DE CORREO ELECTRÓNICO", "Error - ¡Atención, ubicación ABAJO!", Mensaje electrónico);

}

}

Reemplace el texto "SU DIRECCIÓN DE CORREO ELECTRÓNICO" por la dirección de correo electrónico a la que debe enviarse la notificación y el mensaje de notificación real, si así lo desea.

Paso 12:

Imagen
Imagen

Este script debe activarse cuando se agregó una nueva entrada en la hoja de cálculo. Mientras está en la misma ventana (con el código de secuencia de comandos anterior), haga clic en el icono "cronómetro" en la barra de herramientas - "Activadores del proyecto actual". Se le pedirá que nombre su proyecto (llamé al mío "locationDown"), y se abrirá otra pestaña del navegador, informando que no se encontraron resultados (no activadores). Haga clic en "crear un nuevo disparador".

Paso 13:

Imagen
Imagen

En la nueva ventana, elija "De la hoja de cálculo" para "Seleccionar origen del evento"; "Al enviar el formulario" para "Seleccionar tipo de evento"; "Notificarme inmediatamente" para "Configuración de notificación de fallas". Haga clic en "Guardar". Se le pedirá que inicie sesión en su cuenta de Google y "Permitir" para que este activador acceda a su cuenta cuando sea necesario.

Paso 14:

Imagen
Imagen

Ahora debería tener un disparador en la lista de disparadores, que estará vinculado al script que creamos anteriormente. Por lo tanto, al insertar nuevos datos en la hoja de cálculo (utilizando el enlace del formulario automatizado y el método silencioso descrito anteriormente), el activador llamará inmediatamente al script, que enviará una notificación a la dirección de correo electrónico proporcionada, que contiene el mensaje elegido.

Hemos terminado en el lado de Google Drive y ahora nos estamos moviendo a ThingSpeak.

Paso 15:

Imagen
Imagen

En ThingSpeak Inicie sesión en su cuenta (https://thingspeak.com/login), vaya a "Aplicaciones - ThingHTTP" y luego haga clic en "New ThingHTTP". Asígnele un nombre (he elegido el nombre real de cada ubicación; "MyLocationName" para el propósito de este tutorial), y en el campo "URL", pegue el enlace de su archivo de texto, el que parece

docs.google.com/forms/d/e/XXXXXXXXXXXXXXXXXXXXXXXXX/formResponse?entry. XXXXX = UBICACIÓN + NOMBRE & enviar = Enviar

Deje todos los demás campos como están y haga clic en "Guardar ThingHTTP".

Paso 16:

Imagen
Imagen

Luego vaya a "Aplicaciones - Reaccionar" y haga clic en "Nueva reacción". Ponle un nombre (de nuevo, he elegido el nombre de la ubicación seguido de la palabra "reaccionar", pero puedes elegir el nombre que quieras); "Sin verificación de datos" para "Tipo de condición"; "Cada 10 minutos" para "Frecuencia de prueba"; el nombre del canal que desea monitorear para actualizaciones, para "If Channel"; la hora en que el canal no se ha actualizado (he elegido 15 minutos), porque "no se ha actualizado durante"; "ThingHTTP" para "Acción"; "MyLocationName" para "luego realizar ThingHTTP"; "Ejecutar la acción solo la primera vez que se cumpla la condición", ya que solo quiero recibir una notificación una vez. Esto se restablecerá cuando el canal se actualice nuevamente con nuevos datos entrantes. Haga clic en "Guardar React" y ya está.

A partir de ahora, cuando su canal no se haya actualizado durante 15 minutos (u otro tiempo, dependiendo de lo que haya elegido), React detectará esa excepción que activará ThingHTTP, que a su vez creará silenciosamente una nueva entrada en su hoja de cálculo. El disparador y el script en la hoja de cálculo de Google lo tomarán desde allí, como ya se explicó anteriormente.

Recomendado: