mumbi Funksteckdosen (selbstlernend ohne DIP) mit fhem steuern

Eingetragen bei: Allgemein, FHEM, Hausautomation | 14

Bevor überhaupt das Thema Hausautomatisierung aufgekommen ist, hatte ich ein paar Funksteckdosen von mumbi (Amazon Link) gekauft und damit rumgespielt.

img_5183

Nachdem ich dann während des Hausumbaus über Funk-Jalousien, Funk-Lichtschalter und deren Ansteuerung nachgedacht hatte, kamen mir diese Dosen auch wieder in den Sinn. Ich nutze momentan fhem (Link) mit einem Raspberry PI und bin wirklich mehr als zufrieden. (Bei Tests mit openHAB (Link) bin ich zu keinem für mich vernünftigen Ergebnis gekommen).

Zu fhem möchte ich an dieser Stelle nicht allzu viel sagen. Es ist ein Projekt von Rudolf König zur Hausautomatisierung über Perl. Nach der wirklich simplen Installation auf einem Raspberry PI können (sofern man die passenden Adapter und Sender/Empfänger angeschlossen hat) so ziemlich alle Hausautomatisierungssysteme kombiniert werden. Sei es Homematic, FS20 oder andere Protokolle mit 433 oder 868 MHz.

 

Funksteckdosen

Normale Funksteckdosen, die nicht, wie Komponenten von z.B. Homematic deren Status ob an oder aus zurückmelden, funken mit 433 MHz.
Die Protokolle sind in der Regel sehr simpel aufgebaut und enthalten einfache Bit-Folgen, die einen Haus- und Gerätecode sowie eine Funktion wie an/aus enthalten.
Simples Beispiel:
 0001   0100    01
(Haus) (Gerät) (an)

Nun ist das Einbinden solcher Steckdosen unfassbar einfach in fhem (Link) umzusetzen. Der Haken kommt leider bei den so genannten selbstlernenden Funksteckdosen, deren Haus- und Gerätecode nicht per DIP-Schalter eingestellt, sondern beim Betätigen einer der Tasten auf der Fernbedienung angelernt werden. Hier gibt es auch Systeme, die einen einfachen Code schicken, aber auch wiederum Systeme (dazu zählt das von mumbi und aber auch elro oder flamingo) welche irgendwelche Bitfolgen senden. Mit den eingebauten Plugins von fhem funktioniert das Ganze nicht, dafür wird leider etwas mehr Arbeit benötigt. Und darum soll es im Folgenden gehen.

Hier schonmal ein Beispiel für eine mumbi Bitfolge:
Schaltet man mit Fernbedienung 1 den Kanal A an, so werden 4 Bitfolgen zu je 28 Bits verschicken
001001 001001100011 0010 0111 10
001001 100011001101 1001 0101 10
001001 010111111100 1001 1101 10
001001 011110110011 1001 1000 10
Aus vom selben Kanal bewirkt folgende 4 Bitfolgen
001001 110110001100 1110 0011 10
001001 110101101000 1001 0110 10
001001 001010100100 1001 1110 10
001001 100111100111 0111 0001 10
Unschwer zu erkennen, dass in den Bitfolgen auf den ersten Blick kein Haus- und Gerätecode versteckt ist. Ich werde in einem anderen Beitrag noch etwas genauer auf diese Bitfolgen und das was einige Benutzer aus dem Arduino-Forum und ich herausgefunden haben eingehen.

Tja, wie findet man nun diese Codes raus, um diese in fhem einzubinden. (UPDATEhttps://forum.fhem.de/index.php/topic,36399.60.html)

Auslesen der Codes aus der Fernbedienung

An dieser Stelle schon einmal alle benötigten Dateien in einer ZIP-Datei: (mumbi_tutorial)

Zu allererst wird ein Arduino-Board mit einem 433MHz-Empfänger benötigt. Die gibt es zusammen mit Sender (braucht man dann eh für fhem) bei eBay und Co. für ungefähr 5 Euro. (Link)
Dann wird der grandiose Flamingo-Switch Sketch von Karl-Heinz Wind (Github) benötigt. Ich habe es für meine Zwecke umgeschrieben (ist in der mumbi_tutorial.zip enthalten), da wir ja für jeden Kanal 4 Codes benötigen, die Library aber alle Codes (es werden sogar Bitfolgen mit 24 Zeichen gesendet) und davon immer nur einen anzeigt. Die Library habe ich noch einmal für die neuere Arduino-Version in die mumbi_tutorial.zip gepackt.

Angeschlossen wird der Receiver an PIN 3 (IRQ PIN 0) am Arduino Board, sowie an 5 V (VCC) und GND.

img_2220

Jetzt kann der Sketch hochgeladen und ausgeführt werden. Nach dem Öffnen der Konsole (9600 Baud) kann durch mehrmaliges Drücken einer Taste auf der Fernbedienung getestet werden, ob Signale ankommen.

Wenn etwas ankommt, so lange die selbe Taste (bitte keine andere) drücken, bis unter dem Satz Bin Data: genau 4 Zeilen mit Binärwerten stehen. Diese bitte inkl. gedrückter Taste notieren.

Den Sketch beenden und neu starten und für die übrigen 7 Tasten der Fernbedienung wiederholen.

bildschirmfoto-2016-09-23-um-20-52-50

 

Installation der benötigten Skripte in fhem

Bitte zuerst dieses feine Tutorial befolgen (falls noch nicht geschehen) (Link).

Danach müssen zwei Anpassungen im Dateisystem gemacht werden.

  1. Die Dateien aus dem Ordner /opt/rc-switch/rcswitch-pi/ sichern und mit dem Inhalt von send.tar.gz ersetzen

  2. Datei (00_GenShellSwitch.pm) nach /opt/fhem/FHEM kopieren (habe das Skript auch etwas angepasst!)

Nun lassen sich die Funksteckdosen wie folgt in fhem einbinden:

define Lampe_Test GenShellSwitch /opt/rc-switch/rcswitch-pi/send 0010011111111000110010011110 0010011111111111001001110110 0010011111111100111001100010 0010011111111111011001010110 0010011111111111110111000110 0010011111111111001001111010 0010011111111010001001011010 0010011111111111001110001110 310
attr Lampe_Test comment Stehlampe
attr Lampe_Test group Licht
attr Lampe_Test room Wohnzimmer
attr Lampe_Test webCmd toggle:on:off
attr Lampe_Test devStateIcon on:light_light_dim_100@#1c7efb off:light_light_dim_100@black

wobei der Befehl folgendermaßen aufgebaut wird:

define [device] GenShellSwitch /opt/rc-switch/rcswitch-pi/send [4 on codes] [4 off codes] [delay - bei mir hat 310 geklappt - dieser Wert muss ggfls. angepasst werden]

Das müsste es gewesen sein.

Ich hoffe ich habe an dieser Stelle nichts vergessen und es klappt auf Anhieb. Ansonsten bitte gerne einen Kommentar hinterlassen.

Viel Spaß beim Ausprobieren!!!

14 Antworten

  1. Wäh! Und ich habe meine Funksteckdosen gerade bei Kleinanzeigen verkauft. Jetzt bekomme ich gleich wieder Lust zum basteln.

  2. Hallo.
    Habe zur Zeit nur diese TEVION Funksteckdosen mit GS-9000, aber die bekomme ich am Pi nicht zum laufen.
    Am Arduino geht es, wenn ich auf die rc-switch Library verzichte, und das „manuell“ mache (code ist nicht von mir)

    //Der Code fuer ‚0‘
    digitalWrite(rc_pin,HIGH);
    delayMicroseconds(1000);
    digitalWrite(rc_pin,LOW);
    delayMicroseconds(500);
    return;
    }
    case ‚1‘:
    { //Der Code fuer ‚1‘
    digitalWrite(rc_pin,HIGH);
    delayMicroseconds(500);
    digitalWrite(rc_pin,LOW);
    delayMicroseconds(1000);
    return;
    }
    case ‚x‘:
    { //Der Code fuer x(sync)
    digitalWrite(rc_pin,HIGH);
    delayMicroseconds(3000);
    digitalWrite(rc_pin,LOW);
    delayMicroseconds(7000);
    }

    Leider gibt es auf dem PI anscheinend nur diese rc-switch Library. Da ich nun langsam die Nase voll habe, werde ich mir wohl günstige neue Funksteckdosen besorgen, die dann aber direkt mit dem nanoCUL laufen. Noch mal einen Sender am Pi möchte ich eigentlich nicht. Der CC1101 sendet auch viel besser, als diese billig Sender/Empfänger.
    Funksteckdosen von Intertechno IT-1500 funktionieren direkt „out-of-the-box“ mit FHEM, oder ?

    Aber noch kurz was hierzu:
    Ich habe das so gemach twie hier steht, Dateien ausgetauscht, 433Mhz Sender an GPIO 17, noch mal make ausgeführt (hatte alles noch mal gelöscht zwischendurch)
    Nun sagt mir FHEM so was:

    sudo: Kein TTY vorhanden und kein »askpass«-Programm angegeben
    2016.09.24 13:49:52 0: GenShellSwitch set -1
    2016.09.24 13:49:52 2: GenShellSwitch set Lampe_Test toggle
    2016.09.24 13:49:52 3: GenShellSwitch command line: cat error_send.txt | sudo /opt/rc-switch/rcswitch-pi/send 0010011111111000110010011110 0010011111111111001001110110 0010011111111100111001100010 0010011111111111011001010110 310
    2016.09.24 13:49:52 0: GenShellSwitch set cat error_send.txt | sudo /opt/rc-switch/rcswitch-pi/send 0010011111111000110010011110 0010011111111111001001110110 0010011111111100111001100010 0010011111111111011001010110 310
    cat: error_send.txt: Datei oder Verzeichnis nicht gefunden

    Wir gehen davon aus, dass der lokale Systemadministrator Ihnen die
    Regeln erklärt hat. Normalerweise läuft es auf drei Regeln hinaus:

    #1) Resprektieren Sie die Privatsphäre anderer.
    #2) Denken Sie nach bevor Sie tippen.
    #3) Mit großer Macht kommt große Verantwortung.

    sudo: Kein TTY vorhanden und kein »askpass«-Programm angegeben
    2016.09.24 13:49:52 0: GenShellSwitch set -1
    2016.09.24 13:49:52 2: GenShellSwitch set Lampe_Test toggle

    Tolle Fehlermeldung 😀
    Ist da irgend was mit den rechten nicht in Ordnung ?
    Habe aus einem anderen Tutorial das hier gemacht:

    sudo mv send /usr/bin/send
    sudo chown root:root /usr/bin/send
    sudo chmod u+s /usr/bin/send

    Woran kann das liegen ?

  3. Oh sehe gerade das der Ordner /opt/rc-switch verwendet wird.
    Mein rc-switch ist aber unter home.
    Habe es nun geänder auf /home/pi/rcswitch-pi
    aber geht trotzdem nicht

    • Hi,

      die Rechte:Gruppe bei mir stehen auf
      fhem:dialout.

      Ggfls. müsstest Du auch per
      sudo visudo
      erstmal fhem root-Rechte geben

      fhem ALL=(ALL:ALL) NOPASSWD:ALL

      Testen kannst Du vorher mit


      sudo /home/pi/rcswitch-pi [4 * code an oder aus] [310]

      Wobei es sein kann, dass Du an der 310 rumspielen musst.
      Wenn das geht, dann sollte es nur am Recht (s.o.) liegen.

  4. Hallo,
    ich habe auch Flamingo Steckdosen. Allerdings sind meine mit SF-500S bezeichnet.
    Kurz um wollte ich mit dem Skech den Code auslesen welcher gesendet wird.
    Leider zeigt mein Serial Monito nichts an.
    Hat jemand einen Tipp.
    Mein Empfänger Modul habe ich mit einer anderen Fernbedieung getestet.

  5. habe ein ähnliches problem … mit sudo /home/pi/rcswitch-pi/send xxx geht die lampe an… per sudo visudo habe ich fhem auch root-rechte gegeben….fhem sagt jedoch „configfile: Cannot load module GenShellSwitch“

    • okay „fhem ALL=(ALL:ALL) NOPASSWD:ALL“ bringt irgendwie nichts, oder ich schreibe es nur an die falsche stelle in visudo … habe es mit „chown -R pi:pi /opt/fhem“ hinbekommen

  6. Hallo!
    Dies ist das erste Mal, dass ich mit einem Arduino arbeite. Es wäre nett, wenn Ihr mir etwas weiter helfen könntet.
    Leider funktioniert es bei mir noch nicht. Wahrscheinlich habe ich einfach nur ein Verständnisproblem.
    Ich beschreibe mal, was ich gemacht habe.
    -Verkabelung: 5V -> VCC, GND -> GND, PWM 2 -> DATA und natürlich den Arduino Mega per USB an den PC
    -Am PC:
    -mumbi_tutorial.zip runter geladen und entpackt
    -FlamingoSwitch entpackt
    -die Datei „flamingoswitch_detector“ aus dem gleichnamigen Ordner in den Ordner „FlamingoSwitch“ verschoben.
    -die Arduino-Software geöffnet
    -Com-Port und Board unter Werkzeuge ausgewählt. Um zu überprüfen, ob es auch das richtige ist, den „Blink-Sketch“ gestestet. Blinkt!
    -Datei -> öffnen -> flamingoswitch_detector -> flamingoswitch_detector
    -Es öffnet sich ein neues Fenster mit drei Reitern (flamingoswitch_detector, FlamingoSwitch.cpp und FlamingoSwitch.h).
    -auf „hochladen“ klicken“
    -ca. Fünf Sekunden warten
    -Strg+Umschalt+M öffnet die Konsole
    -Ab dann kann ich an der Fernbedienung drücken, was ich will. Eine Ausgabe erscheint nicht.

    Kann mir da jemand weiter helfen?
    LG
    Franz

  7. Die ausgegebenen Fehlermeldungen beim hochladen des Sketches:

    sketch\FlamingoSwitch.cpp:12:48: warning: converting to non-pointer type ‚long unsigned int‘ from NULL [-Wconversion-null]

    unsigned long FlamingoSwitch::nReceivedValue = NULL;

    ^

    sketch\FlamingoSwitch.cpp: In constructor ‚FlamingoSwitch::FlamingoSwitch()‘:

    sketch\FlamingoSwitch.cpp:22:33: warning: converting to non-pointer type ‚long unsigned int‘ from NULL [-Wconversion-null]

    FlamingoSwitch::nReceivedValue = NULL;

    ^

    sketch\FlamingoSwitch.cpp: In member function ‚void FlamingoSwitch::enableReceive()‘:

    sketch\FlamingoSwitch.cpp:140:34: warning: converting to non-pointer type ‚long unsigned int‘ from NULL [-Wconversion-null]

    FlamingoSwitch::nReceivedValue = NULL;

    ^

    sketch\FlamingoSwitch.cpp:141:38: warning: converting to non-pointer type ‚unsigned int‘ from NULL [-Wconversion-null]

    FlamingoSwitch::nReceivedBitlength = NULL;

    ^

    sketch\FlamingoSwitch.cpp: In member function ‚bool FlamingoSwitch::available() const‘:

    sketch\FlamingoSwitch.cpp:155:43: warning: NULL used in arithmetic [-Wpointer-arith]

    return FlamingoSwitch::nReceivedValue != NULL;

    ^

    sketch\FlamingoSwitch.cpp: In member function ‚void FlamingoSwitch::resetAvailable()‘:

    sketch\FlamingoSwitch.cpp:160:33: warning: converting to non-pointer type ‚long unsigned int‘ from NULL [-Wconversion-null]

    FlamingoSwitch::nReceivedValue = NULL;

    ^

    Der Sketch verwendet 6344 Bytes (2%) des Programmspeicherplatzes. Das Maximum sind 253952 Bytes.
    Globale Variablen verwenden 550 Bytes (6%) des dynamischen Speichers, 7642 Bytes für lokale Variablen verbleiben. Das Maximum sind 8192 Bytes.

  8. Habe eine einfache Lösung gesucht um gewisse Beleuchtungen, die über eine Steckdose direkt mit Strom versorgt werden müssen, schnell ein- und auszuschalten, ohne dabei den Stecker immer ziehen oder stecken zu müssen. Zudem auch den Komfort zu haben beim Licht ein- und ausschalten nicht aufstehen zu müssen.Im Großen und Ganzen bin ich sehr zufrieden mit den Funksteckdosen von Mumbi. Sie erfüllen ihren Zweck und sind für den Preis sehr gut verarbeitet. Ich kann mit gutem Gewissen eine klare Kaufempfehlung aussprechen!

  9. Hallo….
    hat super funktioniert!! Danke

    Allerdings, was ich mich frage…
    Woher weiß die Steckdose das dieser Code zum einschalten ist:
    0010010001010001100011111001 0010000000000000000000000000 0010011001010111010101000101 0010011001100100111001010001
    und dieser zum ausschalten:
    0010011011111000010100001101 0010011101000001010101101001 0010011100110001100000011101 0010010100110011000000010101
    ??????

    ich sehe in den Codes keine Parallelen oder der gleichen.

    Ich frage weil:
    ich würde gerne mehr wie 4 Steckdosen betreiben, also stelle ich mir selber einen Code zusammen, und lerne die Steckdose auf diesen Code an. nur den Rückcode kenne ich leider dann nicht….
    Versteht ihr wie ich es meine??

    • Hallo!

      Das ist das Problem. Da liegt ein Algorithmus hinter, der in letzter Zeit endlich geknackt wurde. Im Grunde hat jede Fernbedienung einen eigenen Code (nicht mit Hauscode usw. zu verwechseln) mit welchem dann die Codes verschlüsselt werden. Dazu kommt noch ein 17-stelliges Array von zufälligen Zahlen, die zur Verschlüsselung benutzt werden (diese scheinen über alle Fernbedienungen gleich zu sein und vom „Werk“ vorgegeben sein).
      Wenn jemand richtig Lust hat einzusteigen: FHEM Forum

      Viele Grüße

      Björn

      • Hey … Danke;

        Lust schon… nur das sieht nach höherer Mathematik aus 🙁

        Ich verstehe noch nicht ganz wie der Algorithmus und die Verschlüsslung aussieht…

        • Ja, ist etwas höhere Mathemtik…

          Wichtig ist diese Info, die allen, die die Entschlüsselung probiert haben, immer gefehlt hat:
          uint8_t key[17] = {9, 6, 3, 8, 10, 0, 2, 12, 4, 14, 7, 5, 1, 15, 11, 13, 9}; //Cryptokey table

          Wenn Du Deine eineindeutige Transmitter ID gefunden hast,
          uint16_t txID = 0x9ac0;
          Dann kannst Du damit alle Codes errechnen.

          Was ich persönlich gemacht habe: Auf dieser Seite Online-Tool kann man sich zu einer Transmitter ID alle Codes generieren lassen. Habe mir dann einfach eine ID ausgedacht, alle Codes rauskopiert, dann die Steckdosen von meinen Fernbedienungen „abgelernt“ und sie einfach mit meiner virtuellen FHEM-Fernbedienung (ausgedachte Transmitter ID) geschaltet. Damit hatte ich plötzlich Fernbedienungen mit acht Kanälen über, die ich für andere Steuerungen nutzen konnte.

Hinterlasse einen Kommentar zu He Antworten abbrechen