Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [gelöst] Anbindung CONRAD Transponder RF-Leser über serialport

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

[gelöst] Anbindung CONRAD Transponder RF-Leser über serialport

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
1 Beiträge 1 Kommentatoren 815 Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • I Offline
    I Offline
    ichderarnd
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    ich versuche ein C-Programm, das ich mal für die Homematic CCU geschrieben habe, auf iobroker javascript zu portieren.

    Das Programm öffnet den serial port /dev/ttyUSB0 an den das Transponder Lesegerät angeschlossen ist.

    Das C-Programm lässt sich auch direkt unter Raspbian compilieren und funktioniert einwandfrei. Der Leser reagiert auf den "hello" Befehl und wenn Transponder Token in den Lesebereich kommen, zeigt mein Programm diese an. So öffne ich den Serialport im C-Programm:

    int openSerial(const char *SerialDev)
    {
        int sfd;
    
        if ((sfd = open(SerialDev, O_RDWR | O_NOCTTY)) >= 0)
        {
            struct termios newtio;
            tcgetattr(sfd,&newtio);
            newtio.c_cflag = B57600 | CS8 | CLOCAL | CREAD;
            newtio.c_iflag = IXON | IXOFF;
            newtio.c_oflag = 0;
            newtio.c_lflag = 0;
            newtio.c_cc[VMIN] = 0;
            newtio.c_cc[VTIME] = 10;
            tcsetattr(sfd,TCSANOW,&newtio);
            printf("%s geöffnet.\n", SerialDev);
    
            // Flush Input/Output
            tcflush(sfd,TCIOFLUSH);
    
            // Hello senden
            writeSerial(sfd, "\002FFHD4\004");
    
            // Als Antwort kommt die Bezeichnung und Versionsnummer des LeserPlus
            char *eventdata = readSerial(sfd, 10);
            if (eventdata != NULL)
            {
                printf("LeserPlus gefunden: %s\n", eventdata);
            }
        }
        else
        {
            printf("%s kann nicht geöffnet werden.\n", SerialDev);
        }
        return(sfd);
    }
    
    

    Auf derselben Hardware läuft iobroker inkl. javascript Adapter. "serialport" ist in den Einstellungen eingetragen und wurde beim ersten Start compiliert und installiert. Ich kann /dev/ttypUSB0 fehlerfrei öffnen und in seltenen Fällen liest er auch Daten vom Serialport. Trotz aller Versuche, finde ich den Fehler nicht.

    Hat jemand einen Tipp, was ich noch versuchen könnte? Wenn ich das C-Programm starte, lese ich die Daten wieder sofort.

    Der folgende Code sollte wenigstens ein paar Bytes ausgeben, wenn ein Transponder gelesen wird. Mit oder ohne platformOptions macht keinen Unterschied:

    var SerialPort = require("serialport");
    
    var port = new SerialPort("/dev/ttyUSB0", {
            baudRate: 57600,
            xon: true,
            xoff: true,
            //flowControl: false
            //parser: SerialPort.parsers.byteDelimiter([2,4])
            platformOptions: {vmin: 0, vtime: 10, hupcl: false}
        },
        function (err) {
            if (err) {
                return console.log('Error: ', err.message);
            }
    
            // Flush input
            port.flush();
    
            // send hello
            port.write("\x02FFHD4\x04", function(err) {
                if (err) {
                    return console.log('Error on write: ', err.message);
                }
                console.log('hello written');
            });
        });
    
    port.on('data', function (data) {
      console.log('Data: ' + data.toString('hex'));
    });
    
    port.on('open', function() {
      console.log('Connected');
    });
    
    port.on('error', function(err) {
      console.log('Error: ', err.message);
    });
    
    // close port if the script stopped (to be able to open it again)
    onStop(function (callback) {
        if (port && port.isOpen()) {
            port.close();
            console.log('port closed');
       }
       callback();
    });
    
    

    EDIT: Fehler gefunden (flache Hand vor die Stirn):

    Auf dem PI läuft ja noch YAHM und darin auch ein CUxD. Und der connected automatisch alle USB Serialports solange man nicht "TTYPARAM=NONE" in der Config hat…

    1 Antwort Letzte Antwort
    0
    Antworten
    • In einem neuen Thema antworten
    Anmelden zum Antworten
    • Älteste zuerst
    • Neuste zuerst
    • Meiste Stimmen


    Support us

    ioBroker
    Community Adapters
    Donate

    657

    Online

    32.4k

    Benutzer

    81.5k

    Themen

    1.3m

    Beiträge
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
    ioBroker Community 2014-2025
    logo
    • Anmelden

    • Du hast noch kein Konto? Registrieren

    • Anmelden oder registrieren, um zu suchen
    • Erster Beitrag
      Letzter Beitrag
    0
    • Home
    • Aktuell
    • Tags
    • Ungelesen 0
    • Kategorien
    • Unreplied
    • Beliebt
    • GitHub
    • Docu
    • Hilfe