Tabla de contenido:

Luces de Ramadán - IOT de automatización del hogar: 6 pasos
Luces de Ramadán - IOT de automatización del hogar: 6 pasos

Video: Luces de Ramadán - IOT de automatización del hogar: 6 pasos

Video: Luces de Ramadán - IOT de automatización del hogar: 6 pasos
Video: Domótica MiCaDo - Introducción a la seguridad en tu hogar. 2024, Mes de julio
Anonim
Luces de Ramadán | IOT de automatización del hogar
Luces de Ramadán | IOT de automatización del hogar

Mientras el Ramadán toca a la puerta, las ciudades de todo el mundo se iluminan y se preparan para el mes de ayuno. Las luces se cuelgan en las plazas públicas y en las calles de la ciudad, así como en las paredes exteriores de las casas iluminadas durante la noche hasta que sale el sol por la mañana.

En este proyecto, me gustaría compartir mi contribución, en la que estoy automatizando la iluminación de estas decoraciones en función de los tiempos de Adhan y agregando esto a mi sistema de hogar inteligente.

Paso 1: Teoría

Básicamente, es más fácil y más aplicable automatizar la iluminación en función de la intensidad de la luz solar, por ejemplo. Sin embargo, me gustaría que esto tuviera el espíritu del mes sagrado, es decir, las luces se encenderán siempre que las personas puedan comer durante el mes de ayuno. En particular, las luces están encendidas desde Maghrib Adhan hasta Fajr Adhan todos los días sin ninguna interacción humana.

Paso 2: diseño

A continuación, enumeraré los requisitos / capacidades de este proyecto:

  • El sistema debería poder procesar automáticamente al arrancar.
  • El sistema debe poder ejecutar periódicamente el algoritmo de decisión (ON / OFF).
  • El sistema debería poder llamar a la API a diario.
  • El sistema debería poder recuperarse de un reinicio no planificado.
  • El sistema debe ejecutar el algoritmo de decisión (ENCENDIDO / APAGADO) al recibir datos al instante.
  • El sistema debe proporcionar un interruptor para activar el modo de piloto automático (modo automático).
  • El sistema debe proporcionar un interruptor para encender y apagar las luces manualmente.
  • Activar el interruptor manual debería poner el modo manual en APAGADO.
  • Cuando el modo automático está encendido, el resultado del algoritmo de decisión debe reflejarse en el interruptor manual encendido / apagado.

Paso 3: Detalles técnicos: la API

Detalles técnicos: la API
Detalles técnicos: la API

Para que la teoría sea aplicable, se requiere conocer el tiempo de Adhan en bases diarias ya que es variable y actuar sobre él para encender / apagar las luces / decoraciones.

Para este propósito, decidí usar una API basada en la ubicación para entregar los datos (tiempo para Adhan)

muslimsalat.com/api/#location

  • Esta API proporciona una variedad de opciones y parámetros de configuración descritos en el enlace de documentación anterior.
  • Se recomienda utilizar su propia API_key, que es gratuita al registrarse.
  • En mi diseño, estoy interesado en una línea de tiempo diaria.
  • La hora devuelta está en formato de 12 horas (AM / PM).
  • En cuanto a la ubicación, deseaba que esta API pudiera proporcionar opciones más precisas para ubicaciones como el sistema de coordenadas geográficas (latitud y longitud). De esta manera, esta API se puede proporcionar con un nombre de ciudad, por ejemplo, y esto es suficiente en la mayoría de los casos. Desafortunadamente, los resultados de mi ciudad específica fueron bastante sesgados en múltiples pruebas y hubo un par de minutos de diferencia al comparar el tiempo de Adhan entre los resultados de API y el tiempo real de Adhan en mi ciudad. Por otro lado, los resultados coincidieron perfectamente cuando proporcioné una ciudad cercana al norte y me apegué a ella.
  • La URL de la API que estoy usando es: https://muslimsalat.com/.json? Key =

Paso 4: Detalles técnicos: hardware

Detalles técnicos: Hardware
Detalles técnicos: Hardware

Para simplificar, dejo el hardware fuera del proceso de sincronización con la API y el cálculo del tiempo al delegar estas operaciones en mi sistema de automatización del hogar. Esto me dará más control si quiero modificar la fuente de la API y el algoritmo de cálculo.

Dicho esto, utilicé un ESP8266 (NodeMCU) para conectarme a la red local a través de WIFI y un módulo de relé como actuador. El NodeMCU usará el protocolo MQTT y escuchará un tema específico para obtener comandos para encender / apagar el relé. ¡Tan simple como eso!

Paso 5: Detalles técnicos: Conexión de los puntos | Automatización del hogar

Detalles técnicos: Conectando los puntos | Automatización del hogar
Detalles técnicos: Conectando los puntos | Automatización del hogar
Detalles técnicos: Conectando los puntos | Automatización del hogar
Detalles técnicos: Conectando los puntos | Automatización del hogar
Detalles técnicos: Conectando los puntos | Automatización del hogar
Detalles técnicos: Conectando los puntos | Automatización del hogar

Mi RaspberryPi tiene una instancia nodada que es capaz de manejar todo lo que necesito para este proyecto. También tiene instalado un servidor MQTT para publicar nuestros mensajes.

Al principio, pensé que podía obtener los datos de la API diariamente a las 9 a.m. y extraer los tiempos de Fajr y Mahgrib Adhan y seguir comparando el tiempo actual con estas variables que son:

cada 30 segundos:

si: Mahgrib <AHORA <Fajr verdadero | enciende las luces | publicar un mensaje ON en el tema de MQTT especificado; de lo contrario: desactivar

Para comparar el tiempo, estoy convirtiendo las horas proporcionadas por la API de hh: mm (AM / PM) a formato de fecha completo estableciendo la parte de la fecha en una fecha insignificante en el historial, por ejemplo (1/1/1970) ya que estamos comparando la hora solo a la hora actual (la parte de la fecha también se convierte).

Desafortunadamente, esto solo funcionará en casos sencillos. Suponga el caso en el que se corta la energía eléctrica o el sistema se reinicia por una razón no planificada. Si este caso ocurre antes de las 12 a. M., Entonces todavía estamos en el lado seguro, pero después de las 12 a. M., Esto fallará en nuestro algoritmo simple.

Para dar un ejemplo, tengamos Magrib Adhan a las 7:30 PM y Fajr a las 4:10 AM. Cuando el sistema se inicia, enviará una nueva solicitud para obtener los datos mencionados anteriormente. Si la hora actual es 1:45 a. M., Esperamos que nuestro algoritmo devuelva verdadero, pero de hecho no lo hará porque 1:45 a. M. Es menor que Fajr (4:10 a. M.) Pero no mayor que Magrib (7:30 p. M.). Esto se debe a que unimos la fecha entre todas las variables. A continuación se muestra la versión final del algoritmo (hasta ahora):

cada 30 segundos:

if ((magrib.getHours ()> = 12 && fajr.getHours () <= 12) || fajr <maghrib) {fajr.setDate (fajr.getDate () + 1); // manejar los días que abarcan endTime if (now.getHours () <= 12) {now.setDate (ahora.getDate () + 1); // manejar los días que abarcan currentTime}} // a continuación se muestra el bloque de código anterior si: Mahgrib <NOW <Fajr true | enciende las luces | publicar un mensaje ON en el tema MQTT especificado else: false | apagar

El flujo completo del proceso está anotado en la imagen de arriba.

En términos de interfaz de usuario, agregué 2 interruptores a la interfaz de usuario / interfaz:

  1. Un interruptor para convertir este proceso en Automático o Manual.
  2. Un interruptor para encender / apagar las luces manualmente.

Paso 6: Conclusión …

El tiempo vuela para nunca ser recordado. Hacer proyectos tan simples de 1 día le permite tomar un respiro en este carril rápido y ayudarlo a revivir sus habilidades blandas con el tiempo.

Intenté tanto en este proyecto para mantenerlo simple y reutilizable en todo el mundo.

Por favor vote por este instructivo si cree que este proyecto se lo merece.

¡Feliz Ramadán!

Recomendado: