Sommario:

Luci del Ramadan - Domotica IOT: 6 passaggi
Luci del Ramadan - Domotica IOT: 6 passaggi

Video: Luci del Ramadan - Domotica IOT: 6 passaggi

Video: Luci del Ramadan - Domotica IOT: 6 passaggi
Video: Casa DOMOTICA Economica FAI da TE - Luci e Prese SMART con Shelly 2024, Luglio
Anonim
Luci del Ramadan | Domotica IOT
Luci del Ramadan | Domotica IOT

Mentre il Ramadan bussa alla porta, le città di tutto il mondo si illuminano e si preparano per il mese di digiuno. Le luci sono appese nelle piazze pubbliche e nelle strade della città, nonché sui muri esterni delle case illuminate durante la notte fino al sorgere del sole al mattino.

In questo progetto, vorrei condividere il mio contributo, in cui sto automatizzando l'illuminazione di queste decorazioni in base ai tempi di Adhan e aggiungendolo al mio sistema di casa intelligente.

Fase 1: Teoria

Fondamentalmente, è più facile e più applicabile automatizzare l'illuminazione in base all'intensità della luce solare, ad esempio. Tuttavia, vorrei che questo avesse lo spirito del mese sacro, cioè le luci si accendono finché le persone possono mangiare durante il mese di digiuno. In particolare, le luci sono accese a partire da Maghrib Adhan fino a Fajr Adhan ogni giorno senza alcuna interazione umana.

Passaggio 2: progettazione

Di seguito elencherò i requisiti/capacità di questo progetto:

  • Il sistema dovrebbe essere in grado di elaborare automaticamente all'avvio.
  • Il sistema dovrebbe essere in grado di eseguire periodicamente l'algoritmo di decisione (ON/OFF).
  • Il sistema dovrebbe essere in grado di chiamare API su base giornaliera.
  • Il sistema dovrebbe essere in grado di eseguire il ripristino da un riavvio non pianificato.
  • Il sistema dovrebbe eseguire l'algoritmo di decisione (ON/OFF) alla ricezione dei dati istantaneamente.
  • Il sistema dovrebbe fornire un interruttore per l'attivazione della modalità autopilota (modalità automatica).
  • Il sistema dovrebbe fornire un interruttore per accendere/spegnere manualmente le luci.
  • L'attivazione dell'interruttore manuale dovrebbe impostare la modalità manuale su OFF.
  • Quando la modalità automatica è ON, il risultato dell'algoritmo di decisione dovrebbe riflettersi sull'interruttore manuale ON/OFF.

Passaggio 3: dettagli tecnici: l'API

Dettagli tecnici: l'API
Dettagli tecnici: l'API

Per rendere applicabile la teoria è necessario conoscere il tempo Adhan su base giornaliera poiché la sua variabile e agire su di esso per accendere/spegnere le luci/decorazioni.

A questo scopo, ho deciso di utilizzare un'API basata sulla posizione per servire i dati (tempo per Adhan)

muslimsalat.com/api/#location

  • Questa API fornisce una varietà di opzioni e parametri di configurazione descritti nel collegamento alla documentazione sopra.
  • Si consiglia di utilizzare la propria API_key che è gratuita al momento della registrazione.
  • Nel mio design, sono interessato a una linea temporale quotidiana.
  • L'ora restituita è in formato 12 ore (AM/PM).
  • In termini di posizione, desideravo che questa API potesse fornire opzioni più accurate per posizioni come le coordinate del sistema di coordinate geografiche (latitudine e longitudine). Per questo modo, questa API può essere fornita con un nome di città, ad esempio, e questo è abbastanza nella maggior parte dei casi. Sfortunatamente, i risultati della mia città specifica erano piuttosto distorti in più test e c'erano un paio di minuti di differenza quando si confrontava il tempo di Adhan tra i risultati dell'API e il tempo effettivo di Adhan nella mia città. D'altra parte, i risultati sono stati perfettamente abbinati quando ho fornito una città vicina al nord e mi sono attenuto ad essa!
  • L'URL dell'API che sto utilizzando è:

Passaggio 4: dettagli tecnici: hardware

Dettagli tecnici: Hardware
Dettagli tecnici: Hardware

Per semplicità escludo l'hardware dal processo di sincronizzazione con l'API e dal calcolo dei tempi delegando queste operazioni al mio Sistema di Domotica. Questo mi darà un maggiore controllo se voglio modificare l'origine dell'API e l'algoritmo di calcolo.

Detto questo, ho utilizzato un ESP8266 (NodeMCU) per connettermi alla rete locale tramite WIFI e un modulo relè come attuatore. Il NodeMCU utilizzerà il protocollo MQTT e ascolterà un argomento specifico per ottenere i comandi per attivare/disattivare il relè. Così semplice!

Passaggio 5: dettagli tecnici: collegamento dei punti | Domotica

Dettagli tecnici: collegare i punti | Domotica
Dettagli tecnici: collegare i punti | Domotica
Dettagli tecnici: collegare i punti | Domotica
Dettagli tecnici: collegare i punti | Domotica
Dettagli tecnici: collegare i punti | Domotica
Dettagli tecnici: collegare i punti | Domotica

Il mio RaspberryPi contiene un'istanza nodered che è in grado di gestire tutto ciò di cui ho bisogno per questo progetto. Ha anche un server MQTT installato per pubblicare i nostri messaggi.

All'inizio, ho pensato di poter recuperare i dati API su base giornaliera alle 9:00 ed estrarre sia gli orari Fajr che Mahgrib Adhan e continuare a confrontare l'ora corrente con queste variabili, ovvero:

ogni 30 secondi:

if: Mahgrib < ORA < Fajr vero | accendi le luci | pubblica un messaggio ON sull'argomento MQTT specificato altrimenti: disattiva

Per confrontare l'ora, sto convertendo le ore fornite dall'API da hh: mm (AM/PM) al formato data completo impostando la parte della data su una data trascurabile nella cronologia, ad esempio (1/1/1970) poiché stiamo confrontando l'ora solo all'ora corrente (viene convertita anche la parte della data).

Sfortunatamente, questo funzionerà solo in casi semplici. Supponiamo il caso in cui l'alimentazione elettrica si interrompe o il sistema si riavvia per un motivo non pianificato. Se questo caso si verifica prima delle 12:00, siamo ancora al sicuro, ma dopo le 12:00 il nostro semplice algoritmo fallirà.

Per fare un esempio, abbiamo Magrib Adhan alle 19:30 e Fajr alle 4:10. Quando il sistema si avvia, invierà una nuova richiesta per recuperare i dati menzionati in precedenza. Se l'ora è 1:45 AM, ci aspettiamo che il nostro algoritmo restituisca true, ma in realtà non lo farà perché 1:45 AM è inferiore a Fajr (4:10) ma non è maggiore di Magrib (19:30). Questo perché uniamo la data tra tutte le variabili. Di seguito è riportata la versione finale dell'algoritmo (finora):

ogni 30 secondi:

if ((magrib.getHours() >=12 && fajr.getHours() <=12) || fajr < maghrib) { fajr.setDate(fajr.getDate()+1); // gestisce l'intervallo di giorni endTime if (now.getHours() <=12) { now.setDate(now.getDate()+1); // gestisce i giorni che coprono l'ora corrente } } // sotto c'è il blocco di codice precedente se: Mahgrib < NOW < Fajr true | accendi le luci | pubblica un messaggio ON sull'argomento MQTT specificato altrimenti: false | spegnere

Il flusso completo del processo è annotato nell'immagine sopra.

In termini di interfaccia utente, ho aggiunto 2 interruttori all'interfaccia utente/interfaccia:

  1. Un interruttore per trasformare questo processo in automatico o manuale.
  2. Un interruttore per accendere/spegnere manualmente le luci.

Passaggio 6: conclusione

Il tempo vola per non essere mai ricordato. Realizzare progetti di 1 giorno così semplici ti consente di riprendere fiato in questa corsia di sorpasso e aiutarti a far rivivere le tue abilità trasversali nel tempo.

Ho provato tanto in questo progetto per mantenerlo semplice e riutilizzabile in tutto il mondo.

Vota gentilmente per questo istruttore se pensi che questo progetto meriti.

Felice Ramadan!

Consigliato: