Table des matières:

Lumières du Ramadan - Domotique IOT : 6 étapes
Lumières du Ramadan - Domotique IOT : 6 étapes

Vidéo: Lumières du Ramadan - Domotique IOT : 6 étapes

Vidéo: Lumières du Ramadan - Domotique IOT : 6 étapes
Vidéo: Gims se fait recaler de la boutique Dior 😳 #gims #dior 2024, Juillet
Anonim
Lumières du Ramadan | Domotique IOT
Lumières du Ramadan | Domotique IOT

Alors que le Ramadan frappe à la porte, les villes du monde entier s'illuminent et se préparent pour le mois de jeûne. Des lumières sont accrochées sur les places publiques et dans les rues de la ville ainsi que sur les murs extérieurs des maisons éclairées pendant la nuit jusqu'à ce que le soleil se lève le matin.

Dans ce projet, je souhaite partager ma contribution, dans laquelle j'automatise l'éclairage de ces décorations en fonction des temps Adhan et l'ajoute à mon système de maison intelligente.

Étape 1: Théorie

Fondamentalement, il est plus facile et plus applicable d'automatiser l'éclairage en fonction de l'intensité de la lumière du soleil, par exemple. Cependant, j'aimerais que cela ait l'esprit du mois sacré, c'est-à-dire que les lumières s'allumeront tant que les gens seront autorisés à manger pendant le mois de jeûne. En particulier, les lumières sont allumées à partir de Maghrib Adhan jusqu'à Fajr Adhan chaque jour sans aucune interaction humaine.

Étape 2: Concevoir

Ci-dessous, je vais énumérer les exigences/capacités de ce projet:

  • Le système devrait être capable de traiter automatiquement au démarrage.
  • Le système doit être capable d'exécuter périodiquement l'algorithme de décision (ON/OFF).
  • Le système devrait pouvoir appeler l'API quotidiennement.
  • Le système doit pouvoir récupérer après un redémarrage imprévu.
  • Le système doit exécuter l'algorithme de décision (ON/OFF) lors de la réception instantanée des données.
  • Le système doit fournir un interrupteur pour activer le mode pilote automatique (mode automatique).
  • Le système doit fournir un interrupteur pour allumer/éteindre manuellement les lumières.
  • Le déclenchement de l'interrupteur manuel doit mettre le mode manuel sur OFF.
  • Lorsque le mode automatique est activé, le résultat de l'algorithme de décision doit être reflété sur l'interrupteur manuel ON/OFF.

Étape 3: Détails techniques: l'API

Détails techniques: l'API
Détails techniques: l'API

Pour rendre la théorie applicable, il est nécessaire de connaître l'heure Adhan sur des bases quotidiennes depuis sa variable et d'agir dessus pour allumer/éteindre les lumières/décorations.

Pour cela, j'ai décidé d'utiliser une API géolocalisée pour servir les données (le temps d'Adhan)

muslimsalat.com/api/#location

  • Cette API fournit une variété d'options et de paramètres de configuration décrits dans le lien de documentation ci-dessus.
  • Il est recommandé d'utiliser votre propre API_key qui est gratuite lors de l'inscription.
  • Dans ma conception, je m'intéresse à une chronologie quotidienne.
  • L'heure renvoyée est au format 12 heures (AM/PM).
  • En ce qui concerne l'emplacement, j'ai souhaité que cette API puisse fournir des options plus précises pour des emplacements tels que le système de coordonnées géographiques (latitude et longitude). Pour cette manière, cette API peut être fournie avec un nom de ville par exemple et cela suffit largement dans la plupart des cas. Malheureusement, les résultats de ma ville spécifique étaient assez biaisés dans plusieurs tests et il y avait quelques minutes de différence lors de la comparaison de l'heure d'Adhan entre les résultats de l'API et l'heure réelle d'Adhan dans ma ville. En revanche, les résultats étaient parfaitement assortis lorsque j'ai fourni une ville proche au nord et je m'y suis tenu !
  • L'URL de l'API que j'utilise est:

Étape 4: Détails techniques: Matériel

Détails techniques: matériel
Détails techniques: matériel

Pour plus de simplicité, je laisse le matériel en dehors du processus de synchronisation avec l'API et du calcul du temps en déléguant ces opérations à mon système domotique. Cela me donnera plus de contrôle si je veux peaufiner la source de l'API et l'algorithme de calcul.

Cela dit, j'ai utilisé un ESP8266 (NodeMCU) pour me connecter au réseau local via WIFI et un module relais comme actionneur. Le NodeMCU utilisera le protocole MQTT et écoutera un sujet spécifique pour obtenir des commandes pour activer/désactiver le relais. Aussi simple que cela!

Étape 5: Détails techniques: Relier les points | Automatisation de la maison

Détails techniques: Relier les points | Automatisation de la maison
Détails techniques: Relier les points | Automatisation de la maison
Détails techniques: Relier les points | Automatisation de la maison
Détails techniques: Relier les points | Automatisation de la maison
Détails techniques: Relier les points | Automatisation de la maison
Détails techniques: Relier les points | Automatisation de la maison

Mon RaspberryPi contient une instance à nœuds capable de gérer tout ce dont j'ai besoin pour ce projet. Il dispose également d'un serveur MQTT installé pour publier nos messages.

Au début, je pensais pouvoir récupérer les données de l'API quotidiennement à 9h et extraire les heures de Fajr et de Mahgrib Adhan et continuer à comparer l'heure actuelle avec ces variables, à savoir:

toutes les 30 secondes:

si: Mahgrib < MAINTENANT < Fajr true | allumer les lumières | publier un message ON dans le sujet MQTT spécifié else: désactiver

Pour comparer l'heure, je convertis les heures fournies par l'API de hh:mm(AM/PM) au format de date complet en définissant la partie date sur une date négligeable dans l'histoire, par exemple (1/1/1970) puisque nous comparons l'heure uniquement à l'heure actuelle (la partie date est également convertie).

Malheureusement, cela ne fonctionnera que dans les cas simples. Supposons le cas où l'alimentation électrique tombe en panne ou le système redémarre pour une raison imprévue. Si ce cas se produit avant minuit, nous sommes toujours du bon côté, mais après minuit, notre algorithme simple échouera.

Pour donner un exemple, prenons Magrib Adhan à 19h30 et Fajr à 4h10. Lorsque le système démarre, il enverra une nouvelle demande pour récupérer les données mentionnées précédemment. Si l'heure est maintenant 1h45, nous nous attendons à ce que notre algorithme renvoie vrai, mais en fait il ne le sera pas car 1h45 est inférieur à Fajr (4h10) mais n'est pas supérieur à Magrib (19h30). C'est parce que nous unissons la date entre toutes les variables. Vous trouverez ci-dessous la version finale de l'algorithme (jusqu'à présent):

toutes les 30 secondes:

if ((magrib.getHours() >=12 && fajr.getHours() <=12) || fajr < maghrib) { fajr.setDate(fajr.getDate()+1); // gérer les jours endTime if (now.getHours() <=12) { now.setDate(now.getDate()+1); // gérer les jours courants currentTime } } // ci-dessous se trouve le bloc de code précédent si: Mahgrib < NOW < Fajr true | allumer les lumières | publier un message ON dans le sujet MQTT spécifié else: false | éteindre

Le déroulement complet du processus est annoté dans l'image ci-dessus.

Au niveau de l'UI, j'ai ajouté 2 switchs à l'UI/interface:

  1. Un interrupteur pour activer ce processus Automatique ou Manuel.
  2. Un interrupteur pour allumer/éteindre les lumières manuellement.

Étape 6: Conclusion

Le temps passe vite pour ne jamais être rappelé. Faire des projets aussi simples d'une journée vous permet de reprendre votre souffle dans cette voie rapide et vous aide à raviver vos soft skills au fil du temps.

J'ai autant essayé dans ce projet de le garder simple et réutilisable à travers le monde.

Veuillez voter pour cette instructable si vous pensez que ce projet mérite.

Joyeux Ramadan!

Conseillé: