/[cvs]/nfo/perl/scripts/serialcom/aquastar/aquastar_control.pl
ViewVC logotype

Contents of /nfo/perl/scripts/serialcom/aquastar/aquastar_control.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations)
Tue May 27 22:20:46 2003 UTC (20 years, 11 months ago) by joko
Branch: MAIN
CVS Tags: HEAD
File MIME type: text/plain
initial commit

1 #!/usr/bin/perl
2
3 # $Id$
4 # $Log$
5
6
7 # Konfiguration
8 $cfg_SeriellerPort = '/dev/ttyS0';
9 $cfg_ASLetzterMessport = 3;
10
11 # Ausgabe auf der Konsole
12 #$cfg_AusgabeZiel = 'STDOUT';
13 # Ausgabe in eine Datei
14 $cfg_AusgabeZiel = '/usr/local/httpd/htdocs/axquarium/iksdata.htm';
15
16
17
18 use Device::SerialPort qw( :PARAM :STAT 0.07 );
19
20 $PortName = $cfg_SeriellerPort;
21
22 $PortObj = new Device::SerialPort ($PortName, $quiet)
23 || die "Can't open $PortName: $^E\n"; # $quiet is
24
25 # configuring
26
27 $PortObj->user_msg(ON);
28 $PortObj->baudrate(9600);
29 $PortObj->databits(8);
30 $PortObj->parity("none");
31 $PortObj->stopbits(1);
32 $PortObj->handshake("xoff");
33
34 $PortObj->write_settings || undef $PortObj;
35
36 # $PortObj->save($Configuration_File_Name);
37 # $PortObj->baudrate(300);
38 # $PortObj->restart($Configuration_File_Name); # back to 9600 baud
39
40
41 # operating
42
43 # temporäre Variablen initialisieren
44 $bool_insync = 0;
45 $bool_linereach_firstline = 0;
46 $bool_linereach_lastline = 0;
47
48 while (1) {
49
50 # Daten vom seriellen Port abholen
51 $data_in = $PortObj->input;
52 print "raw: $data_in", "\n";
53
54 # solange nicht "InSync" und nicht leer kommt ...
55 if (!$bool_insync) {
56 if ($data_in =~ m/^E/) {
57 $bool_insync = 1;
58 # we synced
59 print "yeah! synced to any dataline!", "\n";
60 } else {
61 # Ausgabe ....
62 print "trying to sync to any dataline", "\n";
63 # ... warten (1 sec. schlafen) ...
64 sleep(1);
65 # ... und weiter
66 next;
67 }
68 }
69
70 # abschliessende newlines abtrennen
71 chomp($data_in);
72
73
74 # block erkennen und speichern
75
76 # 1. Block-Beginn erkennen
77 # date-Zeile?
78 if ($data_in =~ m/E(.+?):(.+?) (.+?), (.+?)\.(.+?)\./) {
79 $bool_linereach_firstline = 1;
80 $bool_linereach_lastline = 0;
81
82 %data_block = {};
83 $data_block{'date'}{'hour'} = $1;
84 $data_block{'date'}{'minute'} = $2;
85 $data_block{'date'}{'weekday'} = $3;
86 $data_block{'date'}{'day'} = $4;
87 $data_block{'date'}{'month'} = $5;
88 }
89
90 # 2. Block-Ende erkennen
91 $data_in =~ m/E(.) \(.+?\)(.+?) ../
92 && ($1 == $cfg_ASLetzterMessport)
93 && ($bool_linereach_lastline = 1);
94
95 # 3. Block-Inhalt
96 # Temperatur-Zeile erkennen
97 $data_in =~ m/E. \(Te\+\)(.+?) °C/
98 && ($data_block{'temp'} = $1);
99
100 # pH-Wert-Zeile erkennen
101 $data_in =~ m/E. \(pH\-\)(.+?) pH/
102 && ($data_block{'pH'} = $1);
103
104 # Redox-Zeile erkennen
105 $data_in =~ m/E. \(Rx \)(.+?) rH/
106 && ($data_block{'redox'} = $1);
107
108
109 # schauen, ob data-block vollständig ...
110 if ($bool_linereach_firstline && $bool_linereach_lastline) {
111 outDataBlock_plain(\%data_block);
112 # outDataBlock_html(\%data_block);
113 }
114
115 # zwei sekunden warten
116 # (in diesem intervall schickt die aquastar daten-zeilen)
117 sleep(2);
118
119 }
120
121 $PortObj->close || die "failed to close";
122 undef $PortObj;
123
124
125 # $count_out = $PortObj->write($output_string);
126 # warn "write failed\n" unless ($count_out);
127 # warn "write incomplete\n" if ( $count_out != length($output_string)
128
129
130
131
132 # hier sollten die Daten ausgegeben
133 # bzw. das Format der Ausgabe bestimmt/programmiert werden
134 sub outDataBlock_plain {
135
136 # Übergabe-Parameter: Referenz auf Datenblock holen (Hash)
137 $priv_data_block_ref = shift;
138 # Referenz auf Hash auflösen
139 %priv_data_block = %$priv_data_block_ref;
140
141 print "data block ready ... ", "\n";
142 print "$priv_data_block{'temp'}", "\n";
143 print "$priv_data_block{'pH'}", "\n";
144
145 open (FH, '>' . $cfg_AusgabeZiel);
146
147 print FH <<EOT;
148 <html>
149 <head>
150 <meta http-equiv="refresh" content="5; URL=iksdata.htm">
151 </head>
152 <body background="img/bg3.gif">
153 <Table Border=0 Cellpadding=0 Cellspacing=0 width=700 Align=center>
154 <tr>
155 <td width=370 >&nbsp;</td>
156 <td width=330 >
157 <Table Border=0 Align=left Cellpadding=0 Cellspacing=0 width=340>
158 <tr>
159 <td width=120 Align=Center><Font Face=verdana Size=2 Color="#000000">Aktualisierung</td>
160 <td width=70 Align=Center><Font Face=verdana Size=2 Color="#000000">Temp.</td>
161 <td width=70 Align=Center><Font Face=verdana Size=2 Color="#000000">PH</td>
162 <td width=70 Align=Center><Font Face=verdana Size=2 Color="#000000">Redox</td>
163 </tr>
164
165 EOT
166
167 print FH
168 "<tr>
169 <td width=120 Align=Center><Font Face=verdana Size=2 Color=#000000><B> ",
170 $priv_data_block{'date'}{'day'}, ".",
171 $priv_data_block{'date'}{'month'}, ". ",
172 $priv_data_block{'date'}{'weekday'}, " ",
173 $priv_data_block{'date'}{'hour'}, ":",
174 $priv_data_block{'date'}{'minute'}, "\n";
175
176 print FH
177 "</td>
178 <td width=70 Align=Center><Font Face=verdana Size=2 Color=#000000><B>", $priv_data_block{'temp'}, "\n",
179 "</b></td>
180 <td width=70 Align=Center><Font Face=verdana Size=2 Color=#000000><B>", $priv_data_block{'pH'}, "\n",
181 "</b></td>
182 <td width=70 Align=Center><Font Face=verdana Size=2 Color=#000000><B>", $priv_data_block{'redox'}, "\n";
183
184 print FH
185 "</b></td>
186 </tr>
187 </table>
188 </td>
189 </tr>
190 </table>
191
192 </body>
193 ";
194
195 close (FH);
196
197 }
198
199 v

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed