diff --git a/fhem/CHANGED b/fhem/CHANGED index d74fe9bc0..792155560 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. + - feature: 98_weekprofile: new command import_profile - bugfix: 98_weekprofile: html output for command get associations - bugfix: msgSchema: change Typo LGTV_WebOS - bugfix: 88_HMCCU: Fixed next/return bug diff --git a/fhem/FHEM/98_weekprofile.pm b/fhem/FHEM/98_weekprofile.pm index 509a53957..6ca9789e2 100644 --- a/fhem/FHEM/98_weekprofile.pm +++ b/fhem/FHEM/98_weekprofile.pm @@ -551,6 +551,31 @@ sub weekprofile_refreshSendDevList($) return undef; } +############################################## +sub weekprofile_receiveList($) +{ + my ($hash) = @_; + my $me = $hash->{NAME}; + + my @rcvList = (); + + foreach my $d (keys %defs) + { + next if ($defs{$d}{NAME} eq $me); + + my $module = $defs{$d}{TYPE}; + + my %sndHash; + @sndHash{@DEVLIST_SEND}=(); + next if (!exists $sndHash{$module}); + + my $type = weekprofile_getDeviceType($me, $defs{$d}{NAME}); + next if (!defined($type)); + push @rcvList, $defs{$d}{NAME}; + } + return @rcvList; +} + ############################################## sub weekprofile_assignDev($) { @@ -1102,7 +1127,7 @@ sub weekprofile_Set($$@) my ($topic, $name) = weekprofile_splitName($me, $params[0]); - return "Error topics not enabled" if (!$useTopics && ($topic ne 'default')); + return "Error topics not enabled" if (!$useTopics && ($topic ne 'default')); my ($delprf,$idx) = weekprofile_findPRF($hash,$name,$topic,0); return "Error unknown profile $params[0]" unless($delprf); @@ -1160,6 +1185,43 @@ sub weekprofile_Set($$@) return "Error reading master profile"; } } + + #---------------------------------------------------------- + my @rcvList = weekprofile_receiveList($hash); + $list.= " import_profile:" if(@rcvList > 0); + foreach my $rcvDev (@rcvList) { + $list.=$rcvDev.","; + } + $list = substr($list, 0, -1) if (@rcvList > 0); + if ($cmd eq 'import_profile') { + return 'usage: import_profile [name]' if(@params < 1); + my $device = $params[0]; + my $type = weekprofile_getDeviceType($me, $device); + if (!defined($type)) { + Log3 $me, 2, "$me(Set): device $device not supported or defined"; + return "Error device $device not supported or defined"; + } + my ($topic, $name) = ('default', $device); + ($topic, $name) = weekprofile_splitName($me, $params[1]) if(@params == 2); + return "Error topics not enabled" if (!$useTopics && ($topic ne 'default')); + + my $devPrf = weekprofile_readDevProfile($device,$type,$me); + my $prf = {}; + $prf->{NAME} = $name; + $prf->{TOPIC} = $topic; + + if(defined($devPrf)) { + $prf->{DATA} = $devPrf; + } else { + Log3 $me, 2, "device $device has no week profile"; + return "Error device $device has no week profile"; + } + + Log3 $me, 3, "profile $topic:$name from $device imported"; + push @{$hash->{PROFILES}} , $prf; + weekprofile_updateReadings($hash); + return undef; + } $list =~ s/ $//; return "Unknown argument $cmd, choose one of $list"; @@ -1617,6 +1679,10 @@ sub weekprofile_getEditLNK_MasterDev($$)
  • reread_master
    Refresh (reread) the master profile from the master device.
  • +
  • import_profile
    + set <name> import_profile <device> <[profilename]>
    + Importing a profile from a supported device +
  • @@ -1797,6 +1863,10 @@ sub weekprofile_getEditLNK_MasterDev($$)
  • reread_master
    Aktualisiert das master profile indem das 'Master-Geräte' neu ausgelesen wird.
  • +
  • import_profile
    + set <name> import_profile <device> <[profilename]>
    + Profil von einem Gerät importieren. +