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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide 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 joko 1.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