UDP-Frust

Sorry, ich bin ein Anfänger und komme hier wirklich nicht weiter! Ich brauche Hilfe!

Ich habe ein UDP socket erstellt, um Meldungen aus einem ekey-System zu erfassen. Das geht gut, und im Debug-Fenster erscheinen die Meldungen auch korrekt.

Ich weiss aber nicht, wie weiter. Wie kriege ich diese Meldungen in eine Variable??? Idealerweise würde ich die Meldung in ihre Einzeteile verlegen mittels Cutter - aber wie kriege ich die Meldung in den Cutter, und wie kriege ich sie wieder heraus?

Und letztlich: ich habe eine Skript, welches eine email über SMTP schickt. Das funktioniert problemlos, aber wie schaffe ich, dass der Skript ausgeführt wird, wenn der UDP-Socket eine Meldung empfängt???

Um jede Hilfestellung und Gebrauchsanweisung wäre ich unendlich dankbar! Am liebsten wäre mir, wenn sich eine gute Seele 20-30’ Zeit nähme, um mir über Remote Desktop/Chat zu helfen…

Mit bestem Dank im Voraus, und sorry für die etwas trivialen Fragen!

Moin…
schau Dir mal http://www.ip-symcon.de/forum/showthread.php?p=136990Post #7 von dem Thread an und probiere es mal mit
explode!
Registervariable anlegen, Script schreiben mit dem Part aus Post 7, Script der Registervariable zu ordnen und schauen was passiert!?
Probieren, probieren, probieren und irgendwann ganz arg freuen das man es geschafft und verstanden hat!

Bin aber kein Fachmann, sondern bekennender PHP-Honk! :slight_smile:

Grüße,
Peter

Sent from my iPhone using T

Danke vielmals! Aber ich verstehe es immer noch nicht. Auf post #8 steht „Registervariable mit Clientsocket verbinden“. Aber genau das ist, was mir unklar ist. Kannst Du mir bitte ausführen? Unendlichen Dank!

Einfach im Konfig Menue der Registervariable unten den Client Socket als übergeordnete Instanz einstellen.

OK Freunde, den 1. Schritt habe ich geschafft. Die RegisterVariable wird korrekt gefüllt (im Debug Fenster). Nun: wie kann ich bei jeder Neufüllung ein beliebiges Skript auslösen?

Den Rest werde ich wahrscheinlich selber schaffen - aber ein bisschen babysitting von Euch brauche ich jetzt schon noch…

Im Konfig-Menü der Registervariable das entsprechende Zielskript konfigurieren.
Auch hierbeschrieben. :smiley:

genial - it works!!!
danke - aag

Mein letztes Problem ist: wie kann ich die UDP-Meldung von ekey sinnvoll parsen? Die Datenstruktur ist im Anhang. Um Hilfe wäre ich sehr froh! Ich habe mit explode herumgespielt, komme aber nicht weiter. Ich habe im Forum gesehen, dass viele Leute ekey-Meldungen einbinden wollen - es wäre super, wenn man einen definitiven Skript dazu hätte…

und das wäre der HEX-Dump einer solchen typischen Meldung (als RegisterVariable):

12.11.2011 13:24:46.00 | Received Data | 03 00 00 00 01 00 00 00 0F 04 10 00 37 30 30 30 38 35 33 39 30 39 30 35 31 31 00 00 68 00 00 00 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 32 30 31 31 31 31 31 32 20 31 33 32 34 34 36 00 61 00 61 00 67 00 00 00 31 00 00 00

bin schon mal weiter gekommen. Hier ist der Code, um das UDP-Packet von ekey in leserliche Zeichen umzusetzen. Es triggert jeweils eine mail für jede Fingerlesung. Substrings parsen muss ich auch schon noch, aber das dünkt mir noch das Einfachste…


<?


 $data = $IPS_VALUE;
  for ($i=0; $i < strlen($data); $i++)
  {
    $ekeyStringHex .= str_pad(dechex(ord($data[$i])), 2, '0', STR_PAD_LEFT);
  }

 $ekeyString = preg_replace('/[\x00-\x1F\x7F]/', '', hextostr($ekeyStringHex))."
";

$ekeyDay = substr($ekeyString,21,2);
$ekeyMonth = substr($ekeyString,19,2);
$ekeyYear = substr($ekeyString,15,4);
$ekeyHH = substr($ekeyString,24,2);
$ekeyMM = substr($ekeyString,26,2);
$ekeySS = substr($ekeyString,28,2);
$ekeyUSER = substr($ekeyString,30,-1);

$ekeyMailText ="ekeyDay: ". $ekeyDay."
 "."ekey;Month: ".$ekeyMonth."
 "."ekeyYear: ".$ekeyYear."
 "."ekeyHH: ".$ekeyHH."
 "."ekeyMM: ".$ekeyMM."
 "."ekeySS: ".$ekeySS."
 "."ekeyUSER: ".$ekeyUSER ."
 ";
$ekeyTimeStamp = "ekeyTimeStamp: ". $ekeyDay."-".$ekeyMonth."-".$ekeyYear."  ".$ekeyHH.":".$ekeyMM.":".$ekeySS;



SMTP_SendMail(18471 /*[E-Mail senden (SMTP)]*/,$ekeyTimeStamp." by ".$ekeyUSER,$ekeyMailText.$ekeyTimeStamp);


function hextostr($x) {
  $s='';
  foreach(explode("
",trim(chunk_split($x,2))) as $h) $s.=chr(hexdec($h));
  return($s);
}

function strtohex($x) {
  $s='';
  foreach(str_split($x) as $c) $s.=sprintf("%02X",ord($c));
  return($s);
}


?>