Raspberry Pi: rcswitch-pi und openHAB

Als Alternative zu der hier beschriebenen Methode, mit dem Raspberry Pi 433 Mhz Funksteckdosen zu steuern, habe ich mir heute rcswitch-pi angesehen. Diese Variante kommt mit relativ wenig Hardware aus. Ihr benötigt lediglich einen Raspberry Pi, das hier beschriebene Funkmodul (oder vergleichbar) sowie drei female/female Jumperwires.

Anschluss des Funkmoduls

Der Anschluss des Moduls an den Raspberry Pi ist denkbar einfach. Der Pin GND vom Funkmodul wird mit Pin 6 des Headers P1 verbunden. VCC muss mit Pin 2 verbunden werden und der Dateneingang mit Pin 11 (ich gehe davon aus, dass rcswitch-pi mit der Standardkonfiguration betrieben wird.)

 Installation

Als erstes legen wir ein Verzeichnis für die Software an und wecheln dorthin:

[bash]
mkdir /opt/rc-switch
cd /opt/rc-switch
[/bash]

Als nächstes installieren wir wiringPi, das Voraussetzung für rcswitch-pi ist:

[bash]
git clone git://git.drogon.net/wiringPi
cd wiringPi/
./build
[/bash]

Nun geht es an die Installation von rcswitch-pi:

[bash]
cd /opt/rc-switch
git clone https://github.com/domfi/rcswitch-pi.git
cd rcswitch-pi/
make
[/bash]

Verwendung

Jetzt können wir testen, ob unsere Installation funktioniert. Der folgende Befehl schaltet Dose A(1) mit der Haus-ID 11111 an(1):

[bash]
./send 11111 1 1
[/bash]

Die Syntax lautet also

[bash]
send HAUSID GERÄTEID BEFEHL
[/bash]

openHAB

Ein entsprechendes Item würde in der openHAB Konfiguration so aussehen:

Switch TEST1 "Funksteckdose 11111 A"  {exec="OFF:/opt/rc-switch/rcswitch-pi/send 11111 1 0, ON:/opt/rc-switch/rcswitch-pi/send 11111 1 1"} 

Update:

Mir wurde freundlicher Weise der Code für eine Version von rcswitch-pi zur Verfügung gestellt, die auch Geräte von Intertechno unterstützt.

send.cpp:

[c]
/*
 Usage: ./send <command>
 SystemCodeType is 1 for default and 2 for switches with 10 Bits 123456ABCD
 Command is 0 for OFF and 1 for ON
 */

#include "RCSwitch.h"
#include
#include
#include

int main(int argc, char *argv[]) {
   
    /*
     output PIN is hardcoded for testing purposes
     see <a href="https://projects.drogon.net/raspberry-pi/wiringpi/pins/">https://projects.drogon.net/raspberry-pi/wiringpi/pins/</a>
     for pin mapping of the raspberry pi GPIO connector
     */
    int PIN = 0;
    int  systemCodeType = atoi(argv[1]);
    char* systemCode = argv[2];
    int unitCode = atoi(argv[3]);
    int command  = atoi(argv[4]);
    char* pSystemCode = systemCode;
   
    if (wiringPiSetup () == -1) return 1;
 printf("sending systemCode[%s] unitCode[%i] command[%i]\n", systemCode, unitCode, command);
 RCSwitch mySwitch = RCSwitch();
 mySwitch.enableTransmit(PIN);

    switch(systemCodeType) {
      case 1:
 switch(command) {
 case 1: mySwitch.switchOn(systemCode, unitCode);
  break;
 case 0: mySwitch.switchOff(systemCode, unitCode);
  break;
 default:
 printf("command{%i] is unsupported\n", command);
 return -1;
 }
      case 2:
    switch(unitCode) {
 case 1: strcat(pSystemCode,"0FFF");
  break;
 case 2: strcat(pSystemCode,"F0FF");
  break;
 case 3: strcat(pSystemCode,"FFF0");
  break;
 case 4: strcat(pSystemCode,"FF0F");
  break;
 default:
 printf("unitCode[%i] is unsupported\n", unitCode);
 return -1;
 }
 switch(command) {
 case 0: strcat(pSystemCode,"0F");
  mySwitch.sendTriState(pSystemCode);
  break;
 case 1: strcat(pSystemCode,"F0");
  mySwitch.sendTriState(pSystemCode);
  break;
 default:
 printf("command[%i] is unsupported\n", command);
 return -1;
        }
    }
    return 0;
}
[/c]

Die Syntax ändert sich leicht:

./send 1 11111 1 1 für Elro usw.
./send 2 00FF00 1 1 für Intertechno

Wenn ihr es testet, hinterlasst einen Kommentar, damit ich weiß, ob der Code funktioniert. Ich kann es leider nicht selber ausprobieren, weil ich keine Intertechno Geräte besitze.

Update:

Ich habe heute von einem Leser eine Version von rcswitch-pi erhalten, die mit Funksteckdosen und -schaltern vom Typ Intertechno B (z.B. CMR-500) funktioniert, bei denen 16*16 Geräte adressiert werden können. Hier gibt es den Code zum Download:

rcswitch-pi Intertechno B 

Vielen Dank dafür an Marcel!

Die Syntax ist identisch mit der Version für die anderen Intertechno-Geräte. Es muss als der Parameter 2 übergeben werden, um die abgewandelte Adressierung zu verwenden.

 

4.22 avg. rating (85% score) - 9 votes

78 Gedanken zu “Raspberry Pi: rcswitch-pi und openHAB

  1. Pingback: openHAB auf Raspberry Pi | G-SURF

    • Jein. Das Problem an der Sache ist, dass die Steuerung der Funksteckdosen zeitkritisch ist. Da das Raspberry Pi ein Multitaskingsystem ist, können eine hohe Last durch andere Prozesse dazu führen, dass Schaltvorgänge fehlschlagen. Die Zuverlässigkeit ist also bei der aufwendigen Lösung etwas höher. Allerdings ist jetzt auch nicht so, dass das Ganze total unzuverlässig funktioniert. Für € 2,50 könnntest du ja einfach ausprobieren, ob dir das so reicht. ich würde diese Lösung als solide Einsteigervariante sehen und die aufwendige als Luxusversion.

  2. Hi Jan,

    vielen Dank für das coole Tutorial. Habe gerade auch drüber getwittert. Hast Du auch ein Twitter-Handle, dass ich beim nächsten Mal referenzieren könnte?

    Gruß,

    Thomas E.-E.

    • Hi Thomas,

      bei der Unterstützung, die ich in eurer News Group erhalten habe, muss ich schließlich auch etwas zurückgeben. 😉 Bei Twitter bin ich bisher nicht vertreten.

  3. Hallo,

    du hast nen winzigen Fehler in dem openHAB-Item:

    Switch TEST1 „Funksteckdose 11111 A“ {exec=“OFF:/opt/rc-switch/rcswitch-pi/send 11111 1 0, ON:/opt/rc-switch/rcswitch-pi/send 11111 1 1″}

    statt

    Switch TEST1 „Funksteckdose 11111 A“ {exec=“OFF:/opt/rc-switch/rcswitch-pi/send 11111 1 0, ON:/opt/rc-switch/rcswitch-pi/send 11111 1 0″}

  4. Ich hab das heute so mal an meinen Pi mit Raspbmc angesteckt und installiert (ohne openHAB), läuft auf Anhieb. Mal schauen, wie es nach dem nächsten Update ist.
    In den nächsten Tagen werd ich dann mal schauen, ob man nicht einen entsprechenden Befehl über die xbmc Oberfläche absetzen kann.
    Wenn schon einer weiss, wie es geht, kann er ja mal nen Fingerzeig geben.
    Timing Probleme habe ich bisher nicht provozieren können, es wurde immer zuverlässig geschaltet, auch wenn gerade nen 1080p mkv lief.

    • Danke für das Feedback. Es scheint wohl auch von den verwendeten Funksteckdosen abzuhängen, wie stabil das Ganze unter Last läuft. Eventuell auch von anderen Faktoren wie Stromversorgung usw.. Man muss allerdings berücksichtigen, dass die CPU-Last des Raspberry Pi beim Abspielen eines .MKV-Files nicht wirklich hoch ist. Die Rechenleistung kommt dann von der integrierten GPU. Ich denke bei wirklich CPU-lastigen Vorgängen wird es spannender.

      Um XBMC als Fernbedienung zu verwenden, wäre ein Addon wahrscheinlich der eleganteste Weg. Damit habe ich mich allerdings auch noch nicht auseinandergesetzt. Lass mich wissen, wenn eine Lösung hast! 😉

  5. Hallo,

    ich habe dies implementiert und es funktioniert wunderschön mit weezy. Danach habe ich es aber mit xbian versucht. Man muss zuerst gcc, make un g++ mit apt-get installieren und danach kompilieren lassen aber es klappt.

    Aber die Befehle funktionieren nicht. Oder besser, die funktionieren aber nur seltsam. Einmal pro 20…

    Hättest du eine Idee warum? Ich versuche es zu vermeiden, ein zweites R-Pi mir zu kaufen aber das erste brauche ich als media center, dh da sollte unbedingt drauf XBMC laufen.

    Ich bedanke mich für deine Rückmeldung im Voraus, und bitte mein schlechtes Deutsch entschuldigen.

    Achilles

  6. Also, ich hab es geschafft. Xbian reagiert nicht so gut an Befehlen, deswegen ist es nötig die nice –19 parameter zu benutzen damit der Befehl mit höchster Priorität ausgeführt wird. zB:

    sudo nice –19 ./send 10010 3 0

    Ich hoffe es hilft jemandem. Und vielen Dank JG, du hast mir viel geholfen!

    • Ich denke, das Problem wird sein, dass zu viele Prozesse im Hintergrund laufen. Die erfolgreiche Übertragung der Schaltbefehle hängt stark vom Timing ab. Kleine Verzögerungen bei der Ausführung eines Befehls führen dazu, dass dieser vom Empfänger nicht mehr erkannt wird. Die Priorität das Prozesses mit nice zu erhöhen, macht daher auf jeden Fall Sinn.

  7. Hallo,

    sehr schöne Anleitung! Hast Du einen Hinweis, wie ich Intertechno Typ B ansteuern kann? In der RCSwitch.cpp gibt es das als Möglichkeit. Ich bin mir bei der der Syntax und ob ich etwas an der send.cpp ändern muss nicht sicher. So funktioniert das jedenfalls nicht. Auch nicht mit einer Glühbirne 🙂

    Ich möchte damit die Rolladen im Haus via einen CMR-500 von Intertechno ansteuern und ggf. aus der Ferne bei Unwetter o.ä. schließen können.

    • Man muss die send.cpp umcoden und den entsprechenden Code ergänzen. Ich kenne jemanden, der das erfolgreich gemacht hat und habe gerade den Code angefragt. Sobald ich eine Antwort habe, werde ich sie hier posten.

      • Vielen Dank für den Code.
        Es fehlen in den Headerzeilen jeweils hinter dem include: stdlib.h, stdio.h und string.h
        Außerdem scheint das nicht korrekt zu sein: printf(„command{%i] is unsupported

        Ansonsten funktioniert es bei mir im Moment nicht, ich muss die Verkabelung wohl nochmal prüfen.
        Ich versuch mich jetzt, da ich das mit dem Code wohl verstanden habe auch noch an einer Änderung des Programms. Wenn ich eine funktionierende Version habe, poste ich sie

        • Anscheinend gibt es da Probleme mit dem Syntax Highlighter Plugin für WordPress. Ich habe die Originaldatei über dem Code mal als Download verlinkt. Lass mich wissen, ob es damit besser klappt.

          • Leider (noch) nicht.

            Was mir bisher aufgefallen ist: Der erzeugte TriStateCode für meinen CMR-500 entspricht nicht dem, der z.B. vom FHEM-Wiki vorgerechnet wird. Weil der obige Code sich auch auf ein ein 4×4 Kanal-Modell bezieht. Der CMR-500 ist allerdings ein 16×16-Kanal-Modell. Außerdem scheint es, als ob einige notwendige Bits im Code nicht mit hinzugefügt sind.Ich glaube auch, dass er nicht lange genug sendet. Mit einer ITZ-500 Fernbedienung muss man auch schon ~1s drücken.
            Ich werde das zum Wochenende nochmal genauer unter die Lupe nehmen und etwas mit dem Code probieren. (Und vorher nochmal die Pinbelegung prüfen)

          • Jetzt hat es funktioniert, ich habe den Code noch auf alle 16×16 Möglichkeiten der Beschaltung erweitert.
            Außerdem haben einige andere Kleinigkeiten so nicht funktioniert. Ich kann den Quelltext auch gerne zur Verfügung stellen 🙂
            Jetzt werde ich das mit openHAB mal probieren 🙂

          • Schön, dass du es hingekriegt hast. Ich kann den Quellcode gerne im Artikel veröffentlichen. Je nach Wunsch entweder mit oder ohne namentlicher Nennung deiner Wahl.

          • Hi,
            mich würde der quellcode für die austockung der unitcodes (16 Möglichkeiten zu 16 Möglichkeiten des Hauscodes) ebenfalls interessieren, hier besteht bereits ein ELRO system mit 14 Dosen, alle auf dem selben Hauscode, diese sind schon über ein anderes System eingebunden und werden auch über einen IR/RF Wandler von einer Infrarofernbedienung bedient. Die Schalter möchte ich ungern alle umstellen und neu einbinden. Sollen aber nun auch über ein Webinterface über einen Raspi bedient werden.

            Außerdem sollte eigentlich vorwiegend am Unitcode etwas geändert werden. Alle bisherigen Scripte bauen auf unterschiedliche Hauscodes ab 4+ Steckdosen auf.

            Hoffe das man den Autor des Kommentars irgendwie anschreiben kann…

          • Ich bin mir nicht sicher, ob du das nicht falsch verstanden hast. Der Unitcode wird nicht aufgestockt. Es gibt einfach Geräte, bei denen er von Haus aus eine Stelle mehr hat.

          • Es ging darum das man mit dem Script oder dem rcswitch nur immer 4 Geräte ansprechen kann, um mehr Geräte (Doesen) anzusprechen müssen dann jeweils 4 immer einen weiteren Hauscode belegen. Somit sind nur maximal 16 Dosen über die Software steuerbar… möglich sind 256 😉 ich denke nicht das ich etwas falsch verstanden habe.

            hier das beispiel zum durchklicken 😉

            und nochmal schwarz weiss:
            HAUS/SYSTEM UNIT/GERÄT
            (0000) (1) (0000)
            jeweils 4BIT gesamt 8 Bit = 256 Möglichkeiten jeweils 16 Hauscodes (A-P) und 16 Gerätecodes (1-16)

            Mit allen bisher von mir gefundenen Scripten lassen sich nur (A-P)+(1-4) schalten.

            grml hoffe habe mich jetzt verständlich ausgedrückt.

          • Also eventuell habe ich ja auch etwas falsch verstanden. Meine Elro-Steckdosen haben 5 Bits für die Haus-ID. Also 2 hoch 5 Möglichkeiten = 32. Dazu 5 Bits für das Gerät, wovon aber nur eines aktiviert werden darf. Also hier 5 Möglichkeiten. Das sind 32 * 5 = 160 mögliche Geräte. Daran lässt sich durch andere Software rein gar nichts ändern, weil die Dosen sich einfach nicht anders adressieren lassen. Dass man unterschiedliche Haus-IDs nutzen muss, stellt aus meiner Sicht überhaupt kein Problem dar. Wenn deine Funktsteckdosen da andere Möglichkeiten bieten, brauchst du natürlich eine andere Software. Ich habe den Code für Steckdosen von Intertechno Typ B gestern erhalten und werde ihn gleich posten. Solltest du solche Geräte haben, dann kannst du damit die vollen 16×16 Möglichkeiten adressieren.

          • Hi, also ich selbst nutze ELRO 440!

            „5 Bits für das Gerät, wovon aber nur eines aktiviert werden darf.“

            Worin liegt hierbei die Logik? Dann hätte man das auch mit 2 Bit lösen können… Und genau darin liegt mein eigentliches Anliegen, es sind mind. 4 Bit (16 Gerätecodes) möglich. Aber diese sind softwaremäßig nicht implementiert, so das es nur 4 Geräte pro Hauscode geben kann. Frag mich auch mittlerweile ob ich der einzigste bin der mehr als 16 Dosen im Einsatz hat 😉 Aber schon jemand mit 2 ELRO Sets (6 Dosen) könnte sich ja wenigstens wundern, warum man nicht alle Geräte mit einem Hauscode ansteuern kann 😉

            Bei ELRO gab es irgendwelche Grundfunktionen beim Gerätecode ein Bit wegfiel (E ist glaube immer auf ON zu setzen) ebenso war ich der Meinung das letzte Bit (5) im Hauscode ebenfalls immer ON oder OFF sein sollte, kann mich aber auch täuschen, daher kam ich auf 8Bit (256 Kombinationen) über die 10 DIP Schalter.

            Und wie gesagt ich schalte die Dosen mit (nicht jeweils nur einem aktivierten Bit auf dem Gerätecode) über einen IR-RF Wandler ohne Probleme. Also die Möglichkeit hardwaremäßig ist auf jedenfall gegeben…

            Und schon namentlich sollte der Hauscode ja einem Haus/Zimmer oder Zusammenschluss aus mehreren Dosen beinhalten. In einem Mehrfamilienhaus über eine komplette Anlagensteuerung dürfte man da mit max 4 Dosen pro Zimmer schon in Bennenungsschwierigkeiten kommen.

  8. Hallo,

    danke für deine tollen Tutorials, sie helfen mir sehr bei meinem Einstieg.
    Ich habe leider das Problem, dass ich alle deine Befehle mit sudo ausführen muss damit ich die notwendigen Berechtigungen bekomme. Aber sobald sudo davor steht klappt auch das Schalten der Steckdosen. Leider gilt das nicht für die Implementierung bei openHAB. Kennst du eine Lösung?
    Danke

  9. Hey, bei mir funktioniert die zweite Variante mit Intertechno Steckdosen leider nicht. Sowohl für normale als auch Intertechno Steckdosen. Fehler: „Segmention fault“. Aber die alte ./send 11111 1 1 Variante nimmt er noch an, obwohl der Quellcode ja umgeschrieben wurde. Muss man irgendwie noch ne Einstellung ändern? Irgendetwas neustarten? Mfg matze

    • Das h ört sich für mich so an, als wäre irgendwas mit dem Code nicht ok. Hast du den von der Seite kopiert, oder über den Link die send.cpp heruntergeladen? Versuch mal den Download. Der Syntaxhighlighter macht manchmal komische Dinge mit dem Code. :/

      • Ich habe das gleiche Problem hier, habe die Datei heruntergeladen, aber gibt trotzdem eine Fehlermeldung:

        root@raspberrypi:~/wiringPi/rcswitch-pi# ./send 2 5 1 1
        sending systemCode[2] unitCode[5] command[1]
        Segmentation fault

          • Danke für den Tipp, habe noch etwas geändert gehabt ohne make nochmal laufen zu lassen, daher war es noch falsch. Jetzt funktioniert es fehlerfrei! 🙂

  10. Hallo,
    danke für die tolle Anleitung. Leider habe ich etwas Probleme.
    1. ich habe die geänderte send.cpp geladen und kopiert. Wenn ich nun make ausführe kommt folgende Meldung:
    g++ -c -o send.o send.cpp
    send.cpp:1:2: error: invalid preprocessing directive #d
    make: *** [send.o] Fehler 1

    Weiter hänge ich seit Stunden mit meinen Intertechnodosen in der Luft.
    Ich habe eine Rad das steht auf 1 / das zweite auf E.
    Welchen Code benötige ich zum senden?? Wenn ich das richtig sehe habe ich doch nur 2 für Intertechno 0000 für 1 und 00f0 für e dann ff für an oder f0 für aus??
    Ich wäre sehr dankbar für Hilfe

    Marko

    • Du musst den ursprünglichen Quellcode nehmen und nur die send.cpp ersetzen. Dann sollte das gehen-. Ohne die angepasste Version können deine Steckdosen nicht funktionieren.

  11. Danke erstmal für die schöne Anleitung.
    Ohne das ganze jetzt nachgebau zu haben, funktioniert das ganze denn auch mit den Intertechno Steckdosen ohne Codierrad etc. also diese die sich nach mit der Fernbedienung anlernen lassen?

    Das wäre für mich schon der Hammer weil die normale RCSwitch-Pi Versiond as nicht konnte. Bisher ist es mir nur mit dem Arduino, und dort auch nicht mit der RCSwitch Bibliothek gelungen diese Seckdosen anzusteuern.

    • Wie genau hast du die Steckdosen denn auf dem Arduino angesprochen? RCSwitch sollte sich eigentlich leicht anpassen lassen, wenn man funktionierende Arduino Quellen hat. Basiert schließlich beides auf C bzw. C++.

        • Ok, das sieht doch etwas komplizierter aus. Machbar ist es auf jeden Fall. Es kommt auch darauf an, welchen Funktionsumfang man implementieren möchte. Die HomeEasy Geräte scheinen bidirektional zu funktionieren. Und da kommst du mit einem Komandozeilentool nicht wirklich weit. Da müsste man schon in irgendeiner Form einen Daemon oder so schreiben. Wenn du funktionierende Quellen für Arduino hast, warum nutzt du die dann nicht? Du könntest den Arduino dann mit Uart, I2C oder SPI an den Raspberry anbinden. Vielleicht ist das einfacher? Uart Kommunikation habe ich bei mir zwischen dem Raspberry und einem ATMega8 laufen. Das war schon relativ einfach. Und mit Arduino sollte es eher noch einfacher sein. Bei einem 5V Arduino musst du bei Uart aber aufpassen, weil der Raspberry nur mit 3,3 Volt arbeitet.

          • Also von bi-direktionaler Kommunikation habe ich da noch nichts gesehen. Das Receive Beispiel dient dazu um den Geräte Code auf den Fernbedienungen auszulesen, denn man hat ja kein Codierrad etc. zum einstellen.

            So war meine vorgehensweise bisher die das ich mit der Receive Demo die Codes aus der Mitgelieferten Fernbedienung ausgelesen und dann mit dem Send Beispiel verschickt habe.

            Wie gesagt ich muss noch mal meine Codes rauskramen, die sind aber auf meinem alten Laptop.

          • Man kann das Programm natürlich auch so wie es ist eigenständig benutzen, da es schon für den RPi geschrieben wurde. Danke fürs Teilen.

  12. Kann man denn mit dem Code des Franzosen auch die Home easy Geräte steuern? Ich hab mir das hcc paket gerade mal installiert und kann zumindest den HE878 Dimmer zu keiner Reaktion bewegen.

    • Mit dem Code werden die Dimmer nicht funktionieren, der funktioniert nur mit den Schaltern.
      Such im Internet mal nach pilight. Das unterstützt auf jeden Fall die Intertechno Schalter. Mit Pimatic gibt es dazu auch noch ein hübsches Frontend. Wenn du Glück hast dann unterstützt es auch die Dimmer, falls diese Baugleich mit denen von KlikAanKlikUit sind.

  13. Pingback: Raspberry Pi | openHAB | wiringPi | rc-switch | Kalle's Blog ;-)

  14. Leider funktioniert die Version aus dem 2. Update nicht korrekt für Elro Steckdosen, der Code muss dafür ein wenig verändert werden.

    • Hallo hat jemand eine send.cpp Datei, die für die simplen Elro Steckdosen, als auch die 16×16 Intertechno codes funktioniert? Würde mir sehr weiter helfen! Die hochgeladene Datei von JG funktioniert NUR für die 16×16 Codex von Intertechno oder?

  15. Hallo, danke für die Anleitung aber ich verstehe es nicht.
    Ich habe dein send.cpp (also download, nicht den code von der Seite kopiert) und kompiliert. Damit will ich jetzt meine alten intertechno Schaltstecker schalten, aber ich verstehe die 4 Parameter von „send“ nicht.
    systemCode ist vermutlich der Hauscode, also das erste Rad (A-P)
    unitCode ist vermutlich der Gerätecode, also das zweite Rad (1-16)
    command ist vermutlich „an“ und „aus“, aber was ist der vierte Parameter.

    Mein intertechno steht auf C 5. Also starte ich send wie folgt:
    # ./send c 5 1 1
    sending systemCode[5] unitCode[1] command[1]

    Es tut sich aber nix. Also nochmal von vorne. Ahhh…. im code steht ja:
    „SystemCodeType is 1 for default and 2 for switches with 10 Bits 123456ABCD Command is 0 for OFF and 1 for ON“

    Also nochmal:
    # ./send c 1 5 1
    sending systemCode[1] unitCode[5] command[1]

    und
    # ./send c 2 5 1
    sending systemCode[2] unitCode[5] command[1]

    tuns auch nicht. Der Stecker geht nicht an.

    Wie also schalte ich jetzt meine alten intertechno Stecker??

    Danke

      • Gute Frage ob der Sender ok bzw. korrekt angeschlossen ist. Das ist ein Amazon default FS1000A für 3,50€, der an 3.3V, Ground und Pin 11 (also GPIO0) angeschlossen ist.
        Kann ich den irgendwie abfragen ob der tut?

        Wie ich auch weiter festgestellt habe, sind in der send.cpp nur die UnitCodes 1-4 implementiert, die Codes 5-16 fehlen. Da ich die Umwandlung in hex aber nicht verstehe, habe ich meinen intertechno Stecker auf G 3 umgestellt. Also nochmal:

        # ./send 2 g 3 1
        sending systemCode[g] unitCode[3] command[1]

        Aber da schaltet auch nichts. Zum heulen.

          • Muss ich heute Abend mal versuchen da ich von remote nicht sehe, ob die Steckdose geschaltet hat.

            Ich bin ja kein C++ Profi, aber ich lese aus dem code der send.cpp dass ich den unitCode in dezimal angeben muss und dieser dann in eine hexcode umgerechtet wird. Und diese Hexcodes stimmt nicht mit der von dir verlinkten Liste auf fhemwiki überein.
            Weisst du warum nicht?

          • Ich bin auch kein Programmierer, aber ich denke es werden nur bei den Geräten Werte zugewiesen (umgerechnet wird da auch nix). Die System ID wird nicht umgewandelt und muss korrekt eingegeben werden. Die Wird nur mit strcat() bearbeitet…und diese Funktion fügt nur Strings zusammen. Probier es einfach mal aus, sollte klappen.

            Die abweichenden Codes kann ich mir auch nur bedingt erklären. Ich könnte mir vorstellen, dass es Geräte mit nur 4 Einstellmöglichkeiten für die Adressierung gibt. Und dafür scheint der Code geschrieben worden sein. Wenn sich das nicht anders auflöst, kann ich aber mal beim Autoren nachfragen.

  16. Da tut sich leider gar nichts. Ich habe es jetzt mit drei verschiedenen intertechno Stecker versucht, keiner geht an.
    Keine Ahnung woran das liegen kann. Ist das FS1000A-Modul kaputt?
    Kann man das irgendwie testen?
    Oder muss man auf dem Raspi es vorher irgendwie aktivieren? Den GPIO einschalten oder sowas?

    • Hast du auch den zugehörigen Empfänger? Dann könntest du das mit einer LED testen. Die sollte flackern, wenn Daten ankommen.
      Mit welchem User führst du den send Befehl aus? Als root? Wenn nicht versuch das mal.

  17. Hi,

    habe gerade eine Intertechno Steckdose mit dem Code „Intertechno B“ geschaltet. Vielen Dank für die Vorarbeit. Klappt prima. Nur die Entfenung des Senders muss ich noch erhöhen. Hilft die 17 cm Antenne?

    • Was für einen Sender mit was für einer Antenne hast du denn jetzt im Einsatz? Eine gute Antenne trägt natürlich zur Reichweite bei. Achte auch darauf, dass der Sender die richtige Betriebsspannung erhält. Ich habe es schon häufiger gesehen, dass 5 Volt Sender mit 3 Volt betrieben werden. Da kann die Reichweite dann nicht gut werden. Normal sollte es kein Problem sein innerhalb eines normalen Hauses zu schalten. Bei mir reicht es aus dem Dachgeschoss durch zwei Wände bis zur Gartenhütte.

      • Hi!

        Ich habe das mal an eine Pi2 nachgebaut. Soweit läuft das mit Type A vom Prinzip. Nur leider ist die Reichweite gelinde gesagt einen Katastrophe. Ich schaffe mit freiem Blick keine 3(!)m. Zuerst dachte ich das würde überhaupt nicht laufen. Die Fernbedienung schaft deutlich mehr. Der Sender hängt an 5V und sieht letztlich so aus die im oben verlinken Blog. Nur steht nicht YX-FST sondern 2008-8 drauf.

        Was könnte der Grund sein? Jemand ne Idee?

  18. Einen Empfänger habe ich leider nicht, also außer der Steckdosen.
    Ich habe alles als root kompiliert und auch ausgeführt.

    Nochmal meine Frage: Kann ich vom Raspi aus das FS1000A irgendwie auslesen? Fragen ob es dran hängt? Sehen, was genau am GPIO0 so rausgeschickt wird?

  19. Hallo!
    Ich würde gerne auch meine Intertechno Steckdosen Fernsteuern.
    Wie funktioniert das mit dem send.cpp???
    Was muss ich damit machen?

    • Okay! ich hab die Datei im Ordner von rcswitch-pi gefunden. Diese hab ich jetzt dementsprechend angepasst.

      Gebe ich nun die Syntax wie folgt ein:
      ./send 1 10000 4 0
      um im Hausecode 10000 die 4 Einheit auszuschalten erscheint folgende Fehlermeldung:
      sending systemCode(1) unitCode(10000) comand(4)
      command(4) is unsupported.

      Sende ich ganz normal (./send 10000 4 0) schaltet die Steckdose ab.
      Hab ich was vergessen? Oder was falsch gemacht?
      Gruß Hermann
      Danke

      • Okay, weitere Erkenntnis
        make send
        Eingeben und der neue Sendebefehl wird wohl übergeben…
        jetzt ist es aber so, dass ich einen Speicherzugriffsfehler bekomme.
        ???

        • Grundsätzlich muss ein C-Programm immer erst kompiliert werden, bevor es gestartet werden kann. Das send kannst du dir hinter make sparen. Einfach in den Ordner und dann make. Funktionieren sollte es trotzdem. Ich vermute in deinem angepassten Programm ist ein Fehler. Gab es beim Kompilieren keine Fehlermeldungen? Poste doch mal deine send.cpp bei http://pastebin.com/ und dann den entsprechenden Link hier. Dann kann ich mir das gerne mal angucken.

          • Ich werde es jetzt nochmal von vorne probieren und dann melde ich mich nochmals!

  20. Hallo das ist das erste Tutorial mit dem ich überhaupt etwas zum laufen bekommen habe danke dafür.
    Mit einer Steckdose vom Typ düwi DUPIS 1500 mit festem Code habe ich keine Problem diese schaltet mit dem Befehl ./send a 1 1 1 an.
    Ich habe trotzdem leider ein Problem und weiß nicht mehr weiter. Ich möchte außerdem mumbi Steckdosen vom Typ m-FS300 benutzen .Diese haben keinen festen Code sondern sind lernfähig. Ich habe einen Sender und einen Empfänger angeschlossen den Code der Steckdosen kann ich auslesen. Das Problem ist jedoch ich finde keinen passenden Befehl um die Steckdosen anzusprechen.
    Ausgabe des Empfänger sieht folgendermaßen aus
    {
    „message“: {
    „id“: 2851842,
    „unit“: 0,
    „state“: „up“
    },
    „origin“: „receiver“,
    „protocol“: „arctech_screen“,
    „uuid“: „0000-b8-27-eb-a9fc40“,
    „repeats“: 1,
    „action“: „update“
    }
    {
    „message“: {
    „systemcode“: 17,
    „unitcode“: 11,
    „state“: „on“
    },
    „origin“: „receiver“,
    „protocol“: „elro_800_switch“,
    „uuid“: „0000-b8-27-eb-a9fc40“,
    „repeats“: 1
    }
    {
    „message“: {
    „systemcode“: 17,
    „unitcode“: 11,
    „state“: „opened“
    },
    „origin“: „receiver“,
    „protocol“: „elro_800_contact“,
    „uuid“: „0000-b8-27-eb-a9fc40“,
    „repeats“: 1
    }
    {
    „message“: {
    „systemcode“: 17,
    „unitcode“: 11,
    „state“: „on“
    },
    „origin“: „receiver“,
    „protocol“: „elro_800_switch“,
    „uuid“: „0000-b8-27-eb-a9fc40“,
    „repeats“: 1,
    „action“: „update“
    }
    {
    „message“: {
    „systemcode“: 17,
    „unitcode“: 11,
    „state“: „opened“
    },
    „origin“: „receiver“,
    „protocol“: „elro_800_contact“,
    „uuid“: „0000-b8-27-eb-a9fc40“,
    „repeats“: 1,
    „action“: „update“
    }
    {
    „message“: {
    „systemcode“: 17,
    „unitcode“: 11,
    „state“: „on“
    },
    „origin“: „receiver“,
    „protocol“: „elro_800_switch“,
    „uuid“: „0000-b8-27-eb-a9fc40“,
    „repeats“: 2
    }
    {
    „message“: {
    „systemcode“: 17,
    „unitcode“: 11,
    „state“: „opened“
    },
    „origin“: „receiver“,
    „protocol“: „elro_800_contact“,
    „uuid“: „0000-b8-27-eb-a9fc40“,
    „repeats“: 2
    }
    {
    „message“: {
    „systemcode“: 17,
    „unitcode“: 11,
    „state“: „on“
    },
    „origin“: „receiver“,
    „protocol“: „elro_800_switch“,
    „uuid“: „0000-b8-27-eb-a9fc40“,
    „repeats“: 2,
    „action“: „update“
    }
    {
    „message“: {
    „systemcode“: 17,
    „unitcode“: 11,
    „state“: „opened“
    },
    „origin“: „receiver“,
    „protocol“: „elro_800_contact“,
    „uuid“: „0000-b8-27-eb-a9fc40“,
    „repeats“: 2,
    „action“: „update“
    }
    {
    „message“: {
    „systemcode“: 17,
    „unitcode“: 11,
    „state“: „on“
    },
    „origin“: „receiver“,
    „protocol“: „elro_800_switch“,
    „uuid“: „0000-b8-27-eb-a9fc40“,
    „repeats“: 3
    }
    {
    „message“: {
    „systemcode“: 17,
    „unitcode“: 11,
    „state“: „opened“
    },
    „origin“: „receiver“,
    „protocol“: „elro_800_contact“,
    „uuid“: „0000-b8-27-eb-a9fc40“,
    „repeats“: 3
    }
    {
    „message“: {
    „systemcode“: 17,
    „unitcode“: 11,
    „state“: „on“
    },
    „origin“: „receiver“,
    „protocol“: „elro_800_switch“,
    „uuid“: „0000-b8-27-eb-a9fc40“,
    „repeats“: 3,
    „action“: „update“
    }
    {
    „message“: {
    „systemcode“: 17,
    „unitcode“: 11,
    „state“: „opened“
    },
    „origin“: „receiver“,
    „protocol“: „elro_800_contact“,
    „uuid“: „0000-b8-27-eb-a9fc40“,
    „repeats“: 3,
    „action“: „update“
    }

    Als Empfangs-Protokoll benutze ich pilight.

    Für jegliche Hilfe wär ich euch sehr Dankbar.

  21. Hallo Gemeinde,

    ich habe versucht, den gedownloadeten Code durch auswechseln der send.cpp zum laufen zu bekommen. Die Vorgehensweise war wie folgt:

    – Send.cpp runterladen bei http://www.gsurf.de/wp-content/uploads/2013/04/rcswitch-pi-Intertechno-B.zip
    – send.cpp im Verzeichis /home/pi/raspberry-remote austauschen
    – Befehl „make send“ im Verzeichnis /home/pi/raspberry-remote absetzen
    – Danach ein Binary zur späteren Verwendung erzeugen. Befehl sudo mv send /usr/local/sbin/send-intertechno im Verzeichnis /home/pi/raspberry-remote
    – jetzt kannte mit dem Befehl „sudo send_intetechno 2 8 1 1“ ein CMR-500 mit Schalterstellung H-1 geschaltet werden. Auch unkstekckdosen sollten geschaltet werden können mit Befehl „sudo send_intertechno 1 11111 1 1“. Dies sollte die Steckdose mit den DIP-Schalterstellungen „ON ON ON ON ON OFF OFF OFF OFF ON“ schalten. Leider funktioniert das aber nicht mehr, da der Code in der send.cpp falsch ist. Schon beim comilieren komen da Warnhinweise, die auf eine falsche Deklaration der Parameter im Bereich INT und CHAR hinweisen.

    Hier der gleiche Code mit einer kleinen Anpassung. Bei mir funktionieren nun die CMR-500 und die Steckdosen. Die Codeanpassung ist nicht perfekt und könnte besser sein. Vielleicht schaut sich das ja mal jemand an, der da wirklich was von versteht. Ich hab den Code hier einfach reinkopiert, da ich keine Möglichkeit gesehen habe, den Code hochzuladen.

    ###########################################################

    /*
    Usage: ./send
    SystemCodeType is 1 for default and 2 for switches with 10 Bits 123456ABCD
    Command is 0 for OFF and 1 for ON
    */

    #include „RCSwitch.h“
    #include
    #include
    #include

    int main(int argc, char *argv[]) {

    /*
    output PIN is hardcoded for testing purposes
    see https://projects.drogon.net/raspberry-pi/wiringpi/pins/
    for pin mapping of the raspberry pi GPIO connector
    */
    int PIN = 0; // GPIO-PIN 17
    int systemCodeType = atoi(argv[1]);
    int systemCode = atoi(argv[2]);
    int unitCode = atoi(argv[3]);
    int command = atoi(argv[4]);
    char pSystemCode[14];

    if (wiringPiSetup () == -1) return 1;
    printf(„sending systemCodeType[%i] systemCode[%i] unitCode[%i] command[%i] …\n“, systemCodeType, systemCode, unitCode, command);
    RCSwitch mySwitch = RCSwitch();
    printf(„defining transmit PIN[%i] … „,PIN);
    mySwitch.setPulseLength(300);
    mySwitch.enableTransmit(PIN);
    printf(„success\n“);
    printf(„computing system Code Type …\n“);
    switch(systemCodeType)
    {
    case 1:
    {
    printf(„Switching \“default\“ system[%i] unit[%i] … „, systemCode, unitCode);
    switch(command)
    {
    case 0:
    {
    printf(„off\n“);
    mySwitch.switchOff(argv[2], unitCode);
    break;
    }
    case 1:
    {
    printf(„on\n“);
    mySwitch.switchOn(argv[2], unitCode);
    break;
    }
    default:
    {
    printf(„command[%i] is unsupported\n“, command);
    return -1;
    }
    }
    break;
    }
    case 2:
    {
    printf(„computing systemcode for Intertechno Type B house[%i] unit[%i] … „,systemCode, unitCode);
    switch(systemCode)
    {
    // house/family code A=1 – P=16
    case 1: { printf(„1/A … „); strcpy(pSystemCode,“0000“); break; }
    case 2: { printf(„2/B … „); strcpy(pSystemCode,“F000“); break; }
    case 3: { printf(„3/C … „); strcpy(pSystemCode,“0F00“); break; }
    case 4: { printf(„4/D … „); strcpy(pSystemCode,“FF00“); break; }
    case 5: { printf(„5/E … „); strcpy(pSystemCode,“00F0“); break; }
    case 6: { printf(„6/F … „); strcpy(pSystemCode,“F0F0“); break; }
    case 7: { printf(„7/G … „); strcpy(pSystemCode,“0FF0“); break; }
    case 8: { printf(„8/H … „); strcpy(pSystemCode,“FFF0“); break; }
    case 9: { printf(„9/I … „); strcpy(pSystemCode,“000F“); break; }
    case 10: { printf(„10/J … „); strcpy(pSystemCode,“F00F“); break; }
    case 11: { printf(„11/K … „); strcpy(pSystemCode,“0F0F“); break; }
    case 12: { printf(„12/L … „); strcpy(pSystemCode,“FF0F“); break; }
    case 13: { printf(„13/M … „); strcpy(pSystemCode,“00FF“); break; }
    case 14: { printf(„14/N … „); strcpy(pSystemCode,“F0FF“); break; }
    case 15: { printf(„15/O … „); strcpy(pSystemCode,“0FFF“); break; }
    case 16: { printf(„16/P … „); strcpy(pSystemCode,“FFFF“); break; }
    default:
    {
    printf(„systemCode[%s] is unsupported\n“, systemCode);
    return -1;
    }
    }
    printf(„got systemCode\n“);
    switch(unitCode)
    {
    // unit/group code 01-16
    case 1: { printf(„1 … „); strcat(pSystemCode,“0000“); break; }
    case 2: { printf(„2 … „); strcat(pSystemCode,“F000“); break; }
    case 3: { printf(„3 … „); strcat(pSystemCode,“0F00“); break; }
    case 4: { printf(„4 … „); strcat(pSystemCode,“FF00“); break; }
    case 5: { printf(„5 … „); strcat(pSystemCode,“00F0“); break; }
    case 6: { printf(„6 … „); strcat(pSystemCode,“F0F0“); break; }
    case 7: { printf(„7 … „); strcat(pSystemCode,“0FF0“); break; }
    case 8: { printf(„8 … „); strcat(pSystemCode,“FFF0“); break; }
    case 9: { printf(„9 … „); strcat(pSystemCode,“000F“); break; }
    case 10: { printf(„10 … „); strcat(pSystemCode,“F00F“); break; }
    case 11: { printf(„11 … „); strcat(pSystemCode,“0F0F“); break; }
    case 12: { printf(„12 … „); strcat(pSystemCode,“FF0F“); break; }
    case 13: { printf(„13 … „); strcat(pSystemCode,“00FF“); break; }
    case 14: { printf(„14 … „); strcat(pSystemCode,“F0FF“); break; }
    case 15: { printf(„15 … „); strcat(pSystemCode,“0FFF“); break; }
    case 16: { printf(„16 … „); strcat(pSystemCode,“FFFF“); break; }
    default:
    {
    printf(„unitCode[%i] is unsupported\n“, unitCode);
    return -1;
    }
    }
    strcat(pSystemCode,“0F“); // mandatory bits
    switch(command)
    {
    case 0:
    {
    strcat(pSystemCode,“F0″);
    mySwitch.sendTriState(pSystemCode);
    printf(„sent TriState signal: pSystemCode[%s]\n“,pSystemCode);
    break;
    }
    case 1:
    {
    strcat(pSystemCode,“FF“);
    mySwitch.sendTriState(pSystemCode);
    printf(„sent TriState signal: pSystemCode[%s]\n“,pSystemCode);
    break;
    }
    default:
    {
    printf(„command[%i] is unsupported\n“, command);
    return -1;
    }
    }
    break;
    }
    default:
    {
    printf(„command sequence unknown, aborting!\n“);
    return -1;
    }
    }
    return 0;
    }

    ###########################################################

    • Achso,

      wenn man sich den Code meines Kommentares ins Notepad++ kopiert, sind die Änderungen in Zeile 44 + 50.
      Dort habe ich „systemCode“ gegen „argv[2]“ ausgetauscht.
      In Zeile 30 habe ich das wahrscheinlich unwesentlichere eingefügt: mySwitch.setPulseLength(300);

  22. leider funktioniert dies bei mir gar nicht

    {exec=“OFF:/opt/rc-switch/rcswitch-pi/send 11111 1 0, ON:/opt/rc-switch/rcswitch-pi/send 11111 1 1″}

    der Befehl kommt zwar bei openhab an, aber die Steckdose schaltet nicht. Irgendeine Idee woran es liegen könnte?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Spamschutz * Time limit is exhausted. Please reload the CAPTCHA.