Messwerte über Telnet Socket auslesen

Hallo,
ich spiel schon den ganzen Tag an folgendem Problem rum:
Die Daten von meiner Wetterstation WMR200 werden über RFXCOM von einem anderen Server abgefragt und können über Telnet auf Port 5556 (mit Timestamp) und 5555 abgefragt werden.

root@PeerBru01:/tmp/var/log# telnet 192.168.1.212 5556
20100421184500 data0 0.35
20100421184500 data1 270364.00
20100421184500 data3 0.71
20100421184500 data2 0.12
20100421184500 data4 0.01
20100421184500 data5 53.00
20100421184500 data6 14.00
20100421184500 data7 1.00
20100421184504 data8 315.00
20100421184505 data9 1947.38
20100421184506 data10 31.00
20100421184501 rain0 0.0 269.7
20100421184517 uv0 0.0
20100421184405 th2 23.0 43 9.7
20100421184436 th0 9.4 41 -3.2
20100421184514 wind0 225 1.6 1.1 8.8
20100421184511 th1 14.2 54 5.0
Connection closed by foreign host

root@PeerBru01:/tmp/var/log# telnet 192.168.1.212 5555
1 10 0 0 0 1271875528 0 0.84
1 10 1 0 1 1271875528 0 270392.00
1 10 3 0 3 1271875528 0 0.71
1 10 2 0 2 1271875528 0 0.12
1 10 4 0 4 1271875528 0 0.01
1 10 5 0 5 1271875528 0 57.00
1 10 6 0 6 1271875528 0 11.00
1 10 7 0 7 1271875500 0 1.00
2 10 1118464 0 8 1271875536 0 315.00
2 10 1118465 0 9 1271875537 0 1947.38
2 10 1118466 0 10 1271875537 0 31.00
2 1 2759041 0 0 1271875501 0 0.0mm/h
2 6 14317748 0 0 1271875517 0 0.0uvi
2 3 16394250 3 2 1271875445 0 23.0°_43%
2 3 16394470 1 0 1271875529 0 9.4°_42%
2 0 1739200 0 0 1271875528 0 1.1(1.1)m/s_NNO
2 3 16394401 2 1 1271875511 0 14.2°_54%
Connection closed by foreign host

Diese Daten möchte ich nun in IPS integrieren, scheitere aber kläglichst daran, ich bekomm das mit der Socket Verbindung einfach nicht hin, geschweige denn im zweiten Schritt mit der Definition der Variablen, die die entsprechenden Werte zugewiesen bekommen sollen.

Hat jemand von euch ne idee?
Danke!

Das Telnet Protokoll erwartet eine Initialisierungs-Sequenz. Je nach dem, wie streng sich die beiden Seiten daran halten, klappt es mit einer einfachen Socketverbindung oder auch nicht. Allerdings haben sich auch schon andere darüber den Kopf zerbrochen, z.B. auch hier bei uns.

Tommi

Hallo gdfde,

wie weit bist Du gekommen, wo treten die ersten Probleme auf?

  • ClientSocket mit IP-Adresse und Port angelegt - und geöffnet ?
  • DEBUG - Fenster des ClientSockets geöffnet - kommen Daten ?

Ich habe vor längerer Zeit einmal mit PHP Telnet experimentiert und konnte damit Daten von einem Host abfragen. Damit kannst Du es ja mal versuchen. Du musst nur die PHPTelnet.php richtig einbinden. Anbei mal das Script aus der Homepage.

<?php
require_once "PHPTelnet.php";

$telnet = new PHPTelnet();

// if the first argument to Connect is blank,
// PHPTelnet will connect to the local host via 127.0.0.1
$result = $telnet->Connect('www.somewhere.com','login name','password');

if ($result == 0) {
$telnet->DoCommand('enter command here', $result);
// NOTE: $result may contain newlines
echo $result;
$telnet->DoCommand('another command', $result);
echo $result;
// say Disconnect(0); to break the connection without explicitly logging out
$telnet->Disconnect();
}
?> 

Gruss
Icey

Hallo,

ja, client socket (ich hab das vorgegebene Modul von IPS genommen) funkt soweit und im Debug Fenster bekomm ich auch die Daten.

Nur zwei Probleme hab ich dabei:

1.) Es wird alle 10 Sekunden abgefragt, das würde ich gerne auch mindestens 1 Minute hochdrehen. Ich hab dazu noch keine Option gefunden.
Wo kann man das machen?

2.) im debug Fenster kommt so ein Textstring daher.
Wie kann ich die einzelnen Werte in entsprechende Variablen ablegen, wo ich dann Statistiken oder andere Triggerpunkte machen kann?
Also z.b. data9 = Gaszählerstand, th1= Temperatur Wohnzimmer usw.

Idealerweise würde ich dafür die schon fertigen Module für die WMRS200 im IPS verwenden, ich bräuchte hier bloss den Inputteil von USB HID auf den Telnet Socket geändert.

Ich bin mir sicher, dass das leicht änderbar ist, da in IPS ja alles superflexibel ist…ich hab das Ding aber leider erst seit 2 Wochen und bin somit noch blutiger Anfänger.
Danke schon im voraus für euer Bemühen :slight_smile:

so, ich habs nach einigen Mühen geschafft, ich schreib die Daten in ein array und speicher dann die entsprechenden Zahlenwerte.

Anbei das Script, falls es jemanden interessiert:

<?php

$alledaten=array();

$raw = fsockopen("192.168.1.212", 5556);

while (!feof($raw)) {

$l = fgets($raw, 128);

$linearr = preg_split("/ /",$l);

$alledaten[]=$linearr;

}

fclose($raw);



$uv0 = $alledaten[11][2];
$uv0 = (float) $uv0;
SetValue(13923 /*[Wetterstation\UV Wert]*/, $uv0);
//echo "UV Wert:".$alledaten[11][2]."
";

$th2 = $alledaten[12][2];
$th2 = (float) $th2;
SetValue(32927 /*[Wetterstation\Temp_Wohnzimmer]*/, $th2);
//echo "Temperatur Wohnzimmer:".$alledaten[12][2]."
";

// nun zu den werten....


//echo "es sind: ".count($alledaten)."zeilen.
";

//echo "Beispiel zeile 3 wert 2: ".$alledaten[2][1]."
";

//echo "und alle werte ....
";

//for ($i =0 ; $i<count($alledaten) ; $i++){
//for ($j=0; $j<count($alledaten[$i]) ; $j++){

//echo "Info at: "+$i." : ".$j." = ".$alledaten[$i][$j]." 
";

//}

//}


?>