EasyHome WIFI Steckerset von Aldi-Süd und FHEM

Begonnen von Sir BuB, 12 September 2016, 15:20:01

Vorheriges Thema - Nächstes Thema

norbert-walter

#15
Habe heute mein WiFi Steckerset von Aldi mal unter die Lupe genommen. Hier mal in Kurzform eine Zusammenfassung:

- WiFi Adapter fungiert als Gateway 433MHz für den Funkadapter
- WiFi Adapter wird per WLAN durch ein eigenes Netz (als AP) konfiguriert
- Login und Passwort dienen scheinbar nur zur Kontrolle der Nutzungshäufigkeit
- Die Befehle laufen nicht über eine Cloud und werden nicht extern ausgeführt sondern im lokalen Netz (daher schnelle Ausführung der Befehle)
- Internet wird nur für die Anmeldung benötigt, danach geht es auch ohne Internetverbindung und man kann beliebig schalten
- Der WiFi Adapter hat eine chinesische Webpage die unter der DHCP-IP auf Port 80 angesprochen werden kann
- Das Login lautet: admin | admin (wie einfach! extrem Sicherheitskritisch)
- Das Passwort lässt sich neu setzen (puhhh)
- Auf der Webpage sind viele Parameter einsehbar unter anderem der WLAN-Key als Klartext
- So wie es dort aussieht läuft der WiFi Adapter im STA-Mode (was immer das heisst, vermutlich als Kommandointerpreter)
- Man kann zusätzlich auch einen AP gleichzeitig freischalten, der ein eigenes WLAN aufbaut in das man sich einloggen kann
- Intern scheinen die Befehle per serielle Schnittstelle an einen weiteren Controller weitergegeben zu werden 115kBd 8N1
- Der Kommandointerpreter lauscht vermutlich auf Port 8088 als TCP-Client (steht so in der Webpage, habs noch nicht mit einem Sniffer getestet)
- Die Firmware lässt sich aktualisieren
- Der Schaltzustand des WiFi Adapters wird zurückgelesen, der des Funkadapters leider nicht
- Bedienung aus dem Internet ist nicht möglich. Der WiFi- Adapter muss im Internet-Router explizit freigegeben werden, da mit  man von Extern zugreifen kann. (ist auch gut so)

Fazit:
- den WiFi Adapter müsste man im lokalen Netz per TCP Befehle senden können, die er ausführt (Protokoll müsste man noch sniffen)
- Es müssten sich theoretisch auch Funkadapter andrer Hersteller auf 433MHz anbinden lassen (anlernfähige Apapter, da sind nur einfache 433MHz Sender und Empfänger drin)
- Damit liesse sich die Palette der Funkadapter vergrößern
- Der WiFi Adapter wäre ein prima Gateway zur Steuerung der Funkadapter mit FHEM
- Es sollten sich auch gleichzeitig mehrere WiFi-Adapter bedutzen lassen (geht, habs gestestet)

Werde die Teile nochmal zerlegen

norbert-walter

#16
Nachtrag:

Habe die Teile mal aufgescraubt und fotografiert. Hier noch Detailinfos zu der verbauten Elektronik:

WiFi Adapter:
- Enthält ein SOC-Modul mit der Bezeichnung LSD4WF-2MD05106 http://www.lierda.com/upload/product/150922/0938504001442905506.png
http://www.lierda.com/product/id/376/show.html
- Der SOC ist seriell mit einem Microcontroller von ST (STM8L101F3P6TR, 8MHz) verbunden, der die Schaltbefehle ausführt und den 433MHz-Sender ansteuert
http://www.farnell.com/datasheets/1880974.pdf
- Die Stromversorgung wird über ein Schaltnetzteil 5V/0,3A realisiert
- 433MHz-Sender als einfaches On-Board-Modul realisiert

Funkadapter:
- 433Mhz-Empfänger (auf ICs sind alle Bezeichner ausgeschliffen)
- Die Stromversorgung erfolgt über ein einfaches Kondensator-Netzteil

marsmars

Hallo zusammen!
Da tut  sich ja was hier. Heute hatte ich nochmal ein paar Minuten Zeit.

@Wernieman: Ja es ist wlan0
@Snickers: Schade das du sie zurückbringst, weil über cloud laufen die bei mir definitiv nicht! Sondern nur im nur im lokalen WLAN derzeit mit der App.
@norbert-walter: Danke, bin jetzt auch so weit.

Da es anscheinend nicht übers Internet geht, wird die Dose wohl auch nicht SSL / TSL und Co  geben ;-) Ich sehe somit eigenlich kein Problem für einen TCP-Server und Client....

marsmars

ALDI Süd mal angeschrieben. Ich finde das geht gar nicht mit dem chinesischen Webinterface und der WLAN PSK, welche quasi als Klartext abgreifbar ist...

Wernieman

Kannst Du Dich jetzt mit dem WLAN verbinden oder nicht??
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

marsmars

Nach dem ich die App installiert habe usw. ja. [Rand Bemerkung Sony xperia Z und Sony xperia tablet z ging der 1. connect nicht. Beim Moto G5 schon. Anschließend fanden meine Sonys die auch im Netzwerk...]

Wernieman

Kriegst Du die WLAN Daten raus?

Denn dann könnte man mit Analysetools versuchen die Kommunikation mitzuschneiden ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

micky0867

Ich habe mir heute auch so ein Set besorgt.

Für die Einrichtung braucht man die App, bei der man sich zwingend "registrieren" muss.
Registrieren bedeutet aber nur, dass man (irgend)eine Mailadresse angibt und sich ein Passwort ausdenkt.
Es kommt keine Mail mit Bestätigungslink oder so. Man kann sich dann einfach so in der App anmelden.

Nachdem ich den Funkstecker mit Hilfe der App angelernt hatte, habe ich ihn mittels der Fritzbox für's Internet gesperrt.
Die Funktionen waren danach trotzdem alle noch vorhanden. Also ist das wohl kein Cloudzeugs.

An das Web-Interface des Funksteckers kann man sich einfach per Browser anmelden (admin/admin).
Danach wird man von einer Oberfläche mit chinesischen Schriftzeichen begrüßt.
Per bing translator habe ich mich dann durchgehangelt und geschaut, was alles geht.

Das Webinterface bietet an, das Gerät im AP (AccessPoint) und/oder STA (STAtion) Modus zu betreiben.
Wie das mit dem gemischten Betrieb funktionieren kann, ist mir schleierhaft. Scheint aber auch egal, weil sich der AP Modus überhaupt nicht aktivieren ließ.
Das Gerät ging immer wieder in den STA Modus.

Dann habe ich mal versucht, den Netzwerkverkehr zu sniffen.
Wie es scheint, kommunizieren die App und der Funkstecker per UDP auf Port 8530.
Den Dateninhalt konnte ich nicht entziffern/zuordnen. Das mag vllt daran liegen, dass in der Bedienungsanleitung darauf hingewiesen wurde, dass der Funkstecker auf einen NTP-Server zugegreifen können muss und die App/das Handy auch eine entsprechend korrekte/ähnliche Uhrzeit haben muss. Dies ist für mich ein Anzeichen für eine mögliche Verschlüsselung.

Nach einigem Rumspielen und neu konfigurieren hat sich die weitere Untersuchung scheinbar von selbst erledigt.
Ich bekomme den Funkstecker nicht mehr dazu, sich an meiner Fritte anzumelden. Da App macht auch keine Anstalten, mit Fehlermeldungen zu einer Lösung zu kommen.

Eigentlich hatte ich die Hoffnung, dass ich auch noch andere EasyHome Komponenten, die ich hier rumliegen habe, damit schalten kann.
Ein kurzer Versuch brachte aber die schnelle Ernüchterung, dass es zumindest für meine Komponenten nicht so ohne weiteres geht.
Ein weiterer Versuch hat sich wg. og. Problems erledigt.

Fazit:
Schön wär's ja gewesen, wenn ich das Teil einfach per http hätte einbinden und auch meine anderen HomeEasy hätte schalten können.

Micky

starfish

Zitat von: Wernieman am 29 September 2016, 08:46:50
Kriegst Du die WLAN Daten raus?

Denn dann könnte man mit Analysetools versuchen die Kommunikation mitzuschneiden ...

habs mal versucht. anbei die beiden relevanten frames  für Ein- und Ausschalten des Hauptgeräts. Ich hoffe, ich habe die richtigen erwischt.  die MAC adresse ist 00 95 69 A7 31 28. 

Wernieman

Es ist spät .. (und ich müde ..) womit hast Du mitgeschrieben?

Momentan sagt mir .pcap gar nichts .... wie öffnest Du?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

starfish

#25
mit der fritzbox capture  (http://fritz.box/html/capture.html) geht das recht komfortabel.  Mit wireshark kann man .pcap anschauen.
vllt. mal im thread über die lidl-wlan-dose nachlesen, ich denke die Chancen sind gut, dass man die Dose direkt ansprechen kann.
https://forum.fhem.de/index.php/topic,38112.0.html

Wernieman

Danke .. kann nur erst in 2 Wochen mich drum kümmern :o(
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

starfish

#27
macht nichts.  Im oben erwähnten "Mutter-thread" wurden die codes zur Steuerung gefunden.

Voraussetzung ist eine "Original"-Einrichtung und Anmeldung am heimischen WLAN mittels der App.

Bei mir funktionieren folgende Skripte:
WiFi Dose ein
#!/bin/bash -x
echo -n "0140009569a73128105b94d42ef5c01e302b1b7cb7a7d8eab0" | perl -pe 's/([0-9a-f]{2})/chr hex $1/gie' | nc -u -w1 192.168.0.178 8530

Wifi Dose aus
#!/bin/bash -x
echo -n "0140009569a73128106630bcfe88830cb4eeab4a784356ab9f" | perl -pe 's/([0-9a-f]{2})/chr hex $1/gie' | nc -u -w1 192.168.0.178 8530

Slave-Dose ein
#!/bin/bash -x
echo -n "0140009569a731281082b36c894db462909fc19e24a48f73f8" | perl -pe 's/([0-9a-f]{2})/chr hex $1/gie' | nc -u -w1 192.168.0.178 8530

Slave-Dose aus
#!/bin/bash -x
echo -n "0140009569a7312810aff14bdafc0a3127bfadeb2a4d904bbf" | perl -pe 's/([0-9a-f]{2})/chr hex $1/gie' | nc -u -w1 192.168.0.178 8530


Achtung: die MAC im code-string (hier 009569a73128) muss an die eigene angepasst werden, ebenso natürlich die IP am Schluss.
Weitere Info im thread https://forum.fhem.de/index.php/topic,38112.0.html
Im thread wird beim Netcat-Aufruf   nc -4u  ...  angegeben,  die Netcat-Version auf meinem mini-Rechner versteht dies so nicht, deshalb  nc -u ....
Besonderen Dank an SebiM und enterpriseII.

Nachtrag 20.11.16  betr. Slave Dosen: die angegebene verschlüsselte Sequenz gilt offensichtlich nur für meine Slave-Dose, weil eine Hardware-Identifikation enthalten ist (wenn ich richtig verstanden habe).
Zitat enterpriseII:
Zitat00xxxxc21192dd010000ffff04040404 und 00xxxxc21192dd01000000ff04040404 sind die bereits bekannten Ein- und  Ausschaltbefehle für die WLAN-Steckdose.
xxxx zählt in der Regel einfach hoch. Um ein immer gültiges Paket zu erhalten, lässt sich xxxx durch ffff ersetzen.
Für deine 433 MHz-Steckdose sieht es so aus:
00xxxxc21192dd0879fa116004040404 ist zum Einschalten.
00xxxxc21192dd0879fa117004040404 ist zum Ausschalten.
Deine spezieller Funkadapter müsste durch den Teil 79fa11 identifiziert sein.
Auch hier ist xxxx für einen allgemeingültigen Schaltbefehl wieder durch ffff zu ersetzen.

"Verschlüsselt" man dann den Befehlsteil wieder und baut den Gesamtbefehl wieder zusammen, müssten sich für dich diese Paketinhalte zum Schalten der Funkdose ergeben:
Einschalten:
Code:

0140009569a731281082b36c894db462909fc19e24a48f73f8

Ausschalten:
Code:

0140009569a7312810aff14bdafc0a3127bfadeb2a4d904bbf

bepe

Hallo, ich hab mir mal die Mühe gemacht die Befehle etwas zu analysieren. Die meisten Bytes konnte ich bestimmen. Der eigentliche Befehl ist AES verschlüsselt, hätte man sich aber auch sparen können, wenn man "0123456789abcdef" als Key benutz :o.

Folgendes PS1 Script baut einen verschlüsselten Befehl und kann zum Ein-/Ausschalten benutzt werden:

[CmdletBinding(DefaultParameterSetName = "ByInput")]
param (
    [Parameter(ParameterSetName = "ByInput", Position = 0)]
    [string] $stateString

)

$remoteip   = "192.168.178.51"   # IP to send to
$remoteudpport = 8530            # port to send to

$aesManaged = New-Object "System.Security.Cryptography.AesManaged"
$aesManaged.Mode = [System.Security.Cryptography.CipherMode]::CBC
$aesManaged.Padding = [System.Security.Cryptography.PaddingMode]::Zeros
$aesManaged.BlockSize = 128
$aesManaged.KeySize = 128
$aesManaged.IV = [Text.Encoding]::UTF8.GetBytes("0123456789abcdef")
$aesManaged.Key = [Text.Encoding]::UTF8.GetBytes("0123456789abcdef")

$ON = (0x00, 0x00, 0xFF, 0xFF)
$OFF = (0x00, 0x00, 0x00, 0xFF)

$state = $OFF
if($stateString -eq "ON") {
$state = $ON
}

$data = (
0x00, # CONST
0x00, 0x05, # hop count

0xC2, # companyCode
0x11, # deviceType

0x92, 0xDD, #authCode

0x01 #set ???
)  + $state

$encrypted = $aesManaged.CreateEncryptor().TransformFinalBlock($data, 0, $data.Length)
$aesManaged.Dispose()

$header  = (
0x01, # CONST
0x40, # z ? 68 : 64 - both are working!?
0x00, 0x95, 0x69, 0xA6, 0x39, 0xC8, # Device MAC
$encrypted.length  # Data length
) + $encrypted

$udpClient = new-Object system.Net.Sockets.Udpclient(0)
$udpClient.Send($header, $header.length, $remoteip, $remoteudpport)

bepe

Zusammenfassung

Header:
  01 # CONST
  40 # 68 oder 64 (bit 3 bedeutet Content verschlüsselt)
  009569a639c8 # MAC
  10 # Data length
Data:
  6eed72d95f2db03b82d5662e0a603424 # verschlüsselter Content


Content: (6eed72d95f2db03b82d5662e0a603424 entschlüsselt)
  00 # CONST
  00D5 # hop count
  C2 # companyCode
  11 # deviceType
  92DD #authCode
  01 #set ???
  0000FFFF # state (0000FFFF: ON, 000000FF: OFF)
  04040404 # padding (ignore)