Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Anbindung CONRAD Transponder RF-Leser über serialport

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

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

    This topic has been deleted. Only users with topic management privileges can see it.
    • I
      ichderarnd last edited by

      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 Reply Last reply Reply Quote 0
      • First post
        Last post

      Support us

      ioBroker
      Community Adapters
      Donate

      1.0k
      Online

      31.7k
      Users

      79.7k
      Topics

      1.3m
      Posts

      1
      1
      767
      Loading More Posts
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes
      Reply
      • Reply as topic
      Log in to reply
      Community
      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
      The ioBroker Community 2014-2023
      logo