EasyHome WIFI Steckerset von Aldi-Süd und FHEM

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

Vorheriges Thema - Nächstes Thema

epek

#30
Die weiße Dose im Aldi-Set erinnert mich stark an die Medion MD16173, die ich in diesem Thread https://forum.fhem.de/index.php/topic,38112.msg309885.html#msg309885 erwähnt habe. Zur Vollständigkeit verlinke ich den Beitrag über die Steuerbefehle dort. Vielleicht sind die Informationen hilfreich?
Im übrigen scheint es sich bei den jetzt bei Hofer Österreich vertriebenen Maginon-Dosen um ein anderes Modell zu handeln. Es basiert dennoch auf den HF-LPB100-Umsetzern.

mha

#31
Mahlzeit,
ich habe nun meine ersten Erfahrungenmit  TCPDUMP auf Android gesammelt und bin auf Folgende Seite gestoßen:
http://icomen.yunext.com/api/device/wifi/list?accessKey=Q763W08JZ07V23FR99410B3PC945LT28&username=manfred%40mustermann.de&password=5F4DCC3B5AA765D61D8327DEB882CF99

password ist md5 (Buchstaben groß) des Passworts, Mailadresse hier im Beispiel manfred@mustermann.de

Hier erhalte ich ohne Paketsniffer die nötigen Daten, um das erforderliche UDP-Paket zu generieren:
  {"list":[{"macAddress":"XXXXXXX","companyCode":"C2","deviceType":"11","authCode":"92AA","deviceName":"Aquarium1","imageName":"","orderNumber":1,"lastOperation":1077151974282}],"success":true}

(Werte durch mich leicht verfälscht...)

Weiterhin gibt es Informationen zum gekoppelten RF-Geräten hier:
http://icomen.yunext.com/api/device/rf/list?accessKey=.......

Damit sollte es doch möglich sein, das zur Steuerung erforderliche UDP-Paket auch ohne Sniffer zu generieren?


Weitere Steckdosen die zumindest mit der gleichen APP Steuerbar sein sollten:
https://www.amazon.de/MEDION-Intelligente-Steckdose-Funksteckdosen-Set-App-Kompatibel/dp/B014V2OLIE
https://www.amazon.de/CSL-Steckdose-App-Steuerung-Bedienung-Tagesprogramm/dp/B01LXASIZG

ludwich

#32
#29
Hallo Miteinander,
genial was ihr schon rausbekommen habt!
Ich kann meine WLAN Dose (Aldi DIS-120 WIFI Adapter // smart2connect 48170 Hauptgerät vom Verkauf 14.11.2016) mit Starfischs Shellcode ansprechen. Meine beiden 433 Slaves klappen leider noch nicht.

Frage: (@bepe) Ich habe ein Verständnisproblem mit der AES(128/CBC/Padding=0) Verschlüsselung
Ich benötige ja einen 32 stelligen Key, "01234567890ABCDEF" ist aber nur 16 stellig, ich habe in einem Online Crypter den Key um 16 Nullen ergänzt, verdoppelt, je eine Null voran.... das Ergebnis immer falsch zumindest keine Anfang mit

Content crypted: (6eed72d95f2db03b82d5662e0a603424)
Content encrypted: (0000D5C21192DD010000FFFF04040404)

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


Kann mir da jemand helfen?

Schöne Grüße Ludwich

Ich versuche mal alle Labels zu sammeln und Nützliches zu kumulieren.
http://www.ludwich.de/ludwich/smart_home_IdOTy.html
PS:Wenn es fundierter wird gern auch in FHEM Wiki :-)

technyj

Zitat von: mha am 15 November 2016, 22:14:22
Mahlzeit,
ich habe nun meine ersten Erfahrungenmit  TCPDUMP auf Android gesammelt und bin auf Folgende Seite gestoßen:
http://icomen.yunext.com/api/device/wifi/list?accessKey=Q763W08JZ07V23FR99410B3PC945LT28&username=manfred%40mustermann.de&password=5F4DCC3B5AA765D61D8327DEB882CF99

password ist md5 (Buchstaben groß) des Passworts, Mailadresse hier im Beispiel manfred@mustermann.de

Hier erhalte ich ohne Paketsniffer die nötigen Daten, um das erforderliche UDP-Paket zu generieren:
  {"list":[{"macAddress":"XXXXXXX","companyCode":"C2","deviceType":"11","authCode":"92AA","deviceName":"Aquarium1","imageName":"","orderNumber":1,"lastOperation":1077151974282}],"success":true


Hallo, wie soll ich deinen Post verstehen? Wenn ich meine email einsetze und mein PW md5 verschluessel komme ich nicht zum Ziel. Was mache ich falsch, bzw was ist der Accesskey? Vielen Dank

ludwich

Ich hab es gerade nochmals probiert, bei mir klappt es :-)

Der AccessKey ist statisch
MD5 deines Passwortes (in Orginalschreibweise) ziehen --> Im MD5 HASH alles in Großbuchstaben wandeln.
Die E-Mail ist wie bei der Anmeldung @ ist %40

Hilft das ?

ludwich



Zitat von: technyj am 19 November 2016, 01:39:52
Hallo, wie soll ich deinen Post verstehen? Wenn ich meine email einsetze und mein PW md5 verschluessel komme ich nicht zum Ziel. Was mache ich falsch, bzw was ist der Accesskey? Vielen Dank

snessl

#35
Hallo,
hat es von euch schon jemand geschafft die Funksteckdose anzusprechen?
Den individuellen "addressCode" für die RF Empfänger habe ich auf der  icomen.yunext.com Seite ausgelesen. Ich habe jedoch auch Probleme, die Daten per AES zu verschlüsseln...

Ich habe mir gerade mit Hilfe eurer Infos und dem fauxmo Skript von makermusings ein Python Skript erstellt, welches eine WeMo Steckdose emuliert. Dieses läuft nun auf dem RaspberryPi und so werden die Wlan Steckdosen von EasyHome auch von Amazon Echo erkannt und können über Alexa gesteuert werden...

Wenn ich nun noch die Funksteckdosen per Sprachsteuerung ansprechen könnte, wäre das pefekt... :-)

Edit: Das Problem hat sich gelöst. Zum Kodieren habe ich auf dem Skript von bepe aufgebaut. Ich hatte nur noch einen Fehler in dem Datenpaket. Nun funktioniert aber auch die Ansteuerung der RF Steckdosen ohne Probleme.

Viele Grüße
Sebastian

HLCPsycho

bepe hat den Kern bereits als Powershell-Script gepostet. Ich habe allerdings auch ein wenig gebraucht um das mit der Verschlüsselung zu verstehen.

Habe hier mal ein C#-Snippet:
        public static string DecryptString(byte[] encryptedString)
        {
            using (var provider = new AesManaged())
            {
                provider.Padding = PaddingMode.Zeros;
                provider.BlockSize = 128;
                provider.KeySize = 128;
                provider.IV = Encoding.UTF8.GetBytes("0123456789abcdef");
                provider.Key = Encoding.UTF8.GetBytes("0123456789abcdef");
                provider.Mode = CipherMode.CBC;

                var test = provider.CreateDecryptor().TransformFinalBlock(encryptedString, 0, encryptedString.Length);
                return ByteArrayToString(test);
            }
        }


Wichtig ist wohl dabei, dass Padding, BlockSize und KeySize vor dem IV und Key gesetzt werden, da sonst die Fehlermeldung wegen der Keylänge kommt.
Somit sollte sich also das "verschlüsselte" Element in dem abgefangenen UDP-Paket (z.B. über die Fritzbox-Protokollierung) in Klartext übersetzen lassen. Danach muss man es natürlich wieder verschlüsseln um es nutzen zu können. Habe nur leider null Erfahrung mit Programmierung für Android-Geräte. Wenn jemand ein gutes Tutorial kennt, wie ich eine "One-Click-Lösung" für Andoid erstellen kann immer her damit.

nifram

#37
hallo, ich sitze seit ein paar Tagen und versuch das ganze System zum laufen zu bringen. .. fast alles geht, nur noch  die  RF Empfänger ... ich habe schon den "AddressCode" für sie heraus gefunden aber ich verstehe nicht wie genau sollte ich diese lange Nummer zusammen stellen. Ich habe nach Anleitung die wifiplug-cloudfetch.php bei mir ausgefüllt. Die zeigt mir im Browser bzw. im Terminal nur "#!/usr/bin/php Usage: on|off". Ich habe wirklich überall nach einer Anleitung gesucht und herum probiert mit online crypter, aber irgendwas mach ich nicht richtig :-( kann mir bitte jemand helfen?

Danke im Voraus Mark

Ronson1909

Zitat von: nifram am 02 Februar 2017, 18:16:20
hallo, ich sitze seit ein paar Tagen und versuch das ganze System zum laufen zu bringen. .. fast alles geht, nur noch  die  RF Empfänger ... ich habe schon den "AddressCode" für sie heraus gefunden aber ich verstehe nicht wie genau sollte ich diese lange Nummer zusammen stellen. Ich habe nach Anleitung die wifiplug-cloudfetch.php bei mir ausgefüllt. Die zeigt mir im Browser bzw. im Terminal nur "#!/usr/bin/php Usage: on|off". Ich habe wirklich überall nach einer Anleitung gesucht und herum probiert mit online crypter, aber irgendwas mach ich nicht richtig :-( kann mir bitte jemand helfen?

Es funktioniert also nur nicht der slave Befehl? Und die Slave Adresse kennst du? Wie schon von anderen geschrieben schaut der unverschlüsselte Teil so aus:

Slave aus:
00FFFFC21192DD08xxxxxx7004040404

Slave ein:
00FFFFC21192DD08xxxxxx6004040404

Wobei du xxxxxx durch die Slave Adresse ersetzen musst, z.B. A4CE79. Dieser String muss dann codiert werden mit AES CBC mit Key und Initialisierungsvektor (IV)

0123456789abcdef
(das ist in hex 30 31 32 33 34 35 36 37 38 39 61 62 63 64 65 66)

Kann man z.B. auf http://aes.online-domain-tools.com/ machen. Das verschlüsselte Ergebnis packst du dann hinter den unverschlüsselten Anfang

0140yyyyyyyyyyyy10

wobei du y durch deine MAC ersetzt, z.B. 009569A7169E

Das Ergebnis ist dann z.B. bei mir:

0140009569A7169E10D108321C569D22918ED3BC5908CAC173 für Slave ein
0140009569A7169E109D86A35565BDD42F519E36CED2E33F09 für Slave aus

Ich hoffe, das fasste es nochmal zusammen.

nifram


sandra

Hallo,
ich habe mir letztes Jahr bei Aldi 2 Wifi Steckerset Außen gekauft, nachdem ich mich jedoch nicht bei dieser App anmelden möchte und noch keine weitere Hardware/Software habe, um euer System nutzen zu können, habe ich mich jetzt dazu entschlossen ersteinmal zwei Steckdosen mit Funkfernbedienung zu verwenden, welche ich später in euer System einbinden kann. Hierzu gleich mal Danke für die super Seite und auch das Script für Neulinge, ich werde mich dem ganzen dann weiter zuwenden, wenn die anderen Baustellen abgearbeitet sind.
Nachdem ich beim googeln auf eure Seite aufmerksam geworden bin, wollte ich jetzt hier einfach mal fragen, ob jmd von euch Interesse an den 2 EasyHome Wifi Steckerset Außen hat, da ich den Kassenzettel nicht mehr finde und sie deshalb auch nicht zurück geben kann.

Ich weis dass dieser Beitrag nicht direkt etwas mit FHEM zu tun hat, aber ihr wart ja von den Steckdosen und dem Preis begeistert.

LG

münster

Hallo,

hat hier jemand weitergeforscht?

Ich habe das Set dieses Wochenende vom Wertstoffhof mitgenommen (spricht schon irgenwie für sich selbst, wenn jemand das Ding nach einem halben Jahr wegwirft ... ;-)).

Mich würde interessieren, ob's baugleiche Geräte gibt (womöglich günstig aus China direkt).
Und grundsätzlich, was hier damit nun realisiert werden konnte.
Konnten z.B. die Funk-Dosen schon angesteuert werden?
Über angepassten yunex-Link komme ich zumindest an das Hauptgerät ran.

doITyourself

Hallo zusammen,

erst einmal vielen Dank an alle, die schon sehr gute Forschungs-Vorarbeit geleistet haben.

Ohne Euch wäre ich nicht weitergekommen :)

Inzwischen habe ich es nun fertiggebracht, sowohl Hauptschalter als auch Nebenschalter  von einem Raspberry Pi mittels einem Perl-Skript zu schalten und möchte das als kleinen Dank an die Community zurückgeben.

Vorher musste ich allerdings das Perl-Modul für AES-Verschlüsselung über CPAN installieren, da Debian das nicht mitliefert. Doch das ist ein anderes Thema, das ausführlich in anderen Foren beschrieben ist.

Ansonsten muss man nur noch die MAC-Adresse und die IP-Adresse des Funkmodules, sowie die  ID des RF-Schalters (wie man die erhält ist weiter oben beschrieben) anpassen.

Und eventuell muss noch am $count etwas nachgebessert werden ...


#!/usr/bin/perl
#
# Meldungen an den Funkschalter senden

use IO::Socket;
use Crypt::Mode::CBC;

# RF-Codierung der Remot-Dose
my $rf1= 0xcc ;
my $rf2= 0xdd ;
my $rf3= 0xee ;

# MAC-Adresse des Funk-Schalters
my $mac1 = 0x00 ;
my $mac2 = 0x95 ;
my $mac3 = 0x69 ;
my $mac4 = 0xca ;
my $mac5 = 0xff ;
my $mac6 = 0xeE ;

my $count = 999 ;
my $action = 0 ;

my $dest = "192.168.127.119" ;
my $port = 8530 ;

if ( $ARGV[0] eq "ON" )
   { $action = 1 ; }
elsif ( $ARGV[0] eq "OFF" )
   { $action = 2 ; }
elsif ( $ARGV[0] eq "ON2" )
   { $action = 3 ; }
elsif ( $ARGV[0] eq "OFF2" )
   { $action = 4 ; }

# Schluessel und Vektordefinition
my $key = '0123456789abcdef'; # length has to be valid key size for this cipher
my $iv  = '0123456789abcdef';  # 16 bytes



my $head = pack "CCCCCCCC" ,
           0x1 , # Konstante
           0x40, # Senden
           $mac1, $mac2, $mac3 , $mac4, $mac5, $mac6 ; # MAC-Adresse ;

my $message = pack "CCCCCCC",
            0x00 ,    # Const
            $count/256, $count%256 , # Count-Nr.
            0xC2 , # Company Code
            0x11 , # Device Type
            0x92, 0xdd ; # AuthCode

if ($action == 1) # MAIN ON
{
     $message .=  pack "CCCCC",
                  0x01,    # Set MAIN Command
                  0x00,0x00,0xFF,0xFF; # Command: On
}
elsif ($action == 2) # MAIN OFF
{
     $message .=  pack "CCCCC",
                  0x01,    # Set MAIN Command
                  0x00,0x00,0x00,0xFF; # Command: On
}
elsif ($action == 3) # RF ON   
{
     $message .=  pack "CCCCC",
                  0x08,    # Set MAIN Command
                  $rf1,$rf2,$rf3, # Adresse RF-Device
                  0x60; # Command: On
}
elsif ($action == 4) # RF OFF   
{
     $message .=  pack "CCCCC",
                  0x08,    # Set MAIN Command
                  $rf1,$rf2,$rf3, # Adresse RF-Device
                  0x70; # Command: On
}
else
{ printf STDERR "Usage:\n%s ON   - Main-Device einschalten\n%s OFF  - Main-Device ausschalten\n%s ON2  - Slave-Device einschalten\n%s OFF2 - Slave-Device ausschalten\n",
         $ARGC, $ARGC,$ARGC,$ARGC  ;
  exit 1 ;
}

my $cbc = Crypt::Mode::CBC->new('AES');
my $cryptmsg =  $cbc->encrypt($message , $key, $iv);

my $sizebyte = pack "C" , length $cryptmsg ;

my $datagram = $head . $sizebyte . $cryptmsg ;



$sock = IO::Socket::INET->new(Proto     => 'udp',
                              PeerPort  => $port,
                              PeerAddr  => $dest )
    or die "Creating socket: $!\n";

  $sock->send($datagram)."\n" or print "Error $!\n" ;

exit 0 ;    # Dieses Kommando auskommentieren, um die Daten anzuzeigen
while (length $datagram)
{  my $c = unpack "C", substr($datagram, 0 , 1 ) ;
      $datagram = substr ($datagram, 1) ;
      printf "%02x ", $c ;
}
print "\t( ";
while (length $message)
{  my $c = unpack "C", substr($message, 0 , 1 ) ;
      $message = substr ($message, 1) ;
      printf "%02x ", $c ;
}
printf " ) sent.\n";


HLCPsycho

#43
Ich hab mittlerweile ne App gebastelt, worüber ich meine eine Dose schalten kann. Ist mit Android Studio  entstanden, wobei ich zwischenzeitlich auch an einer C# Variante gebastelt habe. Leider funktioniert es seit dem Update auf Android 8.1 nicht mehr ganz so sauber wie vorher und ich finde mein Repository gerade nicht, bin mir aber ziemlich sicher, dass ich das auf GitHub weggesichert hatte. Hatte mich nur ewig nicht hier eingeloggt. Falls also noch Interesse am Basteln besteht... versuche mal wieder öfter hier vorbei zu schauen.

<Edit>Hab gerade den Quellcode wiedergefunden... ich weiß allerdings aktuell nicht wie ich das wieder lauffähig bekomme... das rundherum müsste ich mir wohl neu zusammenclicken, aber hier das wichtigste:

public class Lichtschalter extends AppCompatActivity
{

    private boolean _switchState;
    private TextView _textSwitchStatus;
    private Switch _lichtschalter;

    // Mit den folgenden genannten Daten lassen sich alle Zustände der beiden Dosen beschreiben!
    static final String _ipAdressSchreibtisch = "192.168.123.45";
    static final String _ipAdressCouch = "192.168.123.46";

    static final String _staticPartOfHeader = "0140";
    static final String _ambigiousPartOfMyMacAdresses = "009569a6";
    static final String _fullPrefix = _staticPartOfHeader + _ambigiousPartOfMyMacAdresses;

    static final String _macAdressSchreibtischSuffix = "ab12";
    static final String _macAdressCouchSuffix = "ab13";

    static final String _headerDataLength = "10";
    //Ab hier muss verschlüsselt werden:
    static final String _staticDecryptedPrefix = "00";
    // Da ich heruasgefunden habe, dass der hopCount keine Rolle spielt, gilt einer für alle! Es ist allerdings noch zu prüfen, ob das für ALLE Dosen diese Art funktioniert!
    static final String _hopCountDefault = "0000";
    static final String _hopCountCouchAn = "0064";
    static final String _hopCountCouchAus = "012e";
    static final String _hopCountSchreibtischAn = "0218";
    static final String _hopCountSchreibtischAus = "0217";
    static final String _staticDecryptedMiddlePart = "c21192dd010000";
    static final String _staticDecryptedPartFull = _staticDecryptedPrefix + _hopCountDefault + _staticDecryptedMiddlePart;

    static final String _decryptedOffSignal = "00";
    static final String _decryptedOnSignal = "ff";

    static final String _staticDecryptedPadding = "ff04040404";

    static final String _passPhrase = "0123456789abcdef";

    static final String _testAus = "0140009569a6549c10c6cff0f82030b4da6b712af8e5e37d8e";
    static final String _testAn = "0140009569a6549c10468c5db3f86ac57b1c58247531ac8c1b";

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lichtschalter);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        _textSwitchStatus = (TextView) findViewById(R.id.switchStatus);

// ToDo: Rausfinden warum das nicht geht!
//        Switch blub = (Switch) findViewById(R.id.lichtschalter);
//        if (blub != null)
//        {
//            blub.setOnCheckedChangeListener(onCheckedChanged(blub));
//        }

        _lichtschalter = (Switch) findViewById(R.id.lichtschalter);

        if(_lichtschalter != null)
        {
            _lichtschalter.setOnCheckedChangeListener(new OnCheckedChangeListener()
            {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
                {
                    if(isChecked)
                    {
                        _switchState = true;
                    }
                    else
                    {
                        _switchState = false;
                    }

                    try
                    {
                        tuWas();
                    } catch (UnknownHostException e)
                    {
                        e.printStackTrace();
                    } catch (SocketException e)
                    {
                        e.printStackTrace();
                    } catch (IOException e)
                    {
                        e.printStackTrace();
                    } catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                }
            });
        }
    }

    private void tuWas() throws Exception
    {
        java.net.InetAddress local = InetAddress.getByName(_ipAdressCouch);

        byte[] message;
        int server_port = 8530;

        DatagramSocket s = new DatagramSocket();

        if(_switchState == true)
        {
            message = hexStringToByteArray(_testAn);
//            message = buildFullCommand(_macAdressCouchSuffix, _decryptedOnSignal, _hopCountCouchAn);

            _textSwitchStatus.setText(_ipAdressCouch + " Switch is currently ON");
        }
        else
        {
            message = hexStringToByteArray(_testAus);
//            message = buildFullCommand(_macAdressCouchSuffix, _decryptedOffSignal, _hopCountCouchAus);

            _textSwitchStatus.setText(_ipAdressCouch + " Switch is currently OFF");
        }

        DatagramPacket dp = new DatagramPacket(message, message.length, local, server_port);
        s.send(dp);
    }

    /// <param name="macAdresse">Enthält nur den Teil der sich unterscheidet!</param>
    private static byte[] buildFullCommand(String macAdresse, String signal, String hopCount) throws Exception
    {
        byte[] encrytedByteArray = encrypt(_staticDecryptedPrefix + hopCount + _staticDecryptedMiddlePart + signal + _staticDecryptedPadding);
        String encryptedHexString = byteArrayToHexString(encrytedByteArray);
        // Aus irgendeinem Grund muss ich hier noch die Hälfte abschneiden, damit ich den gleichen encryptedString bekomme wie in C#
        encryptedHexString = encryptedHexString.substring(0, encryptedHexString.length()/2);

        String fullCommand = _fullPrefix + macAdresse + _headerDataLength + encryptedHexString;

        return hexStringToByteArray(fullCommand);
    }

    public static byte[] hexStringToByteArray(String s)
    {
        int len = s.length();
        byte[] data = new byte[len/2];

        for(int i = 0; i < len; i+=2)
        {
            data[i/2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16));
        }

        return data;
    }

    final protected static char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
    public static String byteArrayToHexString(byte[] bytes) {
        char[] hexChars = new char[bytes.length*2];
        int v;

        for(int j=0; j < bytes.length; j++) {
            v = bytes[j] & 0xFF;
            hexChars[j*2] = hexArray[v>>>4];
            hexChars[j*2 + 1] = hexArray[v & 0x0F];
        }

        return new String(hexChars);
    }

    private static byte[] encrypt(String sinput) throws UnsupportedEncodingException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException
    {
        String skey = _passPhrase;
        String siv = _passPhrase;

        byte[] key = skey.getBytes("UTF8");
        byte[] iv = siv.getBytes("UTF8");
        byte[] input = hexStringToByteArray(sinput);

        Cipher cipher = Cipher.getInstance("AES/CBC/ZeroBytePadding");
        SecretKeySpec keyspec = new SecretKeySpec(key, 0, 16, "AES/CBC/ZeroBytePadding" );
        IvParameterSpec ivparams = new IvParameterSpec(iv);
        cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivparams);

        byte[] encrypted = cipher.doFinal(input, 0, input.length);

        return encrypted;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_lichtschalter, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings)
        {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    public CompoundButton.OnCheckedChangeListener onCheckedChanged(Switch lichtschalter)
    {
        Toast.makeText(this, "The Switch is " + (lichtschalter.isChecked() ? "on" : "off"), Toast.LENGTH_SHORT).show();
        if(lichtschalter.isChecked())
        {
            _textSwitchStatus.setText(_ipAdressCouch + " Switch is currently ON");
        }
        else
        {
            _textSwitchStatus.setText(_ipAdressCouch + " Switch is currently OFF");
        }
        return onCheckedChanged(lichtschalter);
    }
}

</Edit>

kroseneg

Hallo

Der Thread ist zwar schon etwas älter, aber meine Antwort hat doch direkt was damit zu tun. Vielleicht sind bei dem einen oder anderen die erwähnten WLAN-Stecker ja noch im Einsatz, oder dümpeln auf dem Dachboden rum.

Warum ich schreibe: Ich habe für die Stecker, die die icomen-Cloud benutzen, eine MQTT-Bridge in Python geschrieben, die die Cloud vollständig ersetzen können sollte. Bisher habe ich diese zwar nur mit einer einzelnen Aldi-Steckdose probiert, ich denke aber, dass es problemlos mit anderen Marken und auch mit mehreren Steckdosen gleichzeitig funktionieren sollte.

Das Script findet ihr hier:

https://github.com/kroseneg/icomen-mqtt-bridge

Ich würde mich freuen, wenn es für jemanden nützlich ist :)

Viele Grüße