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.