Smart Home IdOTy

 

WLAN Steckdosen (ICOMEN)

Brandname:

  1. -ALDI EASY HOME  - WLAN STECKDOSENSE

    DIS-120 WIFI Adapter // smart2connect 48170 Hauptgerät

    DIS-119 Funkadapter // smart2connect 48171 Innensteckdose

    DIS-124 Funkadapter (IP44) // smart2connect 48172 Außensteckdose

  1. -CSL - Wifi Smart Steckdose | Wlan Steckdose

  2. -Ednet 84290/84291/84292 ?

  3. -MEDION (MD 16173) Intelligente Steckdose mit Funksteckdosen-Set (WLAN, 433, App)

  4. -SILVERCREST Wi-Fi-Steckdose SWS A1

  5. -CASAcontrol Smart-Home-Systeme Basis-Station Smart Wi-Fi Pearl??


Ansteuerung der Dosen mit Pyhon / Bash / PHP


WLAN

Wenn die Sammlung fertig ist, wirds schöner ;-)


Sammlung der Daten zum Ansteuern  (Stand und Hardware 11/2016)

Ansteuerung der WLAN Basis über WLAN/LAN

--> Danke an die Coder im FEHM Forum :-)


Sammlung:

UDP Port: 8530


Webinterface WLAN Basis:

Zugriff über Browser: <Your-IP>:<UDP Port>

User: admin Passwort: admin



PROTOKOLL:

0140MACMACMACMAC1012345678901234567890123456789012


01        (2 Stellen hex constant)

40        (2 Stellen 40hex=64dez oder 44hex=68dez ; dritte Stelle 4 = verschlüsselt)

MAC    (12 Stellen Hex)

10        (2 Stellen Datenlänge = mir unklar )

Daten   (Verschlüsselt mit AES128/CBC/NoPadding mit Schlüssel "0123456789abcdef“)

            Beispieldaten 32 Stellen: 6eed72d95f2db03b82d5662e0a603424 # verschlüsselter Content



Content crypted: (6eed72d95f2db03b82d5662e0a603424)

Content encrypted: (0000D5C21192DD010000FFFF04040404)


WIFI Dose:

0x00                # CONSTANT

0x00D5            # Paketzähler

0xC2                # CompanyCode Lidl (SilverCrest): C1, Aldi (EasyHome): C2

0x11                # deviceType

0x92DD            # authCode Lidl (SilverCrest): 7150, Aldi (EasyHome):92DD

0x01                # set  

0x0000FFFF    # state (0000FFFF: ON, 000000FF: OFF)

0x04040404     # padding (ignore)


RF SLAVE Dose:

0x00                # CONSTANT

0xFFFF          # Paketzähler

0xC?                # CompanyCode Lidl (SilverCrest): C1, Aldi (EasyHome): C2

0x11                # deviceType

0x92DD            # authCode Lidl (SilverCrest): 7150, Aldi (EasyHome):92DD

0x08               # set RF / 433 Slave

0x??????      # RF Adresse 3 Byte

0xYZ           # Y: 6 = Ein, 7 = AUS ; Z: 0 für Schalter, 1-9 für Dimmerlevel?


-> Paketzähler, es werden nur Paketnummern akzeptiert, die höher sind als die Letzte.

Die Reverseentwickler haben herausgefunden, dass die Pakete immer akzeptiert werden, wenn man die höchste mit 0xFFFF sendet. Der Zäher startet dann wieder bei 0x0001 - die Bedingung größer dem letzten ist erfüllt.


Python:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import socket

import time

#Deine MAC-Adresse

mac = '00 95 69 a7 31 28'

# Befehle verschluesselt mit AES128//

on  = '10 5B 94 D4 2E F5 C0 1E 30 2B 1B 7C B7 A7 D8 EA B0'

off = '10 66 30 bc fe 88 83 0c b4 ee ab 4a 78 43 56 ab 9f'

#

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)

s.connect(('192.168.0.178', 8530)) # (IP, Port) is a single variable passed to connect function

s.send(bytearray.fromhex('01 40' + mac + on)) # to switch 'on'

time.sleep(5) # sleep for 5 seconds

#s.send(bytes.fromhex('01 40' + mac + off)) # to switch 'off'

#time.sleep(5)


Bash-Shell:

#!/bin/bash -x

# WiFi Dose ein / on

echo -n "0140009569a73128105b94d42ef5c01e302b1b7cb7a7d8eab0" | perl -pe 's/([0-9a-f]{2})/chr hex $1/gie' | nc -u -w1 192.168.0.178 8530


#!/bin/bash -x

# WiFi Dose aus /off

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



# Slave-Dose(x)

Hier ist die bei Dosenanmeldung generierte sechsstellige Hexadresse nötig


Nötige Anpassungen / ToDo:

MAC (Beispiel 009569a73128)

IP (Beispiel192.168.0.178)  am Schluss.



LInks:

http://www.fhemwiki.de/wiki/Silvercrest_SWS_A1_Wifi

https://forum.fhem.de/index.php/topic,57612.15.html

https://forum.fhem.de/index.php/topic,38112.0.html


Ein Teardown im FHEM Forum von User Norbert-Walter
https://forum.fhem.de/index.php/topic,57612.15.html



Foto: User Norbert-Walter, tj

 
WIFI 
433
OUT
433
Phone
WLAN
IOT
RasPi3
WLAN
BT

IN
433
Phone
LTE
GSM


PHP Code zum Schalten der Dosen über  das Netzwerk

Scriptname: plugswitch.php

Code von SebiM

Erforderlich PHP5 mit MCrypt Modul (AES-Verschlüsselung)

-> Aufruf mit: php plugswitch.php <on|off>


Was macht das Script:

Es erstellt mit den eigenen Daten die Schaltanweisung für die WLAN oder RF(433Mhz) Dosen

Erforderliche Anpassung im Code:

IP-Adress der WLAN-Dose ($ip)

MAC-Adresse der WLAN-Dose ($mac)

Optional Code der Slave-Dose: ($rfslave) --> Siehe Script wifiplug-cloudfetch.php


#!/usr/bin/php

<?php

// 2016 Sebi, public domain


// Insert your WiFi plug data here // Daten der eigenen WiFi-Funksteckdose hier eintragen

$ip = '192.x.x.x';

$mac = '1234567890AB';

$code = 'c21192dd';// Company code + device code + auth code

// Comment out the following line for WiFi plug switching instead of RF slave plug switching

// Folgende Zeile zum Schalten der WiFi-Dose selbst anstatt einer RF-Slave-Dose auskommentieren

$rfslave = '123ABC';



if ($argc != 2) {

    echo "Usage: $argv[0] on|off\n";

    exit(1);

}


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 = hex2bin("0140{$mac}10");


if (isset($rfslave)) {

    if ($argv[1] == 'on') {

        $value = '60';

    } else if ($argv[1] == 'off') {

        $value = '70';

    } else {

        exit(2);

    }

    $msg .= encodePacket(hex2bin("00ffff{$code}08{$rfslave}{$value}04040404"));

} else {

    if ($argv[1] == 'on') {

        $value = 'ff';

    } else if ($argv[1] == 'off') {

        $value = '00';

    } else {

        exit(2);

    }

    $msg .= encodePacket(hex2bin("00ffff{$code}010000{$value}ff04040404"));

}


echo 'UDP packet: ' . bin2hex($msg) . "\n";


$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);

for ($i = 0; $i < 4; $i++) {

    socket_sendto($sock, $msg, strlen($msg), 0, $ip, 8530);

    usleep(50 * 1000);// 50 ms

}

socket_close($sock);



Ich möchte mich besonders bei User SebiM aus dem FHEM-Forum für seine großartig Unterstützung bedanken.

Allerdings nicht nur für die großartige Programierleistung sondern besonders für seinen freudlichen Umgang wenn

es mal hakt, das ist leider nicht mehr der Regelfall.  (Und ich weiß wo die FAQ zu suchen ist ;-))


 

Strukturbild Zur Verwendung der WLAN Dosen.