diff --git a/fhem/CHANGED b/fhem/CHANGED index 2f28b0956..ff02d5951 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Do not insert empty lines here, update check depends on it. + - update: 98_DOIFtools: add CSRF-Token - bugfix: 38_netatmo.pm: fixed login crash, updated webhooks - update: 32_withings.pm: replaced with new module - feature: 5.8 released diff --git a/fhem/FHEM/98_DOIFtools.pm b/fhem/FHEM/98_DOIFtools.pm index 8e4c1e60f..4dd218004 100644 --- a/fhem/FHEM/98_DOIFtools.pm +++ b/fhem/FHEM/98_DOIFtools.pm @@ -199,6 +199,7 @@ sub DOIFtools_Initialize($) $data{FWEXT}{"/DOIFtools_logWrapper"}{CONTENTFUNC} = "DOIFtools_logWrapper"; my $oldAttr = "target_room:noArg target_group:noArg executeDefinition:noArg executeSave:noArg eventMonitorInDOIF:noArg readingsPrefix:noArg"; + # DOIFtoolsLogDir $hash->{AttrList} = "DOIFtoolsExecuteDefinition:1,0 DOIFtoolsTargetRoom DOIFtoolsTargetGroup DOIFtoolsExecuteSave:1,0 DOIFtoolsReadingsPrefix DOIFtoolsEventMonitorInDOIF:1,0 DOIFtoolsHideModulShortcuts:1,0 DOIFtoolsHideGetSet:1,0 DOIFtoolsMyShortcuts:textField-long DOIFtoolsMenuEntry:1,0 DOIFtoolsHideStatReadings:1,0 DOIFtoolsEventOnDeleted:1,0 DOIFtoolsEMbeforeReadings:1,0 DOIFtoolsNoLookUp:1,0 DOIFtoolsNoLookUpInDOIF:1,0 disabledForIntervals ".$oldAttr; } @@ -211,7 +212,7 @@ sub DOIFtools_eM($$$$) { $ret .= $DOIFtoolsJSfuncStart if (!AttrVal($dtn[0],"DOIFtoolsNoLookUpInDOIF","")); # Event Monitor my $a0 = ReadingsVal($d,".eM", "off") eq "on" ? "off" : "on"; - $ret .= "

Event monitor: toggle  "; + $ret .= "

Event monitor: toggle  "; $ret .= "
"; my $a = ""; @@ -312,15 +313,15 @@ sub DOIFtools_fhemwebFn($$$$) { } # Event Monitor my $a0 = ReadingsVal($d,".eM", "off") eq "on" ? "off" : "on"; - $ret .= "

Event monitor: toggle  "; + $ret .= "

Event monitor: toggle  "; $ret .= "Shortcuts: " if (!AttrVal($d,"DOIFtoolsHideModulShortcuts",0) or AttrVal($d,"DOIFtoolsMyShortcuts","")); if (!AttrVal($d,"DOIFtoolsHideModulShortcuts",0)) { - $ret .= "reload DOIFtools  " if(ReadingsVal($d,".debug","")); - $ret .= "update check  "; - $ret .= "update  " if(!ReadingsVal($d,".debug","")); - $ret .= "update  " if(ReadingsVal($d,".debug","")); - $ret .= "shutdown restart  "; - $ret .= "fheminfo send  "; + $ret .= "reload DOIFtools  " if(ReadingsVal($d,".debug","")); + $ret .= "update check  "; + $ret .= "update  " if(!ReadingsVal($d,".debug","")); + $ret .= "update  " if(ReadingsVal($d,".debug","")); + $ret .= "shutdown restart  "; + $ret .= "fheminfo send  "; } if (AttrVal($d,"DOIFtoolsMyShortcuts","")) { my @sc = split(",",AttrVal($d,"DOIFtoolsMyShortcuts","")); @@ -328,7 +329,7 @@ sub DOIFtools_fhemwebFn($$$$) { if ($sc[$i] =~ m/^\#\#(.*)/) { $ret .= "$1  "; } else { - $ret .= "$sc[$i]  " if($sc[$i] and $sc[$i+1]); + $ret .= "$sc[$i]  " if($sc[$i] and $sc[$i+1]); } } } @@ -337,24 +338,30 @@ sub DOIFtools_fhemwebFn($$$$) { my $a1 = ReadingsVal($d,"doStatistics", "disabled") =~ "disabled|deleted" ? "enabled" : "disabled"; my $a2 = ReadingsVal($d,"specialLog", 0) ? 0 : 1; # set doStatistics enabled/disabled - $ret .= "
- + $ret .= " + "; + $ret .= FW_hidden("fwcsrf", $defs{$FW_wname}{CSRFTOKEN}) if($FW_CSRF); + $ret .= "
 doStatistics $a1 
"; # set doStatistics deleted - $ret .= "
- + $ret .= " + "; + $ret .= FW_hidden("fwcsrf", $defs{$FW_wname}{CSRFTOKEN}) if($FW_CSRF); + $ret .= "
 doStatistics deleted 
"; # set specialLog 0/1 - $ret .= "
- + $ret .= " + "; + $ret .= FW_hidden("fwcsrf", $defs{$FW_wname}{CSRFTOKEN}) if($FW_CSRF); + $ret .= "
 specialLog $a2 
@@ -855,7 +862,7 @@ sub DOIFtools_Define($$$) return "Only one instance of DOIFtools is allowed per FHEM installation. Delete the old one first."; } $hash->{STATE} = "initialized"; - $hash->{logfile} = AttrVal("global","logdir","./log/")."$hash->{TYPE}Log-%Y-%j.log"; + $hash->{logfile} = AttrVal($pn,"DOIFtoolsLogDir",AttrVal("global","logdir","./log/"))."$hash->{TYPE}Log-%Y-%j.log"; DOIFtoolsCounterReset($pn); return undef; } @@ -893,6 +900,18 @@ sub DOIFtools_Attr(@) } } + } elsif ($init_done and $attr eq "DOIFtoolsLogDir") { + if ($cmd eq "set") { + if ($value and -d $value) { + $value =~ m,^(.*)/$,; + return "Path \"$value\" needs a final slash." if (!$1); + $hash->{logfile} = "$value$hash->{TYPE}Log-%Y-%j.log"; + } else { + return "\"$value\" is not a valid directory"; + } + } elsif ($cmd eq "del" or !$value) { + $hash->{logfile} = AttrVal("global","logdir","./log/")."$hash->{TYPE}Log-%Y-%j.log"; + } } elsif ($init_done and $attr eq "DOIFtoolsHideStatReadings") { DOIFtoolsSetNotifyDev($hash,1,0); DOIFtoolsDeleteStatReadings($hash); @@ -1109,7 +1128,7 @@ sub DOIFtools_Get($@) $regex = join("|",@regex).":.*"; if (AttrVal($pn,"DOIFtoolsExecuteDefinition","")) { push @ret, "Create device $pnLog.\n"; - $ret = CommandDefMod(undef,"$pnLog FileLog ".AttrVal("global","logdir","./log/")."$pnLog-%Y-%j.log $regex"); + $ret = CommandDefMod(undef,"$pnLog FileLog ".InternalVal($pn,"logfile","./log/$pnLog-%Y-%j.log")." $regex"); push @ret, $ret if($ret); $ret = CommandAttr(undef,"$pnLog mseclog ".AttrVal($pnLog,"mseclog","1")); push @ret, $ret if($ret); @@ -1125,7 +1144,7 @@ sub DOIFtools_Get($@) } else { $ret = "Definition for a FileLog prepared for import with \"Raw definition\":\r--->\r"; $ret = "Die FileLog-Definition ist zum Import mit \"Raw definition\"vorbereitet:\r--->\r" if ($DE); - $ret .= "defmod $pnLog FileLog ".AttrVal("global","logdir","./log/")."$pnLog-%Y-%j.log $regex\r"; + $ret .= "defmod $pnLog FileLog ".InternalVal($pn,"logfile","./log/$pnLog-%Y-%j.log")." $regex\r"; $ret .= "attr $pnLog mseclog 1\r<---\r\r"; return $ret; }