From 12aa7c71ef2da8b14fd1931d79e6114876020478 Mon Sep 17 00:00:00 2001 From: betateilchen <> Date: Sun, 22 May 2016 16:21:33 +0000 Subject: [PATCH] configDB: new command configdb dump added git-svn-id: https://svn.fhem.de/fhem/trunk@11494 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 2 ++ fhem/FHEM/98_configdb.pm | 26 ++++++++++++++++++++++++++ fhem/configDB.pm | 6 ++++++ 3 files changed, 34 insertions(+) diff --git a/fhem/CHANGED b/fhem/CHANGED index 896d62a53..03f72d018 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +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. + - feature: configDB: new command 'configdb dump' added. + currently only supported for sqlite! - bugfix: FB_CALLLIST: fix not working calllist when renaming the configured FB_CALLMONITOR definition. - feature: 10_SOMFY : Added readingFnAttributes diff --git a/fhem/FHEM/98_configdb.pm b/fhem/FHEM/98_configdb.pm index 5ec22c7b1..8559199a0 100644 --- a/fhem/FHEM/98_configdb.pm +++ b/fhem/FHEM/98_configdb.pm @@ -5,6 +5,7 @@ package main; use strict; use warnings; use feature qw/say switch/; +use POSIX; use configDB; no if $] >= 5.017011, warnings => 'experimental'; @@ -57,6 +58,24 @@ sub CommandConfigdb($$) { } } + when ('dump') { + my $dbtype = _cfgDB_typeInfo(); + + if ($dbtype eq 'SQLITE') { + my $ts = strftime('%Y-%m-%d_%H-%M-%S',localtime); + my $target = AttrVal('global','modpath','.')."/log/configDB_$ts.dump.gz"; + Log3('configdb', 4, "configdb: target for database dump: $target"); + my $ret = qx(echo '.dump' | sqlite3 /opt/fhem/configDB.db | gzip -c > $target); + return $ret if $ret; # return error message if available + my $size = -s $target; + $ret = "configDB dumped $size bytes to file\n$target"; + # You can use 'zcat $target | sqlite3 configDB.db' in a terminal to restore database. + return $ret; + } else { + return "configdb dump is only supported for sqlite!"; + } + } + when ('diff') { return "\n Syntax: configdb diff " if @a != 3; Log3('configdb', 4, "configdb: diff requested for device: $param1 in version $param2."); @@ -184,6 +203,7 @@ sub CommandConfigdb($$) { $ret = "\n Syntax:\n". " configdb attr [attribute] [value]\n". " configdb diff \n". + " configdb dump\n". " configDB filedelete \n". " configDB fileimport \n". " configDB fileexport \n". @@ -385,6 +405,12 @@ compare device: telnetPort in current version 0 (left) to version: 1 (right) and UNSAVED version from memory (currently running installation).

+
  • configdb dump

  • + Create a dump file from from database.
    + Currently only supported for sqlite!
    +
    +
    +
  • configdb filedelete <Filename>

  • Delete file from database.

    diff --git a/fhem/configDB.pm b/fhem/configDB.pm index a7b17d240..b5a69e3cd 100644 --- a/fhem/configDB.pm +++ b/fhem/configDB.pm @@ -107,6 +107,8 @@ # # 2016-03-26 - added log entry for search (verbose=5) # +# 2016-05-22 - added configdb dump (for sqlite only!) +# ############################################################################## # @@ -151,6 +153,7 @@ sub _cfgDB_Filedelete($); sub _cfgDB_Fileexport($;$); sub _cfgDB_Filelist(;$); sub _cfgDB_Info(); +sub _cfgDB_typeInfo(); sub _cfgDB_Migrate(); sub _cfgDB_ReadCfg(@); sub _cfgDB_ReadState(@); @@ -817,6 +820,9 @@ sub _cfgDB_Info() { return join("\n", @r); } +# return database type +sub _cfgDB_typeInfo() { return $cfgDB_dbtype; } + # recover former config from database archive sub _cfgDB_Recover($) { my ($version) = @_;