Confundido acerca de qué tecnología utilizar en el sistema de casa inteligente


8

En mi proyecto universitario (Smart Home System) hay una funcionalidad en la que si alguien toca la puerta, una imagen debe mostrarse en un monitor (en un navegador). Estoy implementando el sensor de golpe de puerta (Piezo) usando un Arduino que de alguna manera tiene que enviar comandos a la Raspberry Pi para tomar una foto, que se enviará a un navegador de computadora diferente. Hay varios otros módulos como este. Todo está conectado a una misma red WiFi.

Ahora espero poder hacerlo funcionar de alguna manera usando PHP y MySQL y varias solicitudes de Ajax ejecutándose constantemente, pero probablemente esa no sea una forma muy clara de hacerlo. He oído hablar de node.js y de los sockets web, pero no estoy seguro de tener tiempo para aprenderlo. (Puedo si es absolutamente necesario)

De todos modos, ¿alguien puede decirme cuál es la forma correcta de implementar este tipo de sistema? Sería muy útil.


3
Creo que tendremos dificultades para identificar la mejor manera de hacer esto, ya que mucho depende de lo que ya sabe, a menos que alguien pueda señalarle una base de código existente (pero es posible que no aprenda mucho).
Sean Houlihane

Para que se active una alerta en tiempo real en el navegador para un cambio en el servidor o la base de datos, NodeJS sería necesario. PHP puede gestionar el resto de la funcionalidad ...
Prashanth Benny

Respuestas:


9

Empuje vs Encuesta

Su solución propuesta de enviar solicitudes AJAX frecuentes se parece mucho a las encuestas : está enviando una solicitud de vez en cuando para verificar si el estado ha cambiado. Tendría mucho más sentido enviar cambios al servidor cuando el sensor piezoeléctrico detecta un cambio.

Es la diferencia entre esto:

Servidor: ¿Hay alguien en la puerta? Sensor: no .
Servidor: ¿Hay alguien en la puerta? Sensor: no .
Servidor: ¿Hay alguien en la puerta? Sensor: no .
... repetir hasta el infinito ...

Y esto:

Sensor: ¡ Hay alguien en la puerta!

El primer ejemplo es el sondeo, y el segundo es el empuje. Puede saber cuál tendrá un menor consumo de energía, un código menos complejo y un menor uso de la red.

¿HTTP o algo más?

Se envía una solicitud AJAX a través de HTTP, por lo que es bastante pesado y requiere varios protocolos de enlace TCP por conexión (a menos que use Keep-Alive ).

Puede valer la pena considerar protocolos alternativos como MQTT (hay una buena explicación en la pregunta "¿ Cuándo y por qué usar el protocolo MQTT? ", Que tiene un problema muy similar al suyo).

Un agente de mensajes como MQTT podría ser un poco más poderoso de lo que realmente necesita en su situación actual, pero un agente de MQTT podría expandirse fácilmente si elige agregar más dispositivos a su red doméstica inteligente, mientras que su sistema actual de solicitudes AJAX lo haría. desmoronarse rápidamente. Imagine cuatro o cinco dispositivos diferentes sondeándose entre sí; conduciría rápidamente a que su red se sobrecargara y supondría un consumo masivo de energía.

Nodos y zócalos web

Usar sockets web y Node resolvería el problema de usar push en lugar de sondeo , por lo que sería una buena idea en mi opinión. Sin embargo , sospecho que las encuestas funcionarían si realmente no quisieras aprender Nodo.

Si desea una solución extensible que funcione cuando expanda su hogar inteligente, definitivamente continúe presionando: le ahorrará muchos problemas y lágrimas. Si solo desea una prueba rápida de concepto, la encuesta probablemente funcionará.

Mi consejo personal es que debe aprender a usar sockets web o investigar utilizando un agente de mensajes como MQTT. Puede usar una biblioteca cliente como Mosquitto-PHP (con una guía de HiveMQ ) para simplificar el uso de MQTT en PHP, o simplemente usar Node y sockets web. Sospecho que los recursos de aprendizaje para Node y los sockets web serán mejores, pero MQTT tiende a ser favorecido para entornos de hogar inteligente / IoT.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.