80. home.pl

CGI script for a simple home-webserver


#!/usr/bin/perl 
#REMOTE@ chi /var/www/cgi-bin/home.pl
use strict;
use CGI;
use POSIX qw(strftime);

my $datafile='/var/www/data/kaku/data';
my $codefile='/var/www/data/kaku/codes';

my %crons;
my $display='switch';

if (open (my $DATA, "<", $datafile)){
    while (<$DATA>){
        chomp;
        (my $key,my $value)=split ',';
        $crons{$key}=$value;
    }
    close $DATA;
}
my $query = CGI->new();
print $query->header( "text/html" );
print $query->start_html(
    -title   => "Home", 
    -style   => "http://chi.home/kaku.css",
    -meta    => {
        viewport => 'width=device-width,initial-scale=1,user-scalable=yes'
    }
);

my $debugout;

my $action='none';
my @lines ;

my %codes;
my %codelist;
if (open (my $CODES, "<", $codefile)){
    while (<$CODES>){
        chomp;
        s/#.*//;
        my @a=/;/g;
        if ( scalar @a == 2){

            (my $key,my $name,my $list)=split ';';
            $codes{$key}=$name;
            $codelist{$key}=$list;
        }

    }
    close $CODES;
}
else {
    print "

No code file

";

}

# read form data

my %params=$query->Vars;

if ($params{"display"} ne ''){
        $display=$params{"display"};
}
if ($params{"clock"} ne ''){
        $display='clock';
}
if ($params{"switch"} ne ''){
        $display='switch';
}

for my $k (keys %codes){
    if ($params{"aan$k"} ne ''){
            $action="aan$k";
            $display='switch';
    }
    if ($params{"uit$k"} ne ''){
            $action="uit$k";
            $display='switch';
    }
    for (my $i=0; $i<24; $i++){
        if ($params{"c$i$k"} ne ''){
            $action="c$i$k";
            $display='clock';
        }
    }
}
#
if ($action =~ /aan(..*)/) {
    my $key=$1;
    my @list=split(',',$codelist{$key});
    for (@list){
        system ("logger KAKU  $_ 1 on");
        system ("newkaku $_ 1 on | logger 2>&1");
    }
}
elsif ($action =~ /uit(..*)/) {
    my $key=$1;
    my @list=split(',',$codelist{$key});
    for (@list){
        system ("logger KAKU  $_ 1 off");
        system ("newkaku $_ 1 off | logger 2>&1");
    }
}
elsif ($action =~/^c/){
    for my $k (sort (keys %codes)){
        my $hr;
        if (exists ($crons{$k})){
            if ($action =~ /c([0-9]*)$k/){
                $hr=$1;
                if ($crons{$k}=~/on$hr;/){
                    $crons{$k}=~s/on$hr;/off$hr;/;
                }
                elsif ($crons{$k}=~/off$hr;/){
                    $crons{$k}=~s/off$hr;//;
                }
                else {
                    $crons{$k}="$crons{$k}on$hr;";
                }
            }
        }
    }
}


if (open (my $DATA, ">", $datafile)){
    for my $k (sort (keys %codes)){
        print $DATA "$k,$crons{$k}\n";
    }
    close $DATA;
}

#
# provide the output
#
#
#
#
print $query->h1( "Klik Aan, Klik Uit" );
print "\n";
print $query->hr;
print $query->start_form;
print $query->submit(
    -name    => "switch",
    -value   => 'switch',
    -class   => 'tab',
);
print $query->submit(
    -name    => "clock",
    -value   => 'clock',
    -class   => 'tab',
);
print $query->hidden(
    -name    => 'display',
    -value   => $display,
);
if ($display eq 'switch'){
    print "";
    print "\n";
    for my $k (sort (keys %codes)){
        print "    \n        $codes{$k}\n        ";
        print $query->submit(
            -name    => "aan$k",
            -value   => 'aan',
            -class   => 'onoff',
        );
        print "\n        ";
        print $query->submit(
            -name    => "uit$k",
            -value   => 'uit',
            -class   => 'onoff',
        );
        print "\n    \n";
    }
    print "";
    #
}
elsif ($display eq 'clock'){
    print "";
    print "\n";
    for my $k (sort (keys %codes)){
        print "    \n        \n        \n        \n    \n";
    }
    print "
$codes{$k}";
        for (my $i=0; $i<24;$i++){
            print "
";
            my $style;
            $style='cron';
            if ($crons{$k}=~/on$i;/){
                $style='cronon';
            }
            if ($crons{$k}=~/off$i;/){
                $style='cronoff';
            }
            print $query->submit(
                -name    => "c$i$k",
                -value   => "$i",
                -class   => $style,
            );
        }
        print "
";

    #
    
    
}
print $debugout;
print $query->end_html;