############################################## # $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 .= '
'; } } $resultString .= $tempString; $actRowLength += length($tempString); if (scalar(@stringParts) > 0) { $resultString .= ' '; $actRowLength += 1; } } if ($resultString eq '') { return ' '; } else { return $resultString; } } # Weitere Subroutinen 1;