via een eenvoudig script lees ik continu de seriele poort uit (verbonden met alarm) en verwerk de data in een algemene variabele die de status van alle alarmcontacten weergeeft.
Nu wil ik deze info beschikbaar hebben op een webpagina.
Voorlopig werk ik via een txt file met hierin de variable: het script dat de seriele poort monitort schrijft telkens de variabele weg als ze aangepast is en het script van de webpagina lees dit bestand uit (bij refresh van de webpagina).
Nu is dit systeem natuurlijk heel omslachtig en geeft het fouten als je tegelijk het bestand schrijft en leest...
Dus dacht ik het geheel via een socket te doen, maar hier loop ik tegen wat problemen aan, meer bepaald dat de code voor het uitlezen van de seriele poort niet altijd wordt uitgevoerd, maar enkel als er een vraag komt van de socket client.
Kan er me iemand zeggen wat ik misdoe? Bedoeling is om continu de seriele poort uit te lezen, variabele actueel te houden en deze door te geven op vraag van de client.
m'n code is (socket server van het voorbeeld van php.net)
Nu wil ik deze info beschikbaar hebben op een webpagina.
Voorlopig werk ik via een txt file met hierin de variable: het script dat de seriele poort monitort schrijft telkens de variabele weg als ze aangepast is en het script van de webpagina lees dit bestand uit (bij refresh van de webpagina).
Nu is dit systeem natuurlijk heel omslachtig en geeft het fouten als je tegelijk het bestand schrijft en leest...
Dus dacht ik het geheel via een socket te doen, maar hier loop ik tegen wat problemen aan, meer bepaald dat de code voor het uitlezen van de seriele poort niet altijd wordt uitgevoerd, maar enkel als er een vraag komt van de socket client.
Kan er me iemand zeggen wat ik misdoe? Bedoeling is om continu de seriele poort uit te lezen, variabele actueel te houden en deze door te geven op vraag van de client.
m'n code is (socket server van het voorbeeld van php.net)
PHP:
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
| <?php //deel seriële poort uitlezen include "php_serial.class.php"; // Let's start the class $serial = new phpSerial(); // First we must specify the device. This works on both Linux and Windows (if // your Linux serial device is /dev/ttyS0 for COM1, etc.) $serial->deviceSet("/dev/ttyAMA0"); // Set for 9600-8-N-1 (no flow control) $serial->confBaudRate(19200); //Baud rate: 9600 $serial->confParity("none"); //Parity (this is the "N" in "8-N-1") $serial->confCharacterLength(8); //Character length (this is the "8" in "8-N-1") $serial->confStopBits(1); //Stop bits (this is the "1" in "8-N-1") $serial->confFlowControl("none"); // Then we need to open it $serial->deviceOpen(); // read from serial port $read = $serial->readPort(); $totaalzone = "Z0000000000000000000000000000000000000000" ;// we voorzien 40 mogelijke contacten, nu 38 aangesloten // PHP SOCKET SERVER error_reporting(E_ALL); /* Allow the script to hang around waiting for connections. */ set_time_limit(0); /* Turn on implicit output flushing so we see what we're getting * as it comes in. */ ob_implicit_flush(); $address = '10.0.2.183'; $port = 9859; if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) { echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; } if (socket_bind($sock, $address, $port) === false) { echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; } if (socket_listen($sock, 5) === false) { echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; } do { if (($msgsock = socket_accept($sock)) === false) { echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; break; } /* Send instructions. */ $msg = "\nWelcome to the PHP Test Server. \n" . "To quit, type 'quit'. To shut down the server type 'shutdown'.\n"; socket_write($msgsock, $msg, strlen($msg)); do { // eerst de delen van de seriele poort $read = $serial->readPort(); echo $read; if (substr($read,1,1) == "Z") { //het is een zone commando die opgevangen is $zone_nr = intval(substr($read,2,3)); $zone_status = $read[5]; if ($zone_nr < 41) { // om geen foutmelding te krijgen als we iets fout uitlezen $totaalzone[$zone_nr] = $zone_status; }// end if }//end if van zone commando if (substr($read,2,1) == "*") { //het is een LCD status commando die opgevangen is $lcd_status = substr($read,1,strlen($read)-1); }//end if lcd commando if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) { echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n"; break 2; } if (!$buf = trim($buf)) { continue; } if ($buf == 'quit') { break; } if ($buf == 'shutdown') { socket_close($msgsock); break 2; } $talkback = "PHP: You said '$buf'.\n"; //socket_write($msgsock, $talkback, strlen($talkback)); socket_write($msgsock, $totaalzone, strlen($totaalzone)); echo "$buf\n"; } while (true); socket_close($msgsock); } while (true); socket_close($sock); $serial->deviceClose(); ?> |