Índice:

Luzes do Ramadã - IOT de automação residencial: 6 etapas
Luzes do Ramadã - IOT de automação residencial: 6 etapas

Vídeo: Luzes do Ramadã - IOT de automação residencial: 6 etapas

Vídeo: Luzes do Ramadã - IOT de automação residencial: 6 etapas
Vídeo: LIVE: Smart Home - Automação Residencial - INTRODUÇÃO TÉCNICA 2024, Julho
Anonim
Luzes do Ramadã | IOT de automação residencial
Luzes do Ramadã | IOT de automação residencial

Quando o Ramadã bate à porta, cidades em todo o mundo se iluminam e se preparam para o mês de jejum. As luzes são penduradas em praças públicas e nas ruas da cidade, bem como nas paredes externas das casas iluminadas durante a noite até o nascer do sol pela manhã.

Neste projeto, gostaria de compartilhar minha contribuição, no qual estou automatizando a iluminação dessas decorações com base nos tempos de Adhan e adicionando isso ao meu sistema de casa inteligente.

Etapa 1: Teoria

Basicamente, é mais fácil e aplicável automatizar a iluminação com base na intensidade da luz solar, por exemplo. No entanto, eu gostaria que isso tivesse o espírito do mês sagrado, ou seja, as luzes se acenderão enquanto as pessoas puderem comer durante o mês de jejum. Em particular, as luzes estão acesas a partir de Maghrib Adhan até Fajr Adhan a cada dia sem qualquer interação humana.

Etapa 2: Design

Abaixo, listarei os requisitos / capacidades deste projeto:

  • O sistema deve ser capaz de processar automaticamente na inicialização.
  • O sistema deve ser capaz de executar periodicamente o algoritmo de decisão (ON / OFF).
  • O sistema deve ser capaz de chamar a API diariamente.
  • O sistema deve ser capaz de se recuperar de uma reinicialização não planejada.
  • O sistema deve executar o algoritmo de decisão (ON / OFF) ao receber os dados instantaneamente.
  • O sistema deve fornecer um interruptor para ligar o modo de piloto automático (modo automático).
  • O sistema deve fornecer um interruptor para ligar / desligar manualmente as luzes.
  • O acionamento do interruptor manual deve definir o modo manual como DESLIGADO.
  • Quando o modo Automático está LIGADO, o resultado do algoritmo de decisão deve ser refletido no interruptor manual LIGADO / DESLIGADO.

Etapa 3: Detalhes técnicos: a API

Detalhes técnicos: a API
Detalhes técnicos: a API

Para tornar a teoria aplicável, é necessário conhecer o tempo de Adhan diariamente desde sua variável e agir sobre ele para ligar / desligar as luzes / decorações.

Para isso, decidi usar uma API baseada em localização para veicular os dados (tempo para Adhan)

muslimsalat.com/api/#location

  • Esta API fornece uma variedade de opções e parâmetros de configuração descritos no link de documentação acima.
  • Recomenda-se usar sua própria API_key, que é gratuita no momento do registro.
  • No meu design, estou interessado em uma linha do tempo diária.
  • A hora retornada está no formato de 12 horas (AM / PM).
  • Em termos de localização, gostaria que esta API pudesse fornecer opções mais precisas para localizações como sistema de coordenadas geográficas de coordenadas (Latitude e Longitude). Desta forma, esta API pode ser fornecida com um nome de cidade, por exemplo, e isso é suficiente na maioria dos casos. Infelizmente, os resultados da minha cidade específica foram bastante tendenciosos em vários testes e houve alguns minutos de diferença ao comparar o tempo de Adhan entre os resultados da API e o tempo real de Adhan na minha cidade. Por outro lado, os resultados foram perfeitamente compatíveis quando forneci uma cidade próxima ao norte e me mantive nela!
  • O URL da API que estou usando é: https://muslimsalat.com/.json? Key =

Etapa 4: Detalhes técnicos: Hardware

Detalhes técnicos: Hardware
Detalhes técnicos: Hardware

Para simplificar, estou deixando o hardware de fora do processo de sincronização com a API e do cálculo de tempo delegando essas operações ao meu sistema de automação residencial. Isso me dará mais controle se eu quiser ajustar a fonte da API e o algoritmo de cálculo.

Dito isso, usei um ESP8266 (NodeMCU) para me conectar à rede local via WIFI e um módulo de relé como atuador. O NodeMCU usará o protocolo MQTT e ouvirá um tópico específico para obter comandos para ligar / desligar o relé. Tão simples como isso!

Etapa 5: Detalhes técnicos: conectando os pontos | Automação residencial

Detalhes técnicos: Conectando os pontos | Automação residencial
Detalhes técnicos: Conectando os pontos | Automação residencial
Detalhes técnicos: Conectando os pontos | Automação residencial
Detalhes técnicos: Conectando os pontos | Automação residencial
Detalhes técnicos: Conectando os pontos | Automação residencial
Detalhes técnicos: Conectando os pontos | Automação residencial

Meu RaspberryPi mantém uma instância nodered que é capaz de lidar com tudo que eu preciso para este projeto. Também possui um servidor MQTT instalado para publicar nossas mensagens.

A princípio, pensei que poderia buscar os dados da API diariamente às 9h e extrair os horários de Fajr e Mahgrib Adhan e continuar comparando o horário atual com estas variáveis que são:

a cada 30 s:

if: Mahgrib <AGORA <Fajr true | acender as luzes | publicar uma mensagem ON no tópico MQTT especificado, caso contrário: desligar

Para comparar o tempo, estou convertendo as horas fornecidas pela API de hh: mm (AM / PM) para formato de data completo, definindo a parte da data como uma data insignificante no histórico, por exemplo (1970-01-01), uma vez que estamos comparando a hora apenas para a hora atual (parte da data também é convertida).

Infelizmente, isso só funcionará em casos simples. Suponha o caso em que a energia elétrica cai ou o sistema é reiniciado por um motivo não planejado. Se esse caso ocorrer antes das 12h, ainda estamos no lado seguro, mas depois das 12h, nosso algoritmo simples falhará.

Para dar um exemplo, vamos ter Magrib Adhan às 19h30 e Fajr às 4h10. Quando o sistema for inicializado, ele enviará uma nova solicitação para buscar os dados mencionados anteriormente. Se a hora agora for 1:45 AM, esperamos que nosso algoritmo retorne verdadeiro, mas na verdade não retornará porque 1:45 AM é menor que Fajr (4:10 AM), mas não é maior que Magrib (19:30). Isso porque unimos a data entre todas as variáveis. Abaixo está a versão final do algoritmo (até agora):

a cada 30 s:

if ((magrib.getHours ()> = 12 && fajr.getHours () <= 12) || fajr <maghrib) {fajr.setDate (fajr.getDate () + 1); // lida com dias estendidos endTime if (now.getHours () <= 12) {now.setDate (now.getDate () + 1); // lida com a extensão dos dias currentTime}} // abaixo está o bloco de código anterior se: Mahgrib <AGORA <Fajr true | acender as luzes | publicar uma mensagem ON no tópico MQTT especificado else: false | desligar

O fluxo completo do processo está anotado na imagem acima.

Em termos de IU, adicionei 2 opções à IU / interface:

  1. Um switch para transformar este processo em Automático ou Manual.
  2. Um interruptor para ligar / desligar as luzes manualmente.

Etapa 6: Concluindo

O tempo voa para nunca mais ser lembrado. Fazer esses projetos simples de 1 dia permite que você recupere o fôlego nesta via rápida e o ajude a reviver suas habilidades sociais com o tempo.

Tentei o máximo neste projeto para mantê-lo simples e reutilizável em todo o mundo.

Vote gentilmente neste instrutível se você acha que este projeto merece.

Feliz Ramadã!

Recomendado: