Hallo zusammen,
im Threat http://forum.fhem.de/index.php/topic,30873.msg234412.html#msg234412 (http://forum.fhem.de/index.php/topic,30873.msg234412.html#msg234412)
wurde das folgende Backupscript vorgestellt
{ `mkdir savedir` }
define backupCfg notify global:SAVE {\
my $now = TimeNow();; $now =~ s/ /_/g;; \
`cp $attr{global}{configfile} ./savedir/fhem.cfg.$now`;;\
`cp $attr{global}{statefile} ./savedir/fhem.state.$now`;;\
}
Ich habe das so übernommen, siehe Anhang bekomme aber die folgende Fehlermeldung
2015.03.19 11:15:06 3: backupCfg return value: Can't modify single ref constructor in scalar assignment at (eval 438143) line 1, at EOF
syntax error at (eval 438143) line 1, at EOF
Was läuft da schräg ?
Ich würd mal sagen, du hast einen Code, der fürs Config-File gedacht war, direkt in ein Def kopiert.
Nimm die ganzen Backslashes raus, dann klappts (gerade getestet).
{ my $now = TimeNow();; $now =~ s/ /_/g; `cp $attr{global}{configfile} ./savedir/fhem.cfg.$now`; `cp $attr{global}{statefile} ./savedir/fhem.state.$now`;}
lg, Ici
Mach mal die ganzen \ raus. Die braucht man nicht, wenn man im DEF des Devices arbeitet. Außerdem muss man dort in diesem Fall auch die ; nicht verdoppeln. So müsste es im DEF aussehen:
global:SAVE {
my $now = TimeNow();
$now =~ s/ /_/g;
`cp $attr{global}{configfile} ./savedir/fhem.cfg.$now`;
`cp $attr{global}{statefile} ./savedir/fhem.state.$now`;
}
Ich würde das ganze aber in eine sub in einer myUtils auslagern. Also so
global:SAVE {myBackup}
sub myBackup() {
my $now = TimeNow();
$now =~ s/ /_/g;
`cp $attr{global}{configfile} ./savedir/fhem.cfg.$now`;
`cp $attr{global}{statefile} ./savedir/fhem.state.$now`;
}
Danke Icinger, das wars