Confuso su quale tecnologia utilizzare nel sistema Smart Home


8

Nel mio progetto universitario (Smart Home System) c'è una funzionalità in cui se qualcuno bussa alla porta un'immagine deve essere visualizzata su un monitor (in un browser). Sto implementando il sensore bussare alla porta (Piezo) usando un Arduino che in qualche modo deve inviare comandi al Raspberry Pi per scattare una foto, che deve essere inviata a un browser di un altro computer. Esistono molti altri moduli come questo. Tutto è collegato a una stessa rete WiFi.

Ora spero di riuscire a farlo funzionare in qualche modo usando PHP e MySQL e diverse richieste Ajax in esecuzione costantemente, ma probabilmente non è un modo molto accurato per farlo. Ho sentito parlare di node.js e dei socket web ma non sono sicuro di avere il tempo di impararlo. (Posso se è assolutamente necessario)

Qualcuno può dirmi qual è il modo giusto per implementare questo tipo di sistema? Sarebbe davvero utile.


3
Penso che faremo fatica a identificare il modo migliore per farlo, dal momento che molto dipende da ciò che già conosci, a meno che qualcuno non possa indicarti una base di codice esistente (ma quindi potresti non imparare molto).
Sean Houlihane,

Affinché un avviso in tempo reale venga attivato nel browser per una modifica nel server o nel database, NodeJS sarebbe necessario. Il resto della funzionalità può essere gestito da PHP ...!
Prashanth Benny,

Risposte:


9

Push vs Poll

La soluzione proposta per l'invio di frequenti richieste AJAX suona molto come il polling : si invia una richiesta ogni tanto per verificare se lo stato è cambiato. Avrebbe molto più senso spingere le modifiche al server quando il sensore piezoelettrico rileva un cambiamento.

È la differenza tra questo:

Server: c'è qualcuno alla porta? Sensore: no .
Server: c'è qualcuno alla porta? Sensore: no .
Server: c'è qualcuno alla porta? Sensore: no .
... ripeti all'infinito ...

E questo:

Sensore: c'è qualcuno alla porta!

Il primo esempio è il polling e il secondo sta spingendo. Puoi sapere quale avrà un consumo di energia inferiore, un codice meno complesso e un utilizzo di rete ridotto.

HTTP o qualcos'altro?

Una richiesta AJAX viene inviata su HTTP, quindi è abbastanza pesante e richiede diversi handshake TCP per connessione (a meno che non si usi Keep-Alive ).

Potrebbe valere la pena considerare protocolli alternativi come MQTT (c'è qualche buona spiegazione nella domanda " Quando e perché usare il protocollo MQTT? ", Che ha un problema molto simile al tuo).

Un broker di messaggi come MQTT potrebbe essere un po 'più potente di quello di cui hai veramente bisogno nella tua situazione attuale, ma un broker MQTT potrebbe essere facilmente ampliato se scegliessi di aggiungere più dispositivi alla tua rete domestica intelligente, mentre il tuo attuale sistema di richieste AJAX sarebbe cadono rapidamente a pezzi. Immagina quattro o cinque diversi dispositivi che si pollano l'un l'altro; porterebbe rapidamente a sovraccaricare la rete e sarebbe un enorme consumo di energia.

Nodo e socket Web

L'utilizzo di socket Web e Node risolverebbe il problema dell'utilizzo di push anziché del sondaggio , quindi secondo me sarebbe una buona idea. Tuttavia , sospetto che il polling funzionerebbe se davvero non volessi imparare Node.

Se vuoi una soluzione estensibile che funzioni quando espandi la tua casa intelligente, vai sicuramente con la spinta: risparmierà molti problemi e lacrime. Se vuoi solo una rapida dimostrazione del concetto, il polling probabilmente funzionerà.

Il mio consiglio personale è che dovresti imparare i socket web o investigare usando un broker di messaggi come MQTT. È possibile utilizzare una libreria client come Mosquitto-PHP (con una guida di HiveMQ ) per semplificare l'utilizzo di MQTT in PHP, oppure utilizzare semplicemente Node e Web Socket. Sospetto che le risorse di apprendimento per Node e i socket Web saranno migliori, ma MQTT tende a essere favorito per gli ambienti smart home / IoT.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.