Ich möchte die ETH 200 Comfort Thermostate vom uC aus ansteuern. Dazu habe ich mir mal das Protokoll näher betrachtet. 7E - 6 Datenbytes - 16bit crc oder checksumme mir fehlt nur die Idee wie die CRC berechnet sein könnte, hier mal ein Satz der Datentelegramme: 7E 00 00 00 03 42 00 c2 16 7E 00 00 00 03 85 00 60 91 7E 01 10 00 00 42 00 C3 24 die 42 00 bzw 85 00 sind die Steuerbefehle. Byte 1 ein Zähler Byte2-4 die Seriennummer. die letzten beiden Bytes sind die Checksumme. Es ist etwas mühsam durch probieren die richtige Checksumme zu finden, hat jemand eine geniale Idee wie sich die Checksumme zusammensetzt??? Gruss diwe
Das ist keine "normale" CRC16-Summe. Wahrscheinlich etwas spezielles des Herstellers. Da hilft wohl nur ausprobieren.
Vielen Dank an alle die geholfen haben das Protokoll der ETH Comfort 200 Funkthermostate und Fensterkontakte zu entschlüsseln. Die Fensterkontakte übermitteln auch noch periodisch den Schaltzustand (sofort,und dann alle 10min) und den Batteriestatus @spark11 die Frequenz ist 868.3MHz und ist FM moduliert, also bestens geeignet um mit dem RFM12 zu kommunizieren
sorry, hab den Anhang vergessen das Protokoll ist Machester codiert 0x7e zz ll aa aa aa cmd crc crc zz ist ein fortlaufender Zähler ll die Blocklänge 10,20,30 (20 = 9 Byte, 10= 10Byte ,30=??) aa 3 Byte Adresse cmd der Befehl crc 16 bit checksumme die Reihenfolge der Bits im Byte ist verdreht. FeliX
Hi Felix es gibt da noch ein paar kleine Details.... da 7e die Startbedingung im Protokoll ist darf diese nicht in den Daten vorkommen, dies wird verhindert in den nach 5 1-en eine 0 eingeschoben wird, diese muss nach der Manchesterdecodierung beim Empfang wieder entfernt werden. ....Ausserdem sieht es so aus als ob es verschiedene Startwerte für die CRC Berechnung gibt. Als mask im CRC dient 0x8408. Weiterhin gibt es auch codes welche 31 bzw 32 als Blocklängenkennung haben. (11 bzw 13 Bytes lang). Schade dass ELV so rein gar nichts zu dem Protokoll herausgibt, die ETHs sind eigentlich schön für die Hausbusanbindung. weshalb die bits verdreht sind verstehe ich auch nicht, stimmt aber, denn nur dann macht der Zähler an Byte 2 auch einen Sinn. Der Fensterkontakt kennt nur 4 Befehle 40(Fenster zu) 41(Fenster auf) c0(Fenster zu Batterie leer)c1(Fenster auf Batterie leer) tschüß
Hi, womit habt ihr den Datentraffic mitgeschnitten? Ich habe mir auch ein paar EHT200 zugelegt und würde nun gerne das ganze (und mehr) vom PC aus steuern. Hat sich mal jemand den USB Stick zu diesem System angeschaut? Könnte man diesen nicht auch für andere System missbrauchen? Gruss
Hallo, gibt es schon neue Erkenntnisse zu dem Teil? Ich versuchte grade einmal, den zu der Serie gehörenden Raumthermostat / Ausstentempratursensor mit einem RFM12 zu "belauschen", allerdings recht erfolglos... cu - Arndt
Was brauchst Du denn für Infos, es steht doch im Prinzip schon alles hier im Thread, Ich steuere die ETH200 mit einem RFM12 an und habe auch ein RFM12 an einem STK500 als Monitor für das Funkprotokoll. Die Daten sind zunächst Manchestercodiert, nach dem decodieren musst du dann zunächst nach dem 7e suchen, das ist das Startbyte, anschließend die Eigenart mit den 5 einsen korrigieren folgen 5 einsen muss die nachfolgende 0 entfernt werden somit wird aus 01111101 eben wieder die 01111110 also die 7e. Die Daten stehen rückwärts drinnen und am Schluss folgt ne checksumme. Wenn Du willst kann ich ja das Programm für den HF-Monitor Dir zukommen lassen. Gruß Dietmar
Hallo, nun, ich habe nicht die ETH200 hier, sondern den dazu gehörenden, zusätzlichen Thermostat. Nach dessen Beschreibung koppelt man diesen mit einer ETH200, und dieser wird dann über den Thermostaten gesteuert (der Thermostat im ETH200 dient dann nur noch als Backup). Ich würde den Thermostaten gern mit einer eigenen Steuerung koppeln, ich müsste also eine ETH200 "simulieren". Zu dem Thermostaten gehört auch ein Aussenthermometer, das über Funk an den Thermostaten gekoppelt wird. Also versuchte ich, die Koppelsequenz zwischen den beiden Geräten zu "belauschen", aber die RMF12 liefert keine Daten - gesendet wird aber was, per Scanner sind die Datenpakete gut hörbar. Von den RMF12 habe ich hier schon ein paar erfolgreich im Einsatz, aber scheinbar gelingt mir die Einstellung der RFM12 nicht, oder die Frequenz liegt daneben... jedenfalls kommt nix raus. Das wäre klasse, wenn Du mir das Monitorprogramm zukommen lassen könntest, vllt wird mir dann klar was ich mit dem RFM12 falsch mache. Und herausfinden, wie die Geräte gekoppelt werden. cu - Arndt
Hallo zusammen, auch mir schwebt vor, ein ETH200 per RFM12 am µC zu steuern. Der grundlegende Aufbau der Datentelegramme ist in diesem Thread ja beschrieben. Vielen Dank dafür! Doch kennt jemand die Bedeutung der in den Telegrammen enthaltenen Steuerbefehle? Einfach gesagt: Ich möchte per Funk beispielsweise ein ETH200 auf 21 Grad Solltemperatur einstellen. Welche Steuerbefehle muss ich dafür schicken? Ich würde mich freuen, wenn mich jemand darüber aufklären könnte. Dietmar, vielleicht kannst Du ja auch einen entsprechenden Auszug aus Deinem Programm posten? Grüße Pete
Hi, ich beschäftige mich zur Zeit auch mit den ETH200. Könnte mir mal bitte einer die Initialisierung des RFM12 schicken mit dem ich den Funk mitschneiden kann ? Benutzt Ihr den FIFO ? Wird FSK- oder OOK-Modulation verwendet ? Baudrate ? Danke Stefan
Hallo Stefan Frequenz 868,3 Modulation FSK Hub +/- 15kHz Datenrate 10kbit Manchester kein Fifo nutzen, da Manchester signal von Hand decodiert werden sollte da Datenrate nicht sehr konstant wenn Du einen rudimentären Code zum Empfang benötigst PM an mich. Gruß Dietmar
Ich wäre auch sehr interessiert an dem Beispielcode da ich es selbst nicht schaffe das RFM12 richtig zu initialisieren. Noch eine Frage zum RFM12: Es gibt eine 433MHz und eine 866MHz-Version bei Pollin zu kaufen. Soweit so gut. Zusätzlich kann man aber auch über die Software das Band 433MHz/866MHz wählen. Kann ich also auch ein RFM12-433MHz mit der 866MHz Konfiguration zur Kommunikation mit dem ETH200 nutzen? Danke, Daniel M
Hallo! Danke an alle die hier Informationen zum ETH Comfort bereitgestellt haben. Mit dem Beispielcode habe ich es geschafft, einen Fensterkontakt mit dem RFM12B auszulesen. Ich verwende dazu die mbed-Plattform (www.mbed.org) Ich habs vorher vergeblich mit einem RFM22B versucht, hab aber dort nichts empfangen können. Bei Gelegenheit werde ich es nochmal mit den neuen Infos versuchen. Eigentlich müsste der RFM22B das Telegramm auch empfangen können. Ein decodiertes Telegramm sieht bei mir z.B. so aus:
1 | ----------------------------- |
2 | 7E 0D 20 00 21 77 41 67 15 CRC: 6715 OK |
3 | Counter: 0D |
4 | Dev-ID: 00 21 77 |
5 | Window : OPEN |
Ich werde das jetzt dazu verwenden, die ETH-Comfort-Fensterkontakte an meinen EIB-Hausbus (www.freebus.org)anzubinden. @daniel_m: Ich würde 866MHz und 433MHz nicht mischen. Die Chips sind die selben, daher auf beide Frequenzen programmierbar. Aber das restliche Design der Module ist auf die jeweilige Frequenz abgestimmt. LG Charly
Hi, wenn zusätzlich noch die Batterie schwach ist wird aus 41 c1 bzw aus 40 c0. Es wäre schön wenn hier die verschiedenen Lösungen welche entstanden sind als Code veröffentlicht werden, ich hab meinen rudimentären Code zur Kommunikation mit dem ETH200 angehängt. Vielleicht könnte jemand noch die Kommunikation mit dem USB Prog.stick entschlüsseln... Gruß Dietmar
Hallo, Da mir die ETH Funkwandthermostate ganz gut gefallen, habe ich mir überlegt damit meine Fußbodenheizung in den verschiedenen Räumen zu regeln. Als Empfänger von 6 "RaumControllern" soll ein Eigenbau diese Funktion übernehmen. Vieleicht kann mir der eine oder ander eine Hilfestellung geben. Wenn jemand andere oder bessere Raumcontroller kennt, würde ich gerne diese Erfahrung teilen. Vieleicht hat jemand auch schon einen eigenen RoomController entworfen ? lg Thomas
Arndt / Dietmar, ich fange jetzt erst mit den ETHs rumzuprobieren. Es ist finde ich eine sehr gute Basis. Von meiner Seite will ich auch die Heizung mit der gleichen technik steuern. Ich habe bei komforthaus.de gesehen, dass es dort verschiedenes gibt wie beispielsweise Zirkulationspumpensteuerung oder Servomotorensteuerung. Zu meiner Frage, habt ihr eure Erkentnisse irgendwo in iner Wiki hiterlegt? Ich habe zum thema reverse eng. ein paar schon davon gesehen. Wie auch immer. Ich wäre sehr an dem Programm interessiert. Ich hoffe, dass es auch auf einen Mac oder Linux portierbar ist. Später werde ich das ganze auf ein arduino packen. Dafür muss es aber am Mac oder Linux stabil und verlässlich funktionieren. ps. Ich steige wieder in diese Themen ein nach einer beruflich bedingten Pause von etwa 7 Jahren. Bitte entschuldigt wenn ich zu penetrant bin. :-] Cheers, J
hallo, ich häng mich da jetzt auch rein, ich muss innerhalb einer Woche die Kommunikation zwischen ETH200 und RFM12 zum laufen kriegen, da dies mein Abschlussprojekt für den Techniker wird. @Dietmar: Der Code iss ziemlich verteilt und ich tue mir noch bissl schwer ihn zu verstehen. Wenn du Lust und Zeit hast, könntest du mir vielleicht eine kurze Beschreibung zu deinem Code geben (Ablauf in Stichworten) Fortschritte werde ich hier veröffentlichen. Gruß Michael
Tag1: so ich bin jetzt dabei, oder besser ich versuche jetzt mit dem RFM12 die Kommunikation zwischen dem Wandregler und dem ETH200 abzuhören. Ich komme kein Stück weiter. Ich habe FIFO aus und häng mich mit dem Logic Analyzer an den Port DATA und DCLK vom RFM12 und da seh ich nix gar nix. Der Wandthermostat sendet auch nicht immer sofort nachdem ich eine Temperatur eingestellt habe (Zufallsprinzip ?) Gibt es noch einen Trick wie ich am DATA-Port Daten entlocken kann ? ich habe das RFM12 Modul wie folgt konfigueriert und gehe dann in eine Endlosschleife ( while(1){} )in der nichts gemacht wird. Einfach um zu sehen was der LA mit anzeigt. Im Anhang ein Mitschnitt des LA.
1 | //RFM12 - Configuration Command
|
2 | //el : Enable TX register = 1
|
3 | //ef : Enable RX FIFO buffer = 0
|
4 | //Select 868 MHz band
|
5 | //Select 11 pF crystal load capacitor
|
6 | writeCmd(0x80A5); // Disable FIFO |
7 | //RFM12 - Frequency Command
|
8 | //Set center frequency to 868.3 MHz
|
9 | writeCmd(0xA67c); |
10 | |
11 | rf12_setbaud(9600); |
12 | |
13 | //RFM12 - Receiver Control Command
|
14 | //p20 : 0=INTin, 1=VDIout = 1
|
15 | //VDI response time = Fast
|
16 | //Receiver bandwidth = 134 kHz
|
17 | //LNA gain = 0 dB
|
18 | //RSSI threshold = -73 dBm
|
19 | writeCmd(0x94A5); // Receiver Control |
20 | |
21 | |
22 | writeCmd(0xC220); // undokumentierte Funktion |
23 | |
24 | //RFM12 - FIFO / Reset Mode Command
|
25 | //al : 0=Sync pattern, 1=Always = 1
|
26 | //ff : FIFO fill = 0
|
27 | //dr : Disable high sens. Reset = 1
|
28 | //FIFO IT level = 8
|
29 | writeCmd(0xCA85); |
30 | |
31 | //RFM12 - AFC Command
|
32 | //AFC automatic mode = Offset VDI=h
|
33 | //st : Strobe edge = 0
|
34 | //fi : Fine mode = 1
|
35 | //oe : Offset register enable = 1
|
36 | //en : Calculate offset = 1
|
37 | //Range limit = +7fres to -8fres
|
38 | //Max. Deviation = +35kHz to -40kHz
|
39 | writeCmd(0xC4A7); |
40 | |
41 | //RFM12 - TX Configuration Command
|
42 | //mp = 0
|
43 | //Delta f (fsk) = 30 kHz
|
44 | //Output power = 0 dB
|
45 | writeCmd(0x9810); |
46 | |
47 | //RFM12 - Power Management Command
|
48 | //er : Enable receiver chain = 1
|
49 | //ebb : Enable baseband = 1
|
50 | //et : Enable PLL,PA, TX = 0
|
51 | //es : Enable synthesizer = 1
|
52 | //ex : Enable crystal oscillator = 1
|
53 | //eb : Enable low battery detector = 0
|
54 | //ew : Enable wake-up timer = 0
|
55 | //dc : Disable clock output = 1
|
56 | writeCmd(0x82D9); |
Hallo Michael! Ich hab mit dem Code von Dietmar relativ schnell die Daten des Fenster-Kontaktes mitlesen können. Sollte also auch bei dir funktionieren. Der DATA-Pin sollte immer ein Signal ausgeben. Wenn niemand etwas sendet, dann eine zufällige Signalfolge - Rauschen eben. Also dürfte bei dir der Anschluss oder die Initialisierung nicht korrekt sein. Ich habe mir deine Initialisierung nicht im Detail angesehen, aber mit der von Dietmar hats bei mir funktioniert! Möglicherweise hilft dir das http://mbed.org/users/charly/notebook/connecting-a-radio-window-shutter-contact-to-knx/ - ich hab den Code auf die MBED-Plattform portiert und etwas bereinigt. Aber fertig ist das auch noch nicht. LG Charly
Hallo Charly, ich habe jetzt die Initialisierung aus Deinem Projekt verwendet. Nur die Initialisierung um zu sehen was am RFM12 rauskommt. Im Anhang ein Mitschnitt vom LA, ohne das hier irgendetwas sendet. Ich vermute mal das das was ich da sehe das Rauschen ist. Habe ich noch eine Möglichkeit das weiter zu filtern ? Wie hast du den DATA und DCLK Pin verdrahtet ?
welches Signal habe ich am DCLK zu erwarten ? konstantes Taktsignal ?
Hallo Michael! Das Data-Signal sieht jetzt so aus wie bei mir. Wenn jemand sendet, sollte sich das Signal wesentlich unterscheiden und ziemlich konstante 0 und 1 folgen ausgeben. Den DCLK-Pin habe ich überhaupt nicht angeschlossen. Das Signal wird nur über den DATA-Pin auf einen Interrupt-Eingang am Controller gelegt. Der löst bei jedem Wechsel (also raise und fall) einen Interrupt aus. Das decodieren usw. macht die Interrrupt-Service-Routine (ISR() bei mir). Im Anhang einen Screenshot des DATA-Signals, während mein Fensterkontakt sendet. LG Charly
Hallo Charly, Bei mir sieht das Signal aus wie von meinem Screenshot vom 9.3. , wenn keiner sendet :-( Ich habe Deine Initialisierungsroutine verwendet. Ist das bei euch auch so, oder habe ich hier in der Nachbarschaft Jemand der ständig sendet ?
Wenn Du ein ein weiteres RFM12 Modul als schwachen Dauer-Sender benutzt, am besten ohne Antenne, kannst Du das Rauschen wegdrücken, dann kannst Du besser mit dem LA das Protokoll ansehen. Gruß Dietmar
Hallo Dietmar, danke für den Tipp. Ich habe gestern Nacht nach einer Einstellungsorgie für den Funk ein "sauberes" Signal erhalten. Besser kann's glaub ich nicht sein ! Jetzt mach ich mich noch ans dekodieren und dann passt's hoffentlich. Dann sollten ich die Übertragung zwischen Wandthermostat und Heizkörper-Regler haben und nächste Woche erhalte ich noch einen USB-Programmer für den ETH200 dann schau ich mir den noch an. schönes WE
es ist zum verrückt werden. Heute Morgen meine Testumgebung gestartet. Nix, keine Daten zum auswerten. Jetzt habe ich wieder am Receiver gefummelt und es geht wieder , aber ich versteh's nicht. Mit diesen Einstellungen lief es heute Nacht : ;RFM12 - Receiver Control Command ;p20 : 0=INTin, 1=VDIout = 1 ;VDI response time = Fast ;Receiver bandwidth = 200 kHz ;LNA gain = 0 dB ;RSSI threshold = -97 dBm 9481 und jetzt mit diesen : ;RFM12 - Receiver Control Command ;p20 : 0=INTin, 1=VDIout = 1 ;VDI response time = Fast ;Receiver bandwidth = 67 kHz ;LNA gain = 0 dB ;RSSI threshold = -73 dBm 94C5 Kann mir mal bitte Jemand RSSI, LNA , Bandweite und VDI erklären ? Ich dachte RSSI ist für die Schwelle um eine 1 oder 0 zu erkennen oder? Wie spielen diese Parameter zusammen ? Viele Grüße Michael
Bandweite: ergibt sich bei FSK Modulation aus BWmin.= 2* Datenrate + 2*Hub in diesem Fall 2*10kHz + 3*15kHz = mindestends 50kHz. Allerdings musst Du noch die Drift, bzw Toleranz des Quarzes einrechnen, 200kHz ist O.K. je breiter die Bandbreite desto mehr Störungen bekommst Du rein, es gilt pro Faktor 10 bekommst Du 10dB mehr Rauschen, zusätzlich steigt die Wahrscheinlichkeit, dass ein benachbarter Sendekanal Dein Empfang stört Lass die Bandbreite auf 200kHz, 67kHz ist schon etwas knapp. RSSI Threshold: die Schwelle ab welcher der Detektor versucht FSK Daten zu finden. Je kleiner desto Empfindlicher der Empfänger. Bei -73dBm solltest Du fast kein Rauschen am Datenpin sehen, allerdings ist dein Empfänger auch wesentlich unempfindlicher (6dB ist eine Verdopplung des Abstandes, sofern noch keine Begrenzung durch das Rauschen stattfindet) LNA Gain: Vorverstärker, hier kannst Du bei Starken Signalen das Signal abschwächen, bzw verstärken. Starke Sender können bei LNA =0dB den Empfänger übersteuern. Gruß Dietmar
wenn es heute Nacht mit -97dBm RSSI und 200kHz Bandbreite lief und heute morgen nicht heist das, dass Du einen Störsender hast welche Nachts nicht aktiv war. RSSI würde ich so in den Bereich -90dBm legen, bandbreite bei 200kHz. Problem ist, wenn Du einen Stör-Sender hast welcher knapp im Band liegt also innerhalb der Bandbreite aber nicht mittig, zieht die AFC die Frequenz des Empfängers auf diese Frequenz, sollte dies eben ein Störer sein, kann es sein, dass Du ein wesentlich größeres Signal benötigst um Dein Nutzsignal zu finden, hier hilft dann ein Neustart des Empfänger eventuell um den Suchlauf der AGC neu zu starten. Der RFM12 beinhaltet auch noch ein Antennentunig, diese geht aber nur beim Senden, deshalb zuerst Senden dann auf Empfang schalten. Ich hab mir noch Dein Signal am LA angesehen, das sieht aber alles andere als nach gültigen Daten aus! Du musst ein Signal mit 50% Tastverhältnis sehen. Stimmt Deine Frequenz und die Einstellung für die Lastkondensatoren des Quarzes? Gruß Dietmar
Hallo Dietmar, vielen Dank für deine ausführliche Antwort. Ich habe als Frequenz die Einstellungen übernommen : writeCmd( RFM_CONFIG_BAND_868 | RFM_CONFIG_X_11_0pf ); // 3. Frequency Setting Command writeCmd( RFM_FREQUENCY | RFM_FREQ_868Band(868.30) ); Aber ich bekomme kein sauberes Signal. Ist zum heulen. was steht denn bei euren RFM12 Modulen auf der Rückseite ? Bei mir steht hier RFM12S REV3.0 Der Tipp mit dem Dauersender hat geholfen, damit wurde das RAuschen minimiert. Aber sobald ich den abschalte, beginnt der DATA-Pin wieder wie wild zu toggeln. Ich glaube ich scheitere an dem Projekt. Viele Grüße
gibt es eine Möglichkeit, das Modul gegen Funkstörungen abzuschotten ?
Du wirst mit dem Rauschen leben müssen.... Sofern die Dekodierung richtig funktioniert ist das Rauschen kein Problem, Du musst nur die 7E im Rauschen erkennen. Versuch mit dem Füllsender das Rauschen zu eliminieren, wenn dann Deine Dekodierung funktioniert sollte es auch mit Rauschen funktionieren. Ich habe das gleiche Modul wie Du und bei mir geht es mit meinem Programm . Die Einstellung für Frequenz und Lastkapazität sind o.k. Nimm doch mal ein STK500 o.ä. lade meinen Code drauf, hänge den DataPin an INT1, CS an PortB4, Miso, Mosi an das Modul und probiere ob es nicht geht...
Hallo Dietmar, also ich habe jetzt noch einen 3nF Kondensator zwischen CFIL und GND gelegt und dazu noch meinen Dauersender der alle 500ms sendet. Jetzt kann ich zumindest das Signal vom ETH sehen. Ich habe hier kein STK500. Ich arbeite mit einem ET-AVR Board mit 16Mhz und einem Atmega128. Ich muss also Deinen Code an meinen 128er anpassen , gerade die Timer und INTs. Im moment habe ich noch das Problem der Manchester decodierung. Ich werde jetzt Stück für Stück die lon.c an meinen ATMega anpassen. Gruß Michael
Hallo oder besser Hilfe, ich benötige starthilfe für das Dekodieren des Manchester Signals. Ich bin mir nicht ganz klar darüber wo der Bitstream mit den 7e beginnt. Wie würden denn die 7E in Manchester Codierung aussehen ? So wie ich das verstanden habe, ist eine Periode wie im Bild dargestellt von 1 bis 2 in meinem Fall ca. 200ns . Ich zähle die Anzahl Flankenwechsel zwischen 190ns - 220ns . habe ich nur 1 Flanke, kommt es zum Bitwechsel, d.h. statt der 1 kommt nun die 0. Habe ich 2 Flanken bleibt es entweder bei der 1 oder der 0. Die Bits die ich decodiere schiebe ich in eine 8bit breite Variable und shifte jedes bit hinein und checke auf 7E. Ab dann werden max 10 byte gesammelt und geschrieben. Ich bin jetzt in der Routine noch nicht auf die Besonderheiten mit den max. 5x 1 hintereinander und der 0 die dann eingeschoben wird...... Ich habe jetzt auch in meiner Ausgabedatei bemerkt, dass er mir dort die Werte zu dem Shiftregister falsch ausgibt und das 2. Byte immer 10 statt 8bit hat. ich hänge die Datei mal mit an. Bin jetzt nicht der C Profi und könnte mir gut vorstellen, dass man hier und da noch einiges am Code verbessern könnte. Vielen Dank und gn8
1 | ISR (INT0_vect){ |
2 | //b=TCNT1; // Timerwert 16Mhz. 16 Takte pro ns
|
3 | //new = ((PIND & 0x01) != 0); //Debug
|
4 | |
5 | State++; //Flankenwechsel zählen |
6 | |
7 | if(TCNT1 > 3040 & TCNT1 < 3520){ // In dem Zeitfenster muss was gültiges kommen |
8 | |
9 | if (State==2){ |
10 | // Bitwechsel !
|
11 | if(NullorOne==1) |
12 | NullorOne = 0; |
13 | else
|
14 | NullorOne = 1; |
15 | }
|
16 | |
17 | |
18 | // nur wenn 2 oder 3 Flanken aufgetreten sind haben wir Daten !
|
19 | if((State==2) || (State==3)){ |
20 | if(NullorOne == 1){ |
21 | shiftRegister=(shiftRegister<<1) | 0x01; |
22 | PORTA=(PORTA<<1) |0x01; // Debug |
23 | }
|
24 | else{ |
25 | shiftRegister=shiftRegister<<1 ; |
26 | PORTA=PORTA<<1; //Debug |
27 | }
|
28 | if(shiftRegister==126) |
29 | found=1; //7E gefunden |
30 | |
31 | if(found==1){ |
32 | // da wir den init gefunden haben nehmen wir jetzt immer 8 Bit in ein Byte ;)
|
33 | if(NullorOne==1){ |
34 | strcat(Messagetxt[irrh],"1"); // String für die UART Ausgabe |
35 | }
|
36 | else{ |
37 | strcat(Messagetxt[irrh],"0"); // String für die UART Ausgabe |
38 | }
|
39 | cnt++; |
40 | if (cnt == 8){ |
41 | strcat(Messagetxt[irrh],"-->"); |
42 | strcat(Messagetxt[irrh],itoa(shiftRegister,Buffer,8)); |
43 | strcat(Messagetxt[irrh]," -- "); |
44 | cnt=0; |
45 | irrh++; |
46 | strcpy(Messagetxt[irrh],""); |
47 | shiftRegister=0; //kann ich mir eigentlich sparen oder ? |
48 | }
|
49 | } // if(found==1.... |
50 | State = 1 ; // und wieder von vorne ! da wir die allererste Flanke haben fangen wir mit 1 an. |
51 | TCNT1 = 0 ; |
52 | } // if(state 2 || 3 ...... |
53 | } //if(TCNT1 > 3040 & T.... |
54 | |
55 | |
56 | // nix passiert im Zeitfenster also alles wieder auf 0
|
57 | if(TCNT1 > 4000){ |
58 | State = 1; |
59 | TCNT1=0; |
60 | }
|
61 | }
|
In den Reglern sind AX5131/AX5151 RF-Chips von AXSEM verbaut, die per SPI angesteuert werden. Siehe: http://www.axsem.com/www/index.php?option=com_content&view=article&id=107&Itemid=93 Also schau doch einfach in die Datenblätter und lese den SPI Traffic mit um zu sehen was wirklich initialisiert und gesendet wird...
siehe: http://de.wikipedia.org/wiki/Manchester-Code Manchester 1 ist eine 10 Manchester 0 ist eine 01 somit ist 7e 01 10 10 10 10 10 10 01 Gruß Dietmar
Danke Dietmar, habe jetzt die Initialisierung gefunden und auch das Prinzip verstanden ! Gruß Michael
Hi, Scanner funktioniert , aber das senden will nicht so richtig. Wie steuert ihr die RFM12-Module an um zu senden ? über den FSK/DATA-PIN zeitlich gesteuert oder ? Übrigens habe ich in meinem Mittschnitt von dem Raumthermostat auch Längenbytes mit 30,31,33 gibt es hierzu was neues ? Die 33 scheint für den Anlernprozess zu sein. Gruß
Hat noch Jemand die Funkthermostate in Betrieb ? Als Präambel werden 2x 0x55 und 2xAA gesendet aber auf dem Empfänger sieht das nicht danach aus. Mir ist noch immer nicht klar wie der RFM12 Manchester macht. Im Anhang habe ich noch einen Screenshot vom LA, beginnend mit 0x55, sieht aber auf dem Screen anders aus :-( Wie macht der RFM12 Manchester ?
Das ist schon 55 AA allerdings nur einmal und nicht Manchestercodiert
Hallo @all, kann man eigenlich auch die von den Heizungsreglern "Comfort x00" gemessene Temperatur abfragen bzw. senden diese die als Antwort auf einen Befehl? Oder ist die Verbindung nur eine Einbahnstrasse vom Wandthermostat zum Regler? Vielen Dank rhb
Hi rhb, die empfangen nur. Steht auch in dem PDF weiter oben.
Danke Michael, dachte dass wenigstens eins der comfort100-300 Module auch senden kann...
Nabend, habe ich die Möglichkeit irgendwie festzustellen, ob statt FSK ASK benutzt wird ? Ich habe mir die Initialisierung des AX5131/AX5151 angeschaut und da wird nirgends die Modulationsart eingestellt und Standard ist ASK Shape , wofür steht das Shape ? Gruß
frohe Ostern ! gibt es noch Jemanden hier der Pakete mitgeschnitten hat ? Senden funktioniert bei mir soweit, allerdings habe ich Probleme, wenn ich die Seriennummer ändere oder die Temperatur senken möchte. Mich würde auch interessieren ob bei der Fernbedienung die Paketlänge immer 10 ist.
Hi alle, kann man jetzt die Funkthermostate steuern mit rfm12 oder nicht? Hat jemand das rausgekriegt? Gruß lambda
Ich habe auf der Grundlage von Dietmars Code einen für mich einfacheren Code erstellt, siehe Anhang. Die Funktionen rfsend, rfinit, switch2RX und writeCmd sind Funktionen um das RFM12 zu steuern und müssen je nach Bibl. die du für den RFM12 verwendest angepasst werden. Gruß
Hallo! Ich suche ein Minimalbeispiel zum Senden. Ich probiere mich nun auch an der Steuerung der Heizungen. Das Empfangen klappt nach einigem Hin und Her nun tadellos. Danke an alle, die hier ihre Einstellungen veröffentlich haben. Ich werde meine Erkenntnisse über das Protokoll bald in einen Wiki-Artikel fließen lassen. Leider habe ich keinen Erfolg beim Senden. Mir fehlt leider auch das entsprechende Testequipment. Kann mir jemand ein Minimalbeispiel schicken, das bei ihm funktioniert? Ein Programm das (auf dem Pollin Funk-Eval-Board mit einem RFM12) einen fest eincodierten ETH-Befehl sendet, sollte ja nicht mehr als 50 Zeilen benötigen. Aber wie gesagt: Ich scheitere daran. Vielen Dank für Eure Hilfe
Hallo, ich hab zu dem Thema Heizungsregelung mit der ETH comfort Reihe mal eine Frage. Ich würde gerne bei meinen Eltern das System so einsetzen das mit dem ETH comfort 200 eine Heizung gesteuert wird. Allerdings keine normale Heizung (sonst würde ich hier ja nicht schreiben :-)) sondern eine Nachtspeicherheizung. Meine Idee wäre folgende : An dem Stellmotor des ETH comfort 200 ein Poti anschließen um die Stellgröße erstmal mitzubekommen. Dann über dieses Poti mittels einer Elektronik ein Relais den Lüfter der Nachtspeicherheizung ansteuern lassen um ein "proportionales" Verhältnis von Stellggröße zu Lüfterlaufzeit zu haben. Würde das so funktionieren ? Müsste doch so machbar sein oder ?
Rene B. schrieb: > Meine Idee wäre folgende : An dem Stellmotor des ETH comfort 200 ein > Poti anschließen um die Stellgröße erstmal mitzubekommen. Das wird leider nicht funktionieren, denn das Thermostat verweigert mit einer Fehlermeldung die Arbeit, wenn es bemerkt, dass es nicht an einem Heizkörper steckt.
@mh aber wie soll der Theromstaten erkennen das er an einem Heizkörper steckt ? Das kann dann doch bestenfalls nur ne mechanische Sache sein die sich dann irgendwie überlisten lassen sollte, oder ?
Hallo Rene, wäre es nicht einfacher 2 RFM12 zu nehmen und am Empfänger über PWM den Lüfter zu steuern ? Da sparst du dir das Thermostat. Ich habe bei mir das Sendemodul (RFM12 + Atmeg128 + RS232) mit dem PC verbunden und eine kleine Weboberfläche programmiert. Darüber kann ich dann alle Thermostate bzw. in deinem Fall alle RFM12 ansteuern. Das ETH200 macht 1x pro Woche eine Referenzfahrt um die Stellgröße zu ermitteln. Wenn da etwas nicht passt geht der Thermostat in Störung. Gruß Michael
@michael Sowas in der Richtung hatte ich auch schon überlegt. Dachte nur das es vllt einfacher wäre den ETH comfort200 zu modifizieren. Aber ich glaube m.h. hatte recht. Dadurch das der Fahrweg des Ventils überwacht wird (was du mit der Referenzfahrt meintest) dürfte das Probleme geben. Wird wohl wirklich einfacher sein sich per RFM12 auf das Protokoll zu hängen und quasi einen comfort200 zu "simulieren" (wenn ich das richtig verstanden habe) um die Stellgröße dann in eine PWM umzuwandeln. Also quasi ein ETH Funk Wandthermostat mit einem RFM12-PWM-Umsetzer als comfort200-"Fake" zu realisieren. Meintest du das so ?
@Rene Vergiss einfach das ETH200 und Protokoll , etc. Was ich an Deiner Stelle machen würde, wären 2 Platinen mit je einem µController + RFM12 + je nachdem wie du alles steuern möchtest an dem Sender noch eine RS232 Schnittstelle. Am Empfänger (Stellglied) würde ich noch einen TempSensor einbauen, damit du auch die Ist-Temperatur ermittelt kannst. Vom Sender (über PC oder wie auch immer) sendest du über den RFM12 und da gibt es kein fertiges Protokoll sondern da machst du Dein eigenes, die Soll-Temperatur an den enstprechenden Empfänger (Ich denke du hast mehrere Heizungen) und die eigentliche Regelung übernimmt dann der Empfänger mittels Tempsensor und PWM für den Ventilator. Ich hoffe das war verständlich. Wenn du natürlich nur 1 Heizung steuern möchtest, würde ich ganz auf die RFM12 verzichten und die Tempeinstellung direkt an der Heizung vornehmen. Viele Wege führen nach Rom ;)
@Michael Ok, also ein ganz eigenes System sozusagen. Das wäre die andere Alternative :-) Na ja. Mal schauen. Ein eigenes System hätte auch was für sich. Wenn man dann noch mittels AVR-ETH-IO einen kleinen Web-Server implementiert wäre eine komfortble Heizungssteuerung möglich. Dann noch die Funksteckdosen für Beleuchtung fernsteuern ... :-) Ich schau mal. Aber danke schonmal für die Tips.
Michael W. schrieb: > Ich habe auf der Grundlage von Dietmars Code einen für mich einfacheren > Code erstellt, siehe Anhang. > > Die Funktionen rfsend, rfinit, switch2RX und writeCmd sind Funktionen um > das > RFM12 zu steuern und müssen je nach Bibl. die du für den RFM12 > verwendest angepasst werden. > > Gruß vielen Dank für den Code. Mich würde Interessieren ob hier jemand in der Lage ist für Ethersex entsprechend ein "Plugin" oder so zu schreiben damit ich in Verbindung eines Polling NET-IO Board und Ethersex ganz einfach einzelne Thermostate steuern kann.
Hallo Zusammen, hat jemand das komplette Protokoll und alle Kommandos die es gibt?
Hallo Leute, ich bin auch am rumspielen mit ETH 200 von ELV. Ich lese die Übertragung von einer Fernbedienung über eine Schaltung mit PIC16F88 über RS232 aus. Wenn ich die Sonne auf der Fernbedienung drücke empfange ich folgende Nachricht. 7E 01 10 01 2B 20 42 00 FA C6 Ich verstehe das aber mit der CRC Prüfsumme nicht, habe das erste mal mit CRC zu tun und habe alle bekannten Seiten durchforstet und alle bekannten online Rechner für CRC ich komme aber nie auf das Ergebniss. Oder habe ich was beim Empfangen falsch gemacht? Kann mir jemand so Einfach wie möglich erklären wie das berechnet wird, bitte in Klartext mit Beispiel mit Code in C oder so verstehe ich es nicht. Ich weis das die Beiträge schon älter sind aber vielleicht ist doch noch jemand aktiv dabei. Danke und LG Buzii
schau Dir doch mal die beiden Codes an welche hier im Forum reingestellt wurden, da ist die CRC Berechnung drin.
Natürlich habe ich mir die Codes vorher angesehen, aber wie vorher schon erwähnt, kapiere ich es nicht.
Es ist ein reverser 16Bit CRC, das steht im Code, das Syndromwort ist auch angegeben, was möchtest Du noch wissen???
Wie schon oben erwähnt, ich habe es in alle Online CRC Rechner eingegeben und komme nie auf das Ergebniss. Was mache ich denn mit denn Syndromwort? Gibt es eine Seite die die CRC Berechnung ganz einfach erklärt, so richtig verstehe ich es nicht.
Iceland schrieb: > Es ist ein reverser 16Bit CRC, das steht im Code, das Syndromwort ist > auch angegeben, was möchtest Du noch wissen??? Du weisst aber schon wobei es sich bei einem Syndromwort handelt?
ich denke nicht dass der online Rechner einen reversen CRC berechnet. Tausche mal die bit-Reihenfolge um und lasse es dann durch den online Rechner
Hallo Iceland, habe ich das richtig verstanden das reversen CRC bedeutet das die Bits pro Byte verdreht werden, also wird z.b. 0D zu B0? Im Moment nehme ich die Daten z.B. 7e 0d 20 00 21 77 41 00 00 (wurde oben als bsp. gepostet) wandele sie in Binär um und drehe die Bits im Byte. Dann berechne ich mit XOR und 0x8408. Muss ich dann denn Rest der übrig bleibt wieder drehen oder nicht. Im Moment versuche ich es von Hand, was sehr aufwendig ist, aber ich weis mir auch nicht mehr zu helfen.
Ja genau so geht es (XOR & Schieben der gedrehten Bits), das Ergebnis muss soweit ich noch weiß nicht mehr gedreht werden. Schreib Dir doch ein kleines C-Programm von Hand ist das doch echt mühsam.
Seit Tagen rechne ich hin und her und bekomme es nicht hin. Ich weis nicht was ich falsch mache, könnte sich jemand die Berechnung in Exel ansehen, vielleicht fällt euch was auf??? Ich bin schon am verzweifeln, das kann doch nicht so schwer sein!!! Danke
Hey nicht alle auf einmal, ich kann nicht alle Antworten auf einmal lesen :-) "Verzweifelter Humor" Aber im ernst, hat wirklich keiner eine Idee?
Moin, nimm doch mal mein Programm das den Code von Dietmar (*wink) implementiert hat und schau dir mal im Detail an was die CRC Berechnung macht.
1 | uint16_t calcCRC16r( uint16_t c,uint16_t crc, uint16_t mask) // reverser crc!!!!!! |
2 | {
|
3 | unsigned char i; |
4 | for(i=0;i<8;i++) |
5 | {
|
6 | if((crc ^ c) & 1) |
7 | { crc=(crc>>1)^mask; } // nur wenn das niederwertige Bit aus dem XOR zwischen crc und c eine 1 hat |
8 | else crc>>=1; |
9 | c>>=1; |
10 | };
|
11 | return(crc); |
12 | }
|
c = 7E = 00000000 01111110 crc = 0 = 00000000 00000000 mask = 84 08 = 10000100 00001000 Es wird in einer Schleife jedes Bit von C durchlaufen und ein XOR mit CRC und C durchgefürt: 00000000 00000000 00000000 01111110 if(01111110 & 1) (binäres UND, niederwertigste Bit wird verglichen also) 0111111 0 0000000 1 = 0 da die if nicht true ist wird der else-Zweig fortgesetzt. crc>>=1 shiftet crc um 1 bit nach rechts also in diesem Fall bleibt es bei 00000000 und danach wird c>>=1 01111110 um 1 geshiftet daraus wird dann 00111111 im zweiten lauf ist die if Bedingung true und es wird folgendes gemacht crc>>1 schiebt wieder um ein Bit und macht dann ein XOR mit der MASK in dem Fall mit 00000000 00000000 10000100 00001000 und jetzt wird das erstemal crc einen Wert zugeordnet 10000100 00001000 usw. Es ist noch früh am Morgen, also erstmal keine Gewähr aber es sollte doch im Groben so passen ;) Wenn du dir mit den Bitoperationen nicht so sicher bist , schau dir das mal an: http://www.oreilly.de/catalog/cplus2ger/chapter/ch11.pdf
Hallo Michael, vielen dank für die sehr ausführliche Anleitung. Ich programmiere immer nur Assembler und verstehe die C Sprache nicht. Ich war auch schon dabei (sehr mühsam) denn Code Schrittweise zu betrachten und verstehen, aber ohne deine Hilfe hätte ich es nie hinbekommen. Wenn ich das richtig sehe wird, wenn das Unterprogramm aufgerufen wird, crc mit 0xC11F geladen, ist das richtig? Egal ob ich mit 0 oder C11F rechne komme ich nicht auf das richtige Ergebnis. Ich habe auch AVRStudio 5 installiert, bekomme aber denn Code nicht zum laufen und wenn ich ihn so ändere das er läuft, bekomme ich in Watch die Werte nicht angezeigt. Irgendwie komme ich einfach nicht weiter!!! LG Buzii
Es hat sich gerade erledigt, der Fehler war das es unterschiedliche Startwerte für denn CRC gibt. Bei 7 Bytes beginnt mann mit 0xbdb7 und bei 8 Bytes mit 0xc11f. Ich habe das Beispiel von oben genommen mit 7 Byte habe aber mit 0xc11f gerechnet. Nach langem hin und her bin ich aber froh das ich es doch hinbekommen habe und möchte mich noch mal bei allen bedanken die mir geantwortet haben, besonders Michael. Danke und Lg Buzii
Was genau ist denn jetzt mit einem ETH Funk Thermostat inkl. Außensensor über Funk möglich ? Welche Befehler können gesendet und empfangen werden.
Ist ein bisschen OT: Ich suche einen ETH Comfort Wandthermostat mit Außensensor. Hat vielleicht jemand einen übrig? Der ist irgenwie nicht mehr erhältlich... Gruß, jayjay
jayjay schrieb: > Ich suche einen ETH Comfort Wandthermostat mit Außensensor. Hat > vielleicht jemand einen übrig? Der ist irgenwie nicht mehr erhältlich... Hat sich erledigt, bin fündig geworden.
Wo hast du denn den Wandthermostat bezogen? ELV hat ihn nicht mehr im Angebot. Gruß Klausi
Hi Leute, ich weiss nicht so recht ob ich einen neuen Thread anfangen soll... Naja ich schau einfach mal wie die Reaktionen sind ;) Ich hab ein Problem.. vielleicht auch einfach ein Brett vorm Kopf.. dann aber schon einige Tage.. ich bewege mein Fensterkontakt.. es wird gefunkt... ich sehe kontinuierlich ein Rauschen auf dem Data-Pin... wenn nun vom Fensterkontakt gefunkt wird, ist alles mucksmäuschen still?!? Aber manchmal sehe ich auch klare Daten. An den Dämpfungen habe ich ausführlich rumgespielt.. keine Änderung.. zu 99% kommt, wenn gefunkt wird, nix mehr an. Wo könnte denn das Problem sein... ich habe alle Lötstellen geprüft, brücken und wackelkontakte ausgeschlossen, die initalisierung geprüft ( wenn ich sie weglassen ist der Data Pin leer ;) ), den interrupt weggelassen, code minimalisiert... Ich muss dazu anmerken, das ich keine Ozi besitze und deswegen mein Line-In der Soundkarte verwende... Per Debbuging am IC konnte ich auch ohne cheap-Ozi, regelmäßige interupts feststellen.. bis zu dem Zeitpunkt wo daten durch den Ether fliegen. Ich sehe eine kurze Flanke beim Start, dann ist es ruhig auf der Leitung, und wenn die Luft wieder rein ist, geht das Rauschen wieder los.. den Data PIN habe ich per 10K auf VCC gelegt, ein Kondensator ist als Analogfilter vorhanden... Da ich vom Board eigentlich Saubere 3.3v bekomme, habe ich nicht geglättet. mit Kondensator ist das Rauschen dumpfer.. effekt ist aber gleich... ob mit widerstand oder ohne, auch da ändert sich nichts... Für jeden Tipp währe ich Dankbar ;) Gruß, Nico
Hallo Nico, was ist jetzt genau Dein Problem ? Wenn es um das Rauschen geht, hatte ich auch siehe : Beitrag "Re: CRC Berechnung für ETH comfort 200" Gruß Michael
Hi Michael, mein Problem ist, dass sobald ein Fensterkontakt funkt, ich nichts mehr empfange, also das Rauschen ist nicht nur weg, sondern es ist auch einfach nichts mehr zu sehen, es werden keine interrupts mehr geschmissen, es passiert nichts mehr.... Nur bei einem von zwanzig Versuchen sehe ich beim funken klare signale... Oder anders, da ich ja ne Soundkarte als Ozi verwende: Ich höre Rauschen, bis ein Fensterkontakt sendet, dann ist es ruhig auf dem Data Pin, bis der Kontakt fertig ist, dann geht das Rauschen wieder los. Manchmal allerdings höre ich statt nix, klare "Modem-Signale"... aber das ist eher ein Zufall (also extrem selten)... Erst dachte ich an wackel-kontakt oder defektem RFM12-Modul, aber beides kann ich mittlerweile ausschließen :( Gruß, Nico
Ich selbst habe mit dem Fensterkontakt überhaupt nichts gemacht. Also du betätigst den Fensterkontakt und dann kommt am RFM12 nichts an ? Hast du mal einen Sender mit einem RFM12 aufgebaut um zu sehen ob überhaupt was ankommt ? Vielleicht auch mal einen Dauersender gebaut der alle 500ms ein Paket sendet ? Möglicherweise hat der Fensterkontakt auch eine Sendesperre, wenn er zu häufig in einer gewissen Zeit betätigt wird sendet er vielleicht auch nicht. Es gibt klare Richtlinien für das 868Mhz Band. Könnte es auch sein das sich dein RFM12 aufhängt ? Welchen Code verwendest du ? Gruß
Hi Michael, also der Fensterkontakt-Sender sendet jedesmal bei betätigung (zustandsänderung). das sehe ich am ETH200-Regler. Und das bei mir am rfm12 nichts ankommt ist ja das Signal! Also, okay ein bisschen strange ich gebe es zu.. Aber wenn der Fensterkontakt betätigt wird, hört am Data-Pin das Rauschen auf und es herrscht stille.... für eine kurze Zeit Und zum Aufhängen des RFM12: Ohne ein Reset am MC ist das Empfangsverhalten des RFM12 ab und zu (eher ganz selten) korrekt. (vom Sound her).. Bedeutet: Fensterkontakt wird betätigt, rauschen am DataPin verscwindet und es sind "Modem-Ähnliche" signale zu hören... Eigenartig sag ich nur... Vom code herr kann ich nur sagen: Ich verwende eine standart SPI Treiber, mit initalisierungen die hier oben im Thread bereits verwendet werden... ohne diese kommt auch nichts am RFM12 an (also datapin ist ruhig) Sonst nichts weiter, int routine und sonstien schnickschnack habe ich bereits zum testen / abhören der signale ausgebaut... Gruß Nico
Achso und noch was: das Empfangsverhalten ändert sich auch nicht, wenn ich keinen Kondensator als Analogfilter verwende... wenn der kontakt sendet, verschwindet das rauschen und es ist absolut still am Data-Pin... bis der Fensterkontakt aufhört zu senden, dann ist rauschen wieder voll da... Ich hab schon überlegt ob der Sender eventuell so stark ist, das alles überlagert wird, und somit der RFM12 ruhig ist... eigentlich aber doch unlogisch... oder vielleicht meint der RFM12 eine gültige FSK Modulation festzustellen und schaltet den DATA-Pin aus?! geht das? Ich hasse so eine Ratlosigkeit, will aber auch nicht einfach aufgeben... Gruß Nico
Also zum Rauschen kann ich nur sagen das ist normal. Sobald etwas gesendet wird schwingt sich die Empfangeinheit ein und du siehst das Rauschen nicht mehr. So im Groben hat das mit mal Dietmar erklärt. Das würde zumindest bedeuten, dass der RFM12 etwas empfängt, aber er gibt dir nichts am Data-Pin aus. Überprüfe mal die Baud Einstellung. Ich hatte damals eine Routine aus dem Netz da war die Baud-Berechnung fehlerhaft ! Hat mich sehr viel Zeit gekostet da ich an dieser Stelle überhaupt nicht nach einem Fehler gesucht hatte :( Ich schau mal ob ich noch meinen Code zum abhören habe. Gruß Michael
Guten Morgen :) Ja, irgendwas liegt halt immer in der Luft, deswegen ist das Rauschen auch normal ;) allerdings finde ich es total merkwürdig das rein gar nix mehr kommt, es also absolut ruhig ist, wenn ein sender anfängt zu senden. Ich hab gestern Nacht noch die Konfigurationen vom RFM12 studiert. Irgendwie habe ich die vermutung, das der RFM ein angeblich gültiges FSK-Signal empfängt und deshalb den FIFO einschaltet und aufjedenfall den DATA pin abschaltet... Abstürzen kann ja nicht sein, denn nach dem senden ist das Rauschen wieder da.. Aber meine Vermutung, würde auch erklären, warum ich manchmal funksignale sehe... das ist dann, wenn der rfm12 kein FSK signal sieht... also eventuell das signal so gut ist, das es halt nicht mit einem FSK verwechselt werden könnte... Kann jemand dieses verhalten meines RFM12 erklären? Hab ich mit meiner Vermutung recht? Tipps, Ideen, Vorschläge? Schönen Start in die neue Woche Nico
poste mal deine Konfiguration bzw. Initialisierung. Übrigens hier noch ein sehr hilfreiches Tool : http://www.controller-designs.de/index.php?lang=de&cat=projekte&cont=rfm12_eva&sub=
Hi nochmal, Die initalisierung schick ich nochmal... jetzt kann ich aber schonmal ein erfolg verzeichnen! ich habe AFC ein wenig umkonfiguriert: 0xC443 Sprich: AFC einmalig nach dem einschalten, r = unbegrenzt .... jetzt mal ein wenig den rssi threshold einstellen ;) Gruß, Nico
Hier meine Initalisierungsroutine:
1 | write_cmd(0x8025); |
2 | |
3 | write_cmd(0xA67c); |
4 | |
5 | write_cmd(0xc600 | 35); |
6 | |
7 | //_delay_ms(800);
|
8 | |
9 | //write_cmd(0x94D5); // Receiver Control
|
10 | |
11 | write_cmd(0x9930); // Receiver Control |
12 | |
13 | |
14 | write_cmd(0xC278); // undokumentierte Funktion |
15 | |
16 | write_cmd(0xCA01); |
17 | |
18 | write_cmd(0xC443); |
19 | |
20 | write_cmd(0x8281); |
21 | //_delay_ms(800);
|
22 | //write_cmd(0x0000);
|
23 | |
24 | _delay_ms(400); |
25 | cli(); |
26 | //DDRB |= (1<<PB4); // Chip select for RFM12B
|
27 | DDRB = ~(1<<PD3); // input |
28 | //DDRD =0x06;
|
29 | //PORTD =0xff;
|
30 | EIMSK |= _BV(INT1); // INT0 en INT1 als externe interrupts... |
31 | EICRA |= _BV(ISC00); // alles op 1] |
32 | |
33 | TCCR1B =_BV(CS10);// | _BV(CS11); |
34 | //TIMSK1 |= (1 << TOIE1);
|
35 | |
36 | sei(); |
Wenn ich die Stromversorgung anschließe (USB), höre ich nach der initalisierung rauschen (soweit ja in ordnung).. Dann muss ich eigentlich mindestens einmal reseten (keine trennung der stromversorgung vom RFM12) damit ich, wenn ein fensterkontakt sendet, klare Signale hören kann.. ich habe an verschiedenen stellen pausen eingebaut... aber trotzdem brauch ich ein reset... (manchmal höre ich beim powerup sogar dumpferes rauschen, dann aber auch dumpferen empfang) ich habe sehr viel am Receiver Control rumgespielt... höre da aber eigentlich nie veränderungen / sehe da auch keine... Mit dem rauschen muss man leben ;) soweit klar... aber ich dachte ich könnte das signal noch dämpfen / klarer herauskommen lassen, durch bandbreite, lna , rssi detector threshold.. aber ich sehe da keine veränderung :( ich habe leider kein passenden kondensator für den analogfilter! ist das schlimm? Vielleicht hat ja jemand ähnliche Probleme gehabt, oder ne spontane idee wo mein fehler sein könnte! Gruß, Nico
Hi Leute! Also, nachdem ich peinliche Fehler beim verkabeln gemacht habe, und beim RFM12B in der Config auf 10pf gegangen bin, höre ich immer brav daten ;) mein ATMEGA168 läuft auf 20Mhz wenn ich nun eine INT-Routine hier aus dem Thread nehme, sind die Timing einstellungen ja alle für 10Mhz mc's, wenn ich das richtig sehe?! Prescale ist auf 0.. BIT-Timing Zeiten einfach verdoppeln? Oder Timer auf externe Source stellen und die Clock vom RFM nehmen? Mir ist dieses dumme gefrage echt peinlich ;) Aber ich will das unbedingt hinbekommen... 10 Jahre schon Softwareentwickler.. aber hier macht mein hirn zu.. Wie bekomme ich nur das Timing raus :( Danke danke danke für eure hilfe! Gruß, Nico
Hi, von welcher INT-Routine spricht du ? Wenn du die INT-Routine meinst die dafür zuständig ist wenn Daten im Fifo sind , dann ist es egal wie schnell der µC getaktet wird. Gruß Michael
Hi ;) sorry, zuviel gearbeitet heute ;) Ich meine natürliche die interruptroutine die Triggert wenn daten am DATA Pin anliegen! FIFO benutze ich ja nicht, weil ich die Daten empfangen möchte. Und da ich zwischen zwei Interrupts die Zeit Messe, um die Manchester-Codierten Daten erfassen zu können, denke ich schon, das ich eben genau deswegen, bezüglich des Timings, die Zeitspanne zwischen zwei Flanken-wechsel wissen muss. In den oberen Beispiele sind ja Zeitangaben für 2 Manchester-Bits angegeben. Es wird jedesmal der Timer0 abgefragt, welcher auf Prescale 0 eingestellt ist. Der Mc ist mit 10Mhz getaktet, meiner wiederum mit 20Mhz.. ein Prescale von 0 bei 20Mhz müsste ja eigentlich auch einen doppelt so hohen Wert im Timer0 bedeutet. Oder bin ich jetzt vollkommen falsch? die ETH-Module, insofern sie funken, funken ja Manchester mit 9600Baud.. Oder nicht? Wieviel Zeit muss bei 9600Baud zwischen zwei Flanken wechsel vergehen? und kann man das so hinrechnen, das man alleine durch berechnungen einen direkt verwendbaren wert erhält? Wie habt ihr das denn herausbekommmen? Gruß, Nico
Hier im Thread siehst du wie weit 2 Flanken auseinander liegen (im Bild) Beitrag "Re: CRC Berechnung für ETH comfort 200" Ich habe die Datenauswertung mit meinem Logic-Analyser gemacht per Hand. Mit der Int-Routine hat bei mir nicht zuverlässig funktioniert und ich hatte da auch nicht die Zeit für.
Muart23 schrieb: > Ich habe mir auch ein > paar EHT200 zugelegt und würde nun gerne das ganze (und mehr) vom PC aus > steuern. Hat sich mal jemand den USB Stick zu diesem System angeschaut? ich möchte jetzt auch, ich weiss etwas spät, aber evtl. ist einer so nett mir einiges zu erklären was mir noch unklar ist. Ziel die Thermostate fernzusteuern...... ich dachte mal mit dem USB Stick könnte ich das schon, ABER es muss ja immer ! die Kopplung gestartet werden am Thermostat bevor dieser die USB annimmt, also ist nix mit vom PC anzusteuern. OK dann steuere ich die halt vom AVR an, ABER und das verstehe ich nicht wenn ich einen Raumthermostaten habe dann muss der Raumthermostat mit dem Ventil gekoppelt werden, es arbeitet nur noch der Raumthermostat, das Regelmodul im Ventil ist doch dann ausser Betrieb und dann scheint das Ventil immer auf Empfang zu stehen ? meine Logik sagt mir die Ventile stehen sowieso immer auf Empfang, sonst könnten sie nicht auf den Fensterkontakt und die FB reagieren und wenn das so ist dann könnte ich die auch direkt ansteuern, nur warum muss ich dann am USB immer koppeln ? brauche ich noch eine Funkfernbedienung um die Codes rauszubekommen für up/down ? brauche ich einen Wandthermostaten um die Codes rauszubekommen für up/down/programmierung ? ich würde gerne weitere Käufe vermeiden 1. Vermutung, die Comfort 200 empfangen immer (zumindest den Fensterkontakt) 2. Vermutung, die Comfort 200 können manuell up/down gestellt werden mit der FB daraus folgt, es genügt ein AVR mit RFM12 (eigentlich RFM02 Sender) und ich könnte die Wunschtemperatur fernsteuern ist jemand schon weiter mit dafür funktionierendem Code ? ich hatte schon mal mit den 433 MHz Modulen gespielt aber nur wenig Erfolg gehabt viel Störungen wenig Übertragung und erst mal abgebrochen, die Meldungen hier lassen mich für die 866 MHz hoffen wie lang den "Antennendraht" ca ? lambda 34,6cm lambda/2 oder lambda/4 ? ich habe auch ein s Modul erhalten, hoffentlich habe ich nicht die Probleme meiner Vorposter, ich würde schon gerne den ganzen Vcc Hub nutzen von 3,x V bis 5,4V
Moin, zum USB - Stick kann ich nichts sagen den habe ich nicht. Aber du kannst mit dem Code der oben gepostet wurde und einem AVR + RFM12 (868Mhz) den Thermostat steuern. Dabei simuliert der AVR eine Fernbedienung. Der AVR wird 1x am Thermostat angelernt und das war's. Die Antenne hat ca. 8,75cm lambda/4. An alle die noch etwas über das Funkprotokoll erfahren möchte, es ist möglich am Thermostaten die SPI Leitungen anzuzapfen , ich hatte das damals gemacht um herauszufinden was an meinem Programm verkehrt ist. Ich habe ein Bild angehängt , da sieht man die Leitungen auf dem Chip. Gruß Michael
Michael schrieb: > Aber du kannst > mit dem Code der oben gepostet wurde und einem AVR + RFM12 (868Mhz) den > Thermostat steuern. > Dabei simuliert der AVR eine Fernbedienung. Der AVR wird 1x am > Thermostat angelernt und das war's. Die Antenne hat ca. 8,75cm lambda/4. hmmm hier gibts ja nur 2-3 Codefetzen, den von Dietmar und den ETH.c von dir und einige .h scheinen auch zu fehlen OK Lambda/4 Antenne ist schon bestückt, verkabelt auch, ich bin noch am anpassen auf meiner HW und muss mich durch den Code quälen, habe eigene USART Routinen drin und ein LCD auf SPI Basis deswegen kann ich das nicht sofort verwenden, trotzdem danke gruss jar
Michael schrieb: > Dabei simuliert der AVR eine Fernbedienung. Der AVR wird 1x am > Thermostat angelernt und das war's. dann muss doch jede FB eine Seriennummer haben um verschiedene Thermostaten anzulernen, die müsste ja dann umgestellt werden ? muss ich mal suchen.....
Hallo, man kann sich auch das ganze Protokollgedöns sparen und die Tasten der Funkfernbedienung direkt mit einem uC Ansteuern. Digitale Ports sind am uC meistens genug vorhanden. Falls Potentialtrennung erforderlich sein sollte, gibt es dafür sicherlich auch eine Lösung. Im Extremfall ein Relais. Oder ist das zu einfach?
so ich habe mal meinen Code angehängt. Ich hatte damals Eine Basis die per UART mit meinem PC (Website) kommuniziert hat(Perl-Schnittstelle). Temp-Änderungen auf der Homepage wurden per UART an den µC gesendet und dieser hat dann an den Thermostat gefunkt. Zusätzlich hatte ich noch kleine Tempsensoren die in regelmäßigen Abständen die Raumtemperatur an die Basis gesendet haben. Im Anhang ist jetzt nur der Code für die Basis - Station. Bereinigen musst du den Code selbst. Gruß Michael
@Hans: 1. Die Signale der Funkfernbedienung sind nicht stark genug um damit im ganzen Haus alle Thermostate zu erreichen. Mit dem RFM12 ist das kein Problem. 2. Es ist mit der Funkfernbedienung nicht möglich Gruppen zu schalten. Was mit dem RFM12 möglich ist. Gruß
bei mir sitzt ja an der Fritzbox ein Pollin NETIO und in jedem Zimmer ein onwire DS18B20 somit habe ich schon den Webserver (schön sparsam) die Temperaturabfrage in jedem Zimmer, grübel nur noch ob ich eine Ader für 5V nehme um dort dann einen AVR zu setzen, der könnte auch onewire slave spielen zum Thermostat anfunken, an passive Speisung a la DS18B20 glaub ich leider nicht, aber onwire slave sind wohl anspruchsvoller vom Timing und ob interne 8MHz reichen weiss ich auch nicht, notfalls brauche ich 2 Leitungen, RXD und +V aber in einigen Zimmern gehen mir die Strippen aus, oder ein Master mit 433 RF aufbauen und auf 433 empfangen um auf 866 zu stellen irgendwie krampfig, wenn aber die Reichweite passt könnte alles auf 866 laufen, Funkbrücke und Temp stellen
Michael schrieb: > 2. Es ist mit der Funkfernbedienung nicht möglich Gruppen zu schalten. echt ? ich frag mich wie z.B. Räume mit mehr Heizkörper funktionieren sollen ? mit mehreren FB ? was ist mit mehreren Fenstern ? pro Fenster nur ein Thermostat ? oder pro Thermostat nur ein Fenster ? alles Fragen wo ich die Antwort noch nicht kenne (evt. stehts in der Anleitung?)
Michael schrieb: > 2. Es ist mit der Funkfernbedienung nicht möglich Gruppen zu schalten. wie meinst du das ? ich lese: ELV Funk-Fernbedienung ETH comfort Beliebig viele Funk-Stellantriebe ansteuerbar http://www.elv.de/elv-funk-fernbedienung-eth-comfort.html und für die Fensterkontakte: ELV Funk-Fensterkontakt ETH comfort An beliebig viele Funk-Stellantriebe anlernbar http://www.elv.de/elv-funk-fensterkontakt-eth-comfort.html damit hätten wir das auch geklärt
Also was die FB betrifft: Die FB hat eine Seriennummer. Wenn du jetzt 1 oder mehr Thermostate an die Fernbedienung anlernst kannst du die nur alle gemeinsam steuern mit +/- von der eingestellten Temperatur. Bei dem AVR Programm ist es so , dass du beliebig viele Thermostate entweder zusammen oder getrennt steuern kannst. Je nachdem wie du die Thermos anlernst. Mit jedem Anlernen wird eine neue Seriennummer an die Thermos gesendet und dementsprechend simuliert der AVR mehrere Fernbedienung. Ein weiterer Vorteil, der AVR steuert immer erst die 5° am Thermostat als Referenztemp an und setzt dann die Soll-Temperatur. Wenn du die Kauf-FB nutzt kannst du immer nur +/- drücken aber keine absolute Soll-Temp einstellen. Wenn du dich mehr mit dem Thema beschäftigst wird das klarer :) grüße
Michael schrieb: > Die FB hat eine Seriennummer. Wenn du jetzt 1 oder mehr Thermostate an > die Fernbedienung anlernst kannst du die nur alle gemeinsam steuern mit > +/- von der eingestellten Temperatur. das hatte ich schon verstanden ;-) > Ein weiterer Vorteil, der AVR steuert immer erst die 5° am Thermostat > als Referenztemp an und setzt dann die Soll-Temperatur. Wenn du die > Kauf-FB nutzt kannst du immer nur +/- drücken aber keine absolute > Soll-Temp einstellen. das auch ;-) > Bei dem AVR Programm ist es so , dass du beliebig viele Thermostate > entweder zusammen oder getrennt steuern kannst. Je nachdem wie du die > Thermos anlernst. Mit jedem Anlernen wird eine neue Seriennummer an die > Thermos gesendet und dementsprechend simuliert der AVR mehrere > Fernbedienung. nun ja für den AVR ist das ja egal, aber in der Testphase ist es IMHO nicht sinnvoll jedesmal neue Seriennummern zu generieren und schon gar nicht dürfen die mit echten Geräten kollidieren, deswegen meine hartnäckigen Nachfragen. z.B. NETIO von Pollin kommt mit echten generierten MAC Adressen daher obwohl man sich irgendwelche ausdenken könnte, aber dabei halt die Gefahr: Kollision mit echten Geräten oder ONEWIRE ID für Slaves auch da kann man sich irgenwas ausdenken, aber dabei halt die Gefahr: Kollision mit echten Geräten evt. gibt es sogar unsinnige Seriennummern die von den Geräten abgelehnt werden, deswegen meine penetrante Nachfragerei... > Wenn du dich mehr mit dem Thema beschäftigst wird das klarer :) logo, nur o. genannte "Unsicherheiten" vertreiben meine Fragezeichen nicht. In der Testphase sollte ich nur eine Seriennummer generieren, anlernen und diese immer wieder verwenden, also im EEPROM ablegen und bei jedem Compilerlauf und Test verwenden, an jedem Testgerät (muss ja nicht dieselbe AVR Platine sein oder bleiben) LG jar
Ist irgendjemand weiter gekommen? Zur Zeit habe ich ein Webserver laufen der mir bei dem System ohne Funk immer für eine bestimmte Zeit den Boostknopf drückt... ging schnell und war billig... heute seh ich, dass das Funkthermostat bei Reichelt nur noch 20 € kostet :-/ http://www.reichelt.de/Regler-Thermostate/EHT-COMFORT-A/3/index.html?;ACTION=3;LA=0;ARTICLE=91776;GROUPID=4382;artnr=EHT+COMFORT+A;SID=11UHw@I38AAAIAAHZO5kYde3496ebeb4de3ffc4e6f3cd2e4ca741 Aber so richtig erfolgreich funktioniert das bei euch noch nicht, wenn ich das so überflogen habe?! Oder gibts doch schon ne Lösung?
Hi Basti, natürlich läuft es. es ist möglich mit dem RFM12 den Thermostat anzulernen und zu steuern. Gruß Michael
Achso? Gibts da schon nen Wiki dazu? Dann würde ich mal meine Bestellung bei Reichelt aufgeben ;) Habt ihr das mit dem CRC hinbekommen?
das mit dem CRC hat Dietmar hinbekommen wie auch sonst die Grundlagen dazu. Ob die Thermostate von Reichelt kompatibel mit dem ETH200 sind weiss ich nicht. Ich würde an Deiner Stelle erstmal 1 bestellen und testen. Den Code musst du an deinen µC anpassen. Was hast du den bis jetzt schon Website ? Kommunikation zwischen Website und µC ?
Michael schrieb: > Was hast du den bis > jetzt schon Website ? Kommunikation zwischen Website und µC ? Ja, geht alles... war ne Quick and Dirty Aktion vorm Winter... einfach nen Renessas Board von der Embedded World genommen... Wäre denke ich nicht das Problem nen kleinen Funksender über SPI oder UART anzuknoten... Achso, dass nicht das selbe System... macht aber einen sehr ähnlichen Eindruck... naja, dann warte ich mal lieber noch in den Startlöchern... Wäre auch bloß Spielerrei gewesen... mir gehts im Grunde nur darum nach einem Wochenende fernab der Wohnung, wenigstens in einen warmen Raum zu kommen... Dafür reicht meine Methode bisher völlig... Grüße Basti
Hallo, hat jemand Erfahrungen auch mit Funk - Heizkörper-Thermostat von Technoline Typ TM3020-RF. Er arbetet auch mit Fensterkontakt. Ich vergleiche beide Bedienunganleitingen. Es sieht aus, das beide sind gleiche, nur immer ist andere Importeur. Danke
Hallo! Hat es jemand geschafft mit einerm RFM22-Modul mit den ETH-Komponenten zu reden? Mit dem RFM12 und der manuellen Decodierung aus diesem Thread funktioniert es bei mir. Ich möchte aber ein RFM22 verwenden, weil ich damit auch noch was anderes empfangen/senden möchte. Ideal wäre eine Konfiguration, welche die Decodierung(Sync-Word, Manchester usw.) direkt dem RFM22 überlässt. Ich hab schon einige Einstellungen versucht, schaffe es aber nicht das Syn-Word zu decodieren. Senden die ETH Module auch eine Preamble 01010101...? Wenn ja wie lange sollte die sein? LG Charly
hallo zusammen, ich habe jetzt schon einige Zeit investiert um mein ETH200 per Funk ans laufen zu bekommen....leider bekomme ich es nicht hin. Ich benutze ein jeenode (Arduino) Kann mir wer helfen, ggf. einen code zurVverfügung stellen? Wäre sehr sehr hilfreich!
Jetzt nach dem Paar jahren ich habe nochmals probiert mit TM3020-RF. Es ist möglich steuern. Jetzt ich kann ändern die Temperatur.
Hi ich habe hier https://github.com/nospam2000/urh-ETH_Comfort_decode_plugin ein Plugin für URH (Universal Radio Hacker) hochgeladen, so dass man die Telegramme mit einem SDR empfangen kann, z.B. mit einem RTL2832. URH ist ein sehr praktisches Tool um die Parameter eines Funksignals zu extrahieren und zu decodieren. Das decode Script macht die Stream-Synchronisierung und Manchester Dekodieren. Encoden kann das Script auch. Michael
Hallo, auf Basis der großartigen Arbeit von Michael W. war es möglich ein Skript für den ETH100 zu schreiben. Wie bereits hier erwähnt ist die Datenstruktur sehr ähnlich dem ETH200. Die Befehle sind zumindest dieselben. Ein wichtiger Unterschied ist allerdings die CRC Berechnung, siehe beigefügter Code. Außerdem habe ich noch die Befehle für den Fensterkontakt hinzugefügt. Wichtig ist anzumerken, dass ich ein RFM69 verwende und kein RFM12. Die Befehle von Michael W. zum RFM12 habe ich so gelassen, weiß aber nicht ob das so funktioniert. Mit meinem RFM69 geht es und könnte auch die Konfiguration dafür nachliefern sofern gewünscht. Weiterhin war es möglich herauszufinden wie ein Wandthermostat angelernt wird oder wie der USB-Programmierstick Daten sendet. Dies ist aber nicht implementiert. Schöne Grüße, Jonas
Hi Jonas, ist schon eine Weile her, dass du hier gepostet hast, aber ich würde auch gerne den RFM69 nutzen und wäre an deinen verwendeten Registern/Einstellungen interessiert. Insbesondere ob du die interne Manchester Dekodierung nutzt und den RFM69 im Packet mode oder im Continuous mode verwendest. cu Matthias
Hallo zusammen, ich weiß nicht, ob das Thema noch jemanden interessiert, die Hardware ist ja nun schon etwas älter ;-). Da ich aber aus den Beiträgen und den Code-Schnipsel hier extrem viel gelernt habe möchte ich meinen Code, den ich den letzten Wochen geschrieben habe, ebenfalls veröffentlichen. Ohne eure Dekodierung des Funktprotokolls hätte ich das niemals umsetzen können. Ich nutze einen Wemos D1 mini zusammen mit einm RFM69HCW modul um eine MQTT Bridge für die EQ3/ELV Komoponenten zu implementieren. Allerdings nur für Fenstersensoren, Fernbedienungen und die Thermostate. Der Code lässt sich mit Platform IO direkt kompilieren und nutzen. https://github.com/mt-mrx/MXETHControl cu Matthias
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.