[LinuxFocus-icon]
<--  | �����  | �����  | ������  | �����

������� | ������ | ������ | ��� LF
��� �������� �������� �� ��������� ������: English  Castellano  Deutsch  Francais  Nederlands  Russian  Turkce  

Stefan Blechschmidt
����� Stefan Blechschmidt
<sb(at)sbsbavaria.de>

�� ������:

������ ������� ���������������, � ����� ���� � 1990 �� ������ ������� ������� CAD ��� ���������� ������������� � ����������� �������. ��������, � ��������� ����� ����������� "�������", � ��� ������ �������.



������� �� �������:
Peter Demidov <p_demidov(at)rambler.ru>

����������:

 

������������� ���������� � Linux (����� 2)

Titelbild

������:

� �������� �� ������ 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 �� ����� ����� �� �������� ��� ����� ���� ������� �������������� ������� � ������ ������.

Note:

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), �� ����������� ��� ������ ������� � ��.

�������� �������� :

������ Perl ��� ����� ���������� ����� ���� ������� � 'Comprehensive Perl Archive Network (CPAN, http://www.cpan.org/)' . � ��������� �������� ��������� � ������� ��� �:
http://www.pro-linux.de/news/2002/0070.html
���
http://www.linux-magazin.de/Artikel/ausgabe/1997/10/CPAN/cpan.html
.
#!/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 � CGI

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.

 

����������� �����

chart

������ ������� ��������� �� ����������� �����. ��������� (������ � ����� ������) ���������� ������� ������, ��� ������ �������� ����� ������ GD ������.

����� ����, ��������� ���������� CGI ������, ������� ��������� ������������ HTML-����� � Perl. � �������� ����� �� �������������� �������� ����� � Internet.

�������� � ���������. ��� �������� ������� ����� � ��� ������������. ���� ������������ ������������ �� SQL ������, ������ - �� �������.

������� ������ ����������� ������ ��� ������� � ������ ���������� �������������.

  1. ������������� ����� ��� X
  2. ������ ������� ������� (sensor0)
  3. ������ ������� ������� (sensor1)

��������� �������� ������ �������, ����� ������������ ������ ����������� �����.

 

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.

 

Download

 

������

 

�������� �������

� ������ ������� ���� �������� �������. �� ���� �������� �� ������ �������� ���� ����������� ��� ����������� ����������� ������ ���������
 talkback page 

<--, ������� � ��������� �������� �������

Webpages maintained by the LinuxFocus Editor team
© Stefan Blechschmidt, FDL
LinuxFocus.org
Translation information:
de --> -- : Stefan Blechschmidt <sb(at)sbsbavaria.de>
de --> en: Jürgen Pohl <sept.sapins(Q)verizon.net>
en --> ru: Peter Demidov <p_demidov(at)rambler.ru>

2004-08-06, generated by lfparser version 2.43