|
|
��� �������� �������� �� ��������� ������: English Castellano Deutsch Francais Nederlands Russian Turkce |
����� Stefan Blechschmidt <sb(at)sbsbavaria.de> �� ������: ������ ������� ���������������, � ����� ���� � 1990 �� ������ ������� ������� CAD ��� ���������� ������������� � ����������� �������. ��������, � ��������� ����� ����������� "�������", � ��� ������ �������. ������� �� �������: Peter Demidov <p_demidov(at)rambler.ru> ����������:
|
������������� ���������� � Linux (����� 2)������:
� �������� �� ������ 2003 ���� Temperature Monitoring With Linux � �������� �����, ������� ��������� �������� ������ � ����������� ����� Linux. ����� ������� ������ � �����������, �� ������ ��������� �� � ���� ������. ����� �������� ��������� ������ �� ���� ������ �� ����� ���������� ���������� ������ ����� web-���������. |
��������� ���������� ���������� ��� ������ ���� ����������� �� ����� ����������
��� �� ��������, ��� ������ ��� ������ ������������ ������������ Linux. ��� ���, ��� ���� �� ��������� � �����, ��� ����� ������� ����������� ;-)
� MySQL ��������� mysql ������������ ��������� ����
������. � ��������
mysql -u root -p mysql
�� �������������� � �������� MySQL.
� ���ޣ� -u
����� ������� ��� ������������. ����
-u
�������� ������, �, �������, ��, � ������� ����������
�����. � ����� ������ �� �������� �� MySQL Manager.
�� �������� ����������� mysql
>
��� ����� ������ SQL. ������� ��� ���������� ������,
������ ���� ������� ��������� � ��. �������
show tables;
������ ���.
mysql> show tables; +-----------------+ | Tables_in_mysql | +-----------------+ | columns_priv | | db | | func | | host | | tables_priv | | user | +-----------------+ 6 rows in set (0.00 sec)
������ ��� ���� ������� �� ��� ����� ������ � �����������.
� ������� ������� create database
digidb
�� ���������� ���� �� � ������ digidb �
�������� exit
�� �����
����� �� �������� ��� ����� ���� ������� �������������� �������
� ������ ������.
MySQL ����� ��������������, ������� � ����� ����������
root. ���������� �� ��������� �� ������� ������. ��������
mysqladmin -u root -p password geheim
�� ������ ������
��� ������������ root �� geheim.
����� �������������� ��� �����������, ������� ��������������
������ ���� ��������� �����, �� ������ ��� ��� ������ �������
mysqladmin -u root -p flush-privileges
. ������ ���
������������ root ���������� �������� ������ ��� ������
��������� � ��.
���� ������ ����� ������� ����� ������, ������, MySQL ���������� ������ ����������� ������ �������.
����� ������� ��� �� �������� ��������� ���� � ��������� SQL, �������� "<" � ������� mysql.
����� ��� �����������������, �� ����� ��������� ���� ��� �������� ������ ������� ��� ������� 0.
� ���� ����� sensor0.sql �� ������ ����� ������� �������� �������, ��� ����� ��������� ���.
CREATE TABLE sensor0 ( id int(11) NOT NULL auto_increment, monat char(3) NOT NULL default '', tag char(2) NOT NULL default '', dbtime timestamp(14) NOT NULL, zeit time NOT NULL default '00:00:00', messung decimal(4,2) NOT NULL default '0.00', PRIMARY KEY (id) ) TYPE=MyISAM;
��� ����� ������� ��� ������:
mysql -u digitemp -p digitemp
< sensor0.sql
��������� �� ���������� 2 �������, ��� ���������� ������ �����������
���� � �������� ������� CREATE TABLE
sensor0
�� CREATE TABLE
sensor1
.
��������, ��� ���� SQL ������ ����������� ����� ����� �������� ������������.
����� �������� ����� ��������� ������� �� ���������� �������:
echo 'show tables' | mysql -u
root -p digidb
, ������� ��� ����� �������� � ��������.
���� �� ������� ��� ��������� �� ������� �����:
Enter password: Tables_in_digidb sensor0 sensor1
��������� Perl-��������� ����� ���������� ������ � ���� ������. ��� ����� ����� ����������� ��� ������ ������ Perl (DBI), �� ����������� ��� ������ ������� � ��.
#!/usr/bin/perl -w # # Digitemp preparing of log file and saving in database # sbs 2003-08-09 # use DBI; use strict; # Initialize database my $datasource = "dbi:mysql:database=digidb"; my $user = "root"; my $pass = "geheim"; my $db = DBI->connect($datasource, $user, $pass) or "Verbindung zur Datenbank nicht möglich: " . $DBI::errstr; # Filtering of Digitemp while(<STDIN>) { chomp; # Skip output program name next if (m/Digi.*/); # Skip output blank line next if (m/^$/); # Skip all to Fahrenheit m/(.*).F.*/; my $templine = $1; # Divide temp line and save in variables my ($monat, $tag, $zeit, $sensor_txt, $sensor_nr, $grad_txt, $grad_wert) = split(/ /,$tempzeile); # Fill database $db->do( "insert into sensor$sensor_nr (monat, tag, zeit, messung) values ('$monat', '$tag', '$zeit','$grad_wert')") or die "do nicht möglich: " . $db->errstr(); }# END- Digitemp filter # close database $db->disconnect;
��������� �� ������ ����� �������, ��� ��������� ���� ������, ������ �����, ���������� �� digitemp, ��������������� ���, ��� ��� �� ���� � ����� ������ ������ � ���������� ������� ��.
����������� ���� ������ ������������ � ������� ������ ��������� ������ cron:
0-59/15 * * * * root /root/bin/digitemp -a | /root/bin/digipipe.pl
��� ��� ������ ����� ������, ������ � web-����������.
Perl ���������� ��� ��������������� ��������� ��� ���� ������.
��-������ ��� ���� ����� ����������, ��� Apache ������������
���� CGI ���������. �� ����� ����� � ���������������� ������
Apache. ����� ������ ����� ����
<Directory
/usr/lib/cgi-bin>
.
����� ���, ��� �� ������ � ����������� �������, �� ������ �������� ���������, ������� ��������� ��� ���������� �������������� �������.
���� �� ������� ��������� �� � ������ ����������;
��� ����� �������� ������� ���� ��������� �����������: chmod 755
programmname
.
��� ���������� ���������� ����� ��������� ������ � ���� �� � Perl-CGI ���������. ��� ����� ��������� ��� ������ SQL-�������.
#!/usr/bin/perl use DBI; use strict; # Initialize database my $datasource = "dbi:mysql:database=digidb"; my $user = "root"; my $pass = "geheim"; my $db = DBI->connect($datasource, $user, $pass) or "Verbindung zur Datenbank nicht möglich: " . $DBI::errstr; # database work parameter my $sql; my $sth; # Sensor work parameter my $temp; my $zeit; #Prepare HTML output print "Content-type: text/html\n\n"; # Output of individual sensors measurements $sql = "select messung, zeit from sensor$i order by id desc limit 1;"; $sth = $db->prepare($sql) or die "prepare nicht möglich"; $sth->execute() or die "execute nicht möglich"; ($temp, $zeit) = $sth->fetchrow_array(); $sth->finish(); print "<p>Temperatur Sensor$i: <b>[$temp]</b> $zeit</p>"; } # Close database $db->disconnect;
���� ������ �� ����� �������, �� ������ ������ ��������������� ��� ������ ����� ���� ��������� ��� ������ � Perl.
������ ������� ��������� �� ����������� �����. ��������� (������ � ����� ������) ���������� ������� ������, ��� ������ �������� ����� ������ GD ������.
����� ����, ��������� ���������� CGI ������, ������� ��������� ������������ HTML-����� � Perl. � �������� ����� �� �������������� �������� ����� � Internet.
�������� � ���������. ��� �������� ������� ����� � ��� ������������. ���� ������������ ������������ �� SQL ������, ������ - �� �������.
������� ������ ����������� ������ ��� ������� � ������ ���������� �������������.
��������� �������� ������ �������, ����� ������������ ������ ����������� �����.
�������, � ���� �������� ��� ��������� SQL ��������, ���������� ��� �������� ������� ��������� ����� �������.
select tag, monat, zeit, DATE_FORMAT(dbtime,'%Y-%c-%d %H:%i:%s') as dbtime, messung from sensor0 order by id desc limit 5;
select tag, monat, zeit, DATE_FORMAT(dbtime,'%Y-%c-%d %H:%i:%s') as dbtime, messung from sensor1 where YEAR(dbtime) = YEAR(NOW()) order by messung asc limit 1
select tag, monat, zeit, DATE_FORMAT(dbtime,'%Y-%c-%d %H:%i:%s') as dbtime, messung from sensor1 where YEAR(dbtime) = YEAR(NOW()) order by messung desc limit 1
select day, month, YEAR(dbtime) as Jahr, sum(messung)/count(*) as Durchschnitt from sensor1 where YEAR(dbtime) = YEAR(NOW()) and DAYOFMONTH(dbtime)= DAYOFMONTH(NOW()) and MONTHNAME(dbtime) = MONTHNAME(NOW()) group by DAYOFMONTH(dbtime)
���� ������ ��������, ��� ��� ������ - ������ ��������� �� Perl. ������-��, ��� �� ��������, � �����������, � �� ������ ��������������; ��� ��� ����� ��� ��� ��� ���-������ ���������� � ����� ��� ������ �����.
� �������, � ���� ���������� ���������� ��� ��������� �������� � ���� Perl, CGI � MySQL.
|
Webpages maintained by the LinuxFocus Editor team
© Stefan Blechschmidt, FDL LinuxFocus.org |
Translation information:
|
2004-08-06, generated by lfparser version 2.43