98_Hyperion.pm: changed modul specific sets to device specific sets
git-svn-id: https://svn.fhem.de/fhem/trunk@11947 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
@@ -27,7 +27,6 @@ my %Hyperion_sets =
|
|||||||
"dim" => "slider,0,1,100",
|
"dim" => "slider,0,1,100",
|
||||||
"dimDown" => "noArg",
|
"dimDown" => "noArg",
|
||||||
"dimUp" => "noArg",
|
"dimUp" => "noArg",
|
||||||
"configFile" => "textField",
|
|
||||||
"correction" => "textField",
|
"correction" => "textField",
|
||||||
"clear" => "textField",
|
"clear" => "textField",
|
||||||
"clearall" => "noArg",
|
"clearall" => "noArg",
|
||||||
@@ -49,8 +48,8 @@ my %Hyperion_sets =
|
|||||||
my $Hyperion_webCmd = "rgb:effect:mode:toggle:on:off";
|
my $Hyperion_webCmd = "rgb:effect:mode:toggle:on:off";
|
||||||
my $Hyperion_webCmd_config = "rgb:effect:configFile:mode:toggle:on:off";
|
my $Hyperion_webCmd_config = "rgb:effect:configFile:mode:toggle:on:off";
|
||||||
|
|
||||||
my $Hyperion_homebridgeMapping = "On=state,subtype=TV.Licht,valueOn=/rgb.*/,cmdOff=off,cmdOn=mode+rgb " .
|
my $Hyperion_homebridgeMapping = "On=state,subtype=TV.Licht,valueOn=/rgb.*/,cmdOff=off,cmdOn=mode+rgb ".
|
||||||
"On=state,subtype=Umgebungslicht,valueOn=clearall,cmdOff=off,cmdOn=clearall " .
|
"On=state,subtype=Umgebungslicht,valueOn=clearall,cmdOff=off,cmdOn=clearall ".
|
||||||
"On=state,subtype=Effekt,valueOn=/effect.*/,cmdOff=off,cmdOn=mode+effect ";
|
"On=state,subtype=Effekt,valueOn=/effect.*/,cmdOff=off,cmdOn=mode+effect ";
|
||||||
# "On=state,subtype=Knight.Rider,valueOn=/.*Knight_rider/,cmdOff=off,cmdOn=effect+Knight_rider " .
|
# "On=state,subtype=Knight.Rider,valueOn=/.*Knight_rider/,cmdOff=off,cmdOn=effect+Knight_rider " .
|
||||||
# "On=configFile,subtype=Eingang.HDMI,valueOn=hyperion-hdmi,cmdOff=configFile+hyperion,cmdOn=configFile+hyperion-hdmi ";
|
# "On=configFile,subtype=Eingang.HDMI,valueOn=hyperion-hdmi,cmdOff=configFile+hyperion,cmdOn=configFile+hyperion-hdmi ";
|
||||||
@@ -92,6 +91,7 @@ sub Hyperion_Define($$)
|
|||||||
$hash->{STATE} = "Initialized";
|
$hash->{STATE} = "Initialized";
|
||||||
$hash->{IP} = $host;
|
$hash->{IP} = $host;
|
||||||
$hash->{PORT} = $port;
|
$hash->{PORT} = $port;
|
||||||
|
$hash->{helper}{sets} = join(" ",map {"$_:$Hyperion_sets{$_}"} keys %Hyperion_sets);
|
||||||
$interval = undef unless defined($interval);
|
$interval = undef unless defined($interval);
|
||||||
$interval = 5 if ($interval < 5);
|
$interval = 5 if ($interval < 5);
|
||||||
RemoveInternalTimer($hash);
|
RemoveInternalTimer($hash);
|
||||||
@@ -125,6 +125,14 @@ sub Hyperion_list2array($$)
|
|||||||
return \@arr;
|
return \@arr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub Hyperion_isLocal($)
|
||||||
|
{
|
||||||
|
my ($hash) = @_;
|
||||||
|
my $ip = $hash->{IP};
|
||||||
|
return 1 if ($ip eq "localhost" || $ip eq "127.0.0.1");
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
sub Hyperion_Get($@)
|
sub Hyperion_Get($@)
|
||||||
{
|
{
|
||||||
my ($hash,$name,$cmd) = @_;
|
my ($hash,$name,$cmd) = @_;
|
||||||
@@ -218,6 +226,7 @@ sub Hyperion_ParseHttpResponse($$$)
|
|||||||
my ($param,$err,$result) = @_;
|
my ($param,$err,$result) = @_;
|
||||||
my $hash = $param->{hash};
|
my $hash = $param->{hash};
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
|
my %Hyperion_sets_local = %Hyperion_sets;
|
||||||
Log3 $name,5,"$name: url ".$param->{url}." returned: $result";
|
Log3 $name,5,"$name: url ".$param->{url}." returned: $result";
|
||||||
if (!defined($err))
|
if (!defined($err))
|
||||||
{
|
{
|
||||||
@@ -233,19 +242,6 @@ sub Hyperion_ParseHttpResponse($$$)
|
|||||||
#################
|
#################
|
||||||
|
|
||||||
|
|
||||||
$attr{$name}{alias} = "Ambilight" if (!defined($attr{$name}{alias}));
|
|
||||||
$attr{$name}{devStateIcon} = '{(Hyperion_devStateIcon($name),"toggle")}' if (!defined($attr{$name}{devStateIcon}));
|
|
||||||
$attr{$name}{group} = "colordimmer" if (!defined($attr{$name}{group}));
|
|
||||||
$attr{$name}{homebridgeMapping} = $Hyperion_homebridgeMapping if (!defined($attr{$name}{homebridgeMapping}));
|
|
||||||
$attr{$name}{icon} = "light_led_stripe_rgb" if (!defined($attr{$name}{icon}));
|
|
||||||
$attr{$name}{lightSceneParamsToSave} = "state" if (!defined($attr{$name}{lightSceneParamsToSave}));
|
|
||||||
$attr{$name}{room} = "Hyperion" if (!defined($attr{$name}{room}));
|
|
||||||
$attr{$name}{userattr} = "lightSceneParamsToSave" if (!defined($attr{$name}{userattr}) && index($attr{"global"}{userattr},"lightSceneParamsToSave") == -1);
|
|
||||||
$attr{$name}{userattr} = "lightSceneParamsToSave ".$attr{$name}{userattr} if (defined($attr{$name}{userattr}) && index($attr{$name}{userattr},"lightSceneParamsToSave") == -1 && index($attr{"global"}{userattr},"lightSceneParamsToSave") == -1);
|
|
||||||
$attr{$name}{userattr} = "homebridgeMapping" if (!defined($attr{$name}{userattr}) && index($attr{"global"}{userattr},"homebridgeMapping") == -1);
|
|
||||||
$attr{$name}{userattr} = "homebridgeMapping ".$attr{$name}{userattr} if (defined($attr{$name}{userattr}) && index($attr{$name}{userattr},"homebridgeMapping") == -1 && index($attr{"global"}{userattr},"homebridgeMapping") == -1);
|
|
||||||
$attr{$name}{webCmd} = $Hyperion_webCmd if (!defined($attr{$name}{webCmd}) || (defined($attr{$name}{webCmd}) && $attr{$name}{webCmd} eq $Hyperion_webCmd_config));
|
|
||||||
$attr{$name}{webCmd} = $Hyperion_webCmd_config if (!defined($attr{$name}{webCmd}) || (defined($attr{$name}{webCmd}) && $Hyperion_sets{configFile} ne "textField" && $attr{$name}{webCmd} eq $Hyperion_webCmd));
|
|
||||||
readingsBeginUpdate($hash);
|
readingsBeginUpdate($hash);
|
||||||
my $adj = $data->{adjustment}->[0];
|
my $adj = $data->{adjustment}->[0];
|
||||||
my $cl = $data->{clearall};
|
my $cl = $data->{clearall};
|
||||||
@@ -276,17 +272,31 @@ sub Hyperion_ParseHttpResponse($$$)
|
|||||||
my $prio = undef;
|
my $prio = undef;
|
||||||
if (length ($effectList) > 0)
|
if (length ($effectList) > 0)
|
||||||
{
|
{
|
||||||
$Hyperion_sets{effect} = $effectList;
|
$Hyperion_sets_local{effect} = $effectList;
|
||||||
}
|
}
|
||||||
if (defined($configs))
|
if (defined($configs))
|
||||||
{
|
{
|
||||||
$Hyperion_sets{configFile} = $configs;
|
$Hyperion_sets_local{configFile} = $configs;
|
||||||
$attr{$name}{webCmd} = $Hyperion_webCmd_config if (!defined($attr{$name}{webCmd}) || AttrVal($name,"webCmd","") eq $Hyperion_webCmd);
|
$attr{$name}{webCmd} = $Hyperion_webCmd_config if (!defined($attr{$name}{webCmd}) || AttrVal($name,"webCmd","") eq $Hyperion_webCmd);
|
||||||
}
|
}
|
||||||
$prio = $data->{priorities}->[0]->{priority} if ($data->{priorities}->[0]->{priority});
|
$attr{$name}{alias} = "Ambilight" if (!defined($attr{$name}{alias}));
|
||||||
|
$attr{$name}{devStateIcon} = '{(Hyperion_devStateIcon($name),"toggle")}' if (!defined($attr{$name}{devStateIcon}));
|
||||||
|
$attr{$name}{group} = "colordimmer" if (!defined($attr{$name}{group}));
|
||||||
|
$attr{$name}{homebridgeMapping} = $Hyperion_homebridgeMapping if (!defined($attr{$name}{homebridgeMapping}));
|
||||||
|
$attr{$name}{icon} = "light_led_stripe_rgb" if (!defined($attr{$name}{icon}));
|
||||||
|
$attr{$name}{lightSceneParamsToSave} = "state" if (!defined($attr{$name}{lightSceneParamsToSave}));
|
||||||
|
$attr{$name}{room} = "Hyperion" if (!defined($attr{$name}{room}));
|
||||||
|
$attr{$name}{userattr} = "lightSceneParamsToSave" if (!defined($attr{$name}{userattr}) && index($attr{"global"}{userattr},"lightSceneParamsToSave") == -1);
|
||||||
|
$attr{$name}{userattr} = "lightSceneParamsToSave ".$attr{$name}{userattr} if (defined($attr{$name}{userattr}) && index($attr{$name}{userattr},"lightSceneParamsToSave") == -1 && index($attr{"global"}{userattr},"lightSceneParamsToSave") == -1);
|
||||||
|
$attr{$name}{userattr} = "homebridgeMapping" if (!defined($attr{$name}{userattr}) && index($attr{"global"}{userattr},"homebridgeMapping") == -1);
|
||||||
|
$attr{$name}{userattr} = "homebridgeMapping ".$attr{$name}{userattr} if (defined($attr{$name}{userattr}) && index($attr{$name}{userattr},"homebridgeMapping") == -1 && index($attr{"global"}{userattr},"homebridgeMapping") == -1);
|
||||||
|
$attr{$name}{webCmd} = $Hyperion_webCmd if (!defined($attr{$name}{webCmd}) || (defined($attr{$name}{webCmd}) && !defined($Hyperion_sets_local{configFile})));
|
||||||
|
$attr{$name}{webCmd} = $Hyperion_webCmd_config if (defined($attr{$name}{webCmd}) && defined($Hyperion_sets_local{configFile}) && $attr{$name}{webCmd} eq $Hyperion_webCmd);
|
||||||
|
$hash->{helper}{sets} = join(" ",map {"$_:$Hyperion_sets_local{$_}"} keys %Hyperion_sets_local);
|
||||||
$hash->{hostname} = $data->{hostname} if ((defined($data->{hostname}) && !defined($hash->{hostname})) || (defined($data->{hostname}) && $hash->{hostname} ne $data->{hostname}));
|
$hash->{hostname} = $data->{hostname} if ((defined($data->{hostname}) && !defined($hash->{hostname})) || (defined($data->{hostname}) && $hash->{hostname} ne $data->{hostname}));
|
||||||
$hash->{build_version} = $data->{hyperion_build}->[0]->{version} if ((defined($data->{hyperion_build}->[0]->{version}) && !defined($hash->{build_version})) || (defined($data->{hyperion_build}->[0]->{version}) && $hash->{build_version} ne $data->{hyperion_build}->[0]->{version}));
|
$hash->{build_version} = $data->{hyperion_build}->[0]->{version} if ((defined($data->{hyperion_build}->[0]->{version}) && !defined($hash->{build_version})) || (defined($data->{hyperion_build}->[0]->{version}) && $hash->{build_version} ne $data->{hyperion_build}->[0]->{version}));
|
||||||
$hash->{build_time} = $data->{hyperion_build}->[0]->{time} if ((defined($data->{hyperion_build}->[0]->{time}) && !defined($hash->{build_time})) || (defined($data->{hyperion_build}->[0]->{time}) && $hash->{build_time} ne $data->{hyperion_build}->[0]->{time}));
|
$hash->{build_time} = $data->{hyperion_build}->[0]->{time} if ((defined($data->{hyperion_build}->[0]->{time}) && !defined($hash->{build_time})) || (defined($data->{hyperion_build}->[0]->{time}) && $hash->{build_time} ne $data->{hyperion_build}->[0]->{time}));
|
||||||
|
$prio = $data->{priorities}->[0]->{priority} if ($data->{priorities}->[0]->{priority});
|
||||||
readingsBulkUpdate($hash,"priority",$prio) if (defined($prio) && $prio ne ReadingsVal($name,"priority",""));
|
readingsBulkUpdate($hash,"priority",$prio) if (defined($prio) && $prio ne ReadingsVal($name,"priority",""));
|
||||||
readingsBulkUpdate($hash,"adjustRed",$adjR) if ($adjR ne ReadingsVal($name,"adjustRed",""));
|
readingsBulkUpdate($hash,"adjustRed",$adjR) if ($adjR ne ReadingsVal($name,"adjustRed",""));
|
||||||
readingsBulkUpdate($hash,"adjustGreen",$adjG) if ($adjG ne ReadingsVal($name,"adjustGreen",""));
|
readingsBulkUpdate($hash,"adjustGreen",$adjG) if ($adjG ne ReadingsVal($name,"adjustGreen",""));
|
||||||
@@ -386,7 +396,7 @@ sub Hyperion_GetConfigs($)
|
|||||||
my $dir = AttrVal($name,"hyperionConfigDir","/etc/hyperion/");
|
my $dir = AttrVal($name,"hyperionConfigDir","/etc/hyperion/");
|
||||||
my $com = "ls $dir 2>/dev/null";
|
my $com = "ls $dir 2>/dev/null";
|
||||||
my @files;
|
my @files;
|
||||||
if ($ip eq "localhost" || $ip eq "127.0.0.1")
|
if (Hyperion_isLocal($hash))
|
||||||
{
|
{
|
||||||
@files = Hyperion_listFilesInDir($hash,$com);
|
@files = Hyperion_listFilesInDir($hash,$com);
|
||||||
}
|
}
|
||||||
@@ -403,16 +413,15 @@ sub Hyperion_GetConfigs($)
|
|||||||
{
|
{
|
||||||
my $configs = join(",",@files);
|
my $configs = join(",",@files);
|
||||||
readingsSingleUpdate($hash,".configs",$configs,1) if (ReadingsVal($name,".configs","") ne $configs);
|
readingsSingleUpdate($hash,".configs",$configs,1) if (ReadingsVal($name,".configs","") ne $configs);
|
||||||
$Hyperion_sets{configFile} = $configs;
|
|
||||||
$attr{$name}{webCmd} = $Hyperion_webCmd_config if (AttrVal($name,"webCmd","") eq $Hyperion_webCmd);
|
$attr{$name}{webCmd} = $Hyperion_webCmd_config if (AttrVal($name,"webCmd","") eq $Hyperion_webCmd);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fhem("deletereading $name .configs") if (defined(ReadingsVal($name,".configs",undef)));
|
fhem("deletereading $name .configs") if (defined(ReadingsVal($name,".configs",undef)));
|
||||||
$Hyperion_sets{configFile} = "textField" if ($Hyperion_sets{configFile} ne "textField");
|
|
||||||
$attr{$name}{webCmd} = $Hyperion_webCmd if (AttrVal($name,"webCmd","") eq $Hyperion_webCmd_config);
|
$attr{$name}{webCmd} = $Hyperion_webCmd if (AttrVal($name,"webCmd","") eq $Hyperion_webCmd_config);
|
||||||
}
|
}
|
||||||
# fhem("trigger WEB JS:location.reload(true)");
|
# fhem("trigger WEB JS:location.reload(true)");
|
||||||
|
Hyperion_GetUpdate($hash);
|
||||||
return "Found at least one config file. Please refresh this page to see the result.";
|
return "Found at least one config file. Please refresh this page to see the result.";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -461,6 +470,7 @@ sub Hyperion_Set($@)
|
|||||||
return "\"set $name\" needs at least one argument and maximum five arguments" if (scalar(@aa) < 1 || scalar(@aa) > 4);
|
return "\"set $name\" needs at least one argument and maximum five arguments" if (scalar(@aa) < 1 || scalar(@aa) > 4);
|
||||||
my $duration = (defined($args[1])) ? int($args[1]) : int(AttrVal($name,"hyperionDefaultDuration",0));
|
my $duration = (defined($args[1])) ? int($args[1]) : int(AttrVal($name,"hyperionDefaultDuration",0));
|
||||||
my $priority = (defined($args[2])) ? int($args[2]) : int(AttrVal($name,"hyperionDefaultPriority",0));
|
my $priority = (defined($args[2])) ? int($args[2]) : int(AttrVal($name,"hyperionDefaultPriority",0));
|
||||||
|
my $sets = $hash->{helper}{sets};
|
||||||
my %obj;
|
my %obj;
|
||||||
Log3 $name,4,"$name: Hyperion_Set cmd: $cmd" if (defined($cmd));
|
Log3 $name,4,"$name: Hyperion_Set cmd: $cmd" if (defined($cmd));
|
||||||
Log3 $name,4,"$name: Hyperion_Set value: $value" if (defined($value) && $value ne "");
|
Log3 $name,4,"$name: Hyperion_Set value: $value" if (defined($value) && $value ne "");
|
||||||
@@ -477,7 +487,7 @@ sub Hyperion_Set($@)
|
|||||||
my $command = $sudo."killall $bin; sleep 1; ".$sudo."$binpath $confdir$value > /dev/null 2>&1 &";
|
my $command = $sudo."killall $bin; sleep 1; ".$sudo."$binpath $confdir$value > /dev/null 2>&1 &";
|
||||||
my $status;
|
my $status;
|
||||||
my $fh;
|
my $fh;
|
||||||
if ($ip eq "localhost" || $ip eq "127.0.0.1")
|
if (Hyperion_isLocal($hash))
|
||||||
{
|
{
|
||||||
if (open($fh,"$command|"))
|
if (open($fh,"$command|"))
|
||||||
{
|
{
|
||||||
@@ -505,7 +515,7 @@ sub Hyperion_Set($@)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Log3 $name,4,"$name: NOT restarted Hyperion with $binpath $confdir$value,status: $status";
|
Log3 $name,4,"$name: NOT restarted Hyperion with $binpath $confdir$value, status: $status";
|
||||||
readingsSingleUpdate($hash,"serverResponse","ERROR: $status",1);
|
readingsSingleUpdate($hash,"serverResponse","ERROR: $status",1);
|
||||||
return "$name: NOT restarted Hyperion with $binpath $confdir$value,status: $status";
|
return "$name: NOT restarted Hyperion with $binpath $confdir$value,status: $status";
|
||||||
}
|
}
|
||||||
@@ -694,7 +704,7 @@ sub Hyperion_Set($@)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return SetExtensions($hash,join(" ",map {"$_:$Hyperion_sets{$_}"} keys %Hyperion_sets),$name,@aa) ;
|
return SetExtensions($hash,$sets,$name,@aa) ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user