diff --git a/fhem/CHANGED b/fhem/CHANGED index e000ee0a3..a1ad57894 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,6 +1,7 @@ # 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. - SVN + - feature: configdb export added for data security (betateilchen) - feature: new module 38_netatmo.pm added (justme1968) - change: 09_CUL_FHTTK.pm: clean up code to avoid "Use of uninitialized value in concatenation.." diff --git a/fhem/FHEM/98_configdb.pm b/fhem/FHEM/98_configdb.pm index 30f0de195..5966bbc20 100644 --- a/fhem/FHEM/98_configdb.pm +++ b/fhem/FHEM/98_configdb.pm @@ -175,11 +175,20 @@ sub CommandConfigdb($$) { } when ('diff') { - return "Syntax: configdb diff " if @a != 3; + return "\n Syntax: configdb diff " if @a != 3; Log3('configdb', 4, "configdb: diff requested for device: $param1 in version $param2."); $ret = _cfgDB_Diff($param1, $param2); } + when ('export') { + return "\n Syntax: configdb export [version]" if @a <2; + $param2 = $param2 ? $param2 : 0; + my $logtext = "configDB: database backup started into file $param1"; + $logtext .= " for version $param2"; + Log3 ('configDB', 4, $logtext); + $ret = _cfgDB_Export($param1, $param2); + } + when ('info') { Log3('configdb', 4, "info requested."); $ret = _cfgDB_Info; @@ -193,13 +202,13 @@ sub CommandConfigdb($$) { } when ('migrate') { - return "Migration not possible. Already running with configDB!" if $configfile eq 'configDB'; + return "\n Migration not possible. Already running with configDB!" if $configfile eq 'configDB'; Log3('configdb', 4, "configdb: migration requested."); $ret = _cfgDB_Migrate; } when ('recover') { - return "Syntax: configdb recover " if @a != 2; + return "\n Syntax: configdb recover " if @a != 2; Log3('configdb', 4, "configdb: recover for version $param1 requested."); $ret = _cfgDB_Recover($param1); } @@ -386,6 +395,12 @@ compare device: telnetPort in current version 0 (left) to version: 1 (right) * 2|attr telnetPort room telnet * | | +--+--------------------------------------+--+--------------------------------------+ +
  • configdb export <targetFilename> [version];

  • + Exports specified version from config database into file <targetFilename>
    + Default version if not specified = 0
    + The target file can be imported again, if needed.
    +
    +
  • configdb info

  • Returns some database statistics
    @@ -623,6 +638,12 @@ compare device: telnetPort in current version 0 (left) to version: 1 (right)
     * 2|attr telnetPort room telnet           *  |                                      |
     +--+--------------------------------------+--+--------------------------------------+
    +
  • configdb export <zielDateiname> [version];

  • + Exportiert die angegebene Version aus der Konfigurationsdatenbank in die Datei <zielDateiname>
    + Standardversion, falls nicht angegeben = 0
    + Die Zieldatei kann später für die Wiederherstellung verwendet werden.
    +
    +
  • configdb info

  • Liefert eine Datenbankstatistik
    diff --git a/fhem/configDB.pm b/fhem/configDB.pm
    index 0a7deaeed..f3f2b0abb 100644
    --- a/fhem/configDB.pm
    +++ b/fhem/configDB.pm
    @@ -608,6 +608,34 @@ sub _cfgDB_Diff($$) {
     	return $ret;
     }
     
    +# backup database
    +sub _cfgDB_Export($$) {
    +	my ($filename,$version) = @_;
    +	my ($counter, $ret);
    +
    +	my $sql =	"select command,device,p1,p2 from fhemconfig".
    +						" as c join fhemversions as v ON v.versionuuid=c.versionuuid ".
    +						"WHERE v.version = '$version' ORDER BY command DESC";
    +
    +	my $fhem_dbh = _cfgDB_Connect;
    +	my $sth=$fhem_dbh->prepare( $sql );
    +	$sth->execute();
    +
    +	open( FILE, ">./$filename" );
    +	while ( my $row = $sth->fetchrow_arrayref ) {
    +		$counter++;
    +		print FILE join( "|", @$row ), "\n";
    +	}
    +	close ( FILE );
    +
    +	$sth->finish();
    +	$fhem_dbh->disconnect();
    +
    +	$ret  = "\n $counter records exported ";
    +	$ret .= "from version $version ";
    +	$ret .= "to $filename";
    +}
    +
     1;
     
     =pod