Belkin WeMo-Geräte mit UPnP.FindByType finden

8

Ich versuche eine C # -App zur Steuerung von WeMo-Geräten zu erstellen. Ich habe die Code-Beispiele und Anweisungen von Bernacules hier gefolgt.

Das relevante Bit des Codes wird unten eingefügt.

%Vor%

Wenn ich die von UPnPDeviceFinder gefundenen Geräte iteriere, erhalte ich alle möglichen Dinge, meinen Medienserver, eine App auf meinem Android-Handy, meinen Chromecast, aber kein WeMos, nichts, das Belkin in der Urne auch nur im Entferntesten hatte.

Nach ein bisschen mehr Googeln fand ich diesen Artikel , mit dem ich herausfinden konnte, wie man die 'setup.xml' für jedes Gerät abfragt. Durch Ersetzen des "upnp: rootdevice" im obigen Code durch den Wert von & lt; DeviceType & gt; in der xml (ich glaube es war "urn: Belkin: device: controllee: 1"), kam ich mit 0 ergebnissen aus dem UPnPDeviceFinder. Ich nehme an, Belkin hat kürzlich seine Konfiguration geändert, aber kann jemand mit etwas mehr Netzwerk-Saaviness mich darüber informieren, welchen Wert ich für 'deviceType' verwenden kann, der meine WeMos finden wird?

    
Duck Jones 22.08.2014, 17:38
quelle

3 Antworten

3

Welche Version von Windows verwenden Sie?

Mein UPnP-Scanner findet den Wemo unter Windows 7 gut, unter Windows 8.1 funktioniert er jedoch nicht

Unter Windows 8.1 erscheinen alle meine anderen UPnP-Geräte, aber das Wemo erscheint überhaupt nicht.

    
user3590552 11.09.2014, 21:17
quelle
3

Ich habe einen Workaround geschafft. Es ist ein wenig hacky, und verwendet nicht wirklich das upnp-Protokoll (wie ich das überhaupt nicht funktionierte unter Windows 10).

Im Grunde verwenden wir einen netsh-Befehl, um eine Liste von Geräten und deren Adressen zu erhalten. Dann versuchen wir auf die setup.xml auf den verschiedenen Ports zuzugreifen, von denen wir wissen, dass die wemo-Geräte laufen können. Wenn wir eine richtige Antwort erhalten, enthält sie alle Upnp-Geräteinformationen, die wir dann für alles, was wir über das Gerät wissen möchten, analysieren können. In diesem Beispiel habe ich einfach ein vereinfachtes Parsing durchgeführt, indem ich nur überprüft habe, ob es das Wort "Belkin" enthält. Es funktioniert irgendwie, aber wir sollten den UDN analysieren, um das Modell zu bestimmen, und friendlyName, um es dem Endbenutzer zu zeigen. Sonst könnten andere Geräte von Belkin auftauchen.

Diese Methode funktioniert für mich auf einem Windows 10 PC. Ich habe keine anderen Plattformen ausprobiert. Es ist eine Art Brute-Force-Methode, aber alle Anfragen werden asynchron und parallel gemacht, sodass wir schnell eine Antwort erhalten. Wie auch immer, hier ist die Klasse, die all die Magie macht:

%Vor%

Und ein paar Modellklassen:

%Vor%

Die Verwendung ist ziemlich einfach. Wenn Sie möchten, dass es asynchron (im Hintergrund) ausgeführt wird, verknüpfen Sie einfach das Ereignis OnWemoDeviceFound und rufen Sie StartScanning() like so auf:

%Vor%

Sonst, wenn Sie eine Methode wollen, die synchron läuft und eine Liste von Geräten zurückgibt, rufen Sie einfach GetWemoDevices() auf. Beachten Sie, dass dies nicht wirklich empfohlen wird, da es nicht zurückkehrt, bis eine Zeitüberschreitung bei allen "ungültigen" Anfragen aufgetreten ist. Sie könnten das Timeout für die Web-Anfragen ändern, wenn Sie diese Zeit verkürzen möchten.

    
Inrego 01.04.2016 16:12
quelle
-1
___ answer36361016 ___

Ich habe einen Workaround geschafft. Es ist ein wenig hacky, und verwendet nicht wirklich das upnp-Protokoll (wie ich das überhaupt nicht funktionierte unter Windows 10).

Im Grunde verwenden wir einen netsh-Befehl, um eine Liste von Geräten und deren Adressen zu erhalten. Dann versuchen wir auf die setup.xml auf den verschiedenen Ports zuzugreifen, von denen wir wissen, dass die wemo-Geräte laufen können. Wenn wir eine richtige Antwort erhalten, enthält sie alle Upnp-Geräteinformationen, die wir dann für alles, was wir über das Gerät wissen möchten, analysieren können. In diesem Beispiel habe ich einfach ein vereinfachtes Parsing durchgeführt, indem ich nur überprüft habe, ob es das Wort "Belkin" enthält. Es funktioniert irgendwie, aber wir sollten den UDN analysieren, um das Modell zu bestimmen, und friendlyName, um es dem Endbenutzer zu zeigen. Sonst könnten andere Geräte von Belkin auftauchen.

Diese Methode funktioniert für mich auf einem Windows 10 PC. Ich habe keine anderen Plattformen ausprobiert. Es ist eine Art Brute-Force-Methode, aber alle Anfragen werden asynchron und parallel gemacht, sodass wir schnell eine Antwort erhalten. Wie auch immer, hier ist die Klasse, die all die Magie macht:

%Vor%

Und ein paar Modellklassen:

%Vor%

Die Verwendung ist ziemlich einfach. Wenn Sie möchten, dass es asynchron (im Hintergrund) ausgeführt wird, verknüpfen Sie einfach das Ereignis upnp:rootdevice und rufen Sie %code% like so auf:

%Vor%

Sonst, wenn Sie eine Methode wollen, die synchron läuft und eine Liste von Geräten zurückgibt, rufen Sie einfach %code% auf. Beachten Sie, dass dies nicht wirklich empfohlen wird, da es nicht zurückkehrt, bis eine Zeitüberschreitung bei allen "ungültigen" Anfragen aufgetreten ist. Sie könnten das Timeout für die Web-Anfragen ändern, wenn Sie diese Zeit verkürzen möchten.

    
___ qstntxt ___

Ich versuche eine C # -App zur Steuerung von WeMo-Geräten zu erstellen. Ich habe die Code-Beispiele und Anweisungen von Bernacules hier gefolgt.

Das relevante Bit des Codes wird unten eingefügt.

%Vor%

Wenn ich die von UPnPDeviceFinder gefundenen Geräte iteriere, erhalte ich alle möglichen Dinge, meinen Medienserver, eine App auf meinem Android-Handy, meinen Chromecast, aber kein WeMos, nichts, das Belkin in der Urne auch nur im Entferntesten hatte.

Nach ein bisschen mehr Googeln fand ich diesen Artikel , mit dem ich herausfinden konnte, wie man die 'setup.xml' für jedes Gerät abfragt. Durch Ersetzen des "upnp: rootdevice" im obigen Code durch den Wert von & lt; DeviceType & gt; in der xml (ich glaube es war "urn: Belkin: device: controllee: 1"), kam ich mit 0 ergebnissen aus dem UPnPDeviceFinder. Ich nehme an, Belkin hat kürzlich seine Konfiguration geändert, aber kann jemand mit etwas mehr Netzwerk-Saaviness mich darüber informieren, welchen Wert ich für 'deviceType' verwenden kann, der meine WeMos finden wird?

    
___ answer3195320 ___

Mit dem Attribut %code% wird das WeMo auch unter Windows 10 nicht gefunden. Inrego hast du deinen "anderen Weg" gepostet. Sonst denke ich daran, den MAC aufzuzeichnen und dann jedes Mal einen ARP zu machen, um zu sehen, ob sich die IP-Adresse geändert hat, die Ports 49152, 49153, 49154 (soweit ich weiß, dass sie sich ändern können)

    
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ answer25797093 ___

Welche Version von Windows verwenden Sie?

Mein UPnP-Scanner findet den Wemo unter Windows 7 gut, unter Windows 8.1 funktioniert er jedoch nicht

Unter Windows 8.1 erscheinen alle meine anderen UPnP-Geräte, aber das Wemo erscheint überhaupt nicht.

    
___ tag123upnp ___ Universal Plug and Play (UPnP) ist eine Reihe von Netzwerkprotokollen, die es Netzwerkgeräten ermöglichen, die gegenseitige Präsenz im Netzwerk zu entdecken und funktionsfähige Netzwerkdienste für die gemeinsame Nutzung von Daten, Kommunikation und Unterhaltung einzurichten. ___ qstnhdr ___ Belkin WeMo-Geräte mit UPnP.FindByType finden ___
jmone 18.10.2015 07:15
quelle

Tags und Links