Einbindung von "Centronic" Fernbedienungen in FHEM

Begonnen von Leeloo_Dallas, 24 Mai 2016, 14:40:31

Vorheriges Thema - Nächstes Thema

dbox2user

Achja Bidi,

Du kannst mal testhalber versuchen ob du evtl den Stick mit dem SELVE-FHEM-MODUL  zum laufen bekommst.
https://forum.fhem.de/index.php?topic=55581.new;topicseen#new

Die SELVE Geräte sind nämlich 'fast' baugleich  mit den Becker Centronic Geräten und die Beschreibung des SELVE -USB-STICKS ist bezüglich Com-Port etc auch sehr ähnlich.

Bitte gebe dann Rückmeldung!
Fhem 5.8 auf Raspberry Pi2; 1 Wire OWSERVER mit DS9490R und OWX DS2480;AVR-NET-IO mit 1Wire;  LOGO8; Kostalpiko; Selbstbau CUL; Arduino mit cFirmata; Denon AVR; Samsung TV; Fritzbox;

dbox2user

Hallo Centronic´ler!

Nachdem "Bidi81" leider nicht mehr ins Forum schaut, konnte ich nicht wiederstehen und hab mir auch einen Becker Centronic USB V2 Stick bestellt. ;D
Der Stick ist eigentlich dazu da ,dass die Becker CentralControl für Becker Centronic Kompatibel zu machen.

Heute kam das gute Stück an und hier mal die ersten Erkenntnisse:

1. Die Fhem Module für die SELVE-Rollomotore habe ich mal testhalber ausprobiert.
Beim Anlegen des Gateways klappt soweit alles, es wird auch als "open" angezeigt.
Wenn dann allerdings ein Kanal angelernt werden soll tut sich am am Motor erstmal nichts (er müsste ja zur Bestätigung klacken)
Dies aber nur als Information.

2. Interessanter war das Loggen der Befehle am Raspberry über die Konsole:
screen /dev/serial/by-id/usb-BECKER-ANTRIEBE_GmbH_CDC_RS232_v125_Centronic-if00

Drei verschiedene Fenster habe ich mal mitgeschrieben.
Hier mal ein Beispiel des Codes beim "Drücken":
0000000002010B000000000071E7F021020100402B

Der erste Bereich "0000000002010B0000000000" ist bei mir und auch bei "Bidi81" IMMER gleich.
Der nachfolgende Bereich "71E7F021020100402B" ändert sich beim Drücken je nach Taste.

Egal wie oft ich die gleich Taste drücke, der gleiche Gesamtcode (z.B.0000000002010B000000000071E7F021020100402B )wird IMMER geschickt!
In diesem Code ist also der Rollingcode bereits durch den USB-Stick NICHT mehr enthalten.

Die 3 Tasten AUF/AB/STOP unterscheiden sich bei jedem Sender NUR in den letzten 4 Stellen des Codes. (z.B. 402B)

Der Code beim Loslassen der Tasten ist bei allen 3 Tasten des gleichen Senders IMMER KOMPLETT gleich.
(z.B. 0000000002010B000000000071E7F021020100006B)


Morgen möchte ich zeitgleich die Befehler per Becker-USB-Stick  und Signalduino sniffen.
Dies mit der Hoffnung den tatsächlichen Rolling Code zu erkennen und von den "Nutzdaten" zu unterscheiden.

Anbei mal die beschriebenen Daten.

Habt Ihr noch andere Vorschläge was man jetzt durch den Becker-Stick rausfinden könnte.
Gruß,
Christian
Fhem 5.8 auf Raspberry Pi2; 1 Wire OWSERVER mit DS9490R und OWX DS2480;AVR-NET-IO mit 1Wire;  LOGO8; Kostalpiko; Selbstbau CUL; Arduino mit cFirmata; Denon AVR; Samsung TV; Fritzbox;

dbox2user

Hi!

Hier wieder ein Zwischenstand der Erkenntnisse und eine Zusammenfassung aus meinem letzten Post:

   Der erste Bereich "0000000002010B0000000000" ist bei mir und auch bei "Bidi81" IMMER gleich.
   Das ist wahrscheinlich einfach die Kennung des Empfängers. (Im Fall von Bidi81 und mir ist dann wohl der Becker-USB-Stick-)
   Ist bei allen meinen Codes gleich.
   
Folgendes trifft DEFINITV zu:


1.   Egal wie oft ich die gleich Taste drücke, der gleiche Gesamtcode (z.B.0000000002010B000000000071E7F021020100402B )wird IMMER geschickt!
   In diesem Code ist also der Rollingcode bereits durch den USB-Stick NICHT mehr enthalten.
   
2.   Die 3 Tasten AUF/AB/STOP unterscheiden sich bei jedem Sender NUR in den letzten 4 Stellen des Codes. (z.B. 402B)
   Bei diesen 4 Stellen stehen die ersten beiden für die Fahrtrichtung:
   20xx --> AUF fahren
   10xx --> STOP
   40xx --> AB fahren
   
3.   Der Code beim Loslassen der Tasten ist bei allen 3 Tasten des gleichen Senders IMMER KOMPLETT gleich.
   (z.B. 0000000002010B000000000071E7F021020100006B)   
   
4.   Die Kommunikation ist NICHT bidirektional, da es egal ist, ob ein Rollomotor in der Nähe ist , oder eben nicht.
   Die empfangenen Daten sind IMMER gleich. Also "keine Rücksprache" bemerkbar.
   
   
Mein Kumpel Stephan will seinen programmierten Sniffer jetzt nochmal anpassen, damit der Signalduino und der Becker-USB-Stick gleichzeitig geloggt werden.

Mal abwarten....

Gruß,
Christian
Fhem 5.8 auf Raspberry Pi2; 1 Wire OWSERVER mit DS9490R und OWX DS2480;AVR-NET-IO mit 1Wire;  LOGO8; Kostalpiko; Selbstbau CUL; Arduino mit cFirmata; Denon AVR; Samsung TV; Fritzbox;

Leeloo_Dallas

Hallo dbox2user,

vielleicht kommen wir so dahinter wie sich der Code zusammensetzt.
Danke für Deine Mühen sowie für die Unterstützung durch Deinen Freund.

Euch eine schönes WE.

Gruß
Leeloo
Greatz Leeloo

Bidi81

Hallo dbox2user

Ich habe die Letzten Tage einfach keine Zeit gehabt, um zu Experimentieren.
In deinen Zahlenreihen die Du mit nicht richtig gedrückt bezeichnet hast. die sind richtig gedrückt nur du hast die taste zu schnell hinter einander gedrückt hat. Man kann noch mehr verschieden Codes erzeugen wenn man auf und Ab gleichzeitig drückt, und andre Kombinationen macht.
Da Ich ja wissen wollte wie man mit dem USB Stick senden kann habe Ich mir mal einen Zweiten Stick bestellt. Das Senden ist ganz einfach den Empfanden Code kann man Direkt versenden. man muss nur druck beginn und ende sicken dann sende der Stick.   Ich könnte zu mindestens schon mal das nicken der funk Motors auslösen aber noch keine fahr befehle Senden. Weil der denn Stick nicht annehmen will.
Weil wahrscheinlich noch nicht die Richtige ID des USB-Stick habe. Ich habe mal der Firma Becker eine Email Geschieben wie man ID auslesen kann. Wie schon erwarte wollen Sie keine Auskunft geben.
Jetzt ist die Frage wie komm ich an die Richtig ID des Stickes.  Jemand frage wo so eine Becker CentralControl hat  oder sich so eine Besorgen was ja nicht ganz Billig ist. und hoffen das alle USB-Stick die gleiche ID Haben. 

Gruß David

dbox2user

Hallo David!
Schön dass Du noch dabei bist.  :)

Kannst du bitte nochmal ganz genau beschreiben wie du den Stick zum senden gebracht hast?
Wie du den Motor zum nicken gebracht hast würde mich auch sehr interessieren!

Gruss
Christian
Fhem 5.8 auf Raspberry Pi2; 1 Wire OWSERVER mit DS9490R und OWX DS2480;AVR-NET-IO mit 1Wire;  LOGO8; Kostalpiko; Selbstbau CUL; Arduino mit cFirmata; Denon AVR; Samsung TV; Fritzbox;

Bidi81

Hallo Christian

Zum Senden Denn Empfangen Code mit Smiley und Herz mit Senden im ASCII Format.
Ich habe es mit dem Programm Docklight gesendet. Geht auch mit Windows HyperTerminal zahlen reihe ein geben und Enter.
Zum  nicken habe Ich es gebracht mit den Empfangen Codes für das einlernen. hat zu mindesten mal das nicken herbei geführt aber leider nicht abgeschlossen das zweite nicken kam leider nicht. Hab dann mal versucht mit der originalen  Funkvernbedienug es ab zu schlissen das hat nach auch geklappt. nur das komische war dann  das ich erst nach mehr maligen drücken denn Motor schalten können. Da hat wohl der Rolling Key zugeschlagen. Ich glaub es ist kein Rolling key sondern ein fester Key der mit der ID berechnet wird. Wes halb da erste nicken geklappt hast und das zweite nicht weil es was andres erwartet hat als Ich gesendet hab.
Gruß David

dbox2user

Hi David!
Schreib doch bitte mal ein Beispiel  mit smily und Herz wie du etwas sendest.
Bitte genau den Text, den du im terminalfenster eingibst.  ::)

Danke schonmal
Fhem 5.8 auf Raspberry Pi2; 1 Wire OWSERVER mit DS9490R und OWX DS2480;AVR-NET-IO mit 1Wire;  LOGO8; Kostalpiko; Selbstbau CUL; Arduino mit cFirmata; Denon AVR; Samsung TV; Fritzbox;

Bidi81

#128
Hi  Christian
Da Ich es unter Windows10 gemacht habe kann Ich es dir nicht sagen wie es im Terminal geht.
Bei mir ist die Schriftart Terminal. Ich hab jetzt mal die Datei in meinen Rasyberry geöffnet das sind dann andere Zeichen am Anfang und Ende. Die sind wichtig zum Senden die müssen dabei sein Sonst Sendet der Stick nicht. Dann sied der Code so aus (smily)0000000002010B0000000000065ED021000F004051(Herz) das erste und letzte Zeichen ist wichtig unter Windows.
Öffne mal die Datei wo Ich angehängt in Windows. Dann Siehst  Du es wie Ich das meine.

In HEX siede der Code so aus:
02 30 30 30 30 30 30 30 30 30 32 30 31 30 42 30 30 30 30 30 30 30 30 30 30 30 36 35 45 44 30 32 31 30 30 30 46 30 30 32 30 37 31 03

In Binär so:
00000010 00110000 00110000 00110000 00110000 00110000 00110000 00110000 00110000 00110000 00110010 00110000 00110001 00110000 01000010 00110000 00110000 00110000 00110000 00110000 00110000 00110000 00110000 00110000 00110000 00110000 00110110 00110101 01000101 01000100 00110000 00110010 00110001 00110000 00110000 00110000 01000110 00110000 00110000 00110010 00110000 00110111 00110001 00000011

strel

Hallo allerseits,

wie Christian schon geschrieben hat, hab ich den Sniffer noch mal angepasst. Allerdings Sniffen wir nicht beide Signale, sondern senden über den Stick und empfangen wieder die Rohsignale. Danke an Bibi81 ich hab doch glatt STX (smilly) und ETX (herz) am Anfang und Ende der Nachricht übersehen. Das Ergebnis schaut dann z.B. so aus:

Sende: 0000000000000000   Empfang: 14B8F7A39305C2D6
Sende: 0000000000000001   Empfang: 14B8F7A23305C2D6
Sende: 0000000000000002   Empfang: 14B8F7A20305C2D6
Sende: 0000000000000004   Empfang: 14B8F7A2C305C2D6

Wobei der erste Sendecode im Beispiel genau genommen (STX) 0000000002010B0000000000 0000000000000000 F5 (RTX) ist. Den Rest habe ich in der Anzeige weg gelassen, da wir der Meinung sind, dass es nichts mit dem Eigentlichen Code zu tun hat. Der erste Teil hat vermutlich etwas mit dem Stick zu tun, da dieser nichts sendet, wenn man dort ein Bit verändert und das letzte Byte ist nur eine Parität. Die Summe über den gesamten Code ergibt immer 0x03 was etwas seltsam ist, aber wenn ich bei meinen Codes die Parität so berechne akzeptiert das der Stick, also war das für mich gut genug.

Da das Senden aller 1,844E19 Möglichkeiten etwas den Zeitrahmen sprengen würde, habe ich erst mal verschiedene Bitfolgen duchgejagt die mir Sinnvoll erschienen. Immer ein Bit an, alle bis auf eins an usw. Der Interessierte kann sich das gesamte Ergebnis im Anhang anschauen. Ich hatte noch keine Zeit, es genauer zu analysieren aber es sieht relativ vielversprechend aus. Wenn bei Empfang nichts steht, dann hat der Stick nichts gesendet. Vermutlich ein verbotener/ungültiger/unmöglicher Code oder ich habe die Parität falsch berechnet. Ich habe die Zeilen drin gelassen, da auch dies interessant sein kann.

Ich werde diese Woche kaum dazu kommen, es mir genauer anzuschauen aber falls jemand noch andere Bitmuster sehen will, ist das keine große Sache. Einfach Bescheid sagen.

Gruß Stephan

Bidi81

Hallo Stephan

Hab dein Code (STX) 0000000002010B0000000000 0000000000000000 F5 (RTX) mit meine Stick gesendet und hat auch geklappt.
Was Ich mit meinen zweiten Stick empfangen hab war was andres als Ich gesendet habe. Empfangen habe Ich dann (STX)0000000002010B00000000000000002100000000D4(RTX)
Bist jetzt habe Ich immer genau den gleichen Code empfangen was Ich aus gesendet Habe nur jetzt nicht mehr hab dann mal die Sticks getauscht und es ist gleich geblieben. Meine Vermutungen
das Ich jetzt die Richtig ID des Senders habe. Damit Ich die einlernen fasse Richtig abschließen kann. Jetzt müsste ich nur alle Empfangen Code auf die Richtig ID umrechnen.
Kannst Du mir mal vielleicht sagen wie man das richtig macht das ist nicht grad meine Stärke.

Gruß David

strel

Hallo David,

ich kann dir leider nicht ganz folgen was du mit ID meinst. Auf jeden Fall bist du da auf ein interessantes Phänomen gestoßen. Falls du mehr Codes zum Senden brauchst, kann ich dir gerne weiterhelfen. Die Parität kannst du errechnen indem du jedes Byte zusammen zählst, den Überlauf abschneidest und das Ergebnis von 0x03 abziehst. In meinem Beispiel also 0x00 + ... + 0x00 +0x01 + 0x02 + 0x0B + (die Nullen kannst du dir schenken) = 0x0E; 0x03 - 0x0E = 0xF5. Ich schreib mir für so was halt immer kleine Helfer.

Falls du zugriff auf einen Raspberry Pi oder halt nen anderen Linux Rechner hast, kannst du die Helfer gerne verwenden. sende.sh und gencode.c in das gleiche Verzeichnis legen und sende.sh ausführen. Brauchst nur gcc ;)

Falls nicht, habe ich dir ein paar Codes in der liste.txt zusammen gestellt, die du ausprobieren kannst. Wäre durchaus mal gut zu wissen, was da die Sticks so daraus machen.

Gruß
Stephan

Bidi81

#132
Hallo Stephan
was Ich mit ID meine ist die Sender Adresse. Weil jeder Sende hat seine eigene Adresse das der Empfänger unterscheiden kann mit welcher Sende gesendet wurde. Weil sonst würden alle Sender alle Motoren Schalten wenn man nicht  unterscheiden wehr gesendet hat.
Mir ist noch was auf gefallen das alle Code was Ich mit dem Stick Empfangen hab.  In der Summe von den Original Sendern beim 1 Kanal ergibt es 41 und beim 5 Kanal ergibt es 50.
und was ergibt es bei Euch in der Summe?

Vielleicht kann das auch noch Helfen von Becker  http://www.b-tronic.net/source/ da kann man den Quellcode von der CentralControl Downloaden.

Gruß David

direct1980

Hallo

sorry für die lange Abstinenz aber ich habe ein paar Projekte vorgezogen :)

Mittlerweile habe ich die Lösung für die Steuerung einer individuellen Vitrinenbeleuchtung/Baumarktfunksteckdose mittels Alexa (ohne Amazon developers account).
Und heute ist auch mein Becker USB Stick v2 gekommen:)

Die ersten Tests sind aufgrund eurer Postings bestätigt:

Der gesniffte Code pro Tastendruck ist immer der selbe

DAS WICHTIGSTE: Die Fernbedienung sendet (gesniffert am BECKER USB Stick) immer den selben Code für die gleiche Taste:
->Der Stick hebt das rolling code problem auf

Code 1:
Tasten gedrückt +
Code 2:
Tastendruck Verzögerung wenn ca. 2 sec gehalten +
Code 3:
Taste wenn ca. 4 sec gehalten +
Code n:
... wenn n gehalten +
Code n+1:
für Taste losgelassen

news folgen

Habt ihr zusätzliche news fürs korrekte Senden über den Stick?
Das steht als nächstes an

lg thomas

direct1980

Hallo zusammen,

ich habe mich heute ausgiebig mit dem Becker Centronic USB-Stick V2 gespielt.
Meine Fernbedienung ist die Becker Centronic EasyControl EC5410-II
In FHEM wurde der Becker Stick als CUL autocreated den ich aber dann rausgelöscht habe.

In Summe leider ohne Erfolg. Folgende Tests habe ich durchgeführt:

- Einlesen über den Stick -> erfolgreich:
  - es wird bei jedem Tastendruck derselbe Code eingelesen
  - Der Tastendruck setzt sich aus 2 Komponenten zusammen (am Beispiel von mir):
      - Auf         0000000002010B0000000000BB0E402100020020A9
      - loslassen 0000000002010B0000000000BB0E402100020000C9
  - wird die Taste länger gehalten wird eine weitere Sequenz nachgeschickt

Test 1 (nicht erfolgreich):
  - Senden via python script  ->  das ist fehlgeschlagen da das modul serial nicht zuverlässig arbeitet

Test 2 (nicht erfolgreich):
  - Senden via java.io.fileOutputStream:
          Senden als Ascii Dez Code mit 0x02+Code+0x03
  - Senden via printstream:
          Senden als String inkl. 0x02+Code+0x03 in kombination (befehl und loslassen) auch mit delays
  - Senden via echo > /dev/tty... in allen Kombinationen

Test 3 (tlw. erfolgreich):
  - Ich habe das Rollo auf trainieren gestellt und den Code der Trainingstaste gesendet. Der Trainingsmodus des Rollos wurde beendet also hat es was kapiert
  - Die Überlegung, dass das Rollo mit einer antrainierten / kopierten empfangenen die Befehle dann akzeptiert habe ich dann nur noch für Test 2 Punkt 3 probiert

Also more or less ein intensiver Tag aber leider ohne Erfolge.

Eine parallele Sniffermöglichkeit um eine mögliche Verschlüsselung zu knacken habe ich leider nicht. Auch keine Möglichkeit eine mögliche permanente ID zu identifizieren.   

Hat es jemand von euch schon mal geschafft über den Becker Stick, den CUL oder Signaldinuo die Roto Rollos zu bewegen?
Jede Anleitung wie es einmal geklappt hat wäre sehr hilfreich.
Mit dem Becker Centronics Stick sind wir schon um einiges weiter.

Meine Überlegung ist:
Wie bekommen wir den Stick in einen Trainingsmode? Irgendwie müssen ja über diesen Pairing Mode alle Becker und Roto Teile kompatibel sein.

lg thomas