VENTUS W177 Funkprotokoll Datenprotokoll Protokoll Wetterstation gesucht

Gast #6748812
Lesenswert?

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.
Angehängte Dateien:
Gast #6749992
Lesenswert?

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
Gast #6750936
Lesenswert?

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.
OP #6755036
Lesenswert?

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.
Angehängte Dateien:
OP #6767159
Lesenswert?

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
Angehängte Dateien:
Gast #6845083
Lesenswert?

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
Angehängte Dateien:
OP #6845825
Lesenswert?

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.
Gast #6847987
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren