mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-03 16:56:54 +00:00
PHTV: simplify code and add new attributes device_id and auth_key
git-svn-id: https://svn.fhem.de/fhem/trunk@13390 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
420ade4a4a
commit
7d579dd715
@ -60,7 +60,7 @@ sub PHTV_Initialize($) {
|
||||
$hash->{UndefFn} = "PHTV_Undefine";
|
||||
|
||||
$hash->{AttrList} =
|
||||
"disable:0,1 timeout sequentialQuery:0,1 drippyFactor:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 inputs ambiHueLeft ambiHueRight ambiHueTop ambiHueBottom ambiHueLatency:150,200,250,300,350,400,450,500,550,600,650,700,750,800,850,900,950,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000 jsversion:1,5,6 macaddr:textField model wakeupCmd:textField channelsMax:slider,30,1,200 "
|
||||
"disable:0,1 timeout sequentialQuery:0,1 drippyFactor:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 inputs ambiHueLeft ambiHueRight ambiHueTop ambiHueBottom ambiHueLatency:150,200,250,300,350,400,450,500,550,600,650,700,750,800,850,900,950,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000 jsversion:1,5,6 macaddr:textField model wakeupCmd:textField channelsMax:slider,30,1,200 device_id auth_key "
|
||||
. $readingFnAttributes;
|
||||
|
||||
$data{RC_layout}{PHTV_SVG} = "PHTV_RClayout_SVG";
|
||||
@ -95,8 +95,7 @@ sub PHTV_GetStatus($;$) {
|
||||
my ( $hash, $update ) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
my $interval = $hash->{INTERVAL};
|
||||
my $sequential = ( defined( $attr{$name}{sequentialQuery} )
|
||||
&& $attr{$name}{sequentialQuery} == 1 ) ? 1 : 0;
|
||||
my $sequential = AttrVal( $name, "sequentialQuery", 0 );
|
||||
my $querySent = 0;
|
||||
|
||||
Log3 $name, 5, "PHTV $name: called function PHTV_GetStatus()";
|
||||
@ -108,7 +107,7 @@ sub PHTV_GetStatus($;$) {
|
||||
InternalTimer( gettimeofday() + $interval, "PHTV_GetStatus", $hash, 0 );
|
||||
|
||||
return
|
||||
if ( defined( $attr{$name}{disable} ) && $attr{$name}{disable} == 1 );
|
||||
if ( IsDisabled($name) );
|
||||
|
||||
# try to fetch only some information to check device availability
|
||||
if ( !$update ) {
|
||||
@ -198,8 +197,8 @@ sub PHTV_GetStatus($;$) {
|
||||
|
||||
# Input alias handling
|
||||
#
|
||||
if ( defined( $attr{$name}{inputs} ) ) {
|
||||
my @inputs = split( ':', $attr{$name}{inputs} );
|
||||
if ( AttrVal( $name, "inputs", "" ) ne "" ) {
|
||||
my @inputs = split( ':', AttrVal( $name, "inputs", ":" ) );
|
||||
|
||||
if (@inputs) {
|
||||
foreach (@inputs) {
|
||||
@ -253,7 +252,7 @@ sub PHTV_Set($@) {
|
||||
|
||||
Log3 $name, 5, "PHTV $name: called function PHTV_Set()";
|
||||
|
||||
return "No Argument given" if ( !defined( $a[1] ) );
|
||||
return "No Argument given" unless ( defined( $a[1] ) );
|
||||
|
||||
# depending on current FHEMWEB instance's allowedCommands,
|
||||
# restrict set commands if there is "set-user" in it
|
||||
@ -268,8 +267,8 @@ sub PHTV_Set($@) {
|
||||
}
|
||||
|
||||
# Input alias handling
|
||||
if ( defined( $attr{$name}{inputs} ) && $attr{$name}{inputs} ne "" ) {
|
||||
my @inputs = split( ':', $attr{$name}{inputs} );
|
||||
if ( AttrVal( $name, "inputs", "" ) ne "" ) {
|
||||
my @inputs = split( ':', AttrVal( $name, "inputs", ":" ) );
|
||||
$inputs_txt = "-," if ( $state ne "on" );
|
||||
|
||||
if (@inputs) {
|
||||
@ -434,7 +433,7 @@ sub PHTV_Set($@) {
|
||||
elsif ( lc( $a[1] ) eq "ambihue" ) {
|
||||
Log3 $name, 3, "PHTV set $name " . $a[1] . " " . $a[2];
|
||||
|
||||
return "No argument given" if ( !defined( $a[2] ) );
|
||||
return "No argument given" unless ( defined( $a[2] ) );
|
||||
|
||||
return "Device does not seem to support Ambilight"
|
||||
if ( ReadingsVal( $name, "ambiLEDBottom", 0 ) == 0
|
||||
@ -446,10 +445,10 @@ sub PHTV_Set($@) {
|
||||
if ( lc( $a[2] ) eq "on" ) {
|
||||
return
|
||||
"No configuration found. Please set ambiHue attributes first."
|
||||
if ( !defined( $attr{$name}{ambiHueLeft} )
|
||||
&& !defined( $attr{$name}{ambiHueRight} )
|
||||
&& !defined( $attr{$name}{ambiHueTop} )
|
||||
&& !defined( $attr{$name}{ambiHueBottom} ) );
|
||||
unless ( AttrVal( $name, "ambiHueLeft", undef )
|
||||
&& AttrVal( $name, "ambiHueRight", undef )
|
||||
&& AttrVal( $name, "ambiHueTop", undef )
|
||||
&& AttrVal( $name, "ambiHueBottom", undef ) );
|
||||
|
||||
# enable internal Ambilight color
|
||||
PHTV_SendCommand( $hash, "ambilight/mode",
|
||||
@ -476,7 +475,7 @@ sub PHTV_Set($@) {
|
||||
elsif ( lc( $a[1] ) eq "ambimode" ) {
|
||||
Log3 $name, 3, "PHTV set $name " . $a[1] . " " . $a[2];
|
||||
|
||||
return "No argument given" if ( !defined( $a[2] ) );
|
||||
return "No argument given" unless ( defined( $a[2] ) );
|
||||
|
||||
return "Device does not seem to support Ambilight"
|
||||
if ( ReadingsVal( $name, "ambiLEDBottom", 0 ) == 0
|
||||
@ -509,7 +508,7 @@ sub PHTV_Set($@) {
|
||||
elsif ( lc( $a[1] ) eq "ambipreset" ) {
|
||||
Log3 $name, 3, "PHTV set $name " . $a[1] . " " . $a[2];
|
||||
|
||||
return "No argument given" if ( !defined( $a[2] ) );
|
||||
return "No argument given" unless ( defined( $a[2] ) );
|
||||
|
||||
return "Device does not seem to support Ambilight"
|
||||
if ( ReadingsVal( $name, "ambiLEDBottom", 0 ) == 0
|
||||
@ -683,7 +682,7 @@ sub PHTV_Set($@) {
|
||||
elsif ( lc( $a[1] ) eq "rgb" ) {
|
||||
Log3 $name, 4, "PHTV set $name " . $a[1] . " " . $a[2];
|
||||
|
||||
return "No argument given" if ( !defined( $a[2] ) );
|
||||
return "No argument given" unless ( defined( $a[2] ) );
|
||||
|
||||
return "Device does not seem to support Ambilight"
|
||||
if ( ReadingsVal( $name, "ambiLEDBottom", 0 ) == 0
|
||||
@ -838,7 +837,7 @@ sub PHTV_Set($@) {
|
||||
elsif ( lc( $a[1] ) eq "hue" ) {
|
||||
Log3 $name, 3, "PHTV set $name " . $a[1] . " " . $a[2];
|
||||
|
||||
return "No argument given" if ( !defined( $a[2] ) );
|
||||
return "No argument given" unless ( defined( $a[2] ) );
|
||||
|
||||
return "Device does not seem to support Ambilight"
|
||||
if ( ReadingsVal( $name, "ambiLEDBottom", 0 ) == 0
|
||||
@ -846,19 +845,17 @@ sub PHTV_Set($@) {
|
||||
&& ReadingsVal( $name, "ambiLEDRight", 0 ) == 0
|
||||
&& ReadingsVal( $name, "ambiLEDTop", 0 ) == 0 );
|
||||
|
||||
if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
|
||||
if ( defined( $hash->{READINGS}{rgb}{VAL} )
|
||||
&& $hash->{READINGS}{rgb}{VAL} ne "" )
|
||||
{
|
||||
if ( ReadingsVal( $name, "state", "off" ) eq "on" ) {
|
||||
if ( ReadingsVal( $name, "rgb", "" ) ne "" ) {
|
||||
my $hsb;
|
||||
my $hex;
|
||||
if ( $a[2] =~ m/^\d+$/ && $a[2] >= 0 && $a[2] <= 65535 ) {
|
||||
$hsb = PHTV_hex2hsb( $hash->{READINGS}{rgb}{VAL} );
|
||||
$hsb = PHTV_hex2hsb( ReadingsVal( $name, "rgb", "" ) );
|
||||
$hex = PHTV_hsb2hex( $a[2], $hsb->{s}, $hsb->{b} );
|
||||
|
||||
Log3 $name, 4,
|
||||
"PHTV $name hue - old: "
|
||||
. $hash->{READINGS}{rgb}{VAL}
|
||||
. ReadingsVal( $name, "rgb", "" )
|
||||
. " new: $hex(h="
|
||||
. $a[2] . " s="
|
||||
. $hsb->{s} . " b="
|
||||
@ -881,43 +878,25 @@ sub PHTV_Set($@) {
|
||||
elsif ( lc( $a[1] ) eq "sat" ) {
|
||||
Log3 $name, 3, "PHTV set $name " . $a[1] . " " . $a[2];
|
||||
|
||||
return "No argument given" if ( !defined( $a[2] ) );
|
||||
return "No argument given" unless ( defined( $a[2] ) );
|
||||
|
||||
return "Device does not seem to support Ambilight"
|
||||
if (
|
||||
(
|
||||
!defined( $hash->{READINGS}{ambiLEDBottom}{VAL} )
|
||||
&& !defined( $hash->{READINGS}{ambiLEDLeft}{VAL} )
|
||||
&& !defined( $hash->{READINGS}{ambiLEDRight}{VAL} )
|
||||
&& !defined( $hash->{READINGS}{ambiLEDTop}{VAL} )
|
||||
)
|
||||
|| (
|
||||
(
|
||||
defined( $hash->{READINGS}{ambiLEDBottom}{VAL} )
|
||||
&& $hash->{READINGS}{ambiLEDBottom}{VAL} == 0
|
||||
)
|
||||
&& ( defined( $hash->{READINGS}{ambiLEDLeft}{VAL} )
|
||||
&& $hash->{READINGS}{ambiLEDLeft}{VAL} == 0 )
|
||||
&& ( defined( $hash->{READINGS}{ambiLEDRight}{VAL} )
|
||||
&& $hash->{READINGS}{ambiLEDRight}{VAL} == 0 )
|
||||
&& ( defined( $hash->{READINGS}{ambiLEDTop}{VAL} )
|
||||
&& $hash->{READINGS}{ambiLEDTop}{VAL} == 0 )
|
||||
)
|
||||
);
|
||||
if ( ReadingsVal( $name, "ambiLEDBottom", 0 ) == 0
|
||||
&& ReadingsVal( $name, "ambiLEDLeft", 0 ) == 0
|
||||
&& ReadingsVal( $name, "ambiLEDRight", 0 ) == 0
|
||||
&& ReadingsVal( $name, "ambiLEDTop", 0 ) == 0 );
|
||||
|
||||
if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
|
||||
if ( defined( $hash->{READINGS}{rgb}{VAL} )
|
||||
&& $hash->{READINGS}{rgb}{VAL} ne "" )
|
||||
{
|
||||
if ( ReadingsVal( $name, "state", "off" ) eq "on" ) {
|
||||
if ( ReadingsVal( $name, "rgb", "" ) ne "" ) {
|
||||
my $hsb;
|
||||
my $hex;
|
||||
if ( $a[2] =~ m/^\d+$/ && $a[2] >= 0 && $a[2] <= 255 ) {
|
||||
$hsb = PHTV_hex2hsb( $hash->{READINGS}{rgb}{VAL} );
|
||||
$hsb = PHTV_hex2hsb( ReadingsVal( $name, "rgb", "" ) );
|
||||
$hex = PHTV_hsb2hex( $hsb->{h}, $a[2], $hsb->{b} );
|
||||
|
||||
Log3 $name, 4,
|
||||
"PHTV $name sat - old: "
|
||||
. $hash->{READINGS}{rgb}{VAL}
|
||||
. ReadingsVal( $name, "rgb", "" )
|
||||
. " new: $hex(h="
|
||||
. $hsb->{h} . " s="
|
||||
. $a[2] . " b="
|
||||
@ -940,43 +919,25 @@ sub PHTV_Set($@) {
|
||||
elsif ( lc( $a[1] ) eq "bri" ) {
|
||||
Log3 $name, 3, "PHTV set $name " . $a[1] . " " . $a[2];
|
||||
|
||||
return "No argument given" if ( !defined( $a[2] ) );
|
||||
return "No argument given" unless ( defined( $a[2] ) );
|
||||
|
||||
return "Device does not seem to support Ambilight"
|
||||
if (
|
||||
(
|
||||
!defined( $hash->{READINGS}{ambiLEDBottom}{VAL} )
|
||||
&& !defined( $hash->{READINGS}{ambiLEDLeft}{VAL} )
|
||||
&& !defined( $hash->{READINGS}{ambiLEDRight}{VAL} )
|
||||
&& !defined( $hash->{READINGS}{ambiLEDTop}{VAL} )
|
||||
)
|
||||
|| (
|
||||
(
|
||||
defined( $hash->{READINGS}{ambiLEDBottom}{VAL} )
|
||||
&& $hash->{READINGS}{ambiLEDBottom}{VAL} == 0
|
||||
)
|
||||
&& ( defined( $hash->{READINGS}{ambiLEDLeft}{VAL} )
|
||||
&& $hash->{READINGS}{ambiLEDLeft}{VAL} == 0 )
|
||||
&& ( defined( $hash->{READINGS}{ambiLEDRight}{VAL} )
|
||||
&& $hash->{READINGS}{ambiLEDRight}{VAL} == 0 )
|
||||
&& ( defined( $hash->{READINGS}{ambiLEDTop}{VAL} )
|
||||
&& $hash->{READINGS}{ambiLEDTop}{VAL} == 0 )
|
||||
)
|
||||
);
|
||||
if ( ReadingsVal( $name, "ambiLEDBottom", 0 ) == 0
|
||||
&& ReadingsVal( $name, "ambiLEDLeft", 0 ) == 0
|
||||
&& ReadingsVal( $name, "ambiLEDRight", 0 ) == 0
|
||||
&& ReadingsVal( $name, "ambiLEDTop", 0 ) == 0 );
|
||||
|
||||
if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
|
||||
if ( defined( $hash->{READINGS}{rgb}{VAL} )
|
||||
&& $hash->{READINGS}{rgb}{VAL} ne "" )
|
||||
{
|
||||
if ( ReadingsVal( $name, "state", "off" ) eq "on" ) {
|
||||
if ( ReadingsVal( $name, "rgb", "" ) ne "" ) {
|
||||
my $hsb;
|
||||
my $hex;
|
||||
if ( $a[2] =~ m/^\d+$/ && $a[2] >= 0 && $a[2] <= 255 ) {
|
||||
$hsb = PHTV_hex2hsb( $hash->{READINGS}{rgb}{VAL} );
|
||||
$hsb = PHTV_hex2hsb( ReadingsVal( $name, "rgb", "" ) );
|
||||
$hex = PHTV_hsb2hex( $hsb->{h}, $hsb->{s}, $a[2] );
|
||||
|
||||
Log3 $name, 4,
|
||||
"PHTV $name bri - old: "
|
||||
. $hash->{READINGS}{rgb}{VAL}
|
||||
. ReadingsVal( $name, "rgb", "" )
|
||||
. " new: $hex(h="
|
||||
. $hsb->{h} . " s="
|
||||
. $hsb->{s} . " b="
|
||||
@ -999,45 +960,27 @@ sub PHTV_Set($@) {
|
||||
elsif ( lc( $a[1] ) eq "pct" ) {
|
||||
Log3 $name, 3, "PHTV set $name " . $a[1] . " " . $a[2];
|
||||
|
||||
return "No argument given" if ( !defined( $a[2] ) );
|
||||
return "No argument given" unless ( defined( $a[2] ) );
|
||||
|
||||
return "Device does not seem to support Ambilight"
|
||||
if (
|
||||
(
|
||||
!defined( $hash->{READINGS}{ambiLEDBottom}{VAL} )
|
||||
&& !defined( $hash->{READINGS}{ambiLEDLeft}{VAL} )
|
||||
&& !defined( $hash->{READINGS}{ambiLEDRight}{VAL} )
|
||||
&& !defined( $hash->{READINGS}{ambiLEDTop}{VAL} )
|
||||
)
|
||||
|| (
|
||||
(
|
||||
defined( $hash->{READINGS}{ambiLEDBottom}{VAL} )
|
||||
&& $hash->{READINGS}{ambiLEDBottom}{VAL} == 0
|
||||
)
|
||||
&& ( defined( $hash->{READINGS}{ambiLEDLeft}{VAL} )
|
||||
&& $hash->{READINGS}{ambiLEDLeft}{VAL} == 0 )
|
||||
&& ( defined( $hash->{READINGS}{ambiLEDRight}{VAL} )
|
||||
&& $hash->{READINGS}{ambiLEDRight}{VAL} == 0 )
|
||||
&& ( defined( $hash->{READINGS}{ambiLEDTop}{VAL} )
|
||||
&& $hash->{READINGS}{ambiLEDTop}{VAL} == 0 )
|
||||
)
|
||||
);
|
||||
if ( ReadingsVal( $name, "ambiLEDBottom", 0 ) == 0
|
||||
&& ReadingsVal( $name, "ambiLEDLeft", 0 ) == 0
|
||||
&& ReadingsVal( $name, "ambiLEDRight", 0 ) == 0
|
||||
&& ReadingsVal( $name, "ambiLEDTop", 0 ) == 0 );
|
||||
|
||||
if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
|
||||
if ( defined( $hash->{READINGS}{rgb}{VAL} )
|
||||
&& $hash->{READINGS}{rgb}{VAL} ne "" )
|
||||
{
|
||||
if ( ReadingsVal( $name, "state", "off" ) eq "on" ) {
|
||||
if ( ReadingsVal( $name, "rgb", "" ) ne "" ) {
|
||||
my $hsb;
|
||||
my $bri;
|
||||
my $hex;
|
||||
if ( $a[2] =~ m/^\d+$/ && $a[2] >= 0 && $a[2] <= 100 ) {
|
||||
$hsb = PHTV_hex2hsb( $hash->{READINGS}{rgb}{VAL} );
|
||||
$hsb = PHTV_hex2hsb( ReadingsVal( $name, "rgb", "" ) );
|
||||
$bri = PHTV_pct2bri( $a[2] );
|
||||
$hex = PHTV_hsb2hex( $hsb->{h}, $hsb->{s}, $bri );
|
||||
|
||||
Log3 $name, 4,
|
||||
"PHTV $name pct - old: "
|
||||
. $hash->{READINGS}{rgb}{VAL}
|
||||
. ReadingsVal( $name, "rgb", "" )
|
||||
. " new: $hex(h="
|
||||
. $hsb->{h} . " s="
|
||||
. $hsb->{s}
|
||||
@ -1060,10 +1003,10 @@ sub PHTV_Set($@) {
|
||||
elsif ( lc( $a[1] ) eq "volume" ) {
|
||||
Log3 $name, 3, "PHTV set $name " . $a[1] . " " . $a[2];
|
||||
|
||||
return "No argument given" if ( !defined( $a[2] ) );
|
||||
return "No argument given" unless ( defined( $a[2] ) );
|
||||
|
||||
my $vol;
|
||||
if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
|
||||
if ( ReadingsVal( $name, "state", "off" ) eq "on" ) {
|
||||
if ( $a[2] =~ m/^\d+$/ && $a[2] >= 1 && $a[2] <= 100 ) {
|
||||
if ( defined( $hash->{helper}{audio}{min} )
|
||||
&& defined( $hash->{helper}{audio}{max} ) )
|
||||
@ -1097,10 +1040,10 @@ sub PHTV_Set($@) {
|
||||
elsif ( lc( $a[1] ) eq "volumestraight" ) {
|
||||
Log3 $name, 3, "PHTV set $name " . $a[1] . " " . $a[2];
|
||||
|
||||
return "No argument given" if ( !defined( $a[2] ) );
|
||||
return "No argument given" unless ( defined( $a[2] ) );
|
||||
|
||||
my $vol;
|
||||
if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
|
||||
if ( ReadingsVal( $name, "state", "off" ) eq "on" ) {
|
||||
if ( $a[2] =~ m/^\d+$/
|
||||
&& $a[2] >= $hash->{helper}{audio}{min}
|
||||
&& $a[2] <= $hash->{helper}{audio}{max} )
|
||||
@ -1131,7 +1074,7 @@ sub PHTV_Set($@) {
|
||||
elsif ( lc( $a[1] ) =~ /^(volumeup|volumedown)$/ ) {
|
||||
Log3 $name, 3, "PHTV set $name " . $a[1];
|
||||
|
||||
if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
|
||||
if ( ReadingsVal( $name, "state", "off" ) eq "on" ) {
|
||||
if ( lc( $a[1] ) eq "volumeup" ) {
|
||||
$cmd = PHTV_GetRemotecontrolCommand("VOLUP");
|
||||
}
|
||||
@ -1155,25 +1098,25 @@ sub PHTV_Set($@) {
|
||||
Log3 $name, 3, "PHTV set $name " . $a[1];
|
||||
}
|
||||
|
||||
if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
|
||||
if ( ReadingsVal( $name, "state", "off" ) eq "on" ) {
|
||||
if ( !defined( $a[2] ) || $a[2] eq "toggle" ) {
|
||||
if ( $hash->{READINGS}{mute}{VAL} eq "off" ) {
|
||||
if ( ReadingsVal( $name, "mute", "" ) eq "off" ) {
|
||||
$cmd = '"muted": true';
|
||||
readingsSingleUpdate( $hash, "mute", "on", 1 );
|
||||
}
|
||||
elsif ( $hash->{READINGS}{mute}{VAL} eq "on" ) {
|
||||
elsif ( ReadingsVal( $name, "mute", "" ) eq "on" ) {
|
||||
$cmd = '"muted": false';
|
||||
readingsSingleUpdate( $hash, "mute", "off", 1 );
|
||||
}
|
||||
}
|
||||
elsif ( lc( $a[2] ) eq "off" ) {
|
||||
if ( $hash->{READINGS}{mute}{VAL} ne "off" ) {
|
||||
if ( ReadingsVal( $name, "mute", "" ) ne "off" ) {
|
||||
$cmd = '"muted": false';
|
||||
readingsSingleUpdate( $hash, "mute", "off", 1 );
|
||||
}
|
||||
}
|
||||
elsif ( lc( $a[2] ) eq "on" ) {
|
||||
if ( $hash->{READINGS}{mute}{VAL} ne "on" ) {
|
||||
if ( ReadingsVal( $name, "mute", "" ) ne "on" ) {
|
||||
$cmd = '"muted": true';
|
||||
readingsSingleUpdate( $hash, "mute", "on", 1 );
|
||||
}
|
||||
@ -1193,8 +1136,8 @@ sub PHTV_Set($@) {
|
||||
elsif ( lc( $a[1] ) eq "remotecontrol" ) {
|
||||
Log3 $name, 3, "PHTV set $name " . $a[1] . " " . $a[2];
|
||||
|
||||
if ( $hash->{READINGS}{state}{VAL} ne "absent" ) {
|
||||
if ( !defined( $a[2] ) ) {
|
||||
if ( ReadingsVal( $name, "state", "absent" ) ne "absent" ) {
|
||||
unless ( defined( $a[2] ) ) {
|
||||
my $commandKeys = "";
|
||||
for (
|
||||
sort keys %{
|
||||
@ -1248,8 +1191,8 @@ sub PHTV_Set($@) {
|
||||
# channel
|
||||
elsif ( lc( $a[1] ) eq "channel" ) {
|
||||
if ( defined( $a[2] )
|
||||
&& $hash->{READINGS}{presence}{VAL} eq "present"
|
||||
&& $hash->{READINGS}{state}{VAL} ne "on" )
|
||||
&& ReadingsVal( $name, "presence", "absent" ) eq "present"
|
||||
&& ReadingsVal( $name, "state", "off" ) ne "on" )
|
||||
{
|
||||
Log3 $name, 4, "PHTV $name: indirect switching request to ON";
|
||||
PHTV_Set( $hash, $name, "on" );
|
||||
@ -1259,9 +1202,9 @@ sub PHTV_Set($@) {
|
||||
|
||||
return
|
||||
"No argument given, choose one of channel presetNumber channelName "
|
||||
if ( !defined( $a[2] ) );
|
||||
unless ( defined( $a[2] ) );
|
||||
|
||||
if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
|
||||
if ( ReadingsVal( $name, "state", "off" ) eq "on" ) {
|
||||
my $channelName = $a[2];
|
||||
if (
|
||||
defined( $hash->{helper}{device}{channelID}{$channelName}{id} )
|
||||
@ -1269,9 +1212,8 @@ sub PHTV_Set($@) {
|
||||
{
|
||||
$cmd = $hash->{helper}{device}{channelID}{$channelName}{id};
|
||||
|
||||
if ( $hash->{READINGS}{channel}{VAL} ne $channelName ) {
|
||||
readingsSingleUpdate( $hash, "channel", $channelName, 1 );
|
||||
}
|
||||
readingsSingleUpdate( $hash, "channel", $channelName, 1 )
|
||||
if ( ReadingsVal( $name, "channel", "" ) ne $channelName );
|
||||
}
|
||||
elsif (
|
||||
$channelName =~ /^(\d+):(.*):$/
|
||||
@ -1301,7 +1243,7 @@ sub PHTV_Set($@) {
|
||||
elsif ( lc( $a[1] ) =~ /^(channelup|channeldown)$/ ) {
|
||||
Log3 $name, 3, "PHTV set $name " . $a[1];
|
||||
|
||||
if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
|
||||
if ( ReadingsVal( $name, "state", "off" ) eq "on" ) {
|
||||
if ( lc( $a[1] ) eq "channelup" ) {
|
||||
$cmd = PHTV_GetRemotecontrolCommand("CHANUP");
|
||||
}
|
||||
@ -1319,14 +1261,14 @@ sub PHTV_Set($@) {
|
||||
# input
|
||||
elsif ( lc( $a[1] ) eq "input" ) {
|
||||
if ( defined( $a[2] )
|
||||
&& $hash->{READINGS}{presence}{VAL} eq "present"
|
||||
&& $hash->{READINGS}{state}{VAL} ne "on" )
|
||||
&& ReadingsVal( $name, "presence", "absent" ) eq "present"
|
||||
&& ReadingsVal( $name, "state", "off" ) ne "on" )
|
||||
{
|
||||
Log3 $name, 4, "PHTV $name: indirect switching request to ON";
|
||||
PHTV_Set( $hash, $name, "on" );
|
||||
}
|
||||
|
||||
return "No 2nd argument given" if ( !defined( $a[2] ) );
|
||||
return "No 2nd argument given" unless ( defined( $a[2] ) );
|
||||
|
||||
Log3 $name, 3, "PHTV set $name " . $a[1] . " " . $a[2];
|
||||
|
||||
@ -1346,13 +1288,12 @@ sub PHTV_Set($@) {
|
||||
return "Unknown source input '" . $a[2] . "' on that device.";
|
||||
}
|
||||
|
||||
if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
|
||||
if ( ReadingsVal( $name, "state", "off" ) eq "on" ) {
|
||||
PHTV_SendCommand( $hash, "sources/current",
|
||||
'"id": "' . $input_id . '"', $input_id );
|
||||
|
||||
if ( $hash->{READINGS}{input}{VAL} ne $a[2] ) {
|
||||
readingsSingleUpdate( $hash, "input", $a[2], 1 );
|
||||
}
|
||||
readingsSingleUpdate( $hash, "input", $a[2], 1 )
|
||||
if ( ReadingsVal( $name, "input", "" ) ne $a[2] );
|
||||
}
|
||||
else {
|
||||
return "Device needs to be reachable to switch input.";
|
||||
@ -1363,7 +1304,7 @@ sub PHTV_Set($@) {
|
||||
elsif ( lc( $a[1] ) =~ /^(play|pause)$/ ) {
|
||||
Log3 $name, 3, "PHTV set $name " . $a[1];
|
||||
|
||||
if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
|
||||
if ( ReadingsVal( $name, "state", "off" ) eq "on" ) {
|
||||
$cmd = PHTV_GetRemotecontrolCommand("PLAYPAUSE");
|
||||
PHTV_SendCommand( $hash, "input/key", '"key": "' . $cmd . '"' );
|
||||
}
|
||||
@ -1376,7 +1317,7 @@ sub PHTV_Set($@) {
|
||||
elsif ( lc( $a[1] ) eq "stop" ) {
|
||||
Log3 $name, 3, "PHTV set $name " . $a[1];
|
||||
|
||||
if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
|
||||
if ( ReadingsVal( $name, "state", "off" ) eq "on" ) {
|
||||
$cmd = PHTV_GetRemotecontrolCommand("STOP");
|
||||
PHTV_SendCommand( $hash, "input/key", '"key": "' . $cmd . '"' );
|
||||
}
|
||||
@ -1389,7 +1330,7 @@ sub PHTV_Set($@) {
|
||||
elsif ( lc( $a[1] ) eq "record" ) {
|
||||
Log3 $name, 3, "PHTV set $name " . $a[1];
|
||||
|
||||
if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
|
||||
if ( ReadingsVal( $name, "state", "off" ) eq "on" ) {
|
||||
$cmd = PHTV_GetRemotecontrolCommand("RECORD");
|
||||
PHTV_SendCommand( $hash, "input/key", '"key": "' . $cmd . '"' );
|
||||
}
|
||||
@ -1438,21 +1379,20 @@ sub PHTV_Define($$) {
|
||||
$hash->{INTERVAL} = $interval;
|
||||
|
||||
readingsSingleUpdate( $hash, "ambiHue", "off", 0 )
|
||||
if ( defined( $hash->{READINGS}{ambiHue}{VAL} )
|
||||
&& $hash->{READINGS}{ambiHue}{VAL} ne "off" );
|
||||
if ( ReadingsVal( $name, "ambiHue", "" ) ne "off" );
|
||||
|
||||
$hash->{model} = $hash->{READINGS}{model}{VAL}
|
||||
if ( defined( $hash->{READINGS}{model}{VAL} ) );
|
||||
$hash->{model} = ReadingsVal( $name, "model", undef )
|
||||
if ( ReadingsVal( $name, "model", undef ) );
|
||||
|
||||
$hash->{swversion} = $hash->{READINGS}{softwareversion}{VAL}
|
||||
if ( defined( $hash->{READINGS}{softwareversion}{VAL} ) );
|
||||
$hash->{swversion} = ReadingsVal( $name, "softwareversion", undef )
|
||||
if ( ReadingsVal( $name, "softwareversion", undef ) );
|
||||
|
||||
# set default settings on first define
|
||||
if ( $init_done && !defined( $hash->{OLDDEF} ) ) {
|
||||
$attr{$name}{webCmd} = 'volume:input:rgb';
|
||||
$attr{$name}{devStateIcon} =
|
||||
'on:rc_GREEN:off off:rc_YELLOW:on absent:rc_STOP:on';
|
||||
$attr{$name}{icon} = 'it_television';
|
||||
fhem 'attr ' . $name . ' webCmd volume:input:rgb';
|
||||
fhem 'attr ' . $name
|
||||
. ' devStateIcon on:rc_GREEN:off off:rc_YELLOW:on absent:rc_STOP:on';
|
||||
fhem 'attr ' . $name . ' icon it_television';
|
||||
}
|
||||
|
||||
# start the status update timer
|
||||
@ -1487,6 +1427,8 @@ sub PHTV_SendCommand($$;$$$) {
|
||||
my $name = $hash->{NAME};
|
||||
my $address = $hash->{helper}{ADDRESS};
|
||||
my $protoV = AttrVal( $name, "jsversion", 1 );
|
||||
my $device_id = AttrVal( $name, "device_id", undef );
|
||||
my $auth_key = AttrVal( $name, "auth_key", undef );
|
||||
my $timestamp = gettimeofday();
|
||||
my $data;
|
||||
my $timeout;
|
||||
@ -1539,16 +1481,11 @@ sub PHTV_SendCommand($$;$$$) {
|
||||
|
||||
$URL = "http://";
|
||||
$URL = "https://" if ( $protoV > 5 );
|
||||
$URL .= "$device_id:$auth_key@" if ( $device_id && $auth_key );
|
||||
$URL .= $address . "/" . $protoV . "/" . $service;
|
||||
|
||||
if ( defined( $attr{$name}{timeout} )
|
||||
&& $attr{$name}{timeout} =~ /^\d+$/ )
|
||||
{
|
||||
$timeout = $attr{$name}{timeout};
|
||||
}
|
||||
else {
|
||||
$timeout = 7;
|
||||
}
|
||||
$timeout = AttrVal( $name, "timeout", 7 );
|
||||
$timeout = 7 unless ( $timeout =~ /^\d+$/ );
|
||||
|
||||
# send request via HTTP-POST method
|
||||
Log3 $name, 5, "PHTV $name: GET " . $URL . " (" . urlDecode($data) . ")"
|
||||
@ -1556,7 +1493,7 @@ sub PHTV_SendCommand($$;$$$) {
|
||||
Log3 $name, 5, "PHTV $name: GET " . $URL . " (#HASH)"
|
||||
if ( defined($data) && ref($cmd) eq "HASH" );
|
||||
Log3 $name, 5, "PHTV $name: GET " . $URL
|
||||
if ( !defined($data) );
|
||||
unless ( defined($data) );
|
||||
|
||||
HttpUtils_NonblockingGet(
|
||||
{
|
||||
@ -1569,6 +1506,7 @@ sub PHTV_SendCommand($$;$$$) {
|
||||
cmd => $cmd,
|
||||
type => $type,
|
||||
timestamp => $timestamp,
|
||||
httpversion => "1.1",
|
||||
callback => \&PHTV_ReceiveCommand,
|
||||
}
|
||||
);
|
||||
@ -1583,13 +1521,9 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
my $name = $hash->{NAME};
|
||||
my $service = $param->{service};
|
||||
my $cmd = $param->{cmd};
|
||||
my $sequential = ( defined( $attr{$name}{sequentialQuery} )
|
||||
&& $attr{$name}{sequentialQuery} == 1 ) ? 1 : 0;
|
||||
my $sequential = AttrVal( $name, "sequentialQuery", 0 );
|
||||
|
||||
my $state =
|
||||
( $hash->{READINGS}{state}{VAL} )
|
||||
? $hash->{READINGS}{state}{VAL}
|
||||
: "";
|
||||
my $state = ReadingsVal( $name, "state", "" );
|
||||
my $newstate;
|
||||
my $type = ( $param->{type} ) ? $param->{type} : "";
|
||||
my $return;
|
||||
@ -1632,7 +1566,7 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
$newstate = "on";
|
||||
|
||||
# because it does not seem to support the command
|
||||
if ( !defined( $hash->{helper}{supportedAPIcmds}{$service} ) ) {
|
||||
unless ( defined( $hash->{helper}{supportedAPIcmds}{$service} ) ) {
|
||||
$hash->{helper}{supportedAPIcmds}{$service} = 0;
|
||||
Log3 $name, 4,
|
||||
"PHTV $name: API command '"
|
||||
@ -1675,9 +1609,10 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
}
|
||||
|
||||
$hash->{helper}{supportedAPIcmds}{$service} = 1
|
||||
if ( !defined( $hash->{helper}{supportedAPIcmds}{$service} )
|
||||
&& $service !~ /^channels\/.*/
|
||||
&& $service !~ /^channellists\/.*/ );
|
||||
unless (
|
||||
defined( $hash->{helper}{supportedAPIcmds}{$service} )
|
||||
&& $service =~ /^channels\/.*/
|
||||
&& $service =~ /^channellists\/.*/ );
|
||||
|
||||
$return = decode_json( Encode::encode_utf8($data) );
|
||||
}
|
||||
@ -1694,9 +1629,10 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
}
|
||||
|
||||
$hash->{helper}{supportedAPIcmds}{$service} = 1
|
||||
if ( !defined( $hash->{helper}{supportedAPIcmds}{$service} )
|
||||
&& $service !~ /^channels\/.*/
|
||||
&& $service !~ /^channellists\/.*/ );
|
||||
unless (
|
||||
defined( $hash->{helper}{supportedAPIcmds}{$service} )
|
||||
&& $service =~ /^channels\/.*/
|
||||
&& $service =~ /^channellists\/.*/ );
|
||||
|
||||
$return = "ok";
|
||||
}
|
||||
@ -1712,7 +1648,9 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
. $data;
|
||||
}
|
||||
|
||||
if ( !defined( $hash->{helper}{supportedAPIcmds}{$service} ) ) {
|
||||
unless (
|
||||
defined( $hash->{helper}{supportedAPIcmds}{$service} ) )
|
||||
{
|
||||
$hash->{helper}{supportedAPIcmds}{$service} = 0;
|
||||
Log3 $name, 4,
|
||||
"PHTV $name: API command '"
|
||||
@ -1791,14 +1729,14 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
# and user set attribut for lazy devices
|
||||
if ( $newstate eq "on"
|
||||
&& $newstate ne $state
|
||||
&& defined( $attr{$name}{drippyFactor} )
|
||||
&& $attr{$name}{drippyFactor} ne ""
|
||||
&& $attr{$name}{drippyFactor} ge 0 )
|
||||
&& AttrVal( $name, "drippyFactor", -1 ) ge 0 )
|
||||
{
|
||||
RemoveInternalTimer($hash);
|
||||
InternalTimer(
|
||||
gettimeofday() + $attr{$name}{drippyFactor},
|
||||
"PHTV_GetStatus", $hash, 1 );
|
||||
gettimeofday() +
|
||||
AttrVal( $name, "drippyFactor", 0 ),
|
||||
"PHTV_GetStatus", $hash, 1
|
||||
);
|
||||
}
|
||||
else {
|
||||
PHTV_GetStatus( $hash, 1 );
|
||||
@ -1873,7 +1811,7 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
$hash->{helper}{device}{sourceID}{$input_name} = $input;
|
||||
$inputs .= $input_name . ":";
|
||||
}
|
||||
if ( !defined( $attr{$name}{inputs} ) ) {
|
||||
unless ( defined( AttrVal( $name, "inputs", undef ) ) ) {
|
||||
$inputs = substr( $inputs, 0, -1 );
|
||||
$attr{$name}{inputs} = $inputs;
|
||||
}
|
||||
@ -2098,7 +2036,7 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
}
|
||||
|
||||
# read all channellists if not existing
|
||||
if ( !defined( $hash->{helper}{device}{channellists} ) ) {
|
||||
unless ( defined( $hash->{helper}{device}{channellists} ) ) {
|
||||
PHTV_SendCommand( $hash, "channellists" );
|
||||
$hash->{helper}{sequentialQueryCounter}++ if $sequential;
|
||||
}
|
||||
@ -2268,7 +2206,7 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
}
|
||||
elsif ( $return eq "ok" ) {
|
||||
if ( $type =~ /^(..)(..)(..)$/
|
||||
&& defined( $hash->{READINGS}{ambiLEDLayers}{VAL} ) )
|
||||
&& ReadingsVal( $name, "ambiLEDLayers", undef ) )
|
||||
{
|
||||
my $hsb = PHTV_hex2hsb($type);
|
||||
my $hue = $hsb->{h};
|
||||
@ -2283,10 +2221,10 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
readingsBulkUpdateIfChanged( $hash, "pct", $pct );
|
||||
readingsBulkUpdateIfChanged( $hash, "level", $pct . " %" );
|
||||
|
||||
if ( defined( $hash->{READINGS}{ambiLEDLayers}{VAL} ) ) {
|
||||
if ( ReadingsVal( $name, "ambiLEDLayers", undef ) ) {
|
||||
my $layer = 1;
|
||||
while (
|
||||
$layer <= $hash->{READINGS}{ambiLEDLayers}{VAL} )
|
||||
while ( $layer <=
|
||||
ReadingsVal( $name, "ambiLEDLayers", undef ) )
|
||||
{
|
||||
|
||||
foreach
|
||||
@ -2302,13 +2240,11 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
$s =~ s/right/R/ if ( $side eq "right" );
|
||||
$s =~ s/bottom/B/ if ( $side eq "bottom" );
|
||||
|
||||
if ( defined( $hash->{READINGS}{$ambiLED}{VAL} )
|
||||
&& $hash->{READINGS}{$ambiLED}{VAL} > 0 )
|
||||
{
|
||||
if ( ReadingsVal( $name, $ambiLED, 0 ) > 0 ) {
|
||||
my $led = 0;
|
||||
|
||||
while ( $led <=
|
||||
$hash->{READINGS}{$ambiLED}{VAL} - 1 )
|
||||
ReadingsVal( $name, $ambiLED, 0 ) - 1 )
|
||||
{
|
||||
my $readingname =
|
||||
"rgb_" . $l . $s . $led;
|
||||
@ -2338,21 +2274,18 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
# run ambiHue
|
||||
if (
|
||||
(
|
||||
$hash->{READINGS}{ambiHue}{VAL} eq "on"
|
||||
ReadingsVal( $name, "ambiHue", "off" ) eq "on"
|
||||
|| $type eq "init"
|
||||
)
|
||||
&& ( defined( $attr{$name}{ambiHueLeft} )
|
||||
|| defined( $attr{$name}{ambiHueRight} )
|
||||
|| defined( $attr{$name}{ambiHueTop} )
|
||||
|| defined( $attr{$name}{ambiHueBottom} ) )
|
||||
&& ( defined( AttrVal( $name, "ambiHueLeft", undef ) )
|
||||
|| defined( AttrVal( $name, "ambiHueRight", undef ) )
|
||||
|| defined( AttrVal( $name, "ambiHueTop", undef ) )
|
||||
|| defined( AttrVal( $name, "ambiHueBottom", undef ) ) )
|
||||
)
|
||||
{
|
||||
|
||||
my $transitiontime =
|
||||
( $attr{$name}{ambiHueLatency} )
|
||||
? int( $attr{$name}{ambiHueLatency} / 100 + 0.5 )
|
||||
: 3;
|
||||
|
||||
my $transitiontime = int(
|
||||
AttrVal( $name, "ambiHueLatency", 300 ) / 100 + 0.5 );
|
||||
$transitiontime = 3 if ( $transitiontime < 3 );
|
||||
|
||||
foreach my $side ( 'Left', 'Top', 'Right', 'Bottom' ) {
|
||||
@ -2361,15 +2294,13 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
my $s = lc($side);
|
||||
|
||||
# $ambiHue
|
||||
if ( defined( $attr{$name}{$ambiHue} )
|
||||
&& $attr{$name}{$ambiHue} ne ""
|
||||
if ( AttrVal( $name, $ambiHue, "" ) ne ""
|
||||
&& defined( $return->{layer1}->{$s} )
|
||||
&& ref( $return->{layer1}->{$s} ) eq "HASH"
|
||||
&& defined( $hash->{READINGS}{$ambiLED}{VAL} )
|
||||
&& $hash->{READINGS}{$ambiLED}{VAL} > 0 )
|
||||
&& ReadingsVal( $name, $ambiLED, 0 ) > 0 )
|
||||
{
|
||||
my @devices =
|
||||
split( " ", $attr{$name}{$ambiHue} );
|
||||
split( " ", AttrVal( $name, $ambiHue, "" ) );
|
||||
|
||||
Log3 $name, 5,
|
||||
"PHTV $name: processing devices from attribute $ambiHue";
|
||||
@ -2393,7 +2324,7 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
if ( !defined( $defs{$dev} )
|
||||
|| !defined( $defs{$dev}{TYPE} )
|
||||
|| $defs{$dev}{TYPE} ne "HUEDevice"
|
||||
|| $defs{$dev}{READINGS}{reachable}{VAL} ne
|
||||
|| ReadingsVal( $dev, "reachable", 0 ) ne
|
||||
"1" )
|
||||
{
|
||||
Log3 $name, 5,
|
||||
@ -2404,7 +2335,7 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
# determine reference LEDs
|
||||
if ( !defined($led) || $led eq "" ) {
|
||||
my $led_middle = int(
|
||||
$hash->{READINGS}{$ambiLED}{VAL} / 2 +
|
||||
ReadingsVal( $name, $ambiLED, 0 ) / 2 +
|
||||
0.5 ) - 1;
|
||||
|
||||
# take the middle LED and
|
||||
@ -2532,12 +2463,9 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
}
|
||||
|
||||
# temp. disable event triggers for HUEDevice
|
||||
if (
|
||||
!defined(
|
||||
$attr{$dev}{"event-on-change-reading"}
|
||||
)
|
||||
|| $attr{$dev}{"event-on-change-reading"}
|
||||
ne "none"
|
||||
unless (
|
||||
AttrVal( $dev, "event-on-change-reading",
|
||||
"" ) eq "none"
|
||||
)
|
||||
{
|
||||
$attr{$dev}{"event-on-change-reading"} =
|
||||
@ -2633,9 +2561,7 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
|
||||
my $duration = gettimeofday() - $param->{timestamp};
|
||||
my $minLatency =
|
||||
( $attr{$name}{ambiHueLatency} )
|
||||
? $attr{$name}{ambiHueLatency} / 1000
|
||||
: 0.20;
|
||||
AttrVal( $name, "ambiHueLatency", 200 ) / 1000;
|
||||
my $waittime = $minLatency - $duration;
|
||||
|
||||
# latency compensation
|
||||
@ -2654,11 +2580,12 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
|
||||
# cleanup after stopping ambiHue
|
||||
elsif (
|
||||
$hash->{READINGS}{ambiHue}{VAL} eq "off"
|
||||
|| ( !defined( $attr{$name}{ambiHueLeft} )
|
||||
&& !defined( $attr{$name}{ambiHueRight} )
|
||||
&& !defined( $attr{$name}{ambiHueTop} )
|
||||
&& !defined( $attr{$name}{ambiHueBottom} ) )
|
||||
ReadingsVal( $name, "ambiHue", "off" ) eq "off"
|
||||
|| ( !defined( AttrVal( $name, "ambiHueLeft", undef ) )
|
||||
&& !defined( AttrVal( $name, "ambiHueRight", undef ) )
|
||||
&& !defined( AttrVal( $name, "ambiHueTop", undef ) )
|
||||
&& !defined( AttrVal( $name, "ambiHueBottom", undef ) )
|
||||
)
|
||||
)
|
||||
{
|
||||
delete $hash->{helper}{ambiHueDelay};
|
||||
@ -2667,11 +2594,9 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
readingsBulkUpdateIfChanged( $hash, "ambiHue", "off" );
|
||||
|
||||
# ambiHueLeft
|
||||
if ( defined( $attr{$name}{ambiHueLeft} )
|
||||
&& $attr{$name}{ambiHueLeft} ne "" )
|
||||
{
|
||||
if ( AttrVal( $name, "ambiHueLeft", "" ) ne "" ) {
|
||||
my @devices =
|
||||
split( " ", $attr{$name}{ambiHueLeft} );
|
||||
split( " ", AttrVal( $name, "ambiHueLeft", "" ) );
|
||||
|
||||
foreach (@devices) {
|
||||
my ( $dev, $led ) = split( /:/, $_ );
|
||||
@ -2684,11 +2609,9 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
}
|
||||
|
||||
# ambiHueTop
|
||||
if ( defined( $attr{$name}{ambiHueTop} )
|
||||
&& $attr{$name}{ambiHueTop} ne "" )
|
||||
{
|
||||
if ( AttrVal( $name, "ambiHueTop", "" ) ne "" ) {
|
||||
my @devices =
|
||||
split( " ", $attr{$name}{ambiHueTop} );
|
||||
split( " ", AttrVal( $name, "ambiHueTop", "" ) );
|
||||
|
||||
foreach (@devices) {
|
||||
my ( $dev, $led ) = split( /:/, $_ );
|
||||
@ -2701,11 +2624,9 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
}
|
||||
|
||||
# ambiHueRight
|
||||
if ( defined( $attr{$name}{ambiHueRight} )
|
||||
&& $attr{$name}{ambiHueRight} ne "" )
|
||||
{
|
||||
if ( AttrVal( $name, "ambiHueRight", "" ) ne "" ) {
|
||||
my @devices =
|
||||
split( " ", $attr{$name}{ambiHueRight} );
|
||||
split( " ", AttrVal( $name, "ambiHueRight", "" ) );
|
||||
|
||||
foreach (@devices) {
|
||||
my ( $dev, $led ) = split( /:/, $_ );
|
||||
@ -2718,9 +2639,7 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
}
|
||||
|
||||
# ambiHueBottom
|
||||
if ( defined( $attr{$name}{ambiHueBottom} )
|
||||
&& $attr{$name}{ambiHueBottom} ne "" )
|
||||
{
|
||||
if ( AttrVal( $name, "ambiHueBottom", "" ) ne "" ) {
|
||||
my @devices =
|
||||
split( " ", $attr{$name}{ambiHueBottom} );
|
||||
|
||||
@ -2786,9 +2705,9 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
readingsBulkUpdateIfChanged( $hash, "pct", "0" );
|
||||
readingsBulkUpdateIfChanged( $hash, "level", "0 %" );
|
||||
|
||||
if ( defined( $hash->{READINGS}{ambiLEDLayers}{VAL} ) ) {
|
||||
if ( ReadingsVal( $name, "ambiLEDLayers", undef ) ) {
|
||||
my $layer = 1;
|
||||
while ( $layer <= $hash->{READINGS}{ambiLEDLayers}{VAL} ) {
|
||||
while ( $layer <= ReadingsVal( $name, "ambiLEDLayers", undef ) ) {
|
||||
|
||||
foreach my $side ( 'Left', 'Top', 'Right', 'Bottom' ) {
|
||||
my $ambiLED = "ambiLED$side";
|
||||
@ -2801,12 +2720,11 @@ sub PHTV_ReceiveCommand($$$) {
|
||||
$s =~ s/right/R/ if ( $side eq "right" );
|
||||
$s =~ s/bottom/B/ if ( $side eq "bottom" );
|
||||
|
||||
if ( defined( $hash->{READINGS}{$ambiLED}{VAL} )
|
||||
&& $hash->{READINGS}{$ambiLED}{VAL} > 0 )
|
||||
{
|
||||
if ( ReadingsVal( $name, $ambiLED, 0 ) > 0 ) {
|
||||
my $led = 0;
|
||||
|
||||
while ( $led <= $hash->{READINGS}{$ambiLED}{VAL} - 1 ) {
|
||||
while ( $led <= ReadingsVal( $name, $ambiLED, 0 ) - 1 )
|
||||
{
|
||||
my $readingname = "rgb_" . $l . $s . $led;
|
||||
|
||||
readingsBulkUpdateIfChanged( $hash,
|
||||
@ -2872,10 +2790,7 @@ sub PHTV_GetStateAV($) {
|
||||
sub PHTV_wake ($) {
|
||||
my ($hash) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
my $mac_addr =
|
||||
( defined( $attr{$name}{macaddr} ) )
|
||||
? $attr{$name}{macaddr}
|
||||
: "-";
|
||||
my $mac_addr = AttrVal( $name, "macaddr", "-" );
|
||||
my $address = '255.255.255.255';
|
||||
my $port = 9;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user