Neuigkeiten:

Am Sonntag den 8.12.2024 kann es ab ca. 8:00 Uhr zu kurzzeitigen Einschränkungen / Ausfällen bei den Diensten des FHEM Vereines kommen.
Die Server müssen mal gewartet und dabei neu gestartet werden ;)

Hauptmenü

Lidl WI-FI Steckdose SWS-A1 SilverCrest IAN 103043

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

Vorheriges Thema - Nächstes Thema

biopio

#270
Hallo @epek,

zufällig wollte ich Dir auch schreiben, weil ich noch etwas getestet habe, auch mit Linux und da gibt es tatsächlich Probleme.

Ich habe nur die 'original' Lidl SWS-A1-Dosen.

1. Nutzung unter Windows (Win 10)
Funktioniert bei mir tadellos. Ich habe nochmal eine Dose komplett resetted ('blaues Blinken') und sowohl zu Hause als auch in einem anderen WLAN-Netz (im Büro) mit dem Modul angemeldet bekommen.
Schade, dass es bei Dir mit Windows nicht klappt (mal Timeout mit `ws.timeout = ...` auf 30 Sekunden gesetzt? Wird Python evt. durch die Windows-Firewall blockiert?), ich werde noch mal schauen, ob das evt. mit der Python-Version zusammenhängt. Die habe ich gerade nicht parat. Und ich werde es auch mit anderen Win-10-Rechnern mal testen.

2. Nutzung mit Linux (Ubuntu 20.??)
Hier habe ich tatsächlich auch Probleme.
- Wenn ich in der Methode `create_socket()`die Zeile 743: `s.bind((my_ip, udp_port))` mit einem # auskommentiere, kann ich auch unter Linux eine Dose reproduzierbar im WLAN-Netz verbinden (mit `send_password(passwort)`)!
- Mit der Änderung empfängt der Rechner aber keine Rückmeldung, d.h. Kommandos werden zwar abgeschickt, aber das Warten auf Bestätigung führt immer zum Timeout.
- Aber: Ich kann die Dosen dann auch unter Linux schalten! D.h. wenn Du die MAC und IP Deiner Dosen kennst, kannst Du mal probieren, mit `switch((mac, ip), 'on')` (oder ..., 'off')) Deine Dosen zu schalten. Das funktioniert bei mir! Das Auslesen von Daten leider nicht (timeout).

Da gibt es zwischen Windows und Linux offensichtlich einige Unterschiede im Handling von Sockets in Python. Ich werde mich noch ein paar Stunden damit beschäftigen, ob ich es 'cross platform' zum Laufen bekomme.

Wie ich verbinde: Ich tippe das Kommando (`send_password`) schon ein, ohne Enter zu drücken, betätige die Taste an der Dose, bis sie schnell rot (oder blau) blinkt, lasse los, vergewissere mich, dass die Dose schnell rot blinkt und drücke erst dann Enter und starte damit die Übertragung des Passworts.

Wenn Du "php-Skript von @SebiM" schreibst, meinst Du wahrscheinlich das Perl-Modul?

epek

#271
Kurzfassung: Tip 2 klappt.

Die Ursache für das Nichtfunktionieren von bind ist Deine Definition von my_ip, die im Ergebnis hostname -s liefert.

Ich habe in Zeile 281 eingefügt:
import netifaces

Dann habe ich my_ip wie folgt definiert:
my_ip = netifaces.ifaddresses('wlan0')[netifaces.AF_INET][0]['addr']

Und die Ex-Zeile 743, nun bei mir 745 mit dem Bind wieder eingefügt.
-> Klappt

find_sockets mag aber immer noch nicht.

biopio

Aah, danke für den Hinweis zu `my_ip`.

Kannst ja mal probieren, ob der Austausch von Zeile 240:
my_ip = socket.gethostname()
zu:
my_ip = socket.gethostbyname(socket.gethostname())

das Gleiche bewirkt wie Dein netifaces-Ansatz.

epek

#273
Bei meiner /etc/hosts bewirkt das die Ausgabe von 127.0.1.1 und wirft für ws.find_sockets einen OSError No. 22 Invalid argument.
Ich würde den netifaces-Ansatz bevorzugen, da der stabil auf ein Interface bezogen ist. Eventuell kann man den Interface-Name über ws.iface='Devicename' in der init.py (oder wie immer Du das Skript über das Du wifisockets.py instanzierst) aufnehmen und die von mir vorgeschlagene Zeile hinsichtlich des jetzt noch hardgecodeten Parameters 'wlan0' als Variable verwenden.

Am Grund, warum find_sockets noch nicht funktioniert, recherchiere ich noch.
find_sockets(IP-Adresse) oder find_sockets(Wildcard-MAC) liefert diese eine Dose zurück, obwohl in der BC-Domain noch fünf weitere zu finden wären.

biopio

Ich habe auf einen "Trick" zurückgegriffen, um die "echte" IP des Rechners, auf dem das Modul läuft, herauszufinden. Interessanterweise läuft es bei mir auf meinen Windows 10-Rechnern auch mit dem Rechnernamen als IP.
Jetzt läuft es aber auch auf meinem Ubuntu mit allen Funktionen, die ich getestet habe. Es kommt z.T. noch die Meldung 'Timeout', aber trotzdem werden die Daten auch von den Dosen gelesen. `find_sockets()` funktioniert auch. Immer daran denken, dass UDP-Kommunikation fehleranfällig ist. Verlängern der Timeout-Zeit kann helfen, alle Dosen zu finden.

Ich lade den Code morgen auf Github hoch.

epek

Sorry, ich war die letzten Wochen mit anderen Dingen beschäftigt. Ich danke Dir und werde das gelegentlich ausprobieren!

epek

#276
Kurze Rückmeldung zwischendurch. Ich versuche gerade, meine Dosen in FHEM einzubinden und komme nicht weiter.
Die Dose mit micromaxx-Branding und eine Dose von Aplic habe ich manuell angelegt über define.
Autocreate scheint zwar auf, hat aber nur einmal ganz kurz fünf Dosen erkannt, dann nie wieder.

Die mit dem Skript von @biopio wiederbelebte Dose kann ich (Edit: mit dem Wifiplug.php-Script von @SebiM nicht) schalten, alle anderen (baugleichen) schon. Auch die von Micromaxx. Kann sich der Herstellercode durch die Initialisierung ändern??? (Das Webinterface der Dose selbst ist wie gehabt verfügbar).
[Update: ubuntu noble nervt mit der Notwendigkeit für python3 -m venv..., pip install pycryptodome]

(Anmerkung: die Routine zur Verschlüsselung habe ich schon vor Jahren von mcrypt auf nativen Openssl-Code umgestellt:

function encodePacket($message) {
    $cipher = 'aes-128-cbc';
    $key = '0123456789abcdef';
    $ivsize = openssl_cipher_iv_length($cipher);
    $iv = $key; //openssl_random_pseudo_bytes($ivsize);
    $ciphertext = openssl_encrypt(
        $message,
        $cipher,
        $key,
        OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING,
        $iv
    );
    return $ciphertext;
}

Aber weder die Micromaxx, noch die Aplic-Dose reagieren auf Befehle via FHEM Webinterface.

Ich verwende das neueste /opt/fhem/FHEM/53_Silvercrest_SWS_A1_Wifi.pm, das ich hier im Thread finden konnte.

Jemand schrieb, dass die Funkdosen mit IT_v3 ansteuerbar wären - wie ist das mit den WLAN-Steckdosen selbst, die ja dann nur als CUL arbeiten?

Leider blicke ich gar nicht mehr durch.

Übrigens könnte man beim Wiki-Beitrag
https://www.fhemwiki.de/wiki/Silvercrest_SWS_A1_Wifi
dazuschreiben, dass das 53_Silvercrest_SWS_A1_Wifi.pm nur für im Forum eingeloggte Nutzer abrufbar ist.
Und der Link zur Lidl-Produkt-Website wirft einen Error 40



[Update] Lösung: Nicht das 53_Silvercrest_SWS_A1_Wifi.pm von hier https://forum.fhem.de/index.php?msg=379733, sondern das hier https://forum.fhem.de/index.php?msg=1098562 nehmen. In /opt/fhem/FHEM kopieren, Ownership auf fhem:dialout setzen und fhem-Service neu starten.
Gemäß https://wiki.fhem.de/wiki/Silvercrest_SWS_A1_Wifi autocreate aktivieren:
 define autoCreateDosen Silvercrest_SWS_A1_Wifi
Anschließend mittels Skript von @SebiM oder @biopio die Dosen der Reihe nach schalten. Sie scheinen nun endlich im Raum SilvercrestDevice auf. Alias gesetzt, Raum gesetzt, geschaltet. Passt endlich.
Nächster Schritt: Funksteckdosen schalten.


epek

So... es ist wieder Zeit für eine Rückmeldung. Die dank @biopio wiederbelebten WLAN-Dosen mit dem 433.92MHz-Modul können folgende Erweiterungen, die es auf Amazon gibt, steuern:

https://www.amazon.de/dp/B0CBLT8JGG Ucomen Funksteckdosen spritzwassergeschützt

https://www.amazon.de/dp/B0CLNWLQLD E27 Lampensockel

Jetzt geht die Suche nach kompatiblen WLAN-Relais weiter. Die Dinger werden ja nicht ewig halten.

Falls jemand einen Tipp hat, wie man die Medion/Silvercrest/Aplic-Dosen in FHEM einbindet - bitte. Ich bin entweder zu dumm dafür, oder das mit dem Broadcast möchte aus irgendeinem Grund wieder nicht über die virtuelle Maschine mit Debian 12 und FHEM...

epek

#278
Ich habe jetzt von Brennenstuhl eine Wifi-Steckdose mit 433 MHz Sender Modell: "WA 3600 LRF01 433" gefunden, die der Hersteller mit der App "Brennenstuhl connect" verwendet wissen möchte. Sie funktioniert auch mit der SmartLife App und kann die von mir erwähnten selbstlernenden Funksteckdosen von Hama, Medion und Aplic, aber auch die Außen-Funksteckdosen und Lampensockel von Ucomen (via Amazon erhältlich) und ein SH4-90260 Unterputz-Funkschaltrelais von Smartwares ansteuern.

Mit den Scripts von @biopio oder @SebiM funktioniert sie erwarteter Weise leider nicht. Autocreate in FHEM habe ich auch noch nicht herausgefunden.

Möglicherweise gehört für diese Dose ein neuer Thread her. Gibt es etwas, worauf ich das Gerät ,,abklopfen" sollte? nmap zeigt einen offenen Port 6668/tcp auf dem Gerät. MAC-Adresse stammt von Espressif Inc.

Umgekehrt kann ich mit dem php-Script von @SebiM das SH4-90260 Unterputz-Funkschaltrelais von Smartwares mit meinen alten Medion/Aplic-Dosen mit Herstellercode C111750 nicht ansteuern.

Sollte es möglich sein, die Silvercrest-WLAN-Dosen-Slaves mit dem ITv3-Protokoll anzusprechen?

Ich spiele mich gerade mit einer Variante dessen, was im Wiki für it/itv3 beschrieben ist:
define sw_it_outdoor IT 01010101010101010101010101 0 0000
IODev Silvercrest_SWS_A1_Wifi_AC_CF_23_XX_XX_XX
ITfrequency 433.92
ITrepetition 12
model itswitch
protocol V3

Bin ich damit auf dem Holzweg, weil das 53_Silvercrest_SWS_A1_Wifi.pm das eventuell nicht verarbeiten kann?

epek

Anschlussfrage: Kann man die alten Medion/Silvercrest/Easy Home/...-Dosen auf Basis des Hi-Flying-WLAN-Moduls eventuell umflashen, damit sie (auch) mit der SmartLife App respektive sonst einem Protokoll das FHEM gut unterstützt, arbeiten?

epek

Spannend: die Unterputz-Relais und E27-Sockel von Smartwares kann ich mit den alten Fernbedienungen meiner CSL- und Hama-Funksteckdosen ansprechen - mit dem SWS_A1-Modul über FHEM als Satellitendosen aber nicht. Mit der oben genannten Brennenstuhl-WIFI-433MHz-Dose kann man die Smartwares-Geräte aber schon schalten.

In manchen Unterforen hier ist die Rede von Frequenzabweichungen und Taktraten bei einigen Funksteckdosen einiger Hersteller. Dementsprechend soll man bei Verwendung eines CUL/CUN ITclock oder itfreq als Attribut setzen.

Ich überlege daher, ob man nicht im Silvercrest-SWS-A1-Modul einfach das IT-Protokol referenzieren und auf den Schaltcode dort verzichten kann. Vermutung: Die Daten werden an das Funkmodul wohl direkt durchgereicht?

BTW, das Prefix 08 vor Schaltkommando bei Zeile 551 in 53_Silvercrest_SWS_A1_Wifi.pm ist beliebig ersetzbar, etwa durch 02,04,06,0a,..,ff:

  my $cmd = "00FFFF" . $hash->{CODE};
  if (length($hash->{RFSLAVE}) == 6) {
    $cmd .= "0a" . $hash->{RFSLAVE};
    $cmd .= "60"
        if  $active eq "on";
    $cmd .= "70"
      if  $active eq "off";
    $cmd .= "04040404";
  } else {
    $cmd .= "010000FFFF04040404"
        if  $active eq "on";
    $cmd .= "01000000FF04040404"
      if  $active eq "off";
  }
  $cmd = pack "H*", $cmd;
  $cmd = myEncrypt($cmd);


Sollte man mittels socat auf Port 8530 eventuell gar Zugriff auf die serielle Schnittstelle des HyFlying-Moduls HF-LPB100 bekommen? Mir ist es noch nicht geglückt.