Verwirrt darüber, welche Technologie in Smart Home System verwendet werden soll


8

In meinem College-Projekt (Smart Home System) gibt es eine Funktion, bei der ein Bild auf einem Monitor (in einem Browser) angezeigt werden muss, wenn jemand an die Tür klopft. Ich implementiere den Türklopfsensor (Piezo) mit einem Arduino, der irgendwie Befehle an den Raspberry Pi senden muss, um ein Foto aufzunehmen, das an den Browser eines anderen Computers gesendet werden soll. Es gibt mehrere andere Module wie dieses. Alles ist mit demselben WiFi-Netzwerk verbunden.

Jetzt kann ich es hoffentlich irgendwie zum Laufen bringen, indem ich PHP und MySQL und mehrere Ajax-Anfragen verwende, die ständig ausgeführt werden, aber das ist wahrscheinlich keine sehr gute Möglichkeit, dies zu tun. Ich habe von node.js und Web-Sockets gehört, bin mir aber nicht sicher, ob ich Zeit habe, es zu lernen. (Ich kann, wenn es absolut notwendig ist)

Wie auch immer, kann mir jemand sagen, welcher Weg der richtige ist, um diese Art von System zu implementieren? Es wäre wirklich hilfreich.


3
Ich denke, wir werden uns bemühen, den besten Weg für Sie zu finden, da so viel davon abhängt, was Sie bereits wissen - es sei denn, jemand kann Sie auf eine vorhandene Codebasis verweisen (aber dann lernen Sie möglicherweise nicht viel).
Sean Houlihane

Damit im Browser eine Echtzeitwarnung für eine Änderung des Servers oder der Datenbank ausgelöst wird, ist NodeJS erforderlich. Der Rest der Funktionalität kann von PHP verwaltet werden ...!
Prashanth Benny

Antworten:


9

Push vs Poll

Ihre vorgeschlagene Lösung zum Senden häufiger AJAX-Anfragen klingt nach Abfragen. Sie senden von Zeit zu Zeit eine Anfrage, um zu überprüfen, ob sich der Status geändert hat. Es wäre weitaus sinnvoller , Änderungen auf den Server zu übertragen, wenn der Piezosensor eine Änderung erkennt.

Es ist der Unterschied zwischen diesen:

Server: Ist jemand an der Tür? Sensor: Nein .
Server: Ist jemand an der Tür? Sensor: Nein .
Server: Ist jemand an der Tür? Sensor: Nein .
... ad infinitum wiederholen ...

Und das:

Sensor: Da ist jemand an der Tür!

Das erste Beispiel ist das Abrufen und das zweite das Drücken. Sie können feststellen, welches Gerät einen geringeren Stromverbrauch, weniger komplexen Code und eine geringere Netzwerknutzung aufweist.

HTTP oder etwas anderes?

Eine AJAX-Anfrage wird über HTTP gesendet, ist also ziemlich schwergewichtig und erfordert mehrere TCP-Handshakes pro Verbindung (es sei denn, Sie verwenden Keep-Alive ).

Es kann sich lohnen, alternative Protokolle wie MQTT in Betracht zu ziehen (die Frage „ Wann und warum sollte das MQTT-Protokoll verwendet werden? “, Die ein sehr ähnliches Problem wie Ihr Protokoll aufweist , enthält einige gute Erklärungen ).

Ein Nachrichtenbroker wie MQTT ist möglicherweise etwas leistungsfähiger als Sie in Ihrer aktuellen Situation wirklich benötigen. Ein MQTT-Broker kann jedoch problemlos erweitert werden, wenn Sie Ihrem Smart-Home-Netzwerk weitere Geräte hinzufügen, während dies bei Ihrem aktuellen System von AJAX-Anforderungen der Fall ist schnell auseinander fallen. Stellen Sie sich vier oder fünf verschiedene Geräte vor, die sich gegenseitig abfragen. Dies würde schnell zu einer Überlastung Ihres Netzwerks führen und den Stromverbrauch massiv belasten.

Knoten- und Web-Sockets

Die Verwendung von Web-Sockets und Node würde das Problem der Verwendung von Push anstelle von Umfragen lösen. Daher wäre dies meiner Meinung nach eine gute Idee. Ich vermute jedoch , dass Umfragen funktionieren würden, wenn Sie Node wirklich nicht lernen wollten.

Wenn Sie eine erweiterbare Lösung suchen , die funktioniert, wenn Sie Ihr Smart Home erweitern, sollten Sie unbedingt pushen - das erspart Ihnen viel Ärger und Tränen. Wenn Sie nur einen schnellen Proof of Concept wünschen, funktioniert das Polling wahrscheinlich.

Mein persönlicher Rat ist, dass Sie entweder Web-Sockets lernen oder mit einem Nachrichtenbroker wie MQTT nachforschen sollten . Sie können eine Client-Bibliothek wie Mosquitto-PHP (mit einer Anleitung von HiveMQ ) verwenden, um die Verwendung von MQTT in PHP zu vereinfachen, oder einfach Knoten- und Web-Sockets verwenden. Ich vermute, dass die Lernressourcen für Node- und Web-Sockets besser sind, aber MQTT wird eher für Smart Home / IoT-Umgebungen bevorzugt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.