Geschätztes Forum, das Übertagungsprotokoll dieser Wetterstation suche ich. Kann jemand helfen? Danke Bernhard
Bernhard S. schrieb: > Kann jemand helfen? Beim Suchen? Beitrag "Re: Ventus Wetterstation Daten anzapfen" http://www.tfd.hu/tfdhu/files/wsprotocol/auriol_protocol_v20.pdf
Wolfgang schrieb: > Beitrag "Re: Ventus Wetterstation Daten anzapfen" Wolfgang, Danke für Deine Tipps und so sieht das das Protokoll in der Praxis aus...
Ein Mitschnitt der Impulsabstände als Excel-Datei Beispiel. Nach jedem Impuls wurde die Zeit zum vorhergenden Impuls protokolliert. Impulsabstände von 2,2ms, 4,4ms und 9,9ms wurden registriert.
:
Bearbeitet durch User
Ein grundlegendes Problem quält mich schon seit Tagen. Wann beginnt nach einem 10ms langen Synchronimpuls die Zeit für einen Bit-Impuls, direkt nach einem Synchronimpuls, oder ein Impuls später?
Bernhard S. schrieb: > Ein grundlegendes Problem quält mich schon seit Tagen. Was quält dich? Ich weiß jetzt nicht, wie du bei der Bestimmung der Werte in des Excel-Tabelle vorgegangen bist, aber die Daten sehen doch sehr gut aus: Immer 36 Bit, so wie in der Protokollbeschreibung auf S.5 unter "1.4 General packet format" und auf S.6 unter "2.1 Transmission schedule" beschrieben. Nach jedem Batteriewechsel ändert sich die "Random Id", deine Batterie hat über 2.6V, du hattest bei der Aufzeichnung Windstille und die Windrichtungen werden als N=0°, E=90°, S=180° und W=270° kodiert.
Danke Wolfgang, Lob! Sehr gute Zuarbeit, jede Impulslänge bzw. Impulsabstand ist eine Bitinformation. Manches kann so einfach sein :-)
Hi, Bin nicht 100% sicher, aber mein Regenmesser hat einen ähnlichen Namen und wird perfekt mit rtl_433 dekodiert. Brauchst ein "Software Defined Radio" als Empfänger, 10..20 EUR. Läuft auch auf Raspberry. LG, Dieter
Dieter Fauth schrieb: > Brauchst ein "Software Defined Radio" als Empfänger, 10..20 EUR. > Läuft auch auf Raspberry. Das mag sich rechnen, wenn der Raspberry sowieso läuft und die Stromaufnahme egal ist. Ein SDR und einen Raspberry an Stelle eines einfachen AM-Funkmoduls und eines ATtiny ist ansonsten Perlen vor die Säue.
Dieter Fauth schrieb: > Brauchst ein "Software Defined Radio" als Empfänger, 10..20 EUR. > Läuft auch auf Raspberry. Ein ATtiny45 für 20 Ct. schafft das auch ;-)
Full ack. Aber das Protokoll ist in den Quellen von rtl433 enthalten. Das kann ein guter Start sein... LG, Dieter Fauth
Und so sieht es in der Praxis an einem RFC10 aus. In den ersten 50ms muss sich der Empfänger erst auf das HF-Signal einschwingen, dann wird wunderschön das HF-Signal vom Sender demoduliert. Abstand zw. Sender und Empfänger ca. 0,5 Meter. In diesem Beispiel ist der Synchronimpuls gut erkennbar.
:
Bearbeitet durch User
Manchmal sieht's auch so aus. Decoderung schwierig :(
Ich verzweifle gerade an der Checksumme (CRC), n8=(15-n0-n1-n2-n3-n4-n5-n6-n7) & 0xF auf dieses Ergebnis komme ich nicht, was mache ich falsch?
Protokoll mit CRC-Berechnug. Manfred, Danke für Deine Tipps.
Das 433MHz Empfangsmodul der Wetterstation.
Der Ventus Sniffer, ein interessantes Tool. Die empfangenen und gültigen Pakete (CRC) werden angezeigt, beginnend mit der ID(Byte 0). Die ID lässt sich ändern, ID=Null, dann erfolgt keine ID-Prüfung und alle empfangenen Pakete aller Sensoren werden angezeigt. Bei korrekten Winddaten, kurzer Pipton. Hinweis: Ein alleiniger CRC-Check reicht nicht aus, Nutzdaten incl. ID können trotzdem falsch sein. LED-grün: Daten ok LED-gelb: RX-Impulse LED-rot: ID-Error LED-rot: 10ms Synchron Impuls erkannt
:
Bearbeitet durch User
ich häng mich hier mal dran. Habe auch so ein Windmessgerät. Der Versuch der Kommunikation per Funk hat bislang nicht geklappt. Aber ich habe das Signal direkt per Draht abgegeriffen, was sehr gut funktioniert. Jetzt geht es um die Auswertung des Signals. Windrichtung und Stärke sollen ausgegeben werden. ich habe mal angefangen:
1 | u8 tmp[100]; |
2 | u8 bit=0; |
3 | wind_timer_10khz=0; |
4 | cbi(DDR(wind_port),wind_pin); |
5 | |
6 | while(1) |
7 | {
|
8 | |
9 | while(!gbi(PIN(wind_port),wind_pin));// Warten auf erstes Signal |
10 | while(gbi(PIN(wind_port),wind_pin)); |
11 | wind_timer_10khz=0;// Start Messung |
12 | |
13 | |
14 | while (bit<99){ |
15 | while(!gbi(PIN(wind_port),wind_pin));// Signal Länge messen |
16 | tmp[bit++]= wind_timer_10khz; |
17 | wind_timer_10khz=0; |
18 | while(gbi(PIN(wind_port),wind_pin));// |
19 | }
|
20 | |
21 | }
|
Frage: hat irgendwer was fertiges, so dass ich mir die Programmierung sparen kann? Danke für Unterstützung
grundschüler schrieb: > Frage: hat irgendwer was fertiges, so dass ich mir die Programmierung > sparen kann? ja, aber in Assembler ;-) Durch Impulslängen Messung. - Zuerst die Startbits der Übertragung erkennen - danach die 8 Bit-ID ermitteln, ändert sich bei jedem Batteriewechsel - anschließend Datenbits / Datenpakete mit CRC Berechnung ermitteln Dein "2021-10-11_20_37_52-Saleae_Logic_Software.png" sieht gut aus, die Decodierung wäre jetzt schon per Hand möglich.
:
Bearbeitet durch User
habe jetzt diesen code:
1 | |
2 | |
3 | uint8_t volatile wind_timer_10khz; |
4 | #define wind_port C
|
5 | #define wind_pin 2
|
6 | |
7 | |
8 | ....
|
9 | u8 x; |
10 | u8 dummy=0; |
11 | u8 tmp[300]; |
12 | u8 bit=0; |
13 | wind_timer_10khz=0; |
14 | cbi(DDR(wind_port),wind_pin); |
15 | cbi(PORT(wind_port),wind_pin); |
16 | |
17 | while(1) |
18 | {
|
19 | |
20 | |
21 | |
22 | lcd_goto(4,19); |
23 | lcd_int(gbi(PIN(wind_port),wind_pin)); |
24 | |
25 | |
26 | x=0; |
27 | while(x==0) x=gbi(PIN(wind_port),wind_pin);// Warten auf erstes Signal |
28 | |
29 | |
30 | |
31 | |
32 | while(x>0)x=gbi(PIN(wind_port),wind_pin); |
33 | |
34 | wind_timer_10khz=0;// Start Messung |
35 | while(gbi(PIN(wind_port),wind_pin)){ //x=// Signal Länge messen |
36 | dummy++; |
37 | }
|
38 | |
39 | |
40 | u8 end=0; |
41 | bit=0; |
42 | // while (bit<199){
|
43 | |
44 | while (bit<300 && end==0){ |
45 | |
46 | while(x==0){ |
47 | x=gbi(PIN(wind_port),wind_pin);// Signal Länge messen |
48 | if(wind_timer_10khz>100){x=1;end=1;} |
49 | |
50 | }
|
51 | tmp[bit++]= wind_timer_10khz; |
52 | wind_timer_10khz=0; |
53 | while(x>0)x=gbi(PIN(wind_port),wind_pin); |
54 | }
|
55 | |
56 | |
57 | |
58 | u8 id0=0; |
59 | u8 start=9; |
60 | |
61 | |
62 | u8 id1=0; |
63 | u8 id2=0; |
64 | u8 start_frame[7]; |
65 | |
66 | start_frame[1]=9; |
67 | i=0; |
68 | while(tmp[start_frame[1]+i]>60) |
69 | {
|
70 | i++; |
71 | }
|
72 | start_frame[1]+=i; |
73 | |
74 | start_frame[2]=start_frame[1]+37; |
75 | i=0; |
76 | while(tmp[start_frame[2]+i]>60){ |
77 | i++; |
78 | }
|
79 | start_frame[2]+=i; |
80 | |
81 | |
82 | start_frame[3]=start_frame[2]+37; |
83 | i=0; |
84 | while(tmp[start_frame[3]+i]>60){ |
85 | i++; |
86 | }
|
87 | start_frame[3]+=i; |
88 | |
89 | |
90 | |
91 | start_frame[4]=start_frame[3]+37; |
92 | i=0; |
93 | while(tmp[start_frame[4]+i]>60){ |
94 | i++; |
95 | }
|
96 | start_frame[4]+=i; |
97 | |
98 | |
99 | |
100 | start_frame[5]=start_frame[4]+37; |
101 | i=0; |
102 | while(tmp[start_frame[5]+i]>60){ |
103 | i++; |
104 | }
|
105 | start_frame[5]+=i; |
106 | |
107 | |
108 | start_frame[6]=start_frame[5]+37; |
109 | i=0; |
110 | while(tmp[start_frame[6]+i]>60){ |
111 | i++; |
112 | }
|
113 | start_frame[6]+=i; |
114 | |
115 | |
116 | |
117 | lcd_goto(1,1); |
118 | lcd_int4(start_frame[1]); |
119 | |
120 | lcd_goto(2,1); |
121 | lcd_int4(start_frame[2]); |
122 | |
123 | lcd_goto(3,1); |
124 | lcd_int4(start_frame[3]); |
125 | |
126 | |
127 | start=start_frame[1]; |
128 | lcd_goto(1,1); |
129 | for(i=0;i<8;i++) |
130 | {
|
131 | lcd_int(tmp[start+i]/30); |
132 | id0+=(tmp[start+i]/30)<<(7-i); |
133 | }
|
134 | |
135 | lcd_int4(id0); |
136 | |
137 | start=start_frame[2]; |
138 | lcd_goto(2,1); |
139 | for(i=0;i<8;i++) |
140 | {
|
141 | lcd_int(tmp[start+i]/30); |
142 | id1+=(tmp[start+i]/30)<<(7-i); |
143 | }
|
144 | |
145 | lcd_int4(id1); |
146 | |
147 | start=start_frame[3]; |
148 | lcd_goto(3,1); |
149 | for(i=0;i<8;i++) |
150 | {
|
151 | lcd_int(tmp[start+i]/30); |
152 | id2+=(tmp[start+i]/30)<<(7-i); |
153 | }
|
154 | |
155 | lcd_int4(id2); |
156 | |
157 | |
158 | |
159 | u8 test=0; |
160 | u8 ii; |
161 | for(ii=1;ii<5;ii++) { |
162 | test=0; |
163 | |
164 | lcd_goto(ii,1); |
165 | |
166 | start=start_frame[ii+2]; |
167 | for(i=0;i<8;i++) |
168 | {
|
169 | test+=(tmp[start+i]/30)<<(i); |
170 | }
|
171 | lcd_int4(test); |
172 | |
173 | |
174 | |
175 | |
176 | if(ii==2 || ii==4) |
177 | {
|
178 | test=0; |
179 | for(i=0;i<0;i++) |
180 | {
|
181 | test+=(tmp[start+i+8]/30)<<(i); |
182 | }
|
183 | lcd_int4(test); |
184 | |
185 | u16 dir=0; |
186 | for(i=0;i<9;i++) |
187 | {
|
188 | dir+=(tmp[start+i+8+8-1]/30)<<(i); |
189 | }
|
190 | lcd_int4(dir); |
191 | }else |
192 | {
|
193 | test=0; |
194 | for(i=0;i<8;i++) |
195 | {
|
196 | test+=(tmp[start+i+8]/30)<<(i); |
197 | }
|
198 | lcd_int4(test); |
199 | |
200 | test=0; |
201 | for(i=0;i<8;i++) |
202 | {
|
203 | test+=(tmp[start+i+8+8]/30)<<(i); |
204 | }
|
205 | lcd_int4(test); |
206 | }
|
207 | |
208 | |
209 | |
210 | test=0; |
211 | for(i=0;i<8;i++) |
212 | {
|
213 | test+=(tmp[start+i+8+8+8]/30)<<(i); |
214 | }
|
215 | lcd_int4(test); |
216 | |
217 | }
|
218 | |
219 | |
220 | //Ende des frames abwarten
|
221 | |
222 | }
|
funktioniert - aber die Auflösung/Windrichtung des Sensors ist mit 45° doch sehr bescheiden. Außerdem kommen häufig fehlerhafte fraims. Im Prinzip lohnt sich die Arbeit mit diesem Sensor nicht.
grundschüler schrieb: > habe jetzt diesen code: Schon mal deine Post angeguckt? Was meinst du wohl, was unter "Wichtige Regeln - erst lesen, dann posten!" die Zeile "Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang" bedeuten könnte? :-(
grundschüler schrieb: > Außerdem kommen häufig fehlerhafte fraims. Kann ich nicht so bestätigen, zumindest nicht bei einer drahtgebundenen Daten-Übertragung. Bei einer 433MHz Übertragung ist das normal. Stimmen einzelne Impulslängen, oder nur CRC nicht?
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.