Thread Kontinuierlich Net-Stream anzeigen (29 answers)
Opened by kami at 2011-11-09 13:05

kami
 2011-11-09 13:05
#154056 #154056
User since
2010-03-17
92 Artikel
BenutzerIn
[default_avatar]
Hallo

ich habe hier einen MAX! Cube stehen, der hat auf dem Port 80 kontinuierlich einen neuen Datensatz vorliegen. Ich möchte nun immer wieder diesen Auslesen und Arbeiten. Dafür habe ich auch schon einen PHP-Quellcode. Dieser erledigt bei einmaligen Aufruf die richtige Umsetzung und Ausgabe. Das Resultat des Test ist eine "0" oder "1".

more (6.4kb):
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/usr/bin/php -q
<?php


// Uncomment the follwing 2 lines
$host = "192.168.36"; // Your Cube-IP or hostame Here!
$port = "80";

sleep(1);
$fp = @fsockopen($host, $port, $errno, $errstr, 5);

if (!$fp)
{
if ($errno == 111) echo "<b style=\"color: #FF0000\">Local software is running</b> - ".$errstr;
elseif ($errno == 113) echo "<b style=\"color: #FF0000\">No Connection</b> - ".$errstr;
else echo $errno." <b style=\"color: #FF0000\">Connection Error</b> - ".$errstr;
}

else
{

socket_set_blocking($fp,false);
#sleep(1);
$finished = 0;

$jetzt = time();
$buff = "";
while (!feof($fp) && time() < $jetzt+20 && $finished == 0)
{
$line = fgets($fp);
if (strpos($line,"L:") !== false) $finished = 1;
if ($line != "") $buff .= $line."\n";
//sleep(1);
}
fclose($fp);
if ($finished != 1) echo "\n<b style=\"color: #FF0000\">No Connection</b>";
else
{
ob_start();

$arr = explode("\n\n",$buff);

echo '<hr />';
foreach ($arr as $v)
{

if (substr($v,0,2) == "M:")
{
$arr2 = explode(',',$v);
$str = base64_decode($arr2[2]);

$pos = 0;
$readlen = 1; $data["meta"]["?1"] = dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $data["meta"]["?2"] = dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $data["meta"]["RoomCount"] = dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;


for($j = 1 ; $j <= $data["meta"]["RoomCount"] ; $j++)
{
$readlen = 1; $RoomID = dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $data["rooms"][$RoomID]["RoomNameLength"] = htmlentities(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = $data["rooms"][$RoomID]["RoomNameLength"]; for($i = $pos; $i < $readlen+$pos ; $i++) $data["rooms"][$RoomID]["RoomName"] .= htmlentities(substr($str,$i,1)).""; $pos += $readlen;
$readlen = 3; for($i = $pos; $i < $readlen+$pos ; $i++) $data["rooms"][$RoomID]["RFAdress(?)"] .= str_pad(dechex(ord(substr($str,$i,1))),2,"0",STR_PAD_LEFT).""; $pos += $readlen;
}

$readlen = 1; $data["meta"]["DevCount"] = dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;




}


if (substr($v,0,2) == "L:")
{
$v = substr($v,2,strlen($v));
$str = base64_decode($v);

$pos = 0;

for($j = 1 ; $j <= $data["meta"]["DevCount"]; $j++)
{
unset($hilf);
$readlen = 1; $hilf["ReadLength"] = htmlentities(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 3; for($i = $pos; $i < $readlen+$pos ; $i++) $hilf["RFAdress"] .= str_pad(dechex(ord(substr($str,$i,1))),2,"0",STR_PAD_LEFT).""; $pos += $readlen;
$readlen = 1; $hilf["?1"] = dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $hilf["Data1"] .= str_pad(decbin(ord(substr($str,$pos,1))),8,"0",STR_PAD_LEFT).""; $pos += $readlen;
$readlen = 1; $hilf["Data2"] .= str_pad(decbin(ord(substr($str,$pos,1))),8,"0",STR_PAD_LEFT).""; $pos += $readlen;

if($hilf["ReadLength"] == 11)
{
$readlen = 1; $hilf["?2"] = dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $hilf["Temperature"] = (ord(substr($str,$pos,1))/2).""; $pos += $readlen;
$readlen = 2; for($i = $pos; $i < $readlen+$pos ; $i++) $hilf["DateUntil"] .= str_pad(decbin(ord(substr($str,$i,1))),8,"0",STR_PAD_LEFT).""; $pos += $readlen;
$readlen = 1; $hilf["TimeUntil"] = (ord(substr($str,$pos,1))*0.5).""; $pos += $readlen;
}


switch (substr($hilf["Data2"],6,2))
{
case "00" : $deviceconf[$hilf["RFAdress"]]["Mode"] = "auto"; break;
case "01" : $deviceconf[$hilf["RFAdress"]]["Mode"] = "manu"; break;
case "10" : $deviceconf[$hilf["RFAdress"]]["Mode"] = "vacation"; break;
case "11" : $deviceconf[$hilf["RFAdress"]]["Mode"] = "boost"; break;
}
$deviceconf[$hilf["RFAdress"]]["LiveDataX"] = $hilf["Data3"];



echo "\n";
}
//echo $v;
}

}


$ob = ob_get_contents();
ob_end_clean();

if ($deviceconf['005bfb']['Mode']=="auto" && $deviceconf['004bb8']['Mode'] =="auto" )
echo "0\n";
else echo "1\n";

}
}


?>


Nun möchte ich das kontinuierlich durch PERL in der Console erledigen lassen. Hier habe ich aber auch schon das erste Problem. Ich kriege trotz while-Schleife nur einmal den Datensatz angezeigt. Wie kann ich die Ausgabe immer wieder bekommen?
Hat vielleicht jemand lust mir das PHP-Skript in ein PERL-Skript umzuschreiben? Vielen dank für Hilfe.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/perl -w
    use strict;
    use IO::Socket;
 $| = 1;
    my ($host, $port, $kidpid, $handle, $line);

    unless (@ARGV == 2) { die "usage: $0 host port" }
    ($host, $port) = @ARGV;
    
    # create a tcp connection to the specified host and port
    $handle = IO::Socket::INET->new(Proto     => "tcp",
                                    PeerAddr  => $host,
                                    PeerPort  => $port)
           or die "can't connect to port $port on $host: $!";
     while () {
    #$handle->autoflush(1);             # so output gets there right away
   # print STDERR "[Connected to $host:$port]\n";

    # the if{} block runs only in the parent process

        # copy the socket to standard output
        $line = <$handle> ;
            print STDOUT $line;
        
        
    }




Gruß kami

modedit Editiert von GwenDragon: Langes PHP-Listing im More-Tags
Last edited: 2011-12-01 18:35:32 +0100 (CET)

View full thread Kontinuierlich Net-Stream anzeigen