Geiger Antriebstechnik - Rolladensteuerung

Begonnen von drhirn, 14 Juli 2015, 20:10:23

Vorheriges Thema - Nächstes Thema

fasch

Hallo,
erstmal zu den allgemeinen Fragen. Nein, es gibt keinen speziellen Stop Befehl, es gibt nur Auf und Ab, zum Stoppen muss man die Gegenrichtung drücken. Es gibt noch die Möglichkeit eine Zwischenposition einzulernen, das bedeutet aber, dass das normale Auf und Ab dann jeweils auf die Zwischenlage geht. Um zur Endlage zu kommen muss man dann mindestens 1,5 Sekunden drücken. Ich glaube das gefällt mir nicht.

Ich glaube, ich habe mich etwas unglücklich ausgedrückt. Auch ich will mich erstmal mit Dummys auf die Sendeseite konzentrieren und ich habe genau die gleiche Analyse gemacht wie Du. Und ich bin mit meinem Dummy und einem CommandAlias fertig. Deine Analyse passt dazu und bei mir funktioniert das jetzt perfekt.

Ich habe jetzt einen Dummy, bei dem ich ein Rollo/Fenster auswählen kann und dann Auf oder Ab anwählen kann. Als Eingabe benötige ich nur den DIP Code, denn ich in einen Raw Befehle umwandele. Das Dummy hat 2 weitere Settings: sendRepeats == (default 4) Anzahl Wiederholungen beim Senden und duinoName ist der Name des SIGNALduino, der is bei mir und als default: sduino.

Über eine Liste wird das Rollo gewählt und dann Auf oder Ab, enstpricht "set Rollos windowName Schlafen; set Rollos up". Zum direkten Aufruf per set geht auch "set Rollos (up|down) Schlafen".

Wäre schön, wenn Du Dir das anpassen könntest und dann mal testen würdest. Das Ergebnis würde ich gerne wissen. Ich denke Du kannst das ohne weitere Hilfe.

Weitere Hinweise:
Vor dem Rollo wird noch der vermutete Zustand des Rollos gezeigt, den will ich dann später mit empfangenen Signalen updaten, darum ist das etwas aufwendiger vorbereitet. Außerdem gibt es etwas Code, der den vermuteten Zustand einzelner Fenster anpasst, wenn eine Gruppe aktiviert wird.

Wie ich einen SIGNALduino namens sduino eingerichtet habe, habe ich ja bereits beschrieben. Und hier der Rest aus der Raw-Ansicht:


defmod Rollos dummy
attr Rollos cmdIcon up:fts_shutter_up down:fts_shutter_down
attr Rollos devStateIcon .*isdown:fts_shutter_down@#EE7621 .*isup:fts_shutter_up@#EE7621 .*down:fts_shutter_down@green .*up:fts_shutter_up@green .*:fts_shutter_updown@#EE7621
attr Rollos group 20 Rolladen
attr Rollos readingList windowName sendRepeats duinoName
attr Rollos room Rolladen
attr Rollos setList up:noArg down:noArg windowName:Kueche,Terrasse,Sued1,Sued2,West1,West2,Arbeit,Schlafen,Bad,Kind,AlleOben,AlleWohnen,PraxisWest,PraxisNord,PraxisFlur,PraxisWC,AllePraxis,AlleUnten sendRepeats:slider,1,1,9 duinoName:textField
attr Rollos verbose 4
attr Rollos webCmd windowName:up:down

defmod RollosAlias cmdalias set Rollos (up|down|windowName|sendRepeats|duinoName).* AS {\
### Format is:    set Rollos up|down|windowName [ < windowname > ]\
### do not catch: set Rollos < windowname > < any value > ## recursion\
### readingsVal windowname is used or set, on windowname, if no windowname is given\
\
my $verb = 1;;\
Log 1, '#' .  $EVENT . '#';;\
my ($dev, $cmd, $win) = split(/\s+/, $EVENT);;\
$win = ReadingsVal($dev, 'windowName', 'none') unless ($win);;\
Log 4, join(' ', ('set', $dev, $cmd, $win));;\
if ($cmd =~ /^(up|down)$/) {\
my %codes = (\
'upPraxisWest' => '+-+ --0 000', 'downPraxisWest' => '+-+ --0 00-',\
'upPraxisNord' => '+-+ --0 0-0', 'downPraxisNord' => '+-+ --0 0--',\
'upPraxisFlur' => '+-+ --0 00+', 'downPraxisFlur' => '+-+ --0 0+0',\
'upPraxisWC' => '+-+ --0 -00', 'downPraxisWC' => '+-+ --0 -0-',\
'upAllePraxis' => '+-+ --0 --0', 'downAllePraxis' => '+-+ --0 ---',\
'upAlleUnten' => '+-+ --0 -0+', 'downAlleUnten' => '+-+ --0 -+0',\
'upKueche' => '+-+ --+ 000', 'downKueche' => '+-+ --+ 00-',\
'upTerrasse' => '+-+ --+ 0-0', 'downTerrasse' => '+-+ --+ 0--',\
'upSued1' => '+-+ --+ 00+', 'downSued1' => '+-+ --+ 0+0',\
'upSued2' => '+-+ --+ -00', 'downSued2' => '+-+ --+ -0-',\
'upWest1' => '+-+ --+ --0', 'downWest1' => '+-+ --+ ---',\
'upWest2' => '+-+ --+ -0+', 'downWest2' => '+-+ --+ -+0',\
'upArbeit' => '+-+ --- 000', 'downArbeit' => '+-+ --- 00-',\
'upSchlafen' => '+-+ --- 0-0', 'downSchlafen' => '+-+ --- 0--',\
'upBad' => '+-+ --- 00+', 'downBad' => '+-+ --- 0+0',\
'upKind' => '+-+ --- -00', 'downKind' => '+-+ --- -0-',\
'upAlleOben' => '+-+ --- --0', 'downAlleOben' => '+-+ --- ---',\
'upAlleWohnen' => '+-+ --- -0+', 'downAlleWohnen' => '+-+ --- -+0',\
);;\
### Groups, change status of windownames\
my %groups = (\
'AlleOben' => ['Arbeit','Schlafen','Bad','Kind'],\
'AllePraxis' => ['PraxisWest','PraxisNord','PraxisFlur','PraxisWC'],\
'AlleWohnen' => ['Terrasse','Sued1','Sued2','West1','West2'],\
'AlleUnten' => ['Kueche','AlleWohnen','AllePraxis']\
);;\
my $g;;\
my @rooms = ();;\
foreach $g (@{$groups{$win}}) {\
push(@rooms, defined($groups{$g})? @{$groups{$g}} : $g);;\
}\
foreach $g (@rooms) {\
Log 4, join(' ', 'setreading', $dev, $g, $cmd);; \
fhem(join(' ', 'setreading', $dev, $g, $cmd), $verb);;\
};;\
fhem(join(' ', 'setreading', $dev, $win, $cmd), $verb);;\
fhem(join(' ', 'set', $dev, $win, $cmd), $verb);;\
my $inx = $cmd . $win;;\
if (defined($codes{$inx})) {\
my $rawmesg = $codes{$inx};;\
$rawmesg =~ s/ //g;;\
$rawmesg =~ s/0/01/g;;\
$rawmesg =~ s/\+/00/g;;\
$rawmesg =~ s/-/11/g;;\
$rawmesg =~ s/1/34/g;;\
$rawmesg =~ s/0/12/g;;\
### Definition for last bit 0 or 1\
my $p5 = ($rawmesg =~ /2$/) ? '-2045' : '-16092';;\
### last value is 5 always\
$rawmesg =~ s/.$/5/;;\
$rawmesg = 'set ' . ReadingsVal($dev, 'duinoName', 'sduino') . ' raw SR;;R=' . ReadingsVal($dev, 'sendRepeats', '4')\
. ';;P0=-32001;;P1=2039;;P2=-298;;P3=321;;P4=-2010;;P5=' . $p5 . ';;D=0' . $rawmesg . ';;';;\
Log 4, "convert: " . $codes{$inx} . " " . $rawmesg;;\
### escape all semicolon\
$rawmesg =~ s/;;/;;;;/g;;\
fhem($rawmesg, $verb);;\
}\
} elsif ($cmd eq 'windowName') {\
my $lastval = 'is' . ReadingsVal($dev, $win, 'none');;\
fhem(join(' ', 'setreading', $dev, $cmd, $win), $verb);;\
fhem(join(' ', 'setstate', $dev, $win, $lastval), $verb);;\
fhem(join(' ', 'set', $dev, $win, $lastval), $verb);;\
} elsif (($cmd eq 'sendRepeats' && $win =~ /^[1-9]$/) || ($cmd eq 'duinoName' && $win ne '')) {\
fhem(join(' ', 'setreading', $dev, $cmd, $win), $verb);;\
$win = ReadingsVal($dev, 'windowName', 'none');;\
my $lastval = 'is' . ReadingsVal($dev, $win, 'none');;\
fhem(join(' ', 'set', $dev, $win, $lastval), $verb);;\
} else {\
Log 4, join(' ', 'set', $dev, $cmd, $win, ': unknown cmd');;\
}\
}
attr RollosAlias verbose 4

setstate RollosAlias defined



fasch

Heir noch zwei Screenshots. Der vermutete Rollo-Status ist dunkelgelb nach dem Auswählen des Rollos und grün, nach einer Aktivierung.

fasch

Nochmal Hallo,
für einen Test habe ich wohl zuviel spezifisches reingeschrieben. Daher jetzt nochmal einfacher.
Alles was wir brauchen ist ein sendMsg für Geiger DIP Codes. Also habe ich daraus jetzt einen cmdalias für
set sduino sendDIP --++00-0+#4
Leerzeichenm können zusätzlich eingefügt werden und werden ignoriert. #<resends> ist optional und per default 4. Es geht also auch:
set sduino sendDIP --+ +00 -0+
Hier die Raw Definition eines cmdalias für ein SIGNALduino namens sduino:

defmod GeigerAlias cmdalias set sduino sendDIP .* AS {\
my ($dev, $cmd, $params) = split(/\s+/, $EVENT, 3);;\
Log 0, 'sendDIP#' .  $dev . ':' . ':' . $cmd . ':' . $params . ':';;\
$params =~ s/\s//g;;\
my ($parm, $repeats) = split('#', $params);;\
$repeats = 4 unless ($repeats);;\
$parm =~ s/0/1234/g;;\
$parm =~ s/\+/1212/g;;\
$parm =~ s/-/3434/g;;\
my $p5 = ($parm =~ /2$/) ? '-2045' : '-16092';;\
$parm =~ s/.$/5/;;\
$parm = 'set ' . $dev . ' raw SR;;R=' . $repeats\
. ';;P0=-32001;;P1=2039;;P2=-298;;P3=321;;P4=-2010;;P5=' . $p5 . ';;D=0' . $parm . ';;';;\
Log 0, "converted: " . $parm;;\
### escape all semicolon\
$parm =~ s/;;/;;;;/g;;\
fhem($parm);;\
}

setstate GeigerAlias defined


Wenn das ein paar Leute testen können und das überall funktioniert, können wir das ggf. an die SIGNALduino Leute geben.

sommer

Hallo,

erstmal super Idee.
Bei mir hat das GeigerAlias aber nicht ganz funktioniert, ich musste ein paar Kleinigkeiten ändern:


1 defmod GeigerAlias cmdalias set sduino sendDIP .* AS {\
2 my ($dev, $cmd, $params) = split(/\s+/, $EVENT, 3);;\
3 Log 0, 'sendDIP#' .  $dev . ':' . ':' . $cmd . ':' . $params . ':';;\
4 $params =~ s/\s//g;;\
5 my ($parm, $repeats) = split('#', $params);;\
6 $repeats = 4 unless ($repeats);;\
7 $parm =~ s/0/1234/g;;\
8 $parm =~ s/\+/1212/g;;\
9 $parm =~ s/-/3434/g;;\
10 $parm = substr($parm, 0, 30) . substr($parm, 32, 36);;\
11 my $p5 = ($parm =~ /2$/) ? '-2045' : '-16092';;\
12 $parm =$parm . '35';;\
13 $parm = 'set ' . $dev . ' raw SR;;;;R=' . $repeats\
14 . ';;;;P0=-32001;;;;P1=2039;;;;P2=-298;;;;P3=321;;;;P4=-2010;;;;P5=' . $p5 . ';;;;D=0' . $parm . ';;;;';;\
15 Log 0, "converted: " . $parm;;\
16 ### escape all semicolon\
17 $parm =~ s/;;;;/;;;;;;;;/g;;\
18 fhem($parm);;\
19 }


Wie ich in meinem letzten Post beschrieben habe, hat das 8 DIP (bei mir) nur 2 Signale (statt 4), daher habe ich die Zeile 10 hinzugefügt (gibt bestimmt noch andere Arten 2 Zeichen zu entfernen :-) ).
Zeile 12 - Die Abschlusssignale kommen einfach mit dazu (mit den fixen P Werten ist es immer 35).
Mit diesen zwei Änderungen hat es bei mir funktioniert (mit rauf und runter fahren).

Ich gehe mal davon aus, das es hiermit bei Dir nicht funktioniert (wobei ich bei Deinem raw signal auch diesen Eigenheit im 8 DIP finde - oder interpretiere ich da etwas falsches?).

Eventuell könnte man die beiden Arten kombinieren?

Gruß

fasch

Hallo,
die Geiger Motoren brauchen immer einen Neunstelligen DIP Code. Ich habe mir bewusst nicht die Mühe gemacht die Länge im Code zu prüfen. Vielleicht gibt es neben Geiger ja noch andere passende Hersteller mit anderer Länge. Entweder es klappt oder eben nicht. Obwohl es immer ein neunstelliger Code ist, ist es eigentlich immer so, dass Du nur eine DIP Reihe für Deinen Sender hast. Die haben je nach Anzahl der Kanäle keine Lust auf 2, 4 oder mehr DIP Reihen. Wenn es ein 2 Kanal Sender (Auf und Ab) ist, dann sind es eben 8 Dips und den neunten legt der Sender selber fest, einen für Auf und einen für Ab. Ich habe einen 12 Kanal Sender, den GF2005, dort habe ich eben tatsächlich nur eine DIP Reihe, bei der nur die ersten 6 Dips ausgewertet werden und die restlichen 3 kommen je nach Kanal Position dazu. Nur die programmierbaren Sender kannst Du wirklich frei belegen, ansonsten hast Du nur die Wahl des Anfangpunkts.

Anstatt der 35 hättest Du einfach einen neunten DIP hinzufügen können eine Null wäre 1234, ein Minus wäre eine 3434, ein Plus wäre 1212  und die letzte Ziffer wird dann auch von meinem Code immer in eine 5 umgewandelt. Und P5 wird danach gesetzt, ob es ursprünglich eine 2 oder 4 hinten war.

Also schicke doch einfach 9 DIPs und probiere alle 3 Möglichkeiten dafür aus. Einer davon ist dann vermutlich Auf und ein weiterer ist Ab.

Gruß zurück.

sommer

Hallo Jens,
Deine Ausführungen sind natürlich komplett richtig und passen auch bei mir.
Ich hab mich tatsächlich von meinem Ein-Kanal Sender (GF0001) etwas irritieren lassen, was den 8. und 9. DIP angeht.
Mir ist bei meinen Codes nicht aufgefallen das die 0 == 3412 ist (was bei Deinen Px Werten = 1234 ist) - ähm ich hoffe das war verständlich. Nun ja, ich denke ich habe mein Fehler gefunden.

Meine Änderungen an den GeigerAlias sind natürlich unnötig (und passen ja auch nur auf meinen einen Handsender).

Hab den GeigerAlias im Original von Dir wieder eingespielt und konnte es an einigen Rollläden erfolgreich Testen. Nochmals vielen Dank.

Ich würde auch noch den RollosAlias von Dir auch bei mir Einspielen (mit meinen Rollläden natürlich) und auch Testen. Ich würde Dir auch Feedback dazu geben (das könnte allerdings ein paar Tage dauern).

Gruß 

drhirn

Nachdem ich leider nur ungefähr eine Ahnung habe, von was ihr redet: Wäre es eventuell möglich, nach Abschluss eurer Recherchen eine Dummy-Erklärung zu schreiben?
Danke!

fasch

Na gut,
ich versuche mal eine Zusammenfassung, evtl. kann man da ja ein Wiki daraus machen.

Summary:

Es geht um funk-gesteuerte Rolladen der Firma Geiger Serie GF. Sender gibt es von Geiger oder Tedsen. Anlernbare 434Mhz Billigsender können auch genutzt werden. Es gibt programmierbare Sender und Sender mit DIP-Schaltern, die jeweils 3 Positionen kennen, nämlich +, 0 und -.

Für die Motoren mit ihren Funk-Empfängern gilt: Die Funkempfänger kennen genau zwei Befehle, nämlich AUF und AB. Der Stopp erfolgt, wenn der Sender das Signal der Gegenrichtung sendet oder wenn die Endlage erreicht wurde. Man kann auch zusätzlich eine Zwischenposition definieren. Dann erfolgt der Stopp an der Zwischenposition. Zum Überspringen der Zwischenposition muss man beim Sender die Richtungstaste länger als 1,5 Sekunden drücken, dann geht das Rollo direkt zur Endlage. Oder man muss nach Erreichen der Zwischenlage ein zweites Mal drücken. Geiger nutzt einen statischen (non-rolling) Code im Bereich 433.92 Mhz. Es gibt keine Rückmeldungen vom Motor über die aktuelle Stellung. Für Rolladen ist jeder einzelne Befehl ein genau 9 stelliger Code, also z.B.  "-+- +0+ 000" für AUF und "-+- +0+ 00-" für AB. Die Codes werden über den Sender eingelernt. Markisen nutzen meines Wissens nur einen 7 stelligen Code. Jeder Empfänger kann bis zu 3 Sender (also 6 Codes) einlernen, damit können auch Gruppen eingelernt werden.

Es gibt Sender für unterschiedliche Anzahlen von Rollos, also z.B. 1, 2, 4, 6, 18, 50. Das entspricht jeweils der doppelten Anzahl Codes (AUF und AB). Etwas verwirrend: Ein mit DIP Schaltern zu programmierender Sender hat nur eine Reihe mit bis zu 9 DIP-Schaltern. Hiermit wird sozusagen nur der erste Code oder Präfix eingestellt, den Rest vergibt der Sender selber. Der Sender für 1 Rollo (2 Codes) hat z.B. nur 8 DIP-Schalter das neunte Zeichen wird vom Sender bestimmt. Also z.B. 0 für AUF und - für AB. Der Sender für 6 Rollos (12 Codes) hat zwar 9 DIP Schalter, aber es sind nur die ersten 6 DIP Schalter relevant, der Rest ist je nach Sender-Taste festgelegt. Bei den programmierbaren Sendern GF0043 und GF0050 können die 9-stelligen Codes frei definiert werden.

In FHEM benutzt man am Besten einen 433nanoCUL mit CC1101 und das Modul SIGNALduino. Mit culfw ist es uns nicht gelungen die Geiger Sender zu empfangen oder etwas zu senden. Die Installation von SIGNALduino und das Flashen eines nanoCUL mit CC1101 ist ausgiebig beschrieben in: https://wiki.fhem.de/wiki/SIGNALduino. Das Problem mit SIGNALduino ist, dass es weder die Notation von Geiger kennt, noch das genaue Protokoll. Wir haben uns da jetzt etwas reingekniet und einen cmdalias geschrieben, der die Geiger-Notation annimmt und an den SIGNALduino als raw message weiter gibt.

Dazu definiert man zuerst den SIGNALduino, hier mit dem Namen "sduino"

define sduino SIGNALduino /dev/serial/by-id/usb-FTDI_USB__-__Serial_Cable_12345678-if00-port0
attr sduino cc1101_frequency 433.920
attr sduino hardware nanoCC1101


Danach definieren wir einen cmdalias auf das object sduino mit folgender Raw definition:

defmod GeigerAlias cmdalias set sduino sendDIP .* AS {\
my ($dev, $cmd, $params) = split(/\s+/, $EVENT, 3);;\
Log 1, join(':','sendDIP#', $dev, $cmd, $params, ':');;\
$params =~ s/\s//g;;\
my ($parm, $repeats) = split('#', $params);;\
$repeats = 4 unless ($repeats);;\
$parm =~ s/0/1234/g;;\
$parm =~ s/\+/1212/g;;\
$parm =~ s/-/3434/g;;\
my $p5 = ($parm =~ /2$/) ? '-2045' : '-16092';;\
$parm =~ s/.$/5/;;\
$parm = 'set ' . $dev . ' raw SR;;R=' . $repeats\
. ';;P0=-32001;;P1=2039;;P2=-298;;P3=321;;P4=-2010;;P5=' . $p5 . ';;D=0' . $parm . ';;';;\
$parm =~ s/;;/;;;;/g;;\
fhem($parm);;\
}

setstate GeigerAlias defined



Damit haben wir jetzt die Möglichkeit Geiger Codes abzusetzen. Und zwar mit dem Befehl:

set sduino sendDIP -+-+0+000

Für Rollos muss die Länge des Codes immer 9 sein. Es gibt dann pro Rollo einen Auf und einen Ab Code.

Per default wird der Code nicht einmal, sondern viermal hintereinander gesendet. Das macht ein normaler Handsender auch so. Optional kann die Anzahl der Wiederholungen auch hinten mit "#" angegeben werden, also:

set sduino sendDIP -+-+0+000#9

So könnte man z.B. auch einen langen Tastendruck simulieren. Leerzeichen im sendDIP werden ignoriert, es geht also auch übersichtlicher:

set sduino sendDIP -+- +0+ 000


Damit kann man jetzt einen Dummy bauen, der die Codes für Auf und Ab versendet, indem er "set sduino sendDIP" aufruft.

Diesen Sendecode haben wir bisher mit 2 Leuten geprüft, es wäre schön, wenn weitere Leute die Gültigkeit bestätigen könnten.

Soweit das Senden der Geiger-Codes. Ein offener Punkt ist noch das Empfangen von Geiger Codes. Wenn wir einen Geiger Sender betätigen und dabei den SIGNALduino in Debug mode setzen können wir folgendes sehen:


2018.01.03 17:29:46 1: DEBUGsduino DMSG u46#33F58
....
2018.01.03 17:29:46 1: DEBUG>sduino: demodulated message raw (0 0 1 1 0 0 1 1 1 1 1 1 0 1 0 1 1), 17 bits
....

Wir haben festgestellt. Der neunstellige Geigercode mit +0- wird vom sduino als 18Bit Code aus 0 und 1 decodiert. Wir wissen, es gilt:
00 == +, 11 == -, 01 == 0
Das letzte Bit des Signals ist allerdings etwas anders und darum erkennt die Decodierung nur 17 Bit. D.h. gesendet wurde:
0 0 1 1 0 0 1 1 1 1 1 1 0 1 0 1 1 ?
In diesem Fall kann "?" nur eine "1" sein, da es für "10" keine Decodierung gibt.  Das wäre dann der Geigercode: +-+---00-

So kann man gesendete Codes, ausgenommen des letzten Zeichens, empfangen und muss dann das letzte Zeichen erraten, jedenfalls bei + oder 0. Wir hättten aber auch noch gerne eine automatische Lesefunktion. Das ist jetzt der Punkt, wo wir mit den SIGNALduino Leuten reden sollten.

drhirn

Wow, das war ausführlich! Vielen, vielen Dank!

Jetzt  müsste ich nur noch rausfinden, wo ich einen fixfertigen 433nanoCUL mit CC1101 herbekomme. Meine Bastelversuche haben zwar funktioniert, aber anscheinend so gestrahlt, dass sie meine Internetleitung lahm gelegt haben ;)
Im Wiki-Artikel zu Signalduino steht In-Circuit als Anbieter. Aber ich weiß nicht genau, welches Produkt ich da brauche. Könnte mir da jemand einen Tipp geben bitte?

Danke nochmal!
Stefan

fasch

Hallo,
also ich habe meinen einfach fertig bei eBay gekauft. Mein Anbieter hieß damals  flexstarr*. Wenn ich aktuell einfach nach "nanoCUL CC1101 433" bei eBay suche finde ich jede Menge fertig zwischen 27 und 40 Euro, alles ziemlich ähnlich, bis auf die Antenne. Wichtig ist halt 433 Mhz, CC1101 und da sollte noch was von Nano V3.0 und Mega 328P stehen, dann passt es eigentlich. Einer liefert sogar mit SIGNALduino geflasht, das müsste dann auf jeden Fall passen, aber das ist auch selber schnell gemacht. Meiner hat die einfache Antenne mit dem gedrehten Draht und liegt trotzdem keinen Meter von meiner FritzBox entfernt.

drhirn

Perfekter Tipp!
Danke! Ich werde dann berichten.

sommer

Hallo,

ich habe meinen nanoCul auch selbst zusammengesteckt. Läuft bei mir Problemlos.
Ich habe folgende zwei Teile verwendet:
https://www.amazon.de/ATmega328P-Arduino-Compatible-Verbesserte-USB-Kabel/dp/B00Q6WTWGO/ref=pd_sim_147_3?_encoding=UTF8&psc=1&refRID=BZMTYF61Z8VD8JXZ956A
https://www.amazon.de/Stable-Funk-Module-Technische-externer-Antenne/dp/B00GBW6WJY/ref=pd_sim_147_12?_encoding=UTF8&psc=1&refRID=JCAQPED4828GB6PJNHV2
(Das Funkmodul dauert leider etwas länger bei der lieferung, evtl. gibt es alternative Lieferanten)

Damit kann man zumindest die Teile schnell verbinden ohne zu löten. Für eine kompaktere Version kann man natürlich den Arduino und den Funkmodul auch ohne
Pins nehmen und mit kurzen kablen verlöten.

Die Schaltpläne gibt es auf diversen Blogs (ich kann den von Matthias Kleine empfehlen).

Viel spaß.

drhirn

Sodala, SIGNALduino läuft.
Ich kapier nur leider die Sache mit den zu sendenden Codes nicht so ganz.

Mein Sender ist ein GF0001 mit 9 DIPs (+0+ -++ -+-)
Nach dessen Betätigung bekomme ich im FHEM-Log u46#130D8 für runter und u46#130D0 für rauf.
Jetzt hätte ich mir das so zusammen gewurschtelt, dass
u46#130D8 = +0 +- ++ -0 -+
und
u46#130D0 = +0 +- ++ -0 ++
10 Stellen jeweils.

Mir war danach nicht ganz klar, was für einen Code ich jetzt genau an den Rolladen schicken muss. Deshalb habe ich ausprobiert und bin zu folgendem Ergebnis gekommen:

Runter: +0+ -++ -0-
Rauf:     +0+ -++ -00

Stoppen muss ich jeweils mit dem Code der Gegenrichtung.

Der Code ist also nicht identisch mit eurem.

fasch

Hallo,
ich denke das passt alles zum bisher gesagten.

Zu dem was u46 liest:
Wie gesagt, u46 ist nicht die Lösung, sondern nur ähnlich. Man kann da nur mit bis zu 17Bit, also 8 DIP Codes, stimmenden Ergebnissen rechnen.
Dein ermitteltes Ergebnis mit +0+ -++ -0- und +0+ -++ -00 stimmt aber wieder mit den ersten 17Bit, also den ersten acht Codierungen überein.
Ich finde auch hier gilt: von den neun Codierungen wurden die ersten acht richtig erkannt.

Zu Deinen DIP Schaltern:
Ich habe mal das Handbuch für GF0001 bis GF0003 bei Geiger durchgelesen.
http://www.geiger.de/fileadmin/user_upload/documents/GEIGER_F_BAL_GF0-01-03_100W0602-000_DE.pdf

Dort steht tatsächlich wortwörtlich und dazu gibt es sogar ein Bild:

Codierung:
Bitte verwenden Sie für die Einstellung Ihrer individuellen Codierung die Dip-Schalter 1 - 7 des 9-poligen 
Codierschalters. Die Dip-Schalter 8 + 9 stellen Sie bitte wie abgebildet in die mittlere Position.
Über die Dip-Schalter 8 + 9 erzeugt Ihr Handsender automatisch die verschiedenen Codierungen für die bis zu 
6 Tasten des Gerätes. Diese so genannte ,, Kanal-Auswahl" kann nicht beeinflusst werden.


Also: Die Stellung von DIP 8 und 9 ist für die Codierung uninteressant, vermutlich benutzt der GF0001 am Ende immer 00 und 0-. Und die ersten 7 DIPs passen doch. Welche Auswirkung DIP 8 und 9 haben, die in Mittelstellung stehen sollen, ist leider nicht erklärt. Vielleicht ist das die Anzahl Wiederholungen oder auch was ganz anderes.

Wenn der GF0001 hinten 00 und 0- benutzt, passt das auch zu meinem Sender für 3 Rollos.
Der nutzt für die Reihe 1 hinten auch Auf: 00 und Ab: 0-.
Und für Reihe 2 hinten Auf: -0 und Ab: --
Und für Reihe 3 hinten Auf: 0+ und Ab: +0

Bei Dir gilt dann: Die ersten 7 DIPs gelten und hinten kommt 00 und 0- dran. Das passt dann wieder exakt.
sommer hatte nur 8 DIPs. Evtl. werden da ja auch nur 7 ausgewertet.

Vielleicht muss ich mal bei Geiger in Bietigheim vorbei fahren, sind ja nur knapp 600 km.

drhirn

Ich werde, wenn ich dann zuhause bin, ausprobieren, was passiert, wenn ich DIP 8+9 in die Mittelstellung stelle.

Eh, 600km, quasi um's Eck ;). Bezweifle allerdings, dass dir Geiger bei deinem Besuch irgendetwas erzählen wird ;)