433 MHz Modul und Lidl AFW 2 A1

Hallo Liebe Bastler:innen,
ich habe mir letztens mal ein 433 MHz Modul bei AliExpress gekauft, soweit geht das auch aber ich weiß nicht wie ich nun Sachen der Lidl Wetterstationen auslesen kann. Kann mir das wer weiterhelfen?

LG Sören

Hallo,
Und es gibt nur ein 433MHz Modul ?
Leider können wir nicht auf deinen Tisch schauen.

Also welches Modul hast du vor dir liegen ?
Zeige einen Link.

Oh sorry... Dieses hier ist das. Ich hoffe du kannst damit was Anfangen. https://de.aliexpress.com/item/1005004988421038.html?pdp_npi=2%40dis!EUR!1%2C18€!0%2C83€!!!!!%40211b5e2516910067256055008e7729!12000031253263416!btf&_t=pvid%3Ad3d9b7a7-23e7-482a-a8cb-c4dfdaf6a140&afTraceInfo=1005004988421038__pc__pcBridgePPC__xxxxxx__1691006725&spm=a2g0o.ppclist.product.mainProduct&gatewayAdapt=glo2deu

433MHz_Modul

Dan wünsche viel Spaß.
Jeder außen Sensor hat 3 mögliche Kodierungen damit die Basiseinheit nur auf den einen reagiert, dazu jeder Hersteller hat eignen Sendeprotokoll. Im anderem Forum gelungen ist nur eine "auslesen" nämlich von Tchibo, ohne Oszilloskop und sehr sehr viel Zeit gibt keine Möglichkeit das zu bewältigen.

Hier wurde die auch ausgelesen

welche ? haben doch 10 Modelle.
Steht doch oben :face_with_raised_eyebrow:

Der gezeigte Empfänger ist nicht der beste, sollte aber für dein Vorhaben erst mal funktionieren.

Die bestehenden Probleme wurden dir schon genannt.
Du kannst mit einem Logicanalyser versuchen, die Daten zu dekodieren.
Diese werden dann auf dem PC-Bildschirm sichtbar und können dann evtl. von dir umgesetzt werden.
Wie schon geschrieben, ist das sehr zeitaufwändig.

Gibt es dazu irgendwie eine Doc damit ich weiß, wie das überhaupt funktioniert?

Habe, nix gefunden, oder falsch gesucht.

Wozu möchtest du eine Doku haben ?

Zum Logicanalyzer hätte ich gerne eine. Und frage 2 reicht dieser? AZDelivery Logic Analyzer 8 CH, 24MHz mit USB-Kabel, kompatibel mit Arduino inklusive eBook! https://amzn.eu/d/2V5YH77

Warum ausgerechnet AZ der Saftladen was versucht alles als Marke registieren, im anderem Laden sind die bestimt günstiger

Ich wurde erst die beispiele zum laufen bringen,nicht das sich was ergibt

Naja AZ ist meiner Meinung nach halt gut und ich zahle lieber 5€ mehr damit das schnell kommt.

Wenn du das so siehst, solltest du die mal fragen, ob die auch eine Anleitung zum Logicanalyzer mitschicken. Wobei ein Ebook ist dabei.

Ich meine bei Wolle was gelesen haben

Dann poste doch einen Link, das wird dem TO sicher helfen.

Nur was bringt das wenn man nicht weis was angezeigt wird, hätte der TO den Link durchgelesen und die Beispiele getestet wurde bestimmt was angezeigt im SerMon, auch wenn das wahrscheinlich vor erst als Datenmüll aussieht.

2 Likes

Danke

Danke

Habe meinen zum teil defekten(Display ist schwarz wegen Sonneneinstrahlung) Außensensor zerlegt :wink: hatte Glück die Auswerteeinheit und Sender sind getrennt.
Also kurzer Hand an Nano geklemmt und den Beispiel vom @jurs aus dem Link im Post #4 genommen :wink:

/*
  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 4500

// minimum duration (microseconds) of a short bit pulse
#define MINBITPULSE 450

// 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 20

// maximum count of data bit pulses following the start pulse
#define MAXPULSECOUNT 50

// 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(" ");
    }
    Serial.println();

    avg=sum/counter; // calculate the average pulse length
    // then assume that 0-bits are shorter than avg, 1-bits are longer than avg
    for (i=0;i<counter;i++)
    {
      if (validpulsbuf[i]<avg) Serial.print('0'); else Serial.print('1');
    }
    Serial.println();
  
  }
  counting=false;
  counter=0;
}
 
void loop() 
{
  long lowtime, hitime;
  if (pbread!=pbwrite) // check for data in ring buffer
  {
    lowtime=pulsbuf[pbread]; // read data from ring buffer
    hitime=hibuf[pbread];
    cli(); // Interrupts off while changing the read pointer for the ringbuffer
    pbread++;
    if (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=lowtime*2+PULSEVARIANCE;
      validpulsbuf[counter]=lowtime;
      validhibuf[counter]=hitime;
      counter++;
    }
    else 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
    {
      if (counting) showBuffer();
      counting=false;
      counter=0;
    }  
  }
}

Aufgespielt SerMon angeworfen, und.... es kam was

Data Bits: 36
L: 1956 1956 4028 1956 4028 4032 4036 1956 1952 4032 1952 1956 1956 1956 1956 1952 1956 4028 4032 4028 1956 1952 1956 1952 1956 1952 1956 1952 1956 4028 1956 1952 1956 4028 1956 2076 
H: 488 484 488 488 488 488 488 480 488 488 488 488 488 484 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 
001011100100000001110000000001000100

Start Bit L: 8910   H: 488
Data Bits: 36
L: 1956 1952 4032 1952 4032 4028 4036 1952 1956 4028 1956 1952 1956 1952 1956 1952 1956 4028 4032 4028 1956 1952 1956 1952 1956 1952 1956 1956 1952 4032 1952 1956 1952 4032 1952 2076 
H: 488 488 488 488 488 488 488 484 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 
001011100100000001110000000001000100

Start Bit L: 8910   H: 488
Data Bits: 36
L: 1952 1956 4028 1956 4028 4032 4036 1956 1952 4032 1952 1956 1952 1956 1952 1956 1952 4032 4028 4032 1952 1956 1952 1956 1952 1956 1952 1956 1952 4032 1952 1956 1952 4032 1952 2076 
H: 488 488 488 488 488 488 488 480 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 
001011100100000001110000000001000100

Start Bit L: 8910   H: 488
Data Bits: 36
L: 1952 1956 4028 1956 4028 4032 4028 1956 1952 4032 1952 1956 1952 1956 1956 1952 1956 4028 4032 4028 1956 1952 1956 1952 1956 1952 1956 1952 1956 4028 1956 1952 1956 4028 1956 2076 
H: 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 488 
001011100100000001110000000001000100

Immer vier Blocke mit 36 Bit.

Also @dev_soren29 auf dein Arduino Datapin vom Empfänger mit D2 und GND mit GND verbinden und testen :wink:


Nicht erschrecken ist Provisorium nur zum Testen

Hier ist die Temp. und Feuchtigkeit versteckt :wink:

001011100100000001110000000001000100