Codatex Leser 7

Hallo, habe folgende Instanz Codatex hinzugefügt.
Instanz und Variable wurden automatisch erstellt.
Die Variable ändert sich aber nicht bei kontakt.
In der Instanz im Debug sehe ich wenn ein Transponder angelegt wird.
Wie und auf was soll ich denn jetzt einen trigger legen.
Oder muß ich da erst im Leser was umstellen?
Bin für alle Tips offen :smiley:

Hat niemand einen Tipp für mich.
Wie kann ich denn ein Ereigniss auf der Seriellen Schnittstelle triggern.
Oder übernimmt diese Aufgabe grundsätzlich eine Instanz.

Das hast Du gesehen ?

Gruß
Bruno

Ein Versehen meinerseits, es ist ein Leser 7.
(vieleicht könnte ein Mod die Überschrift ändern, will ja kein Chaos anrichten)

@Powerfreddy ja den hatte ich schon gefunden, aber trotzdem Danke für den Hinweis.

OK, da ich ja schon im Debug Modus Eingangssignale erkennen kann,
sollte das Ding doch irgendwie anzuschließen sein.
Leider habe ich keine Ahnung wie ich ich da vorgehen muß.
Wenn ich den Transponder an die Kontaktfläche halte bekomme ich im Debug folgende 2 Ereignisse:


16.01.2012 15:10:06.00 |        Received Data | Data:Âüüþÿþüþ
16.01.2012 15:10:06.00 |        Received Data | Data:þþ
oder als HEX
16.01.2012 15:10:06.00 |        Received Data | 44 61 74 61 3A C2 FC FC FE FF FE FC FE 
16.01.2012 15:10:06.00 |        Received Data | 44 61 74 61 3A FE FE 14 

Der erste String ist ja die Transpondernummer, der zweite vermutlich ob er akzeptiert wird. Mir würde ja der erste String, für meine Bedürfnisse langen.
Aber wie bekomme ich den in eine Var geschrieben.:confused:

Beim suchen habe ich folgendes gefunden:

<?php

$fd = dio_open('/dev/ttyS0', O_RDWR | O_NOCTTY | O_NONBLOCK);

dio_fcntl($fd, F_SETFL, O_SYNC);

dio_tcsetattr($fd, array(
  'baud' => 9600,
  'bits' => 8,
  'stop'  => 1,
  'parity' => 0
)); 

while (1) {

  $data = dio_read($fd, 256);

  if ($data) {
      echo $data;
  }
} 

?> 

Funktioniert das auch unter IPS wenn ich das Anpasse?
Da ich absoluter Anfänger bin, verstehe ich obrigen code nicht wirklich.
Werde weiter suchen und berichten.
Ich könnte zwar im schlimmsten Fall den Relaisausgang vom Leser auf einen Eingang meines WuT 12x12 legen,
aber damit nehme ich mir die Möglichkeit eine aktive Anwesenheits-auswertung zu machen.
Das ist mein eigentliches Ziel.

RegisterVariable ist dein Freund :wink:

paresy

@paresy vielen Dank

Da hab ich mir ja was vorgenommen :smiley:
Werde berichten.

Super habe es schon fast hinbekommen, nur ein kleiner Schönheitsfehler.

<?php
// wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist
if ($_IPS['SENDER'] == "RegisterVariable")
{
  // bereits im Puffer der Instanz vorhandene Daten in $data kopieren
  $data  = RegVar_GetBuffer($_IPS['INSTANCE']);
  // neu empfangene Daten an $data anhängen
  $data .= $_IPS['VALUE'];

  // wenn das Trennzeichen ; in $data gefunden worden ist
  if (strpos($data, ';'))
  {
      // $data in durch ; separierte Datensätze zerlegen
      $datasets = explode(';', $data);

      // alle nicht durch ; terminierten Datensätze ausgeben
      for ($i = 0; $i < count($datasets) - 1; $i++)
      {
         echo "empfangener Datensatz: ".$datasets[$i]."
";
      }

      // $data auf den Inhalt des letzten (unvollständigen) Datensatzes setzen
      $data = $datasets[count($datasets) - 1];
  }

  // Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
  RegVar_SetBuffer($_IPS['INSTANCE'], $data);
  
  $rfid = (57669 /*[Eingänge\Register Variable\RFID Code]*/);
  $string=($data);
  $hexstring='';
		for ($x=0;$x<strlen($string);$x++)
		{
		 $hexstring.=dechex(ord(substr($string,$x,1)));
		}
		echo $hexstring;
		unset ($rfid);

	SetValue(57669 /*[Eingänge\Register Variable\RFID Code]*/ , $hexstring );
}

?>

Mit dem Befehl unset ($rfid); müßte ich doch die Variable leeren, er hängt aber jeden Datensatz hinten dran.
Ich vermute das ich da schon bei der Var $data ansetzen muß, oder?
Nochmals vielen Dank für eure überaus schnelle Hilfe hier im Forum :loveips:

Neues Problem,
wenn ich mir in der Leser 1 Instanz im Debug die Werte anschau,
sind das immer 13 bit bei der ersten und 8bit bei der zweiten Meldung.
Meine 3 Testtransponder lassen sich eindeutig zuordnen

Bei meiner RegisterVariable kommen immer unterschiedliche Werte an.
2 von 3 Transponder haben hier meist die gleiche Nummer, die wechseln aber auch zwischendurch.
It´s magic… kann ich mir die Leser 1 Instanz vieleicht dazwischenbauen?
Was steckt da drin, stecke gerade ein bischen fest. z.B.:

Von der 1 Leser Instanz: im debug
16.01.2012 17:56:27.00 | Received Data | 44 61 74 61 3A C2 FC FC FE FF FC FE FE
16.01.2012 17:56:27.00 | Received Data | 44 61 74 61 3A FE FE 14
Von meiner RegisterVariable : im debug
16.01.2012 17:58:46.00 | Received Data | C2 FC FC FE FF FE FE FE
16.01.2012 17:58:46.00 | Buffer | FE FE
16.01.2012 17:58:46.00 | Received Data | FE FE 14
16.01.2012 17:58:46.00 | Buffer | FE FE FE FE 14

Es ist beides mal der gleiche Transponder und beides mal die gleiche übergeordnete Instanz
der Seriellen Schnittstelle.

Bau dir da noch mal einen Cutter dazwischen, rechtes Trennzeichen, Hex 14.

Dann pass mal dein Script an und schau was in $data steht.

Das Script, musst Du der Registervariable zuweisen. „Zielscript“

if ($_IPS['SENDER'] == "RegisterVariable")
{
    $data = $_IPS['VALUE'];
    IPS_LogMessage($_IPS['SELF'], $data); // die Ausgabe steht in den Meldungen mit ScriptID
}

Edit: Ich hab mir grad mal das Protokoll angesehen, mit deinen Daten stimmt aber etwas nicht. Die Schnittstelle muss so eingestellt werden.

Baud: 57600
Datenbits: 8
Stoppbits: 1
Parity: none (keine)

Dann sollte ein STX und EOT als Anfang und Ende kommen.

@RWN Danke, das hat das Hauptproblem gelöst,
die Verbindungsparameter hatte ich auf dem Default Wert gelassen!!!

Nachdem ich jetzt verstanden habe wie der Cutter funktioniert,
bekomme ich auch die Daten im richtigen Format in meine Variable. :D:D:D
Schön das Ihr euch die Zeit nehmt, um auch Anfängern wie mir, das nötige Wissen zu vermitteln.