Datenstring aus RFID Reader verarbeiten

Der chaotische Hauptfaden

Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese

Antworten
Luca
Beiträge: 80
Registriert: Fr 24. Jan 2014, 16:55

Datenstring aus RFID Reader verarbeiten

Beitrag von Luca »

Hi Zusammen,
für ein Katzenklappenprojekt habe ich einen WL-134 RFID Reader, der über eine serielle Schnittstelle Infos über den gelesehen Chip ausspuckt. Auswerten möchte ich das ganze am Ende in IP Symcon, ist aber erstmal denke ich nicht relevant, programmiert wird da in PHP. Ich bin mittlerweile soweit, dass der Reader an einem Raspberry angebunden ist, und der Datenstring über SER2NET über Telnet an meinem Symcon Server ankommt. Leider durchblicke ich das Konvertieren zwischen Hex, Dez und so weiter nicht so ganz. Im Prinzip würde ich aus dem Datenstring gerne die Chipnummer rausbekommen, hat da jemand einen Ansatz? Ich kann das leider absolut nicht nachvollziehen... Hier die Info aus dem Manual:
For example on the tag shows 900250000023921 Dec format 900 in the front
then card number 250000023921
Module output:
02 31 37 31 41 39 32 35 33 41 33 34 38 33 30 30 31 30 30 30 30 30 30 30 30 30 30 07 F8 03

Equal ASCII 171A9253A34830010000000000
We can find card nu m ber is 171A9253A3 , country number is 483 LSB First
Translate these number to Dec format card number equal: 2 50000023921
Country number equal 900
And “31 37 31 41 39 32 35 33 41 33 34 38 33 30 30 31 30 30 30 30 30 30 30 30 30 30” made all XOR caculate we got the answer is 07 (check sum result) .
F8 is 07s bitwise invert result.
Ich habe das gesamte Manual nochmal als PDF angehängt, da ist noch genaueres zum Aufbau des Datenstrings (Module Output, den ich so auch in Symcon rein bekomme) beschrieben.


Wäre super wenn mir da jemand auf die Sprünge helfen könnte, gerne natürlich auch schon mit ein paar PHP Schnipseln. Ich stehe da echt auf dem Schlauch.


Gruß
Dateianhänge
RFID reader module.pdf
(294.58 KiB) 214-mal heruntergeladen
Jannyboy
Beiträge: 1412
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Datenstring aus RFID Reader verarbeiten

Beitrag von Jannyboy »

Hallo Luca,

Hier sind ein paar Zeilen C zum decodieren den Datenstrings.
Ich hoffe die helfen weiter.

Was wird das denn für ein Projekt? Details?

Grüße Jan

Code: Alles auswählen

// animal_decode.c
// Decode the string from the animal tag Reader WL-134 with unit-test
// Author: Jan Wichmann
// Date: 06.11.2019

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <assert.h>

typedef struct animal_raw
{
    char start[1];
    char card_num[10];
    char country_num[4];
    char flag_data[1];
    char flag_animal[1];
    char _reserved1[4];
    char _reserved2[6];
    char checksum[1];
    char checksum_inv[1];
    char stop[1];
}animal_raw_t;

typedef struct animal_data
{
    char card_num[11];
    char country_num[5];
    uint8_t flag_data:1;
    uint8_t flag_animal:1;
}animal_data_t;

char testdata[] = { 0x02, 0x31, 0x37, 0x31, 0x41, 0x39, 0x32, 0x35, 0x33, 0x41, 0x33, 0x34, 0x38, 0x33, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x07, 0xF8, 0x03 };

int decode_animal(char *raw_stream, animal_data_t *data)
{
    int result = -1;
    animal_raw_t *raw = (animal_raw_t*)raw_stream;

    printf("Animal data decode example with unit-test\n\n");

    memset(data, 0, sizeof(animal_data_t));

    // Check start and stop tokens
    assert (raw->start[0] == 0x02);
    assert (raw->stop[0] == 0x03);
    if (raw->start[0] == 0x02 && raw->stop[0] == 0x03)
    {
        uint8_t calc_checksum = 0x00;

        // Calculate the checksum
        for (uint32_t i = 1; i < 27; i++)
        {
            calc_checksum ^= raw_stream[i];
        }

        // Check the checksum
        // printf("checksum: %i\n", calc_checksum);
        assert(raw->checksum[0] == calc_checksum);
        if (calc_checksum == raw->checksum[0] && ~calc_checksum == raw->checksum_inv[0])
        {
            // Extract the data
            memcpy(data->card_num, raw->card_num, sizeof(raw->card_num));
            memcpy(data->country_num, raw->country_num, sizeof(raw->country_num));
            data->flag_data = atoi((const char*)raw->flag_data);
            data->flag_animal = atoi((const char*)raw->flag_animal);
            result = 0;
        }
    }

    return result;
}

int main()
{
    animal_data_t animal;
    int res;

    res = decode_animal(testdata, &animal);

    if (res == 0)
    {
        printf("Decoded data:\n");

        if (memcmp(animal.card_num, "171A9253A3", 10) == 0)
        {
            printf("Card number: %s\n", animal.card_num);
        }
        else
        {
            printf("Error card number!");
        }

        if (memcmp(animal.country_num, "4830", 4) == 0)
        {
            printf("Country number: %s\n", animal.country_num);
        }
        else
        {
            printf("Error country number!");
        }

        if (animal.flag_data == 0)
        {
            printf("Data flag: %s\n", animal.flag_data ? "true" : "false");
        }
        else
        {
            printf("Error dataflag!");
        }

        if (animal.flag_animal == 0)
        {
            printf("Animal flag: %s\n", animal.flag_animal ? "true" : "false");
        }
        else
        {
            printf("Error animalflag!");
        }

    }
    else
    {
        printf("decode error!\n");
    }

    return 0;
}

Dateianhänge
animal_decode.c
(3.07 KiB) 41-mal heruntergeladen
Name vergessen
Beiträge: 3261
Registriert: Mo 12. Aug 2013, 19:47

Re: Datenstring aus RFID Reader verarbeiten

Beitrag von Name vergessen »

Hast Du das auch schonmal gebraucht oder wie kommt dieser vorbildliche Code zustande? So mit allen Checks usw., das spricht gegen "mal eben zur Info zusammengehackt". :)
Jannyboy
Beiträge: 1412
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Datenstring aus RFID Reader verarbeiten

Beitrag von Jannyboy »

Das war quasi ein Kreuzworträtsel für Informatiker.
Nee den habe ich mal eben nebenbei geschrieben, als ein anderes Projekt gerade compiliert hat. :roll:
Unit-Test gehören zum guten Ton der Softwareentwicklung.
Uns es richtig zumachen fehlt noch die Doxygen Doku.
Aber die habe ich mir bei dem Codeschnipsel mal gespart. :D

Grüße Jan
Benutzeravatar
Schottenschotte
Beiträge: 5
Registriert: Do 19. Dez 2019, 13:18

Re: Datenstring aus RFID Reader verarbeiten

Beitrag von Schottenschotte »

Hallo Luca,

ebenfalls für ein Katzenklappenprojekt habe ich denselben Leser WL-134. Ich habe ihn an einem Raspberry PI 3B+ und kann die Daten auslesen und den Motor der Klappe steuern. Ich habe aber ein Problem mit der Antennenreichweite. Ich habe vom Tierarzt einen Testtag geholt. 2x12mm Glastube. Wenn ich damit über die Antenne fahre, dann muss ich bis auf 0,5cm ran. Das macht mein geliebtes Katerviech (liebevoller Kosename :D )aber bestimmt nicht. Laut Beschreibung soll das bis auf 18cm lesbar sein, mir würde schon die Hälfte genügen. Wie kann ich die Antenne einstellen? Hast Du eine Ahnung, wie das mit den Jumpern funktioniert?

Grüße vom Schottenschotte im Schottenrock
Benutzeravatar
Bastelbruder
Beiträge: 11540
Registriert: Mi 14. Aug 2013, 18:28

Re: Datenstring aus RFID Reader verarbeiten

Beitrag von Bastelbruder »

Such' mal nach Katzenklappe, das Thema hatten wir schon ausgiebig. Es werden zwei getrennte Antennen für Senden und Empfang benötigt, dann geht auch noch etwas mehr.
Benutzeravatar
barclay66
Beiträge: 1075
Registriert: Di 13. Aug 2013, 04:12
Wohnort: im Speckgürtel Münchens

Re: Datenstring aus RFID Reader verarbeiten

Beitrag von barclay66 »

Hi,

zur Reichweitenthematik kann evtl. noch folgende Zusatzinfo interessant sein:
Im Rahmen von Reinigung und Wartung hatte ich unsere RFID Tag-gesteuerte Katzenklappe (SureFlap) einmal auseinander. Die Antenne besteht hier aus einem Draht, der in ca. 20 Windungen (nicht nachgezählt) um den gesamten Tunnel (Kunststoff) gewickelt ist.

Gruß
barclay66
Benutzeravatar
Schottenschotte
Beiträge: 5
Registriert: Do 19. Dez 2019, 13:18

Re: Datenstring aus RFID Reader verarbeiten

Beitrag von Schottenschotte »

Danke an Euch beiden, aber mir geht's in erster Linie zunächst um die Jumpereinstellungen des WL-134, mit denen sich die Performance einstellen lässt, so steht es im Datenblatt. Leider steht dort aber nicht, wie diese Jumper gesetzt werden müssen. Da es aber keine Jumper sondern Lötbrücken sind, ist das mit rumprobieren so eine Sache...
Die beiliegende Antenne ist mit geschätzten 9x9cm und vielleicht tatsächlich ca. 20 Windungen leider nicht groß genug, dass das Tier durchlaufen kann, daher war meine Intention dieses an der Decke zu befestigen, meine Katenzklappe hat einen tunnelartigen Eingang um das Tier zu positionieren. Zur Not muss ich um die Sperrholzplatte tatsächlich einen Draht wickeln, aber zunächst würde ich gerne mehr über die Jumper erfahren, da j aim Datenblatt 18cm steht.
Gruß vom Schottenschotte im Schottenrock
Benutzeravatar
Finger
Administrator
Beiträge: 7447
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Datenstring aus RFID Reader verarbeiten

Beitrag von Finger »

Ist das ein 125khz-Transponder?
Benutzeravatar
Harley
Beiträge: 1161
Registriert: So 11. Aug 2013, 21:16
Wohnort: Regensburg

Re: Datenstring aus RFID Reader verarbeiten

Beitrag von Harley »

Tiertransponder sind auf 134,2 kHz ...
Benutzeravatar
Bastelbruder
Beiträge: 11540
Registriert: Mi 14. Aug 2013, 18:28

Re: Datenstring aus RFID Reader verarbeiten

Beitrag von Bastelbruder »

Die Hardware ist aber identisch mit den Schlüsseldingern, wenn man von kleinen Änderungen am Schwingkreis und am Taktgenerator absieht. Der beliebte U2270 ist von 100..150 kHz spezifiziert.
Benutzeravatar
Schottenschotte
Beiträge: 5
Registriert: Do 19. Dez 2019, 13:18

Re: Datenstring aus RFID Reader verarbeiten

Beitrag von Schottenschotte »

Es ist ein 134,2kHz
Luca hat im ersten Post das Datenblatt angehängt, da steht auf der 2. Seite auch die Sache mit den Antennen-Jumpern, wo och Hilfe suche...

Gruß vom Schottenschotte im Schottenrock
unlock
Beiträge: 633
Registriert: Sa 31. Dez 2016, 20:21

Re: Datenstring aus RFID Reader verarbeiten

Beitrag von unlock »

Hallo,
lass vorerst mal die Jumper, und mach zuerst die Induktivitöt der Antenne größer!
Ohne Jumper sollte die 580µH betragen, dazu fehlen bei gegebenem Durchmesser von 90mm mindestens noch 54 Windungen, besser 55, den rest kann man dann eber über die Jumper anpassen.
Edith:Natürlich solltest Du die Spule nach deinen Gegebenheiten und allen Parametern nochmal genau berechnen, da ich hier z.B.von einer Luftspule ausgegangen bin.
Benutzeravatar
Schottenschotte
Beiträge: 5
Registriert: Do 19. Dez 2019, 13:18

Re: Datenstring aus RFID Reader verarbeiten

Beitrag von Schottenschotte »

Danke unlock, das ist alles schon ein paar Jahre her und im Physikunterricht gab es wichtigeres zu tun als aufzupassen … :mrgreen:

Aber ich habe mich nun mal ein bisschen ins das große Thema Induktivität eingelesen. Eine vereinfachte Rechnung gem. Wikipedia (Zylinderspule) ergibt bei 90mm und 55 Windungen aber 195µH. Wie hast Du gerechnet? Ich habe es mir - ehrlich gesagt - einfach gemacht: https://wetec.vrok.de/rechner/cspule.htm bzw. https://de.wikipedia.org/wiki/Zylinderspule

Der Rechenweg ist das eine, die andere Frage, wie kommst Du auf die Zahl 580µH? Warum sollte die Antenne gerade 580µH betragen? Ich wickle die Spule um einen aus 3mm Sperrholzplatten, das dürfte nicht allzu sehr abschwächen. Ich muss noch messen, habe die Katzenklappe aber gerade nicht bei mir, ich denke, es gibt 200x200mm. Bei der Spuke hast Du mit dem Durchmesser eines Kreise gerechnet, was zählt hier, der Umfang oder die Kreisfläche. Wenn ich dann am Quadrat oder Rechteck rechnen, würde mich eben interessieren, ob ich die Fläche oder den Drahtumfang einer Windung berücksichtigen muss.

Gruß vom Schottenschotte im Schottenrock
Benutzeravatar
Finger
Administrator
Beiträge: 7447
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Datenstring aus RFID Reader verarbeiten

Beitrag von Finger »

Du musst mit der Induktivität deiner Spule und den über J5-J10 zuschaltbaren Kondensatoren die Resonanzfrequenz des Transponders halbwegs treffen. 580uH sind im Datenblatt als Defaultwert genannt. Den Rest musst du jetzt rechnen, siehe https://de.wikipedia.org/wiki/Schwingkreis ganz oben.
Oft (eher immer) stimmen theoretisch bestimmte Induktivität und die Realität nicht gut überein. Hast du die Möglichkeit, deine Spule direkt oder indirekt zu vermessen? Oder zu schauen, wo die Erregung von dem Teil schwingt? Einfaches Oszi würde reichen....
unlock
Beiträge: 633
Registriert: Sa 31. Dez 2016, 20:21

Re: Datenstring aus RFID Reader verarbeiten

Beitrag von unlock »

Hallo,
ich habe auch mit diesem Rechenprogramm gerechnet, die Spulenbreite war bei mir 35mm, Permeabilität des Kerns ist 1, Option ist auf kurze Spule.
Koppelfaktor und A wird berechnet, Durchmesser bezieht sich auf mitleren Durchmesser der Spule.
All zu genau zu berechnen ist sehr komplex, da hier einfach auch Materialeigenschaften eine nicht unerhebliche Rolle spielen.
Wie auch immer sollte die Antenne zumimdest dem defaultwert entsprechen(dies sollte den meisten Antennengewinn erbringen), der Rest dürfte deine erhofte Reichweite übertreffen,
und somit eine Feinabstimmung nur der Perfektion wegen in frage kommen.
Benutzeravatar
Bastelbruder
Beiträge: 11540
Registriert: Mi 14. Aug 2013, 18:28

Re: Datenstring aus RFID Reader verarbeiten

Beitrag von Bastelbruder »

Nur zum Thema Hochfrequenz und Antenne:
Ich hab mir das Thema mal reingezogen und einen wichtigen Unterschied zum Transpondersystem bei 125 kHz gefunden. 125 kHz ist AM-moduliert, 134 kHz FM. Deshalb geht der U2270 nicht, der TMS3705 ist hier richtig. Interessant wäre natürlich, welcher Chip auf dem Bausatz eingesetzt wird. Ich sehe da nämlich zwei fette diskrete Endstufentransistoren die der TMS eigentlich nicht braucht.

Zur Antenne ist wichtig zu wissen woraus die Tür besteht. Bei Metall ist es nicht besonders sinnvoll die Spule auf ein Loch zu legen, das muß dann zumindest unten einen Schlitz besitzen damit das hochfrequente Wechselfeld nicht kurzgeschlossen wird. Und so ein Schlitz zehrt natürlich an der Stabilität. Davor eine Art Tunneleingang aus Kunststoff oder Holz erlaubt, die Spule ein paar Zentimeter vom Blech zu entfernen.

Ich könnte mir aber ein Stück Rohr vorstellen, das 5 cm vor der Tür endet und am Boden fest installiert ist. Die Antennenspule aus Modelleisenbahndraht kommt bei 20 cm Durchmesser und einer Wickellänge von 2,5 cm auf ungefähr 40 Windungen damit sie zu den Kondensatoren im Bausatz paßt. Zum Feinabgleich sollte ein Stück Draht (eine Windung um die Antennenspule), eine Diode und ein Voltmeter ausreichend sein. Ein Oszilloskop ist natürlich ideal. Hilfreich ist der alte Zauberstab, bestehend aus einem Ferritstab an einem Ende und einem Stück Alu- oder Kupferrohr am Anderen. Damit läßt sich ohne Schrauben oder Löten feststellen ob die Spule zu groß, zu Klein oder genau richtig ist.
Benutzeravatar
Finger
Administrator
Beiträge: 7447
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Datenstring aus RFID Reader verarbeiten

Beitrag von Finger »

Erzähl mal was zu dem Zauberstab bitte.
Benutzeravatar
Bastelbruder
Beiträge: 11540
Registriert: Mi 14. Aug 2013, 18:28

Re: Datenstring aus RFID Reader verarbeiten

Beitrag von Bastelbruder »

https://www.fingers-welt.de/phpBB/viewt ... 0&start=50

In Anbetracht der hier etwas größeren Spule darf der Zauberstab auch etwas größer sein, die Plus-Seite vielleicht ein halber Zeilentrafokern und auf der anderen Seite ein Alurohr mit 100 mm Durchmesser. Es tut auch eine amtliche Kurzschlußwindung aus 2,5² Kupferdraht oder eine runde Aluscheibe mit der man einen Teil der magnetischen Feldlinien in der Spule erheblich aus ihrer bevorzugten Bahn bringen kann.

Der Zauberstab ist nicht meine Erfindung, der findet sich beispielsweise auch im ersten Absatz auf Seite 385 der mit Bedacht nicht anklickbar verlinkten Leseprobe.
radiomuseum.org/forumdata/upload/381-388_Kroenung.pdf
Quelle ist vermutlich die Funkschau.
Benutzeravatar
Schottenschotte
Beiträge: 5
Registriert: Do 19. Dez 2019, 13:18

Re: Datenstring aus RFID Reader verarbeiten

Beitrag von Schottenschotte »

Puh, wenn ich damals gewusst hätte, dass ich mich 30 Jahre später mehr für Physik als für Mädchen interessiere, dann hätte ich vielleicht besser zugehört. Aber damals hatte man halt anderes im Kopf :D

Ich muss mir das erst mal über die Feiertage in Ruhe reinziehen, das ist nun doch schon ganz schwere Kost. Aber vorab: Sowohl mein Kanal, als auch die Türe sind aus reinem 3mm Sperrholz. Der einzige "Stahl" sind die Alu-Führungsschienen der Türe, die senkrecht zum Kanal stehen.

Für alle, die es interessiert, von Innen her kommend, lese ich nicht den Tiertag aus. Auch falls mal durch die Türe ein fremdes Tier reinkommt, soll es zumindest immer raus können. Deswegen habe ich auf ca. 10cm Länge 0,5mm starke Metallstreifen unten in den Kanal geklebt und verbinde diese mit den externen Anschlüssen eines Touchtasters. Sobald ein Tier 2 Streifen "kurzschließt" löst der Touchtaster aus und die Türe öffnet sich.

Habe den Chip gerade nochmals fotografiert, aber man sieht auch nicht mehr, als auf dem Bild im Datenblatt. Der Chip ist definitiv nicht beschriftet.
Antworten