Pages: 1 2 3 [4]   Go Down
Author Topic: 433 MHz Funkthermometer decodieren  (Read 13454 times)
0 Members and 1 Guest are viewing this topic.
Germany
Online Online
Edison Member
*
Karma: 47
Posts: 2321
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Das ist kein Rauschen, dass ist eine fehlerhafte Auswertung des übermittelten Datensatzes.
Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Offline Offline
Newbie
*
Karma: 0
Posts: 20
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Könntest du mal hinter deinen Bitmustern (dem Block mit dem 000000000000000000 1111 000010100100 111010000000 00000011 1111;25,0;17) usw. die Werte posten, die dabei herauskommen und ggf. dazu posten, ob der Datensatz valid oder invalid ist? Also eine Art Tabelle mit RAW, lesbar und valid/invalid?

Viele Grüße
Boris
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 194
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Leute,
ich finde es toll, wenn man so viel Arbeit in ein Projekt steckt. Es stellt sich nur die Frage, ob man das Resultat am Ende auch auskosten kann.
Die Wetterstation in gelinde ausgedrückt SCHROTT.
Wer das nicht glauben sollte, schaut sich die Berichte im Marktplace an.
http://www.amazon.de/product-reviews/B002BWRO1S/ref=cm_cr_dp_hist_1?ie=UTF8&showViewpoints=0&filterBy=addOneStar

Sorry, tut mir Leid.

Gruß Gerd
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 20
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ach du schande, die Bewertungen sind ja durchgängig Grütze.

Dann wird es wohl nichts bringen, sich die Bitmuster sowie die Umrechnungen anzuschauen, weil dabei vermutlich herauskommen wird, dass die Umrechnung korrekt ist, und die ermittelten Daten seitens der Station Müll sind.
Logged

0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 342
A SWL life as a coder... I'll try.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Moin,

mittlerweile ist es auch bei mir soweit. Unter 0° und die Werte sind weg. Es kann aber auch daran liegen, dass die Batterie nicht mehr genug Strom liefert. Müsst' ich mal mit einer Neuen testen. Daher werde ich den Weg gehen und den Sender auseinanderrupfen und die Komponenten an den Ardu bauen. Recyle-and-make-it.

ABER: mir ging es in primär um das Cracken des Bitstream. Also nach dem Motto: "Wie macht man soetwas". Die Station stand damals herum und kostete nur 7,-€. Ich hatte damals den Ardu relativ neu und einen 433 MHz Receiver hatte ich auch liegen. Daher bot sich das Projekt irgendwie an.

Dieses Prinzip "Wie macht man soetwas" kann man ja aber auf div. Stationen anwenden, denke ich.

Logged


0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 342
A SWL life as a coder... I'll try.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Dann wird es wohl nichts bringen, sich die Bitmuster sowie die Umrechnungen anzuschauen, weil dabei vermutlich herauskommen wird, dass die Umrechnung korrekt ist, und die ermittelten Daten seitens der Station Müll sind.

Moin,

wenn Du das doch nochmal angehen willst: ich habe das Sketch (0023) nochmal etwas optimiert. Jetzt sollten die Werte korrekt analysiert werden können:

Code:
int startarray;
int thhuarray[40];
int thhuarraypos=0;
int startok=0;
int endok=0;
int lengh=0;


void setup() {
  Serial.begin(19200);
 
  lastTime = micros();
  changeCount = 0;
  startarray =0;
 
  attachInterrupt(0, r, CHANGE);
  for (int i=0;i<=40;i++) {
    thhuarray[i]=5;
  }
}

void loop() {
 
}

void output() {

}

void r() {
   int duration = pulseIn(2, HIGH);
  //  Serial.print(duration);
//    Serial.print(" = ");

    if ((duration>3600) & (duration<3900))  {
      Serial.println("");
      Serial.print("#");   
      startarray=1;
      thhuarraypos=0;
      startok=1;
      lengh=0;
    }

    if (startarray=1) {
    if ((duration>600) & (duration<1000)) {
    Serial.print("0");
    thhuarray[thhuarraypos]=0;
    thhuarraypos++;
    lengh++;
    if (lengh==8) {
      lengh=0;
    Serial.print(" ");     
    }
    }
    if ((duration>2000) & (duration<2500)) {
      Serial.print("1");   
      thhuarray[thhuarraypos]=1;
    thhuarraypos++;
    lengh++;
    if (lengh==8) {
      lengh=0;
    Serial.print(" ");     
    }
    }
   
    if (thhuarraypos==40) {
      startarray=0;
      Serial.print("E       ");
      Serial.print(thhuarray[36]);
      Serial.print(thhuarray[37]);
            Serial.print(thhuarray[38]);
                  Serial.print(thhuarray[39]);
                        Serial.print("       ");
      endok=1;
      if (startok & endok & (thhuarray[36]==0) & (thhuarray[37]==0) & (thhuarray[38]==0) & (thhuarray[39]==0) & (thhuarray[0]==0) & (thhuarray[1]==0) & (thhuarray[2]==0) & (thhuarray[3]==0) ) {
      Serial.print(" OK! "); 
      }     
      else Serial.print(" BAD!!! "); 
     
      thhuarraypos=0;
      startok=0;
      endok=0;     
    }
  }
}

Es werden m.E. sehr sicher die OK/Bad Packete erfasst:

Code:
01111010 0000
#
#01111111 11111111
#00001001 00111111 10111011 11111000 11100000 E       0000        OK! 11111111 111111
#00001001 00111111 10111011 11111000 11100000 E       0000        OK! 00011111 11111111 11111
#00001001 00111111 10111011 11111000 11100000 E       0000        OK! 11111111 111111
#00001001 00111111 10111011 11111000 11100000 E       0000        OK! 01111111 11111111 1
#00001001 00111111 10111011 11111000 11100000 E       0000        OK! 11111111 111111
#00001001 00111111 10111011 11111000 11100000 E       0000        OK! 01010010 00010000 00000000 00000010 1000001
#10000001 00000101 00000000 011011
#00010000 00011000
#00000010 00000110 00
#00010000 00000000 00
#10
#00111111 11111111 11
#00001001 00111111 10111011 11111000 11100000 E       0000        OK! 11111111 111111
#00001001 00111111 10111011 11111000 11100000 E       0000        OK! 10000111 11111111 111111
#00001001 00111111 10111011 11111000 11100000 E       0000        OK! 11111111 111111
#00001001 00111111 10111011 11111000 11100000 E       0000        OK! 00111111 11111111 11
#00001001 00111111 10111011 11111000 11100000 E       0000        OK! 11111111 111111
#00001001 00111111 10111011 11111000 11100000 E       0000        OK! 00010100 00000111 11111111 1111
#00001001 00111111 10111011 11111000 11100000 E       0000        OK! 11111111 111111
#00001001 00111111 10111011 11111000 11100000 E       0000        OK! 0000
#
#
#
#011000
#00
#10011111 11111111 11100001 00100111 11110111 E       0111        BAD!!! 11111000 11100000 11111111 11111111
#00001001 00111111 10111011 11111000 11100000 E       0000        OK! 0
#01101111 11111111 1111111
#00001001 00111111 10111011 11111000 11100000 E       0000        OK! 11111111 111111
#00001001 00111111 10111011 11111000 11100000 E       0000        OK! 1
Logged


0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 342
A SWL life as a coder... I'll try.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hier nochmal der ganze Code:

Code:
int startarray;
int thhuarray[40];
int thhuarraypos=0;
int startok=0;
int endok=0;
int lengh=0;

void setup() {
  Serial.begin(9600);
  startarray =0;
  attachInterrupt(0, r, CHANGE);
  for (int i=0;i<=40;i++) {
  thhuarray[i]=5;
  }
}

void loop() {
}

void output() {
}
Hacked Thierry Mugler 433 MHz Thermometer Protokoll Decoded By Arduino - °C
byte createValue(byte start)
  {
      byte value=0;
      byte bitpos=0;
      for (byte valuepos=start;valuepos<=start+3;valuepos++) {
            bitWrite(value, bitpos, thhuarray[valuepos]);
            bitpos++;
      }
      return value;
  }

void r() {
    int duration = pulseIn(2, HIGH);

    if ((duration>3600) & (duration<3900))  {
      startarray=1;
      thhuarraypos=0;
      startok=1;
      lengh=0;
    }

    if (startarray=1) {
    if ((duration>600) & (duration<1000)) {
    thhuarray[thhuarraypos]=1;
    thhuarraypos++;
    lengh++;
    if (lengh==4) {
      lengh=0;
    }
    }

    if ((duration>2000) & (duration<2500)) {
    thhuarray[thhuarraypos]=0;
    thhuarraypos++;
    lengh++;
    if (lengh==4) {
      lengh=0;
    }
    }
   
    if (thhuarraypos==40) {
startarray=0;
endok=1;

if ((startok & endok) & (thhuarray[36]==1) & (thhuarray[37]==1) & (thhuarray[38]==1) & (thhuarray[39]==1) & (thhuarray[0]==1) & (thhuarray[1]==1) & (thhuarray[2]==1) & (thhuarray[3]==1) ) {
Serial.print(createValue(12),DEC);
Serial.print(createValue(8),DEC);
Serial.print(".");
Serial.print(createValue(4),DEC);   
Serial.print(";");       
Serial.print(createValue(20),DEC);
Serial.print(createValue(16),DEC);
       Serial.print("\r");       
      }     
      thhuarraypos=0;
      startok=0;
      endok=0;     
    }
  }
}

Der Code läuft recht Stabil ohne weitere Ausreißer bis jetzt. Siehe Live Daten:



Der Rel Humidity Sprung kommt weile meine Frau heute den WLAN Router durch Staubsaugen stromlos machte:
EDIT: Ich denke den "Feuchtesensor" Marke Billig China kann man wohl vergessen: der Sprung von 47% auf 57% ist doch recht schnell hochgegangen...



smiley

Der Codeteil für den Interrupt ist durch Sui entstanden. Er hatte ihn für die 433 MHz Steckdosen Analyse implementiert.

Weiterhin traue ich der Temperatur mehr als der Rel Luftfeuchtigkeit.

Egal: das Gesamtprojekt ich für mich nun erledigt. Wir hackten das Protokoll, es gibt einen Code, der rennt. Der Ardu sendet per WR703N Daten. Das war's. Over'n'out.
« Last Edit: November 18, 2012, 05:23:14 am by DE8MSH » Logged


0
Offline Offline
Newbie
*
Karma: 0
Posts: 26
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo wer kann mir helfen ?
Will meine Station auch decodieren hab aber noch ein paar fragen
- Wird die Bitfolge 2 - 3 Mal  hinternander gesendet ?
- Kann einer vieleicht ein Codeschnipsel Posten mit dem ich die Bits belauschen kann
 
- Kaufempfehlung für mehrere Temperatur sensoren


Vielen Dank

   
 
Logged

Nijmegen, Netherlands
Offline Offline
Newbie
*
Karma: 0
Posts: 20
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I own a Thierry Mugler wireless weatherstation. I ported code from Roel http://roel.reijerse.net/thierry/ to Arduino and it works fine.
Logged

Pages: 1 2 3 [4]   Go Up
Jump to: