##############################################
# $Id: 99_myUtils.pm 5555 2014-08-27 14:13:59Z klaushuyke $
package main;
use strict;
use warnings;
use POSIX;
use Time::Local;
use HTML::Entities;
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
sub
Abfalltermine ($)
{
my ($Ereignis) = @_;
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
my @uids=split(/;/,$Ereignisteil1);
my $t = time;
my $dtPapier = '';
my $dtGelberSack = '';
my $dtRest = '';
my $dtBio = '';
my $dayDiff = 0;
my $dtBeda = '';
foreach my $uid (@uids) {
my $Kalendertext = fhem("get Abfall summary $uid");
if ($Kalendertext =~ /Papiertonne/) {
my $dt = fhem("get Abfall start $uid");
my @SplitDt = split(/ /,$dt);
my @SplitDate = split(/\./,$SplitDt[0]);
my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
if ($dtPapier eq '' || ($eventDate < $dtPapier && $eventDate > $t))
{
$dtPapier = $eventDate;
Log(3, $dtPapier);
}
};
if ($Kalendertext =~ /Gelber Sack/) {
my $dt = fhem("get Abfall start $uid");
my @SplitDt = split(/ /,$dt);
my @SplitDate = split(/\./,$SplitDt[0]);
my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
if ($dtGelberSack eq '' || ($eventDate < $dtGelberSack && $eventDate > $t))
{
$dtGelberSack = $eventDate;
}
};
if ($Kalendertext =~ /Restmüll/) {
my $dt = fhem("get Abfall start $uid");
my @SplitDt = split(/ /,$dt);
my @SplitDate = split(/\./,$SplitDt[0]);
my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
if ($dtRest eq '' || ($eventDate < $dtRest && $eventDate > $t))
{
$dtRest = $eventDate;
}
};
if ($Kalendertext =~ /Bio/) {
my $dt = fhem("get Abfall start $uid");
my @SplitDt = split(/ /,$dt);
my @SplitDate = split(/\./,$SplitDt[0]);
my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
if ($dtBio eq '' || ($eventDate < $dtBio && $eventDate > $t))
{
$dtBio = $eventDate;
}
};
if ($Kalendertext =~ /Pater Beda/) {
my $dt = fhem("get Abfall start $uid");
my @SplitDt = split(/ /,$dt);
my @SplitDate = split(/\./,$SplitDt[0]);
my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
if ($dtBeda eq '' || ($eventDate < $dtBeda && $eventDate > $t))
{
$dtBeda = $eventDate;
}
};
$dayDiff = floor(($dtPapier - $t) / 60 / 60 / 24 + 1);
if ($dayDiff >= 0) {
fhem("set Papiertonne $dayDiff");
}
$dayDiff = floor(($dtGelberSack - $t) / 60 / 60 / 24 + 1);
if ($dayDiff >= 0) {
fhem("set GelberSack $dayDiff");
}
$dayDiff = floor(($dtRest - $t) / 60 / 60 / 24 + 1);
if ($dayDiff >= 0) {
fhem("set Restmuell $dayDiff");
}
$dayDiff = floor(($dtBio - $t) / 60 / 60 / 24 + 1);
if ($dayDiff >= 0) {
fhem("set Bio $dayDiff");
}
$dayDiff = floor(($dtBeda - $t) / 60 / 60 / 24 + 1);
if ($dayDiff >= 0) {
fhem("set Pater_Beda $dayDiff");
}
}
}
#### Log-abriss vermeiden
# called by
# define addLog notify addLog {addLog("ez_Aussensensor","state");addLog("ez_FHT","actuator");\
# addLog("MunichWeather","humidity");addLog("MunichWeather","pressure");\
# addLog("MunichWeather","temperature");addLog("MunichWeather","wind_chill");}
# define a_midnight1 at *23:59 trigger addLog
# define a_midnight2 at *00:01 trigger addLog
sub
addLog($$) {
my ($logdevice, $reading) = @_; # device and reading to be used
my $logentry = ReadingsVal($logdevice,$reading,"addLog: invalid reading");
if ($reading =~ m,state,i) {
fhem "trigger $logdevice $logentry << addLog";
} else {
fhem "trigger $logdevice $reading: $logentry << addLog";
}
}
sub BM_MotionHandling($$){
my($device, $event) = @_;
return if($attr{$device}{subType} ne "motionDetector");
my $ResetAT = $device."_Reset";
if($event eq "motion") {
# Bewegung erkannt, erstelle AT um Status wieder zurückzusetzen
if (defined($defs{$ResetAT})) {
fhem "modify ".$ResetAT." +00:05:00 {BM_MotionHandling(\"$device\", \"scanning\")}";
} else {
fhem "define ".$ResetAT." at +00:05:00 {BM_MotionHandling(\"$device\", \"scanning\")}";
}
} elsif($event eq "scanning") {
# Status des Devices wieder zurücksetzen
readingsSingleUpdate($defs{$device}, "state", $event, 1);
}
}
###################################################
### Spritpreisübersicht - Farbsortierung ###
###################################################
sub Werte($$) {
my ($name, $wert) = @_;
# Log(3,"$name $wert");
if ($name eq "Diesel") {
return 'style="color:red"' if($wert >= 1.39);
return 'style="color:blue"' if(($wert >= 1.33) && ($wert < 1.39));
return 'style="color:green;;font-weight:bold"' if($wert <= 1.32);
}elsif ($name eq "SuperE10") {
return 'style="color:crimson"' if($wert >= 1.70);
return 'style="color:yellow"' if(($wert >= 1.55) && ($wert < 1.70));
return 'style="color:lightgreen;;font-weight:bold"' if($wert < 1.55);
}elsif ($name eq "SuperE5") {
return 'style="color:red"' if($wert >= 1.59);
return 'style="color:blue"' if(($wert >= 1.49) && ($wert < 1.59));
return 'style="color:green;;font-weight:bold"' if($wert <= 1.48);
}
}
sub time2dec($){
my ($h,$m,$s) = split(":", shift);
$m = 0 if(!$m);
$s = 0 if(!$s);
my $t = $m * 60;
$t += $s;
$t /= 3600;
$t += $h;
return ($t)
}
sub dec2hms($){
my ($t) = @_;
my $h = int($t);
my $r = ($t - $h)*3600;
my $m = int($r/60);
my $s = $r - $m*60;
return sprintf("%02d:%02d:%02d",$h,$m,$s);
}
sub
wrapLine($$)
{
my ($string, $maxLength) = @_;
$string = decode_entities($string);
my @stringParts = split(/ /, $string);
my $actRowLength = 0;
my $resultString = '';
while (scalar(@stringParts) > 0) {
my $tempString = shift @stringParts;
if ($actRowLength > 0)
{
if (($actRowLength + length($tempString)) > $maxLength)
{
$actRowLength = 0;
$resultString .= '<br>';
}
}
$resultString .= $tempString;
$actRowLength += length($tempString);
if (scalar(@stringParts) > 0)
{
$resultString .= ' ';
$actRowLength += 1;
}
}
if ($resultString eq '')
{
return ' ';
}
else
{
return $resultString;
}
}
# Weitere Subroutinen
1;