Silvercrest SWS A1 Wifi
Silvercrest SWS A1 Wifi | |
---|---|
Zweck / Funktion | |
Schalten der Silvercrest SWS-A1 Steckdose | |
Allgemein | |
Typ | Inoffiziell |
Details | |
Dokumentation | siehe Forum |
Support (Forum) | IP |
Modulname | 53_Silvercrest_SWS_A1_Wifi.pm |
Ersteller | JoergOstertag |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
Silvercrest SWS-A1 Wifi schaltbare Steckdose
Die per Wifi schaltbare Steckdose von der Lidl Hausmarke Silvercrest ist nach Erstkonfiguration per UDP steuerbar.
Im Forums Thread ist einiges an interessanten Hinweisen zu der technischen Umsetzung der Steckdose aufgeführt.
Exemplarisch ist in dem Perl Modul 53_Silvercrest_SWS_A1_Wifi.pm das ein-/Aus-schalten der Steckdose implementiert.
Verwendung des Moduls 53_Silvercrest_SWS_A1_Wifi.pm
Das Modul in kann die SWS-A1 (und evtl. Softwaregleiche) Steckdosen schalten und deren Zusatand erfassen. Vorraussetzung ist, dass die Steckdoesen und fhem im selben Netzwerksegment sind und die UDP-Broadcasts der Steckdose von fhem empfangen werden können.
Das Modul sendet (momentan noch) feste vorgegebene packete per UDP an die konfigurierte IP-Adresse.
Wenn irgend ein define mit diesem Modul getätigt wird, macht das Modul einen Listening Socket auf dem UDP-Port 8530 auf. DIe über diesen Socket empfagenen Packete werden entweder einer bereits bestehenden definition zugeordnet und der aktuelle Zustand aktualisiert. Oder ein entsprechend neuer Eintrag wird mittels Autocreate angelegt.
Somit kann auch ein leerer (keineIP/MAC) Eintrag verwendet werden, um das Modul in den AutoCreate Modus zu bringen.
define autoCreateDosen Silvercrest_SWS_A1_Wifi
Stromverbrauch
Laut Forum: Verbrauch ca. 0,3 Watt. Bei angezogenem Relais schwankt es zwischen 0,4 und 1 Watt.
Web GUI
Wenn sich die Steckdose im Wlan angemeldet hat, kann man mit dem Browser auf das WebGUI zugreifen. Die Zugangsdaten sind:
Login: admin Passwort: admin
PHP Example Code with crypt
#!/usr/bin/php <?php function decodePacket($packet) { $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); $key = '0123456789abcdef'; mcrypt_generic_init($td, $key, $key); $result = mdecrypt_generic($td, $packet); mcrypt_generic_deinit($td); mcrypt_module_close($td); return $result; } function encodePacket($packet) { $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); $key = '0123456789abcdef'; mcrypt_generic_init($td, $key, $key); $result = mcrypt_generic($td, $packet); mcrypt_generic_deinit($td); mcrypt_module_close($td); return $result; } $msg = '4CF75F5A28A181574AC1B563CD51A78D'; // to switch 'on' echo "Original message: $msg\n"; $decryptedPacket = decodePacket(hex2bin($msg)); echo 'Decrypted packet: ' . bin2hex($decryptedPacket) . "\n"; $reencryptedPacket = encodePacket($decryptedPacket); echo 'Re-encoded packet: ' . bin2hex($reencryptedPacket) . "\n";
Sniffing-Erkentnisse
Aus dem Forum von Markus und den Captures von ext23:
Grundsaetzlich laeuft die Kommunikation wohl so: Das Smartphone kommuniziert direkt mit der Steckdose sofern im LAN angebunden. Das Hinwort vom Smartphone muss von der Steckdose korrekt bestaetigt werden, ansonsten wird wiederholt. Danach Broadcastet die Steckdose den Status im eigenen Subnetz und meldet wohl danach den Staus an den Server im Internet.
Wenn die Taste an der Steckdose gedrueckt wird: Die Steckdose broadcastet zwei mal ihre Information, dann wird die Info an den Webserver geschickt.
Datenwert 25bytes UDP # Framenummer im Trace Hin Vom Smartphone zur Steckdose Rueck Von Steckdose zum Smartphone BC Broadcast von der Steckdose ins lokale Subnetz UPL Von der Steckdose zum Server im Internet Antwort Vom Server im Internet zur Steckdose 1 Indikator App/Steckdose oder Hin/Rueck? 2 MAC Adresse d. Steckdose 3 immer gleich. Evtl nur ein Toggle Befehl? 4 Unklarer Payload ?? Unklar warum gesendet wurde. Evtl Statusupdate? |-1--|-------2---------|3-|------------------------4---------------------| 4?? Upload 01:40:ac:cf:23:2a:9f:94:10:fc:ba:26:9d:c2:ad:75:be:68:32:43:b9:99:9d:5b:c2 5?? Antwort ACK 6?? Antwort 01:42:ac:cf:23:2a:9f:94:10:29:0b:c8:f9:51:c0:ef:53:88:45:6d:67:a6:8e:ec:d6 7?? Upload ACK 8An Hin 01:40:ac:cf:23:2a:9f:94:10:c8:59:a5:71:10:99:5d:e8:fd:b0:81:ce:08:9f:ac:b1 9An Rueck 01:42:ac:cf:23:2a:9f:94:10:c8:59:a5:71:10:99:5d:e8:fd:b0:81:ce:08:9f:ac:b1 10An Broadcast1 01:42:ac:cf:23:2a:9f:94:10:ee:f5:78:f1:e5:0a:93:9f:f6:a6:3d:e8:32:1c:53:c4 11An Broadcast2 01:42:ac:cf:23:2a:9f:94:10:ee:f5:78:f1:e5:0a:93:9f:f6:a6:3d:e8:32:1c:53:c4 12An Upload 01:42:ac:cf:23:2a:9f:94:10:c1:b2:c8:9c:b2:8b:0c:9b:ef:58:7e:63:b7:a3:96:8f 13An Antwort ACK 14Aus Hin 01:40:ac:cf:23:2a:9f:94:10:cc:52:dc:6b:9f:0d:14:14:5d:5d:69:17:43:13:0c:c9 15Aus Rueck 01:42:ac:cf:23:2a:9f:94:10:2f:ea:1b:ed:aa:fe:16:d4:ac:41:39:b0:ce:4c:02:02 << Antwort nicht identisch Hinwort 16WDH? Hin 01:40:ac:cf:23:2a:9f:94:10:07:d6:a4:53:b0:eb:fc:20:7c:8c:86:11:50:40:2b:1d 17WDH? Rueck 01:42:ac:cf:23:2a:9f:94:10:07:d6:a4:53:b0:eb:fc:20:7c:8c:86:11:50:40:2b:1d 18Aus BC1 01:42:ac:cf:23:2a:9f:94:10:67:78:ff:35:3a:1b:43:c4:3a:04:10:3d:fa:80:88:3a 19Aus BC2 01:42:ac:cf:23:2a:9f:94:10:67:78:ff:35:3a:1b:43:c4:3a:04:10:3d:fa:80:88:3a 20Aus UPL 01:42:ac:cf:23:2a:9f:94:10:19:dd:b9:18:bb:2e:54:00:5b:54:86:18:94:ef:f1:58 21Aus Antw ACK
26:f1:a2:10:6c:aa:fd:94:2f:eb:5f:2e:16:5b:77:0d -Daten verschlüsselt mit "AES/CBC/NoPadding" mit Schlüssel "0123456789abcdef" Enthält folgendes entschlüsselt: 00 00 29 C1 11 71 50 01 00 00 FF FF 04 04 04 04 […] Hinweise zu den Paketnummern: Die Range ist von 00 00 bis FF FF, also 65535. Danach wird der Zähler von der Dose zurückgesetzt. Die Dose akzeptiert keine Befehle mit Paketnummern kleiner als der interne Zähler. Man kann aber immer FF FF benutzen, um sicher zu gehen, dass der Befehl akzeptiert wird. (Sofern man auf das Zählen der Pakete verzichten kann) Auch wenn die Dose einen Befehl identisch als Quittung zurücksendet wird der Paketzähler in der Dose erhöht.
Abfragen
Die App sendet jedenfalls zur Abfrage ein UDP-Paket
0140 + mac(6B) + 10 + enc(16B)
wobei der kodierte Befehl (enc) so aussieht:
00 0000 c1 11 7150 23 + mac + 0202
Beim 2. und 3. Byte wie üblich mit der Paketnummer aufpassen. Und bei der MAC müsste auch 6 mal FF als Broadcast an alle Geräte funktionieren; kommt zumindest in der App vor, habe ich aber noch nicht ausprobiert]
Die Dose antwortet dann mit einem UDP-Paket.