Kürzlich habe ich ein paar WLAN-Relais von Xiaomi gekauft. Obwohl sie bisher solide waren, mag ich Xiaomis App wirklich nicht. Aber ich mag die Idee, dass es tatsächlich sowohl im LAN als auch über das Internet funktioniert. Im LAN lassen sie sich sehr schnell ein- und ausschalten, wenn man bedenkt, dass sich die Server von Xiaomi in China befinden.
Ich möchte also mein eigenes ESP8266-basiertes Relais rollen (ich weiß, dass ich die Hardware fertig machen kann, das ist also ein Bonus). Mein Problem ist, wie kann ich die Relais in meinem Netzwerk automatisch von einer Webseite erkennen?
Von einer "App" könnte ich SSDP, mDNS-SD oder UPNP verwenden, um Dinge zu erkennen. Ich habe jedoch keine Informationen darüber gefunden, ob dies über den Webbrowser möglich ist (Chrome unter Android im Grunde). Seit ich meine Webseite für Wetterstationen in eine progressive Web-App geändert habe, bin ich begeistert. Ich mag die Idee wirklich, dass Dinge nur Webseiten sind und keine Apps, die Sie installieren müssen. Und PWAs füllen die Lücke auch mit dem Offline-Modus.
Es ist jedoch seltsam, dass der "schwierige" Teil (Ein- und Ausschalten der Relais von außerhalb des LAN) über einen MQTT-Server trivial zu lösen ist. Ich würde mich aber lieber nicht auf den externen MQTT-Server verlassen. Wenn ich im LAN bin, möchte ich direkt mit den Relais sprechen. Wenn nicht, senden Sie den Befehl über MQTT.
Ich könnte mich natürlich darauf verlassen, dass der Server die Relais abfragt, aber in diesem Fall benötige ich eine Internetverbindung (wenn sich mein MQTT-Server in der "Cloud" befindet) oder einen zu Hause gehosteten Server. Ich habe einen Server zu Hause, und selbst wenn ich es nicht tun würde, könnte ein Himbeer-Pi leicht die Lücke füllen. Ideal wäre es jedoch, nicht einmal einen Server zu benötigen, wenn Sie über LAN mit den Geräten kommunizieren (in diesem Fall Wifi). Ich ziehe es vor, P2P so weit wie möglich beizubehalten und MQTT nur als Ersatz für WAN zu verwenden (MQTT löst die Probleme von CG-NAT und Portweiterleitung).
quelle
Antworten:
Mir sind keine generischen lokalen Erkennungsfunktionen bekannt, die in einen Browser integriert sind. Tatsächlich würde ich jede Fähigkeit als eine Ehrwürdigkeit der Sicherheit betrachten, da sie es Angreifern ermöglichen würde, Ihr Netzwerk remote zu profilieren, es sei denn, es hätte einen manuellen Interaktionsschritt zum Starten, was den Workflow, den Sie anstreben, wirklich verlangsamen würde.
Ich kann mir zwei Dinge vorstellen, die nahe kommen:
Die Erkennbarkeit von Chromecast ist in Chrome integriert. Dies war früher ein separates Plugin, bevor es eingeführt wurde. Dies erfordert jedoch noch einen manuellen Schritt dahin, wo der Benutzer eine Suche auslöst, und anschließend eine manuelle Auswahl der Gerätedetails, die an die Seite / das Javascript zurückgegeben werden sollen. (Dies verwendet SSDP unter der Abdeckung iirc)
Die WebBluetooth-Scan-Unterstützung. Dies folgt einem ähnlichen Modell wie die Chromecast-Erkennung. Der Benutzer muss den Scan starten und dann manuell aus den vom Browser gefundenen Geräten auswählen, welche Details an das Javascript auf der Seite zurückgegeben werden.
Ich habe den WebBluetooth-Ansatz verwendet, um einen lokalen Lichtschalter zu entdecken (ich habe eine BLE-App auf einem Nullpunkt, der eine Belkin-WeMo-Glühbirne steuert https://github.com/hardillb/physical-web-lightswitch ). Es funktioniert, ist aber nicht nahtlos, da mindestens zwei Benutzerinteraktionen erforderlich sind, um ein einzelnes Gerät zu erkennen.
Obwohl es nicht alle lokalen Anforderungen erfüllt, denke ich, dass die Verwendung des Cloud-Broker-Ansatzes auch für den lokalen Betrieb eine reibungslosere Benutzererfahrung darstellt.
quelle
Wenn Sie ein Webinterface auf einem Gerät haben und es so konfigurieren, dass es über einen MDNS-Responderdienst wie bonjour oder avahi einen MDNS-Hostnamen hat, können Sie von funktionsfähigen Betriebssystemen aus einfach auf Ihren Browser zeigen
https: //livingroomlight.local
Oder wie auch immer Sie es konfiguriert haben, um sich selbst aufzurufen.
Dies funktioniert sofort mit Browsern unter OSX, iOS und den meisten Linuces, die alle die Auflösung von MDNS-Hostnamen auf Systemebene unterstützen.
Dies funktioniert jedoch nicht unter Windows, es sei denn, Sie installieren zusätzliche MDNS-Unterstützung, und es funktioniert nicht mit Standard-Android-Browsern, obwohl es möglich ist, benutzerdefinierte Browser-Apps für Android zu erstellen, die dies unterstützen.
Das Erkennen unbekannter Instanzen im Netzwerk wird normalerweise nicht von einem Browser unterstützt, sondern normalerweise über Betriebssystem-APIs und Befehlszeilentools wie
dns-sd
(OSX) undavahi-browse
(Linux).Es ist zwar nicht offensichtlich, dass ein Browser Ihre Geräte finden kann, aber wenn Sie sich einfach daran erinnern können, wie Sie eines von ihnen genannt haben, können Sie eine Verbindung zu ihm herstellen und möglicherweise mithilfe eines MDNS Links zu allen Peers anzeigen Suche selbst.
Oder Sie können ein Terminal starten und sich eine Antwort geben. In diesem Fall könnten Sie einen lokalen Daemon ausführen, der eine MDNS-Suche durchführt und Ihnen das Ergebnis als Seite mit Links anzeigt, die nur auf der Loopback-Schnittstelle bereitgestellt werden und daher für keinen anderen Computer zugänglich sind.
quelle