NEWS
RFlink (LOS GEHT ES ) Bestellung d.Hardware (20€) + 5€ Spende an Forum f.d. Adapter (crowdfunding like :-)
-
Ich versuche nun die Fernbedienung und Sirene zu dekodieren.
Habe hier gelesen http://forum.iobroker.net/viewtopic.php?f=35&t=3831 dass es einen Sketch gibt, nämlich:
! ```
`/*
Sketch zur Vorab-Analyse unbekannter 433-MHZ-Wettersensoren
und Fernbedienungen von 433MHz-Funksteckdosen
Inspiriert durch Beiträge im Arduino-Forum:
http://arduino.cc/forum/index.php/topic,119739.0.html
http://arduino.cc/forum/index.php/topic,136836.0.html
! Hardware:
1. Arduino-Board mit 433 MHz Regenerativempfänger für ASK/OOK,
angeschlossen an einem interruptfähigen Pin.
2. Funksensor entweder eines 433 MHz Funkthermometers
oder Funk-Wetterstation oder Steckdosen-Funkfernbedienung
! Analysiert werden können Sensoren mit folgendem Funkprotokoll:- extra langes Startbit (extra langer LOW Pulse am Receiver)
- langes 1-Datenbit (langer LOW Pulse am Receiver)
- kurzes 0-Datenbit (kurzer LOW Pulse am Receiver)
- sehr kurze Trenn-Impulse zwischen den Datenbits (sehr kurze HIGH-Impulse am Receiver)
- 20 bis 50 Datenbits pro Datenpaket
Diese Art Funkprotokoll trifft auf die meisten billigen 433 MHZ
Funkthermometer, Funk-Wetterstationen und Funk-Steckdosen zu.
! Ausgabe ueber den seriellen Monitor
Je erkanntem Datenpaket am Receiver wird ausgegeben:- Länge des Startbits (Mikrosekunden LOW) und des nachfolgenden HIGH-Impulses
- Anzahl der erkannten Datenbits im Datenpaket
- Länge aller erkannten Datenbits (Mikrosekunden LOW)
- Länge der zwischen den Datenbits erkannten Pausen (Mikrosekunden HIGH)
- die als 0/1-Bitstrom decodierten Datenbits des Datenpakets
! Nur Vorab-Analyse des Timings im Funkprotokoll!
In einem weiteren Schritt muss dann die Bedeutung der Bits
und die Umsetzung in Messwerte erst noch detalliert decodiert werden,
dieser Sketch erkennt nur das Timing und die Groesse der Datenpakete!
*/
! // connect data pin of rx433 module to a pin that can handle hardware interrupts
// with an Arduino UNO this is digital I/O pin 2 or 3 only
#define RX433DATAPIN 2
! // hardware interrupt connected to the pin
// with Arduino UNO interrupt-0 belongs to pin-2, interrupt-1 to pin-3
#define RX433INTERRUPT 0
! // Set speed of serial in Arduino IDE to the following value
#define SERIALSPEED 115200
! // Now make some suggestions about pulse lengths that may be detected
// minimum duration (microseconds) of the start pulse
#define MINSTARTPULSE 740
! // minimum duration (microseconds) of a short bit pulse
#define MINBITPULSE 250
! // minimum duration (microseconds) of a HIGH pulse between valid bits
#define MINHITIME 50
! // variance between pulses that should have the same duration
#define PULSEVARIANCE 250
! // minimum count of data bit pulses following the start pulse
#define MINPULSECOUNT 40
! // maximum count of data bit pulses following the start pulse
#define MAXPULSECOUNT 70
! // buffer sizes for buffering pulses in the interrupt handler
#define PBSIZE 216
! void setup()
{
Serial.begin(115200);
Serial.println();
Serial.println("Start!");
pinMode(RX433DATAPIN, INPUT);
attachInterrupt(RX433INTERRUPT, rx433Handler, CHANGE);
}
! volatile unsigned int pulsbuf[PBSIZE]; // ring buffer storing LOW pulse lengths
volatile unsigned int hibuf[PBSIZE]; // ring buffer storing HIGH pulse lengths
unsigned int validpulsbuf[MAXPULSECOUNT]; // linear buffer storing valid LOW pulses
unsigned int validhibuf[MAXPULSECOUNT]; // linear buffer storing valid HIGH pulses
! volatile byte pbread,pbwrite; // read and write index into ring buffer
! void rx433Handler()
{
static long rx433LineUp, rx433LineDown;
long LowVal, HighVal;
int rx433State = digitalRead(RX433DATAPIN); // current pin state
if (rx433State) // pin is now HIGH
{
rx433LineUp=micros(); // line went HIGH after being LOW at this time
LowVal=rx433LineUp - rx433LineDown; // calculate the LOW pulse time
if (LowVal>MINBITPULSE)
{ // store pulse in ring buffer only if duration is longer than MINBITPULSE
// To be able to store startpulses of more than Maxint duration, we dont't store the actual time,
// but we store MINSTARTPULSE+LowVal/10, be sure to calculate back showing the startpulse length!
if (LowVal>MINSTARTPULSE) LowVal=MINSTARTPULSE+LowVal/10; // we will store this as unsigned int, so do range checking
! pulsbuf[pbwrite]=LowVal; // store the LOW pulse length
pbwrite++; // advance write pointer in ringbuffer
if (pbwrite>=PBSIZE) pbwrite=0; // ring buffer is at its end
}
}
else
{
rx433LineDown=micros(); // line went LOW after being HIGH
HighVal=rx433LineDown - rx433LineUp; // calculate the HIGH pulse time
if (HighVal>31999) HighVal=31999; // we will store this as unsigned int
hibuf[pbwrite]=HighVal; // store the HIGH pulse length
}
}
! boolean counting;
byte i,counter;
int startBitDurationL,startBitDurationH,shortBitDuration,longBitDuration;
! void showBuffer()
// this function will show the results on the serial monitor
// output will be shown if more bits than MINPULSECOUNT have been collected
{
long sum;
int avg;
sum=0;
if (counter>=MINPULSECOUNT)
{ // only show buffer contents if it has enough bits in it
Serial.println();
Serial.print("Start Bit L: "); Serial.print((startBitDurationL-MINSTARTPULSE)10L);
Serial.print(" H: ");Serial.println(startBitDurationH);
Serial.print("Data Bits: ");Serial.println(counter);
Serial.print("L: ");
for (i=0;i<counter;i++) {/serial.print(validpulsbuf[i]);serial.print("/");/sum+="validpulsbuf[i];" }/serial.println();/serial.print("h:/for/(i="0;i<counter;i++)" serial.print(validhibuf[i]);serial.print("/avg="sum/counter;" calculate/the/average/pulse/length/then/assume/that/0-bits/are/shorter/than/avg,/1-bits/longer/if/(validpulsbuf[i]<avg)/serial.print('0');/else/serial.print('1');/counting="false;" counter="0;" void/loop()/long/lowtime,/hitime;/(pbread!="pbwrite)" check/data/in/ring/buffer/lowtime="pulsbuf[pbread];" read/from/hitime="hibuf[pbread];" cli();/interrupts/off/while/changing/pointer/ringbuffer/pbread++;/(pbread="">=PBSIZE) pbread=0;
sei(); // Interrupts on again
if (lowtime>MINSTARTPULSE) // we found a valid startbit!
{
if (counting) showBuffer(); // new buffer starts while old is still counting, show it first
startBitDurationL=lowtime;
startBitDurationH=hitime;
counting=true; // then start collecting bits
counter=0; // no data bits yet
}
else if (counting && (counter==0)) // we now see the first data bit
{ // this may be a 0-bit or a 1-bit, so make some assumption about max/min lengths of data bits that will follow
shortBitDuration=lowtime/2;
if (shortBitDuration<minbitpulse+pulsevariance) shortbitduration="MINBITPULSE;" else/shortbitduration-="PULSEVARIANCE;" longbitduration="lowtime2+PULSEVARIANCE;" validpulsbuf[counter]="lowtime;" validhibuf[counter]="hitime;" counter++;/}/if/(counting&&(lowtime="">shortBitDuration)&&(lowtime<longbitduration)) {/validpulsbuf[counter]="lowtime;" validhibuf[counter]="hitime;" counter++;/if/((counter="=MAXPULSECOUNT)" ||/(hitime<minhitime))/showbuffer();/}/else/low/pulse/is/too/short/(counting)/counting="false;" counter="0;" }<e=""></longbitduration))></minbitpulse+pulsevariance)></counter;i++)>`
Ist das der richtige, den ich auf den Arduino Mega mit rflink aufspiele?
! Habe den Sketch aufgespielt am PC mit Hilfe der Arduino Software. Klappt auch soweit.
! Dann rufe ich den seriellen Monitor auf... da steht nur "Start!"
! Beim Drücken der Fernbedienung passiert nichts.
! Wahrscheinlich habe ich es total falsch verstanden wie man da vorzugehen hat.
1146_unbenannt.jpg [/i][/i][/i][/i] -
Du kannst deinen Arduino mit der v.45 oder v44 vom Maxtox an den Windows Rechner anschliessen und in der Software vom Arduino auf die serielle Schnittstelle umstellen. Unter Werkzeuge ist ein serieller Monitor. Die Baudrahte ist 57200 Baut glaube ich. Dort sieht man einiges was dort passiert.
-
Du kannst deinen Arduino mit der v.45 oder v44 vom Maxtox an den Windows Rechner anschliessen und in der Software vom Arduino auf die serielle Schnittstelle umstellen. Unter Werkzeuge ist ein serieller Monitor. Die Baudrahte ist 57200 Baut glaube ich. Dort sieht man einiges was dort passiert. `
Ja, so habe ich gemacht. Mit dem Unterschied, dass ich Baud = 115200 ausgewählt (steht auch so im sketch). Nehme ich ich 57600 Baud, dann steht nicht "Start!" sondern "ŒŸîœþ" im seriellen Monitor.Ich denke ich muss den sketch anpassen… zB. steht dort:
` > // connect data pin of rx433 module to a pin that can handle hardware interrupts// with an Arduino UNO this is digital I/O pin 2 or 3 only
#define RX433DATAPIN 2 `
Muss dann wohl auf den richtigen pin vom Mega angepasst werden!? -
dann stimmt deine Baudrahte mit 115200…
Die Hardware vom Maxtox ist richtig verdrahtet. Die Verdrahtung passt auch zu dem Sketch v45 was mit dem RF-Link Adapter genutzt wird.
Das worauf ich hinaus wollte ist, dass man einiges beim Betätigen der Fernbedienung sehen müsste, sobald die Hardware am Windows angeschlossen ist und die passende Baudrahte unter serieller Monitor eingestellt ist. Du hast geschrieben dass Du die Teile bereits angelern hast. Also muß dort auch zwangsweise zu sehen sein.
Hast Du versucht die Sirene über nen Widget zu steuern? Die ist doch bereits bei Dir angelern. Ich kann Dir schlecht helfen, habe selbst nicht allzuviel Ahnung davon, und nicht einmal die Hardware hier vor Ort
-
Achtung!
Die beschriftung der pins auf den megas von maxtox sind falsch!
Bitte mit originalen im netzt vergleichen.
Gruß
Rainer
-
Hallo Zusammen,
ich habe hier noch einen Uno rumliegen. Daher meine Frage:
Könnte man eine Zusammenfassende Teileliste sowie den Sketch hier posten, dann könnte man sich das für die verschiedenen Arduino Versionen anpassen. Die Mühen sollen auch nicht umsonst sein, gerne geb ich eine Spende fürs Forum.
Danke und viele Grüße
Reeze
-
Hallo Zusammen,
ich habe hier noch einen Uno rumliegen. Daher meine Frage:
Könnte man eine Zusammenfassende Teileliste sowie den Sketch hier posten, dann könnte man sich das für die verschiedenen Arduino Versionen anpassen. Die Mühen sollen auch nicht umsonst sein, gerne geb ich eine Spende fürs Forum.
Danke und viele Grüße
Reeze `
Die Firmware findest Du hier: http://www.nemcon.nl/blog2/download
Die Liste der Hardware die unterstütz wird, findest du dort: http://www.nemcon.nl/blog2/devlist
Sonst, kannst Du nur einen Arduino Mega verwenden, da dieser nur passende Flash-Größe hat. Beim Uno reicht der Speicher nicht aus.
Passende Sender und Empänger gibt es dort: http://www.nemcon.nl/blog2/wiring
-
Aus diesem Grund hier das Angebot an Euch.
- 20€ für die Hardware gebaut und getestet (ohne Garantie und ohne Gewährleistung. Rückgabe ausgeschlossen) incl. Unversicherten Versand! (Vers. versand möglich gegen Aufpreis)
und/oder
- min. 5€ Spende an Forum INCL. ADAPTER FÜR ioBroker! `
Hi,
da ich Aufgrund von zu wenig Beiträgen noch keine PN schreiben darf, müßt Ihr alle leiden
Wie kann ich Bestellen, Spenden und Dir meine Adresse zukommen lassen?
Stellst Du überhaupt noch welche her?
Ich habe versucht den gesamten Thread nach diesen Informationen zu durchsuchen, kam mir aber von Seite zu Seite dämlicher vor. Scheinbar wissen alle anderen Mitglieder wie es geht, nur ich verstehe es nicht
Gruß,
Alfred
-
Hallo Alfred und Willkommen (auch hier) im Forum!
Wie kann ich Bestellen, Spenden und Dir meine Adresse zukommen lassen? `
Am Anfang einfach über den paypal-Spendenbutton auf der Website iobroker.net. Kurze Notiz dazu und gut ist.Stellst Du überhaupt noch welche her? `
Muss Maxtox beantworten, aber ich denke schon.Gruß
Rainer
-
Hallo,
ich habe heute den 868er von Maxtox im Kasten gehabt. Nun liegt er so vor mir rum und ich weiß nicht woran ich ihn anschließen soll.
Kann da einer helfen? 4 PINS
Gruß Marco
-
Einfach usb to serial Kabel an die pins gnd, vcc RX, TX… Und schon geht es los... Sketch ist schon drauf
-
Da werd ich mir wohl erstmal eins kaufen müssen. :?
-
An den PI2 geht es nicht ohne USB?
-
Klasse, hast Du die Sirene in blau bestellt?
Die Fensterkontakte gibt es auch ohne Kerui Beschriftung. Ich habe mich aber für die Homematic Fensterkontakte entschieden. Die optischen von der Homematic sind etwas kleiner als die magnetischen von Kerui. Die Bewegungsmelder nehme ich auch von Homematic, da es wahrscheinlich einfacher wird ein Blockly zu schreiben, wenn man den Status hat, dass keine Bewegung erkannt ist . Die PIRs von Kerui senden nur bei Bewegung. Die Handsender sind auch besserer von Homematic. Ich habe hier zu Hause ein liegen.
Melde Dich mal, wenn die Sachen angekommen sind, bin echt neugierig ob die Sirene geht.
Gruss `
Die 433 Mhz-Teile kann man natuerlich nicht vergleichen mit den HM-Teilen, ohne die Rueckmeldung ueber den Status. Darf man nicht richtig ernst als Alarmanlage sehen.Sirene ist in blau, habe keine andere bei Ali gefunden.
Ich melde mich definitiv und hoffe ich kriege das hin mit den raw-Daten fuer Maxtox:
@Maxtox:wen die sirene 433 empfängt, kannst du die handsender auslesen (siehe sketch in einem meiner beiträge) und dann dekodierst due es (an/aus) und meldest dich bei mir… dann geht es weiter
Hi Lobomau,
bist Du weiter gekommen?
Ich werde mir die Außensirene selbst bauen.
Dazu bestelle ich mir ein ABUS SG1650. Die Sirene sowie die Blitz-LED´s lassen sich separat dort schalten. Sobald 12V an der Klemme anliegen, leuchten die LED`s bzw. geht die Hupe an. Es sind zwei verschiedene Stromkreise vorhanden
Mit einem Homematic 8-Kanal-Empfangsmodul als Bausatz für 20€, kann man schön die 12V aus einem Akkupack auf die Eingänge der Außensirene über Relai schalten lassen. Da ich zwei Stromkreise (Licht und Hupe) separat schalten möchte, komme ich mit zwei Relais aus. Es ist sonst genug Platz dort vorhanden, um ein Akkupack in der Größe B85xT80xH190mm unterzubringen.
Das hat ja zwei Vorteile…
A - ganz einfache Inbetriebnahme, da Homematic Komponenten.
B - 8 Ausgänge, wobei nur zwei davon benötigt werden.
Passende Relais habe ich auch schon hier liegen. ( Nais HB2E-DC24V) Das schöne dabei ist, dass sie gerade mal 25mA benötigen. Ein Homematic Empfängermodul kann sogar bis 100 mA belastet werden. So wird die Schaltung sehr Simpel aussehen. Ich denke, dass es Sicherer ist, dort die Homematic Komponenten verbauen zu lassen. Der Akkupack sollte für ein paar Monate/Jahre ausreichend sein. Die Stromaufnahme des Funkemfängers soll max. 100 μA betragen. schauen wir mal wie lange der Akku in der Praxis aushällt. Zur Not kommt dort noch ein Solarmodul hin, was den Akku am Tag etwas aufladen lässt. Für ca. 20€ habe ich bereits einige Solarmodule in kleine Größe gesehen....
Gruß
1526_s-l1600.jpg -
Klasse, hast Du die Sirene in blau bestellt?
Die Fensterkontakte gibt es auch ohne Kerui Beschriftung. Ich habe mich aber für die Homematic Fensterkontakte entschieden. Die optischen von der Homematic sind etwas kleiner als die magnetischen von Kerui. Die Bewegungsmelder nehme ich auch von Homematic, da es wahrscheinlich einfacher wird ein Blockly zu schreiben, wenn man den Status hat, dass keine Bewegung erkannt ist . Die PIRs von Kerui senden nur bei Bewegung. Die Handsender sind auch besserer von Homematic. Ich habe hier zu Hause ein liegen.
Melde Dich mal, wenn die Sachen angekommen sind, bin echt neugierig ob die Sirene geht.
Gruss `
Die 433 Mhz-Teile kann man natuerlich nicht vergleichen mit den HM-Teilen, ohne die Rueckmeldung ueber den Status. Darf man nicht richtig ernst als Alarmanlage sehen.Sirene ist in blau, habe keine andere bei Ali gefunden.
Ich melde mich definitiv und hoffe ich kriege das hin mit den raw-Daten fuer Maxtox:
@Maxtox:wen die sirene 433 empfängt, kannst du die handsender auslesen (siehe sketch in einem meiner beiträge) und dann dekodierst due es (an/aus) und meldest dich bei mir… dann geht es weiter
Hi Lobomau,
bist Du weiter gekommen?
Ich werde mir die Außensirene selbst bauen.
[…] `
Ein bischen weiter bin ich. Ich weiß nun durch Maxtox wie man so einen code aufnimmt. Man muss nix am sketch machen… man schließt einfach den ArduinoMega mit rflink an PC und lässt rflink_uploader im debug modus laufen:20;65;DEBUG;Pulses=23;Pulses(uSec)=1020,1020,1470,330,150,600,540,0,660,90,30,90,420,2610,1080,150,120,240,150,330,930,1320,30; 20;66;DEBUG;Pulses=24;Pulses(uSec)=630,30,510,390,120,240,30,60,120,60,180,690,390,60,330,960,0,120,120,120,600,60,30,270; 20;67;DEBUG;Pulses=32;Pulses(uSec)=510,1800,270,30,30,60,1950,300,120,1530,60,30,90,120,180,150,1020,120,0,90,810,120,120,60,1110,540,360,1080,60,330,60,750; 20;68;DEBUG;Pulses=42;Pulses(uSec)=690,120,60,180,60,1350,1200,30,1080,0,240,60,210,30,180,90,1200,540,60,30,90,120,60,120,120,30,1560,1350,1050,300,90,1110,30,420,30,150,1380,480,120,90,180,270; 20;69;DEBUG;Pulses=24;Pulses(uSec)=540,60,150,60,60,60,30,120,1140,270,90,150,60,0,840,870,1230,660,600,1770,240,210,210,150; 20;6A;DEBUG;Pulses=24;Pulses(uSec)=30,270,870,450,90,30,180,90,210,210,870,240,540,0,840,1530,90,300,180,120,630,90,270,300; 20;6B;DEBUG;Pulses=26;Pulses(uSec)=150,60,30,90,60,60,1230,60,1470,120,330,360,390,30,30,30,420,1350,60,150,300,90,180,120,420,660; 20;6C;DEBUG;Pulses=32;Pulses(uSec)=360,60,60,90,270,30,840,1560,540,30,30,150,60,60,690,1470,90,60,60,90,270,60,90,1260,240,60,60,150,210,120,420,30; 20;6D;DEBUG;Pulses=38;Pulses(uSec)=780,990,0,90,60,90,30,60,60,90,90,390,690,150,30,60,150,90,240,60,420,90,30,0,930,240,180,150,60,1020,60,120,30,0,600,930,630,930; 20;6E;DEBUG;Pulses=24;Pulses(uSec)=210,870,120,120,1890,1650,30,120,1380,1020,60,60,0,60,30,210,1020,510,90,150,60,120,0,120;
Dann kommt die Fleißarbeit… aber dafür fehlt mir noch das Verständnis was ich dabei eigentlich suche und machen muss :?
-
Mit dem Sketch für arduino Nano, kann man direkt an die pins gehen, die senden (+, -, data) und erhält 0101010010 binären code, denn man dann nach HEX oder ähnliches durchsuchen kann …
D.h. Um 0 und 1 code ohne Aufwand zu bekommen muss du an die Hardware Pins vom Sender ran... Foto?
-
Mit dem Sketch für arduino Nano, kann man direkt an die pins gehen, die senden (+, -, data) und erhält 0101010010 binären code, denn man dann nach HEX oder ähnliches durchsuchen kann …
D.h. Um 0 und 1 code ohne Aufwand zu bekommen muss du an die Hardware Pins vom Sender ran... Foto? `
Wenn ich es richtig verstehe gibt es für mich zwei Möglichkeiten:a) Arduino Nano nehmen mit fertigem sketch und RF-Modul dranbauen (vom Mega abbauen)
b) Sketch für Arduino Mega anpassen (wo bereits das RF-Modul angebaut ist)
für a) bräuchte ich dann noch einen Nano… habe nur zusätzlich einen Uno. Dann kann ich gleich das RF-Modul dazu bestellen und kann den Mega mit rflink so lassen.
-
D.h. Um 0 und 1 code ohne Aufwand zu bekommen muss du an die Hardware Pins vom Sender ran… Foto? `
Hallo Maxtox,
ich kann Dir nicht ganz folgen!
Soll hierbei die Fernbedienung zerlegt werden und dort an den "Hardware Pins" ein Arduino angeschlossen sein, damit man die 0 & 1 auslesen kann?
-
Ja
oder du machst mit Hilfe von Excel eine Auswertung was 0 und 1 ist, was die Pausen dazwischen sind.
-
Ja
oder du machst mit Hilfe von Excel eine Auswertung was 0 und 1 ist, was die Pausen dazwischen sind. `
nicht schlecht, man könnte es sogar mit einem Oszi als Kurve/Kennlinie darstellen… Habe sogar so etwas hinbekommen. Leider ist es trotzdem danach schwierig zu sagen, welche Pausenzeiten dazwischen sind. Auch das HI und LOW sind nicht wirklich 100%ig zu deuten. Ich habe gehofft, dass es mit weniger Aufwand funktioniert. Ich bleibe doch lieber bei den Homematic Komponenten.