Lidl WI-FI Steckdose SWS-A1 SilverCrest IAN 103043

Begonnen von ext23, 14 Juni 2015, 09:22:22

Vorheriges Thema - Nächstes Thema

Beta-User

Danke für die Rückmeldung, dass das soweit paßt :) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

mkh

Hallo :-)

Danke für die Lösung. Ich schrieb ja, dass es bei mir ein Workaround ist und funktioniert.
Deine Lösung ist besser :-)

MKH

ext23

#257
Nabend,

mal ne kurze Frage, es ist wieder Weihnachten und ich wollt meine SWS-A1 wieder in Betrieb nehmen aber immer wenn ich schalte macht FHEM ein Neustart. Hat hier noch jemand das Problem?

Internals:
   CFGFN      /opt/fhem/cfg/Funksteckdosen.cfg
   DEF        AC:CF:23:27:F5:D4 192.168.0.40
   FUUID      5c4aea2d-f33f-2323-72b7-17d983e29e10778b
   FVERSION   53_Silvercrest_SWS_A1_Wifi.pm:?/2015-12-26
   IP         192.168.0.40
   MAC        AC:CF:23:27:F5:D4
   NAME       WLAN_Plug_01
   NR         579
   STATE      none
   TYPE       Silvercrest_SWS_A1_Wifi
   READINGS:
     2020-11-27 17:50:14   active          off
     2020-01-02 00:06:20   isRunning       true
     2020-11-27 17:50:14   state           none
Attributes:
   room       Funksteckdosen
   userattr   lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0


UPDATE:
Da ich davon eh nur eine habe, habe ich die rausgehauen. Wer noch eine SWS-A1 haben möchte möge sich bitte melden und mir ein Preisvorschlag machen.
HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)

Kamik

Hallo zusammen,

wie dem einen oder anderen schon bekannt ist, wurde der Dienst der App quittiert. Über FHEM funktioniert die Anbindung weiterhin. Ich hatte zwischenzeitlich Timing Probleme und habe mir eingebildet, dass es etwas mit dem MQTT Server und der nicht mehr vorhandenen Kommunikation liegt. Ich habe folglich in der Fritzbox den Internetzugang gesperrt. Seitdem habe ich eine gefühlt bessere Performance.

Meine eigentliche Frage ist aber eine andere. Ich habe jetzt noch drei Dosen, die irgendwann mal zurück gesetzt wurden. Diese haben natürlich keine Infos mehr aus meinem Netz. Um auf die Weboberfläche zu kommen (In der man auch die SSID etc. eingeben kann) Versuche ich mich auf das Gerät zu schalten. Dieses spannt auch ein WLAN auf. SSID: 2"LAN-6-Stellige Hex-Nummer". Ich suche nun das Initialkennwort für den WLAN Hotspot. Laut meinem Handy sind hier mindestens 8 Zeichen notwendig.
Der Vertrieb ist ebenfalls schon informiert, ich weiß aber nicht ob ich Infos bekomme. Man möchte sich per Mail melden.

Eine weitere Alternative wäre natürlich den eigenen MQTT Server einzutragen. Das sollte aber ohne flash nicht wirklich möglich sein. Die Weboberfläche bietet das jedenfalls nicht an.

tux2000

admin:admin sollte gehen

das die App nicht mehr geht war mir noch nicht aufgefalen... Mein Homeassistant schaltet sie wie eh und je...  ;)

Kamik

Nee,

admin:admin ist der Zugang zur Weboberfläche. Ich spreche aber davon neue, dumme Steckdosen ins Netz zu bringen. Die Dosen spannen ein WLAN auf und da möchte ich rein.Damit ich eben dann auf die Weboberfläche komme und die Zugangsdaten meines WLAN Netzes eingeben kann. Ab dann kann ich diese neuen Dosen auch wieder in FHEm verwenden

biopio

Hallo Zusammen,

ich habe mich jetzt extra im Forum angemeldet, um meine aktuellen Erfahrungen mit der Lidl Silvercrest SWS-A1 Steckdose mit Euch zu teilen. Da die offizielle App ("Silvercrest Wifi Plug") ja mittlerweile nicht mehr funktioniert, werden vielleicht noch einige auf der Suche nach Informationen hier landen.


  • Vielleicht die "wichtigste" Information vorab: Es stand auch schon weiter oben im Forum: Die "Icomen"-App funktioniert noch, zumindest in der Version 1.2.0 unter Android. Die App ist nahezu aussehens- und funktionsidentisch zur alten Original-App. Man muss sich in der App wieder anmelden und dann werden, nach Eingabe des WLAN-Passworts, alle angeschlossenen Steckdosen erkannt und können wie gewohnt gesteuert werden. Auch wenn man die App eigentlich nicht nutzen möchte, können damit "dumme" Dosen im WLAN angemeldet werden
  • Es stehen hier einige Sachen im Thread zur Neuanmeldung von Dosen, die ich nicht nachvollziehen konnte:

    • Ich konnte keine Dose an ein verstecktes WLAN namens "LSD" anmelden
    • Ich konnte nicht sehen, dass die Dosen beim Reset ein eigenes Netzwerk namens "TL-Plug" aufspannen
    • Auch ein Netz "SSID: 2"LAN-6-Stellige Hex-Nummer"" konnte ich nicht sehen (könnte es hier sein, dass bei diesen Dosen vorher ein entsprechender AP mit Passwort [vom Vorbesitzer?] eingerichtet wurde?)
    Ich habe das alles nicht extensiv ausprobiert, aber ich konnte auch sonst keine Quellen (außer weiteren Seiten, die ihre Information aus diesem Thread haben) dazu finden.
  • Nach meiner Erfahrung gibt es auch 2 verschiedene Resets für die Dose:

    • Wenn man den Knopf nur für ca. 5 Sekunden drückt und die LED schnell ROT zu blinken beginnt, werden die Anmeldedaten wohl erst einmal nicht gelöscht, d.h. wenn in der Zeit keine Übermittlung des WLAN-Passwortes stattfindet, behält die Dose die Daten und kann sich wieder im alten Netz anmelden.
    • Wenn man den Knopf länger gedrückt hält, fängt die LED an, schnell BLAU zu blinken. Ich nehme an, dass dann tatsächlich die Daten gelöscht sind, denn danach können sich meine Dosen nicht mehr von alleine im Netz anmelden.
    Auch das habe ich nicht "Full-proof" getestet.
  • Da hier im Thread einige Posts fehlen und auch Links zu verschiedenen genannten Modulen, PHP- und Java-Programmen nicht mehr da sind, habe ich, mit Hilfe der hier im Thread und im WIKI vorhandenen Daten, einige Skripts in Python erstellt. Mit diesen kann ich die Dosen im WLAN-Netz anmelden, schalten und programmieren (Timer setzen, etc). Ich werde diese Skripts später noch verlinken (entweder auf einer Webseite oder in Github). Wer Interesse hat und nicht warten möchte, mag mir eine E-Mail schreiben
  • Wenn es mir möglich ist, werde ich auch noch einige kleinere Sachen im WIKI ergänzen.

biopio

Hier ist die Adresse zu meinem Python-Modul für die WLAN-Steckdosen: https://github.com/MarkusPiotrowski/wifisocket

Mit dem Modul erhält man die gleichen Möglichkeiten auf die Dosen zuzugreifen, wie es die alte App bzw. die Icomen-App ermöglichen. Z.B.:

  • Anmelden der Dosen im lokalen WLAN (ohne Zugriff auf externe Server)
  • Abfrage der MAC- und IP-Adressen der angeschlossenen Dosen
  • An- und Ausschalten
  • Abfrage des Schaltzustandes
  • Programmierung von Timern, Countdown und Abwesenheitsmodus
  • Auslesen der Timer-, Countdown und Abwesenheitsmodus-Daten

Es handelt sich nicht um ein Programm, sondern um eine Funktionsbibliothek, die man selber nutzen kann, um entsprechende Steuerprogramme in Python zu schreiben. Evt. wird zukünftig noch ein (grafisch rudimentäres) Programm hinzugefügt. Für meine eigenen Zwecke habe ich so etwas bereits.

epek

Sorry für das Necroposting, aber nachdem der icomen-Server seit Wochen endgültig abgedreht ist, habe ich Probleme beim Initialisieren einer der Aplic/CSL-Dosen. @biopio also entweder verstehe ich das Python-Skript nicht, oder ich bekomme es nicht hin. Zumindest läuft das Skript nach der Korrektur eines Indents beim else: in Zeile 404.

Die Dose blinkt schnell rot, mein PC ist mit NetworkManager im Zielnetz des APs, in den die Dose soll, das init.py das import wifisocket as ws und
ws.send_password('Meinsupertolleswlanpasswort', 120) enthält, läuft auch.

Aber a) woher weiß eine neue Dose im Pairing-Mode, in dem sie promiscuous lauscht, was im WPA2-verschlüsselten WLAN, dessen Kennung ich ihr über das Skript ja nicht sage, von ws.send_password gesendet wird?
b) woher weiß die Dose, welche ESSID sie braucht? Oder probiert die das Passwort dann einfach durch?
c) müsste man dann ws.sendpassword nicht über ein offenes WLAN machen?

Sorry für die Anfängerfragen. Dass eine bereits einmal initialisierte Dose nach dem 5 Sekunden-Reset nicht alle Daten verloren hat, ist klar. Sie wäre dann immer noch im lokalen Netz. Aber irgendwo in der Doku steht etwas von neuen Dosen. Ich kapier es nicht. Bitte um Info!


biopio

Hallo, @epek!

Vielen Dank erst einmal für den Hinweis, dass in Zeile 404 eine Einrückung etwas verschoben ist.

Leider kann ich aus Deiner Frage nicht genau nachvollziehen, was denn jetzt genau nicht funktioniert. Hast Du das Tutorial auf der GitHub-Seite auch schon gelesen? Da ist auch ein kleines Beispiel-Script dabei.

Die Fragen, woher die Dosen eigentlich wissen, in welches Netzwerk sie sich einloggen sollen, kann ich Dir leider nicht beantworten. Vielleicht kann aus dem UDP-Header die sendende IP-Adresse des Broadcasters ausgelesen werden? Ich kann Dir aber sagen, dass es funktioniert. Ich hatte seinerzeit über Kleinanzeigen noch Silvercrest SWS-A1-Dosen bekommen und konnte sie mit dem send_password()-Kommando anmelden. Das Netzwerk muss dazu nicht offen sein.

Also, wo ist jetzt genau das Problem? Verbindet sich die Dose nicht?

1. Wenn Deine Dosen bisher funktioniert haben und auch schon im Netzwerk angemeldet waren, brauchst Du ihnen nicht erneut das Passwort zu senden. Das brauchst Du nur, wenn Du ein neues Passwort eingerichtet hast oder die Dosen in ein neues WLAN gepackt hast. Vielleicht probierst Du einfach mal: my_sockets = ws.find_sockets()?

2. Es kann auch helfen, send_password einfach noch mal zu wiederholen.

Versuch mal, klarer zu beschreiben, was Du machst und was passiert bzw. nicht passiert. Welche Dosen hast Du, wann haben die das letzte Mal funktioniert? (Ich benutze z.B. einige nur zu Weihnachten, und da kann es auch schon mal sein, dass eine Dose dann doch mittlerweile kaputt ist).

epek

Zitat von: biopio am 02 Mai 2024, 13:47:07Hallo, @epek!

Vielen Dank erst einmal für den Hinweis, dass in Zeile 404 eine Einrückung etwas verschoben ist.

Gerne! Danke für Deine Arbeiten!

Zitat von: biopio am 02 Mai 2024, 13:47:07Leider kann ich aus Deiner Frage nicht genau nachvollziehen, was denn jetzt genau nicht funktioniert. Hast Du das Tutorial auf der GitHub-Seite auch schon gelesen? Da ist auch ein kleines Beispiel-Script dabei.

Nein, diesen Teil kannte ich noch nicht, aber das Readme und die Threads hier im Forum hatte ich durch und der Hinweis mit den Abhängigkeiten steht ja auch dort. Mein init.py sieht so aus:

import wifisocket as ws
ws.device = ws.SWS_A1
ws.send_password('MeinSuperPasswort', 120)

Das rufe ich mit python init.py auf und das loopt auch 120 Sekunden.

Zitat von: biopio am 02 Mai 2024, 13:47:07Die Fragen, woher die Dosen eigentlich wissen, in welches Netzwerk sie sich einloggen sollen, kann ich Dir leider nicht beantworten.


Ich verstehe nicht, wieso ich NUR send_passwd() aber kein send_essid() machen sollen muss. Und vor allem über welches Setup.

Bisher habe ich es direkt vom Laptop aus probiert u.z. zuerst, wenn dieser mittels NetworkManager mit dem Ziel-Wlan verbunden war. Da verstehe ich aber nicht, wieso send_passwd unverschlüsselt sein sollte, wenn das Zielnetz zumindest WPA2-PSK spricht.

Dann mit Laptop an einem Accesspoint mit offenem WLAN mit a) ESSID=UPGRADE-AP b) OpenWRT

Ich verstehe den Mechanismus, glaube ich, grundlegend schon einmal nicht.

Das Du aber überzeugend schreibst, dass es funktioniert, bitte sag mir, wie die Umgebung ausgesehen hat über die es geklappt hat.

Zitat von: biopio am 02 Mai 2024, 13:47:07Vielleicht kann aus dem UDP-Header die sendende IP-Adresse des Broadcasters ausgelesen werden?

Leider nein. Das sind nur die Radio-Header -mir fällt der Fachbegriff gerade nicht ein, ... query war es nicht,...- in der sie einen Broadcast (Layer 2, MAC header) an eine leere ESSID schickt, gefolgt von einer ebensolchen Anfrage für die ESSID UPGRADE-AP.

Zitat von: biopio am 02 Mai 2024, 13:47:07Ich kann Dir aber sagen, dass es funktioniert. Ich hatte seinerzeit über Kleinanzeigen noch Silvercrest SWS-A1-Dosen bekommen und konnte sie mit dem send_password()-Kommando anmelden. Das Netzwerk muss dazu nicht offen sein.

Also, wo ist jetzt genau das Problem? Verbindet sich die Dose nicht?

1. Wenn Deine Dosen bisher funktioniert haben und auch schon im Netzwerk angemeldet waren, brauchst Du ihnen nicht erneut das Passwort zu senden. Das brauchst Du nur, wenn Du ein neues Passwort eingerichtet hast oder die Dosen in ein neues WLAN gepackt hast. Vielleicht probierst Du einfach mal: my_sockets = ws.find_sockets()?

2. Es kann auch helfen, send_password einfach noch mal zu wiederholen.

Versuch mal, klarer zu beschreiben, was Du machst und was passiert bzw. nicht passiert. Welche Dosen hast Du, wann haben die das letzte Mal funktioniert? (Ich benutze z.B. einige nur zu Weihnachten, und da kann es auch schon mal sein, dass eine Dose dann doch mittlerweile kaputt ist).


Bis vor drei Tagen hat sie (ohne App) funktioniert, dann meinte der Support von Aplic, es müsste mit der Tuya-App gehen. Das habe ich angezweifelt, aber mit einer von fünf einmal probiert. Dazu habe ich einen kompletten Reset (15 Sekunden, bis blaue LED blinkt) gemacht. Seither bekomme ich nur die genannten Frames in Wireshark von deren MAC zu sehen. Sie meldet sich aber nirgendwo an und hat wegen des Komplettresets auch nichts mehr gespeichert.

ws.find_sockets werde ich probieren, aber verstehe den Code noch nicht ganz - das agiert doch auf Layer 3 Broadcasts? Python ist mir überhaupt neu, aber ich passe halt auf, was der Interpreter für Meldungen ausgibt.
 In welcher Reihenfolge sollte das passieren?

Es stört also auch nicht, wenn das Script das Wlan0 nicht exklusiv für sich hat, weil networkManager es verwaltet? Also kein nmcli device wlan0 set managed false vonnöten?

Danke!

biopio

Deinen Aussagen entnehme ich, dass Du mit Linux arbeitest. Da bin ich nicht sehr kompetent. Der Code ist pures Python und sollte auch unter Linux laufen, aber ich habe das nicht getestet.

Alles, was das Modul macht, ist das, was hier im Thread oder im Wiki und noch an 1-2 Stellen woanders im Internet steht, über Python zugreifbar zu machen. Die meiste Kommunikation läuft gerichtet an die IP-Adresse des Steckers über den definierten UDP-Port. Der einzige Broadcast wird für send_password() verwendet, weil der Stecker da ja noch keine IP-Adresse hat (und das Identifizieren der verbundenen Stecker).

ChatGPT und Microsoft Co-Pilot behaupten beide, dass ein IOT-Gerät einen UDP-Broadcast in einem Netzwerk auch empfangen kann, wenn noch keine Authentifizierung mit dem Netzwerk stattgefunden hat.

Steck doch mal alle Deine Steckdosen ein, und mach mal auf dem Computer, der im gleichen Netzwerk angemeldet ist wie Deine Steckdosen:
>>> import wifisocket as ws
>>> my_sockets = ws.find_sockets()
>>> print(my_sockets)
Dann sollten zumindest ein paar von denen gelistet werden (es werden nicht bei jeder Suche zwangsläufig alle Geräte gefunden). Dann weißt Du auch, dass die Kommunikation (WLAN-Setup, Python-Code) prinzipiell läuft.

Das Tutorial sollte Dir auch helfen, besser mit dem Modul klarzukommen.

Das Verbinden einer neuen Dose geht genau so, wie beschrieben: Taster für 5 Sekunden gedrückt halten, bis die LED blinkt und dann das Passwort über ws.send_password(password) senden. Manchmal muss man das auch wiederholen.
Unter Windows gibt es da nichts Besonderes, was die Netzwerkbedingungen angeht. Der Computer muss halt im Lan/WLAN angeschlossen sein, und die Dosen in Reichweite dieses Netzes sein.

epek

Sorry, komme jetzt erst zum Antworten. Danke für die Ausführungen.
find/print sockets nach Deinem Beispiel habe ich vor Tagen nach Deinem Tip schon ausprobiert. Weder die in einem RFC 1918-Bereich von 172.16.0.0/12 konfigurierten Dosen, noch die zu initialisierende Dose hatten darauf geantwortet. Es läuft hier Python 3.10.12 unter Ubuntu. Soweit ich das in der Eile gesehen habe, sind die vom Skript generierten Pakete auch übers Netz gelaufen (wireshark).

Ich werde das später noch einmal von einem anderen System aus versuchen.

Was ich bisher versucht habe:
1. Auf Laptop mit ohne ohne assoziiertem WLAN das Pythonskript ausführen, während Dose schnell blinkt.
2. Laptop WLAN ausgeschaltet, LAN-Kabel angestöpselt, WLAN mit offener SSID eingerichtet, VLAN des angestöpselten LANs dem offenen WLAN zugeteilt und Pythonskript ausgeführt, während Dose schnell blinkt.
3. Dasselbe wie in 2. aber mit dem VLAN, in dem all meine konfigurierten Smartsockets zu finden sind.
4. Skript modifizieren, dass find_sockets/print ausgeführt wird und 1-3 wiederholen.

Was ich aus netzwerktechnischer Sicht nicht verstehen kann, ist, 1. wie eine Dose mit WLAN im promiscuous Mode, wo sie also jedweden Traffic hören, aber keinesfalls AES-verschlüsselte Pakete eines WLANs, dessen Schlüssel sie ja noch nicht hat, entschlüsseln können und den Broadcast hören sollte, wenn ich ihn aus dem WPA2-Netz heraus sende und 2. woher die Dose weiß, oder wissen soll, auf welche SSID (und welchen Kanal in welchem Band [Japan, USA, Europa]) sich das per send_passwort übermittelte WLAN-Passwort beziehen sollte.
Dass die Dose grundsätzlich auch auf einer APIPA-Adresse oder in promisuous Mode auf Broadcasts hören kann, ist ja richtig, aber der Rest erschließt sich mir nicht.

Und was ChatGPT anbelangt: Nur weil eine Antwort auf eine allgemeine Frage statistisch als wahrscheinlich gilt, muss sie nicht im Einzelfall richtig sein. Über die Dosen hier ist die Datenbasis im Netz nicht allzu umfangreich, und hinsichlich des Controllers trifft auch nicht alles zu, was in der Dokumentation steht.

Die Dose, um die es geht, hat den Total-Reset bekommen, der eintritt, wenn man länger als 5 Sekunden, bis zum Blinken der blauen LED drückt. Sie verhält sich somit wie eine, die frisch vom Werk gekommen wäre. Möglicherweise ist das der signifikante Unterschied?

biopio

@epek:
Wir drehen uns etwas im Kreis. Ich kann Dir nicht erklären, wie die Dose den Broadcast empfangen kann. Ich merke wohl, dass Dir das viel Kopfzerbrechen bereitet, aber ich und das Python-Modul, das ich geschrieben habe, können Deine Fragen nicht beantworten.

Ich habe bei meinem Rumprobieren seinerzeit auch schon Dosen den Totalreset verpasst und sie anschließend wieder angemeldet bekommen. Und Dosen, die vorher in einem anderen Netz angemeldet waren (gebraucht gekauft).

Ganz unabhängig vom Anmelden einer neuen/resetteten Dose kannst Du ja noch nicht einmal die schon im Netzwerk verbundenen Dosen mit meinem Modul ansprechen. Das spricht doch stark dafür, dass es a. entweder Probleme mit meinem Modul generell gibt (was ich nicht glaube, weil ich es zu Hause regelmäßig benutze), oder b. mit dem Modul unter Linux oder c. mit Deinen speziellen Netzwerk-Settings oder, oder, oder... (Firewall, Broadcasting unterbunden, ...)? Versuch doch erst mal hinzubekommen, dass die verbundenen Dosen auf ein `find_sockets()` reagieren. Oder sie direkt zu schalten, wenn Du Ihre IP- und MAC-Adresse ausfindig machen kannst. Vorher macht alles andere keinen Sinn.

epek

Ich wollte nur eine Rückmeldung abgeben: Auch unter Windows 10 Pro mit Deinem Skript findet sich keine der Dosen. In Verwendung sind, das habe ich geprüft, nur noch die mit der Aplic Produktnummer: 301795.
Die lassen sich zwar genauso mit dem php-Skript von @SebiM ansteuern, werden von Deinem Skript aber nicht gefunden.

Lass mich bitte noch einmal im Detail wissen, wie bei Dir der Initialisierungsprozess aussieht, und welche Variante der Dosen (silvercrest, Aldi, micromaxx, aplic, ...) Du mit Deinem Skript erfolgreich ins WLAN bringen konntest.

Mein nächster Versuch wäre dann das Setzen eines statischen ARP-Eintrages für die MAC-Adresse der zu initialisierenden Dose in der Hoffnung, dass sie den Broadcast dann verarbeiten kann.

Eventuell probiere ich es noch mit anderen Werten für ws.device, aber wie geschrieben, auf das php-Skript von SebiM, das die Dosen mit dem hex-Code C1117150 anspricht, reagieren die übrigen Dosen, auch, wenn sie von find_sockets im richtigen WLAN nicht gefunden werden.