| 1 |
joko |
1.1 |
#!/usr/bin/perl |
| 2 |
|
|
|
| 3 |
|
|
# $Id$ |
| 4 |
|
|
# $Log$ |
| 5 |
|
|
|
| 6 |
|
|
|
| 7 |
|
|
use CGI::Carp qw(fatalsToBrowser); |
| 8 |
|
|
|
| 9 |
|
|
# Konfiguration |
| 10 |
|
|
$cfg_SeriellerPort = '/dev/ttyS1'; |
| 11 |
|
|
|
| 12 |
|
|
use Device::SerialPort qw( :PARAM :STAT 0.07 ); |
| 13 |
|
|
|
| 14 |
|
|
$PortName = $cfg_SeriellerPort; |
| 15 |
|
|
|
| 16 |
|
|
$PortObj = new Device::SerialPort ($PortName, $quiet) |
| 17 |
|
|
|| die "Can't open $PortName: $^E\n"; # $quiet is |
| 18 |
|
|
|
| 19 |
|
|
# configuring |
| 20 |
|
|
|
| 21 |
|
|
$PortObj->user_msg(ON); |
| 22 |
|
|
$PortObj->baudrate(9600); |
| 23 |
|
|
$PortObj->databits(8); |
| 24 |
|
|
$PortObj->parity("none"); |
| 25 |
|
|
$PortObj->stopbits(1); |
| 26 |
|
|
$PortObj->handshake("none"); |
| 27 |
|
|
|
| 28 |
|
|
$PortObj->write_settings || undef $PortObj; |
| 29 |
|
|
|
| 30 |
|
|
# $PortObj->save($Configuration_File_Name); |
| 31 |
|
|
# $PortObj->baudrate(300); |
| 32 |
|
|
# $PortObj->restart($Configuration_File_Name); # back to 9600 baud |
| 33 |
|
|
|
| 34 |
|
|
|
| 35 |
|
|
# operating |
| 36 |
|
|
|
| 37 |
|
|
# temporäre Variablen initialisieren |
| 38 |
|
|
|
| 39 |
|
|
$data_put = "41\r"; |
| 40 |
|
|
|
| 41 |
|
|
|
| 42 |
|
|
|
| 43 |
|
|
|
| 44 |
|
|
# Zeitvariablen initialisieren |
| 45 |
|
|
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat, |
| 46 |
|
|
$Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time); |
| 47 |
|
|
my $CTIME_String = localtime(time); |
| 48 |
|
|
$Monat+=1; |
| 49 |
|
|
$Jahrestag+=1; |
| 50 |
|
|
$Monat = $Monat < 10 ? $Monat = "0".$Monat : $Monat; |
| 51 |
|
|
$Monatstag = $Monatstag < 10 ? $Monatstag = "0".$Monatstag : $Monatstag; |
| 52 |
|
|
$Stunden = $Stunden < 10 ? $Stunden = "0".$Stunden : $Stunden; |
| 53 |
|
|
$Minuten = $Minuten < 10 ? $Minuten = "0".$Minuten : $Minuten; |
| 54 |
|
|
$Sekunden = $Sekunden < 10 ? $Sekunden = "0".$Sekunden : $Sekunden; |
| 55 |
|
|
$Jahr+=1900; |
| 56 |
|
|
my @Wochentage = ("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"); |
| 57 |
|
|
my @Monatsnamen = ("","Januar","Februar","März","April","Mai","Juni", |
| 58 |
|
|
"Juli","August","September","Oktober","November","Dezember"); |
| 59 |
|
|
|
| 60 |
|
|
|
| 61 |
|
|
#print $Jahrestag; |
| 62 |
|
|
|
| 63 |
|
|
my $Sekunden_time = time(); |
| 64 |
|
|
my $Stunden_time = int($Sekunden_time / 3600); |
| 65 |
|
|
my $Tage_time = int($Sekunden_time / (24 * 3600)); |
| 66 |
|
|
my $Wochen_time = int($Sekunden_time / (7 * 24 * 3600)); |
| 67 |
|
|
|
| 68 |
|
|
# Config Datei Lesen |
| 69 |
|
|
open(DATEI, "</tmp/futter.cfg") || die "Datei nicht gefunden"; |
| 70 |
|
|
my @Zeilen = <DATEI>; |
| 71 |
|
|
close(DATEI); |
| 72 |
|
|
|
| 73 |
|
|
$sek_calc = ($Zeilen[3] * 60); |
| 74 |
|
|
$wielangeher = ($Sekunden_time - $Zeilen[4]); |
| 75 |
|
|
$sec_nach_fuetterung = $wielangeher; |
| 76 |
|
|
|
| 77 |
|
|
$sec_noch = ($sec_nach_fuetterung - $sek_calc); |
| 78 |
|
|
|
| 79 |
|
|
$test1 = ($Sekunden_time - ($Zeilen[4]+ $sek_calc)); |
| 80 |
|
|
if ($test1 lt 1 ) {$tester = 1} |
| 81 |
|
|
|
| 82 |
|
|
if ($Jahrestag > $Zeilen[0]) { $Zeilen[1] = "0\n" } |
| 83 |
|
|
|
| 84 |
|
|
|
| 85 |
|
|
if ($Jahrestag => $Zeilen[0]) { |
| 86 |
|
|
|
| 87 |
|
|
|
| 88 |
|
|
if ($Stunden > 7) { |
| 89 |
|
|
|
| 90 |
|
|
|
| 91 |
|
|
if ($Stunden < 22) { |
| 92 |
|
|
|
| 93 |
|
|
|
| 94 |
|
|
if ($Zeilen[1] < $Zeilen[2]) { |
| 95 |
|
|
|
| 96 |
|
|
if ($tester != 1) { |
| 97 |
|
|
|
| 98 |
|
|
|
| 99 |
|
|
## Fuettern ## |
| 100 |
|
|
$count_out = $PortObj ->write($data_put); |
| 101 |
|
|
warn "write failed\n" unless ($count_out); |
| 102 |
|
|
warn "write incomplete\n" if ( $count_out != length($data_put) ); |
| 103 |
|
|
$data_out = $PortObj->write_done(0); |
| 104 |
|
|
|
| 105 |
|
|
$data_put = "40\r"; |
| 106 |
|
|
sleep(1); |
| 107 |
|
|
|
| 108 |
|
|
$count_out = $PortObj ->write($data_put); |
| 109 |
|
|
warn "write failed\n" unless ($count_out); |
| 110 |
|
|
warn "write incomplete\n" if ( $count_out != length($data_put) ); |
| 111 |
|
|
$data_out = $PortObj->write_done(0); |
| 112 |
|
|
## Ende Fuettern ## |
| 113 |
|
|
|
| 114 |
|
|
print "Location: http://www.axquarium.de/kunden/axquarium/d2u.nsf/futter?OpenForm&Query=Füttere%20!\n\n"; |
| 115 |
|
|
|
| 116 |
|
|
$Zeilen[1] = ($Zeilen[1] +1)."\n"; |
| 117 |
|
|
$Zeilen[4] = "$Sekunden_time\n"; |
| 118 |
|
|
$Zeilen[0] = "$Jahrestag\n"; |
| 119 |
|
|
|
| 120 |
|
|
open(DATEI, ">/tmp/futter.cfg") || die "Datei nicht gefunden"; |
| 121 |
|
|
print DATEI @Zeilen; |
| 122 |
|
|
close(DATEI); |
| 123 |
|
|
|
| 124 |
|
|
} else { |
| 125 |
|
|
|
| 126 |
|
|
print "Location: http://www.axquarium.de/kunden/axquarium/d2u.nsf/futter?OpenForm&Query=Die%20letze%20Fütterung%20ist%20"; |
| 127 |
|
|
|
| 128 |
|
|
my $Sekundenzahl = $sec_nach_fuetterung; |
| 129 |
|
|
sub zeitformat{ |
| 130 |
|
|
my $Sekundenzahl = shift; |
| 131 |
|
|
$Sekundenzahl = abs($Sekundenzahl); |
| 132 |
|
|
printf "%d Tage %02d:%02d:%02d", |
| 133 |
|
|
$Sekundenzahl/24/60/60,($Sekundenzahl/60/60)%24,($Sekundenzahl/60)%60,$Sekundenzahl%60; |
| 134 |
|
|
} |
| 135 |
|
|
zeitformat($Sekundenzahl); |
| 136 |
|
|
print " Stunden her.<br>In "; |
| 137 |
|
|
|
| 138 |
|
|
my $Sekundenzahl2 = $sec_noch; |
| 139 |
|
|
sub zeitformat2{ |
| 140 |
|
|
my $Sekundenzahl2 = shift; |
| 141 |
|
|
$Sekundenzahl2 = abs($Sekundenzahl2); |
| 142 |
|
|
printf "%d Tagen %02d:%02d:%02d", |
| 143 |
|
|
$Sekundenzahl2/24/60/60,($Sekundenzahl2/60/60)%24,($Sekundenzahl2/60)%60,$Sekundenzahl2%60; |
| 144 |
|
|
} |
| 145 |
|
|
zeitformat2($Sekundenzahl2); |
| 146 |
|
|
print "%20Stunden%20kann%20wieder%20gefüttert%20werden.\n\n"; |
| 147 |
|
|
|
| 148 |
|
|
} |
| 149 |
|
|
} else { |
| 150 |
|
|
chomp($Zeilen[2]); |
| 151 |
|
|
chomp($Zeilen[1]); |
| 152 |
|
|
print "Location: http://www.axquarium.de/kunden/axquarium/d2u.nsf/futter?OpenForm&Query=Heute%20schon%20"; |
| 153 |
|
|
print "$Zeilen[2] mal%20gefüttert.<br>Maximal%20"; |
| 154 |
|
|
print "$Zeilen[2]"; |
| 155 |
|
|
print "%20Fütterungen%20täglich%20erlaubt.\n\n"; |
| 156 |
|
|
|
| 157 |
|
|
# print "Location: http://www.axquarium.de/kunden/axquarium/d2u.nsf/futter?OpenForm&Query=Nach 22 Uhr sind die Fische schon im Bett.\n\n"; |
| 158 |
|
|
} |
| 159 |
|
|
} else { |
| 160 |
|
|
print "Location: http://www.axquarium.de/kunden/axquarium/d2u.nsf/futter?OpenForm&Query=Nach 22 Uhr sind die Fische schon im Bett.\n\n"; |
| 161 |
|
|
} |
| 162 |
|
|
} else { |
| 163 |
|
|
print "Location: http://www.axquarium.de/kunden/axquarium/d2u.nsf/futter?OpenForm&Query=Vor 8 Uhr schlafen die Fische noch.\n\n"; |
| 164 |
|
|
} |
| 165 |
|
|
} else { |
| 166 |
|
|
print "Location: http://www.axquarium.de/kunden/axquarium/d2u.nsf/futter?OpenForm&Query=Gepeichert ist die Jahreszahl $Zeilen[0] Heute ist Jahrestag:$Jahrestag\n\n"; |
| 167 |
|
|
#print "Gepeichert ist die Jahreszahl $Zeilen[0] Heute ist Jahrestag:$Jahrestag<br>\n"; |
| 168 |
|
|
} |
| 169 |
|
|
#print '<br><br><br><img src="/axquarium/webcam/pic/image.jpg" alt="Futterbild"><br>', "\n"; |
| 170 |
|
|
#print "Bitte F5 druecken um das Bild zu aktualisieren.<br>\n"; |
| 171 |
|
|
#print "CTIME:$CTIME_String<br>\n"; |
| 172 |
|
|
#print '</p></body></html>', "\n"; |
| 173 |
|
|
#print "\n\n"; |
| 174 |
|
|
v |