############################################## ### Gartenbewässerung ############################################## sub myGardenIrrigation($$){ #Christian Hoffmann #Version 1.2 my ($procedure, $configName) = @_; my $getMinutes; my $getRelay; my $getDevice; my $tmpTime = 0; my $pauseInMin = 1; my $log = ""; my $timestamp = time; #Konfigurationsdaten lesen my @config = split(/,/,Value('configGartenBewaesserung')); #Name des Gerätes an dem die Ventile angeschlossen sind my $ventilName = "RelaisGartenVentil"; #auslesen der Variablen und bereitstellen my $rain = Value($configName); my $read_jahreszeit = Value('Jahreszeit'); my $read_bewaesserung = Value('Bewaesserung'); my $read_RegenwarscheinlickeitProTag = Value('RegenwarscheinlickeitProTag'); my $read_beregnungsfrequenz = @config[4]+(@config[1]*5); #Wetterdaten generieren und auslesen myWeatherData(); #Prüfen ob die Variable procedure leer ist if($procedure eq "default"){ #Programmablauf if( $read_jahreszeit eq 'Sommer' && $read_bewaesserung eq 'Ja' && $read_RegenwarscheinlickeitProTag lt '@config[2]' && ($read_beregnungsfrequenz) <= $timestamp){ #Aktuelisiere Informationen @config[4] = time; #Auslesen und verarbeiten von BeregnungsdauerProSchlauch my @firstDim = split(/ /,$rain); for(my $i = 0; $i < @firstDim; $i++){ my @secondDim = split(/,/,@firstDim[$i]); for(my $j = 0; $j < @secondDim; $j++){ $getDevice = @secondDim[0]; $getRelay = @secondDim[1]; $getMinutes = @secondDim[2]; }#SeconDim #Sicherheitsschaltung - alles AUS bevor irgendetwas eingeschaltet wird. if( @config[0] == 'Ja'){ fhem(" define GARDENIRRIGATION_SECURITY_OFF_$getDevice$getRelay at +00:00:01 set $getDevice $getRelay off; "); #Schreibe Logfile wenn "Ja" (@config[3] eq "Ja")? myLogfile("Sicherheitsschaltung erfolgt für $getDevice$getRelay"):""; }#Sicherheitsschaltung my $genTime = myCalculateHours($getMinutes); fhem(" define GARDENIRRIGATION_ON_$getDevice$getRelay at +".myCalculateHours(($tmpTime+$pauseInMin))." set $getDevice $getRelay on; define GARDENIRRIGATION_OFF_$getDevice$getRelay at +".myCalculateHours(($tmpTime+$pauseInMin+$getMinutes))." set $getDevice $getRelay off; "); $tmpTime += ($i == 0)? 1: ($getMinutes+$pauseInMin); }#firstDim #Schreibe aktuelle Daten in die Config Variable zurück. fhem("set configGardenIrrigation @config[0],@config[1],@config[2],@config[3],@config[4]"); }#if }else{ #Einzelberegnung wurde aufgerufen #procedure auflösen my @vals = split(/_/,$procedure); if($configName eq "on"){ fhem(" define GARDENIRRIGATION_ON_$procedure at +00:00:01 set RelaisPumpe switch1 on; define GARDENIRRIGATION_ON_$ventilName at +00:00:03 set $ventilName switch@vals[1] on; "); }else{ fhem(" define GARDENIRRIGATION_OFF_$procedure at +00:00:01 set RelaisPumpe switch1 off; define GARDENIRRIGATION_OFF_$ventilName at +00:00:03 set $ventilName switch@vals[1] off; "); } } }#myGardenIrrigation ################################# sub myWeatherData(){ my $faktor; my $w1 = ReadingsVal("MeinWetter","fc0_weather",0); my $w2 = ReadingsVal("MeinWetter","fc0_weather06",0); my $w3 = ReadingsVal("MeinWetter","fc0_weather11",0); my $w4 = ReadingsVal("MeinWetter","fc0_weather17",0); my $w5 = ReadingsVal("MeinWetter","fc0_weather23",0); $faktor += ($w1 =~ m/leichter Reg/i)? 20: 0; $faktor += ($w2 =~ m/leichter Reg/i)? 20: 0; $faktor += ($w3 =~ m/leichter Reg/i)? 20: 0; $faktor += ($w4 =~ m/leichter Reg/i)? 20: 0; $faktor += ($w5 =~ m/leichter Reg/i)? 20: 0; my $regenwarscheinlichkeit = ($faktor > 0)? ((ReadingsVal("MeinWetter","fc0_chOfRain",0)) /100) * $faktor : (ReadingsVal("MeinWetter","fc0_chOfRain",0)); fhem("set RegenwarscheinlickeitProTag $regenwarscheinlichkeit"); return $regenwarscheinlichkeit; } ################################# sub myCalculateHours($){ my ($min) = @_; my $time = ""; my $stunden = 0; my $minuten = $min; ## Ist Min in der Vairable >= 60 dann rechne if($min >= 60){ $stunden = int(int($min)/int(60)); $minuten = int(int($min)%int(60)); } my $genH = (length($stunden) < 2 )? "0".$stunden : $stunden; my $genM = (length($minuten) < 2 )? "0".$minuten : $minuten; $time = $genH.":".$genM.":00"; return $time; } ############################################## ### Gartenbewässerung ENDE ##############################################