Confuso sobre qual tecnologia usar no Smart Home System

8

No meu projeto da faculdade (Smart Home System), há uma funcionalidade em que, se alguém bater à porta, uma imagem deve ser exibida em um monitor (em um navegador). Estou implementando o sensor de batida na porta (Piezo) usando um Arduino que de alguma forma precisa enviar comandos para o Raspberry Pi para tirar uma foto, que deve ser enviada para o navegador de um computador diferente. Existem vários outros módulos como este. Tudo está conectado a uma mesma rede WiFi.

Agora, espero que possa fazê-lo funcionar de alguma forma usando PHP e MySQL e várias solicitações do Ajax sendo executadas constantemente, mas essa provavelmente não é uma maneira muito interessante de fazer isso. Já ouvi falar do node.js e dos soquetes da web, mas não tenho certeza de que tenho tempo para aprendê-lo. (Eu posso, se for absolutamente necessário)

Enfim, alguém pode me dizer qual é o caminho certo para implementar esse tipo de sistema? Seria realmente útil.

Salim Shamim
fonte
3
Acho que lutaremos para identificar a melhor maneira de fazer isso, pois depende muito do que você já sabe - a menos que alguém possa apontar você para uma base de código existente (mas você pode não aprender muito).
Sean Houlihane
Para que um alerta em tempo real seja acionado no navegador para uma alteração no servidor ou banco de dados, o NodeJS seria necessário. O restante da funcionalidade pode ser gerenciado pelo PHP ...!
Prashanth Benny

Respostas:

9

Push vs Poll

Sua solução proposta de enviar solicitações frequentes de AJAX parece muito com pesquisa - você está enviando uma solicitação de vez em quando para verificar se o estado mudou. Faria muito mais sentido enviar alterações ao servidor quando o sensor piezo detectou uma alteração.

É a diferença entre isso:

Servidor: Existe alguém na porta? Sensor: Não .
Servidor: Existe alguém na porta? Sensor: Não .
Servidor: Existe alguém na porta? Sensor: Não .
... repetir ad infinitum ...

E isto:

Sensor: Tem alguém na porta!

O primeiro exemplo é a pesquisa e o segundo é o de empurrar. Você pode dizer qual deles terá menor uso de energia, código menos complexo e uso de rede reduzido.

HTTP ou algo mais?

Uma solicitação AJAX é enviada por HTTP, por isso é bastante pesada e requer vários handshakes TCP por conexão (a menos que você use o Keep-Alive ).

Pode valer a pena considerar protocolos alternativos, como o MQTT (há uma boa explicação na pergunta ' Quando e por que usar o protocolo MQTT? ', Que tem um problema muito semelhante ao seu).

Um intermediário de mensagens como o MQTT pode ser um pouco mais poderoso do que você realmente precisa na sua situação atual, mas um intermediário do MQTT pode ser facilmente expandido se você optar por adicionar mais dispositivos à sua rede doméstica inteligente, enquanto o seu sistema atual de solicitações AJAX desmoronar rapidamente. Imagine quatro ou cinco dispositivos diferentes pesquisando entre si; isso levaria rapidamente à sobrecarga da sua rede e seria um grande desperdício no uso de energia.

Soquetes do nó e da Web

Usar soquetes da Web e Node resolveria o problema de usar push em vez de enquete , portanto, seria uma boa ideia na minha opinião. No entanto , suspeito que a pesquisa funcionaria se você realmente não quisesse aprender o Nó.

Se você deseja uma solução extensível que funcione quando você expande sua casa inteligente, definitivamente continue pressionando - ela economizará muitos problemas e lágrimas. Se você quer apenas uma prova rápida de conceito, a pesquisa provavelmente funcionará.

Meu conselho pessoal é que você deve quer aprender soquetes web ou investigar usando um corretor de mensagem como MQTT. Você pode usar uma biblioteca cliente como o Mosquitto-PHP (com um guia do HiveMQ ) para simplificar o uso do MQTT no PHP, ou apenas usar os nós da Web e do nó. Suspeito que os recursos de aprendizado para Node e soquetes da Web sejam melhores, mas o MQTT tende a ser favorecido para ambientes domésticos / IoT inteligentes.

Aurora0001
fonte