• Wenn du ebenfalls von dem Problem betroffen bist, dass dir die mögliche Maximalstärke über Bluetooth zu gering erscheint, so findest du hier evtl. eine Lösung, bzw. einen derzeitigen Workaround. ==> Lautstärke über Bluetooth zu gering <==
  • Wenn du ebenfalls von dem Problem betroffen bist, dass dein Smartphone seit Kurzem starke Klopfgeräusche von sich gibt, so findest du hier die bisherigen Lösungsansätze.

    ==> Smartphone macht Klopfgeräusche (sehr laut) <==

Smart Home [TUTORIAL] Baumarkt-Funksteckdosen mit Mi Home steuern

Blueforcer

Reisbauer
Hallo zusammen,

dies ist mein erster Post und möchte gleich mit einem Tutorial loslegen.

Ich bin begeistert vom Xiaomi Smart-Home Set. Preis/Leistung ist einfach unschlagbar. Allerdings gibt es für mich ein Problem:
Wie jeder Smarthome Hersteller kocht auch Xiaomi sein eigenes Süppchen und sperrt andere Geräte aus. Für mich war das Ziel Funksteckdosen aus dem Baumarkt (4 Stück für 12-15€) über die Mi Home App anzusteuern und die auch in Szenarien einzubinden.
Klar kann ich auch die xiaomi steckdosen verwenden aber ich habe keine Lust mit Euro-Adaptern zu arbeiten und >10€ für eine Steckdose hinzulegen.
Wenn alles fertig ist ist die Funktionsweiße folgende:
Die Xiaomi Universal IR Remote wird über Mi home Angesteuert und sendet per IR den Befehl zum Arduino. Dieser gleicht den empfangen Code ab und schaltet über einen 433mhz Sender die entsprechende Steckdose.
Um es kurz zu machen:
Wir bauen uns einen low-cost IR zu RF Umwandler!

Los gehts mit den benötigten Teilen:

  • -Xiaomi Gateway
    -Xiaomi universal IR Remote
    -Funksteckdosen ( Wichtig ist, dass man die Funksteckdosen mittels DIP-Schalters kodieren kann. )
    -Arduino (Ich verwende, aufgrund der geringen Größe, den Nano)
    -433 Mhz Sender
    -IR Empfänger (ich verwende eine TSOP1736) Bitte auf die Pin-Belegung achten!
    -Lötkolben und Zubehör sowie paar Kabel


Zuerst geht es an die Verkabelung der Sender und Empfänger an den Arduino.

Der 433Mhz Sender wird mit 5V Versorgt. Der IR-Empfänger mit 3,3V.
Der Data-Pin vom Sender geht an Pin8 und vom Empfänger an Pin11 vom Arduino

Der 433Mhz Sender benötigt außerdem noch eine Antenne:
Die einfachste Antenne ist ein Draht der Länge (bei 433 MHz entspricht das 17 cm).


.PNG.png


Ich habe das ganze in ein altes Gehäuse einer Funk universal Fernbedienung gebaut:
(Lasst euch nicht von den 2 größeren Platinen verwirren..Das sind die Fernbedienungen meiner leinwand und Rolladen, Diese werden auch über den Arduino angesteuert:)

20160719_172816_001.jpg


20160719_175112.jpg


Nun gehts an den Code:

Code:
#include <IRremote.h>
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
//Pins für Senden/Empfangen
#define irPin 11
#define 433Pin 11
//Pins für Rolladen Fernbedinung
#define rollohoch 4
#define rollorunter 5
//Pins für Leinwand Fernbedinung
#define leinhoch 6
#define leinrunter 7
IRrecv irrecv(irPin);
decode_results results;
void setup() {
  Serial.begin(9600);
  //Pins auf Output schalten und PullUP aktivieren
  pinMode(rollohoch, OUTPUT);     
  pinMode(rollorunter, OUTPUT);      
  pinMode(leinhoch, OUTPUT);     
  pinMode(leinrunter, OUTPUT);     
  digitalWrite(rollohoch, HIGH);
  digitalWrite(rollorunter, HIGH);
  digitalWrite(leinhoch, HIGH);
  digitalWrite(leinrunter, HIGH);
  //Sende und Empfangs-Pins aktivieren
  irrecv.enableIRIn();
  mySwitch.enableTransmit(433Pin);
}
void loop() {
   if (irrecv.decode(&results)) {         //Wenn Datenpaket empfangen
   Serial.print("0x");
      Serial.println(results.value, HEX); //Schreibe HEX-Wert in die Konsole
      switch (results.value) {       //wähle je nach empfangenem HEX-Wert
         case 0x2FD58A7: //Wenn HEX, dann...... Hier müsst ihr euren notierten Infrarot code einfügen
            Serial.println("SteckdoseOn");
            mySwitch.switchOn("10101", "100000"); //Schalte steckdose mit Code X AN
            break;
         case 0x2FD7887: //Hier müsst ihr euren notierten Infrarot code einfügen
            Serial.println("SteckdoseOff");
            mySwitch.switchOff("10101", "100000"); //Schalte steckdose mit Code X AUS
            break;
         case 0x2FDD827: //Hier müsst ihr euren notierten Infrarot code einfügen
            Serial.println("SteckdoseOn");
            mySwitch.switchOn("10101", "110000");
            break;
         case 0x2FDF807: //Hier müsst ihr euren notierten Infrarot code einfügen
            Serial.println("SteckdoseOff");
            mySwitch.switchOff("10101", "110000");
            break;
         case 0x2FD9867: //Hier müsst ihr euren notierten Infrarot code einfügen
            Serial.println("RolloHoch");
            digitalWrite(rollohoch, LOW);  
            delay(200);                 
            digitalWrite(rollohoch, HIGH);
            break;
         case 0x2FDB847: //Hier müsst ihr euren notierten Infrarot code einfügen
            Serial.println("RolloRunter");
            digitalWrite(rollorunter, LOW);  
            delay(200);                 
            digitalWrite(rollorunter, HIGH);
            break;
         case 0x2FD42BD: //Hier müsst ihr euren notierten Infrarot code einfügen
            Serial.println("leinhoch");
            digitalWrite(leinhoch, LOW);  
            delay(200);                 
            digitalWrite(leinhoch, HIGH);
            delay(200);       
            digitalWrite(leinhoch, LOW);  
            delay(200);                 
            digitalWrite(leinhoch, HIGH);
            break;
         case 0x2FD02FD: //Hier müsst ihr euren notierten Infrarot code einfügen
            Serial.println("leinrunter");
            digitalWrite(leinrunter, LOW);  
            delay(200);                 
            digitalWrite(leinrunter, HIGH);
            delay(200); 
            digitalWrite(leinrunter, LOW);  
            delay(200);                 
            digitalWrite(leinrunter, HIGH);
            break;
        }
   irrecv.resume(); //Wieder auf empfang schalten
   }
}


Ladet den Sketch auf euren Arduino und startet die Konsole.
Schnappt euch eine alte Fernbedienung (bzw. keine die in dem Zimmer verwendet wird) und zielt auf den IR-Empfänger am Arduino und drückt eine beliebige taste.
In der Konsole erscheint nun der Code den die Fernbedienung gesendet hat:
z.B 0x2FD58A7.

Diesen notiert ihr euch und schreibt dazu welche Taste Ihr gedrückt habt.
Wandelt nun die Codeabschnitte entsprechend um:

Code:
 case [b]0x2FD58A7[/b]: //Wenn HEX, dann...... Hier müsst ihr euren notierten Infrarot code einfügen
            Serial.println("SteckdoseOn");
            mySwitch.switchOn("10101", "100000"); //Schalte steckdose mit Code X AN
            break;

in Case fügt ihr euren empfangen Code ein und legt fest welche Steckdose wie geschaltet werden soll, wenn das Datenpaket empfangen wird:

mySwitch.switchOn("10101", "100000") schaltet die Steckdose EIN.
mySwitch.switchOff("10101", "100000");schaltet die Steckdose AUS.
Die Nullen und Einsen entsprechen der DIP-Schalter Stellung der Steckdose

Unbenannt.png



Dies wiederholt ihr für alle Steckdosen jeweils für AN und AUS. Denkt dran immer andere Tasten auf der Fernbedienung zu verwenden :D

Ich bin noch einen kleinen Schritt weiter gegangen und schalte zusätzlich noch meine motorisierte Leinwand und den Rolladen...Damit der "Kinomodus" perfekt wird :lol:
Natürlich lässt sich das nun endlos erweitern. z.B eine MQTT oder IFTTT Anbindung.

Wenn Ihr alle Schaltzustände für jede Steckdose abgefrühstückt habt könnt ihr den modifizierten Code wieder auf den Arduino laden.
Nun könnt ihr mittels der Fernbedienung testen, ob alle Steckdosen wie gewünscht schalten.

Jetzt könnt Ihr eure Xiaomi universal IR remote mit der Fernbedienung anlernen. und alle Steckdosen über die Mi Home App steuern.

Screenshot_2016-07-19-19-17-08.png


Screenshot_2016-07-19-19-17-30.png




Ich hoffe ich habe nichts vergessen. Wünsche euch viel Spaß beim basteln!
 

balu_baer

Foren-Admin
Administrator
Hallo Blueforcer und willkommen im Mi-Forum :W

Danke für die ausführliche Anleitung; ein wirklich interessantes Projekt!

Schöne Grüße und noch viel Spaß bei uns,
Marco :W
 

Toobie

Reisbauer
Sehr gut.
Frage am Rande, hast du die Xiaomi IR zum laufen bekommen?
Das home App geht bei mir regelmäßig ins force close, so dass ich es nur angeschlossen habe und nicht nutzen kann.
 
Oben Unten