From 626dfbbefea46be4fcea2349b572871aa6ed473a Mon Sep 17 00:00:00 2001 From: jpawlowski Date: Sun, 21 Aug 2016 23:41:05 +0000 Subject: [PATCH] 98_exportdevice.pm: new command exportdevice (Forum #56911) git-svn-id: https://svn.fhem.de/fhem/trunk@12044 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/FHEM/98_exportdevice.pm | 193 +++++++++++++++++++++++++++++++++++ fhem/HISTORY | 3 + fhem/MAINTAINER.txt | 3 +- 4 files changed, 199 insertions(+), 1 deletion(-) create mode 100755 fhem/FHEM/98_exportdevice.pm diff --git a/fhem/CHANGED b/fhem/CHANGED index f4c3da852..1542613fd 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. + - added: 98_exportdevice: new command to export device definitions - feature: 90_at: computeAfterInit attribute (Forum #56706) - change: 93_DbRep: fit to new commandref style - bugfix: 20_ROOMMATE,20_GUEST: Fixed wakeuptimer <> at-device sync diff --git a/fhem/FHEM/98_exportdevice.pm b/fhem/FHEM/98_exportdevice.pm new file mode 100755 index 000000000..3f3d2fc28 --- /dev/null +++ b/fhem/FHEM/98_exportdevice.pm @@ -0,0 +1,193 @@ +# $Id$ + +package main; +use strict; +use warnings; + +sub CommandExportdevice($$); + +######################################## +sub exportdevice_Initialize($$) { + my %hash = ( + Fn => "CommandExportdevice", + Hlp => "", + ); + $cmds{exportdevice} = \%hash; +} + +######################################## +sub CommandExportdevice($$) { + my ( $cl, $param ) = @_; + my @a = split( "[ \t][ \t]*", $param ); + my $quote = 0; + my $str = ""; + + return "Usage: exportdevice [devspec] [quote]" + if ( $a[0] eq "?" ); + + $quote = 1 + if ( $a[0] eq "quote" || $a[1] eq "quote" ); + + $a[0] = ".*" + if ( int(@a) < 1 || $a[0] eq "quote" ); + + my $mname = ""; + foreach my $dev ( devspec2array( $a[0], $cl ) ) { + next if ( !$defs{$dev} ); + + # module header (only once) + if ( $mname ne $defs{$dev}{TYPE} ) { + $mname = $defs{$dev}{TYPE}; + my $ver = fhem "version $defs{$dev}{TYPE}"; + $ver =~ s/\n\n+/\n# /g; + $ver =~ s/^/# /g; + $str .= "\n\n# TYPE: $defs{$dev}{TYPE}\n$ver\n\n"; + } + + # device definition + if ( $dev ne "global" ) { + my $def = $defs{$dev}{DEF}; + if ( defined($def) ) { + if ($quote) { + $def =~ s/;/;;/g; + $def =~ s/\n/\\\n/g; + } + $str .= "define $dev $defs{$dev}{TYPE} $def\n"; + } + else { + $str .= "define $dev $defs{$dev}{TYPE}\n"; + } + } + + # device attributes + foreach my $a ( + sort { + return -1 + if ( $a eq "userattr" ); # userattr must be first + return 1 if ( $b eq "userattr" ); + return $a cmp $b; + } keys %{ $attr{$dev} } + ) + { + next + if ( $dev eq "global" + && ( $a eq "configfile" || $a eq "version" ) ); + my $val = $attr{$dev}{$a}; + if ($quote) { + $val =~ s/;/;;/g; + $val =~ s/\n/\\\n/g; + } + $str .= "attr $dev $a $val\n"; + } + + $str .= "\n"; + } + + my $return; + $return = "#\n# Flat Export created by " + if ( !$quote ); + $return = "#\n# Quoted Export created by " + if ($quote); + + return + $return + . AttrVal( "global", "version", "fhem.pl:?/?" ) + . "\n# on " + . TimeNow() . "\n#" + . $str + if ( $str ne "" ); + return "No device found: $a[0]"; +} + +1; + +=pod +=item command +=item summary exports definition and attributes of devices +=item summary_DE exportiert die Definition und die Attribute von Geräten +=begin html + + +

exportdevice

+ + +=end html +=begin html_DE + + +

exportdevice

+ + +=end html_DE +=cut diff --git a/fhem/HISTORY b/fhem/HISTORY index f83805a26..a3b1d7a99 100644 --- a/fhem/HISTORY +++ b/fhem/HISTORY @@ -685,3 +685,6 @@ - Sun Aug 21 2016 (mike3436) - added new module 26_KM273 for buderus logatherm heat pump + +- Mon Aug 22 2016 (loredo) + - added new command exportdevice diff --git a/fhem/MAINTAINER.txt b/fhem/MAINTAINER.txt index d59f254c7..892e023a1 100644 --- a/fhem/MAINTAINER.txt +++ b/fhem/MAINTAINER.txt @@ -112,7 +112,7 @@ FHEM/21_OWSWITCH.pm pahenning/ntruchsess http://forum.fhem.de 1Wire FHEM/21_OWTEMP.pm mfr69bs http://forum.fhem.de 1Wire (deprecated) FHEM/21_OWTHERM.pm pahenning/ntruchsess http://forum.fhem.de 1Wire FHEM/21_SONOSPLAYER Reinerlein http://forum.fhem.de Multimedia -FHEM/22_ALL3076.pm sachag http://forum.fhem.de Snstiges +FHEM/22_ALL3076.pm sachag http://forum.fhem.de Sonstiges FHEM/23_ALL4027.pm sachag http://forum.fhem.de Sonstiges FHEM/23_KOSTALPIKO.pm john http://forum.fhem.de CodeSchnipsel FHEM/23_LUXTRONIK2.pm tupol http://forum.fhem.de Sonstiges (link als PM an tupol) @@ -355,6 +355,7 @@ FHEM/98_count.pm betateilchen http://forum.fhem.de Sonstiges FHEM/98_CustomReadings.pm HCS http://forum.fhem.de Unterstuetzende Dienste FHEM/98_dewpoint.pm Joachim http://forum.fhem.de Automatisierung FHEM/98_dummy.pm rudolfkoenig http://forum.fhem.de Automatisierung +FHEM/98_exportdevice.pm loredo http://forum.fhem.de Sonstiges FHEM/98_fheminfo.pm mfr69bs http://forum.fhem.de Sonstiges FHEM/98_help.pm betateilchen http://forum.fhem.de Sonstiges FHEM/98_HourCounter.pm john http://forum.fhem.de MAX