auto enableEventChange
This commit is contained in:
parent
b098e86fdd
commit
73f1cdca9e
112
21_HEOSMaster.pm
112
21_HEOSMaster.pm
@ -45,7 +45,7 @@ use JSON;
|
|||||||
use Net::Telnet;
|
use Net::Telnet;
|
||||||
|
|
||||||
|
|
||||||
my $version = "0.1.30";
|
my $version = "0.1.33";
|
||||||
|
|
||||||
|
|
||||||
my %heosCmds = (
|
my %heosCmds = (
|
||||||
@ -76,8 +76,9 @@ sub HEOSMaster_Attr(@);
|
|||||||
sub HEOSMaster_firstRun($);
|
sub HEOSMaster_firstRun($);
|
||||||
sub HEOSMaster_ResponseProcessing($$);
|
sub HEOSMaster_ResponseProcessing($$);
|
||||||
sub HEOSMaster_WriteReadings($$);
|
sub HEOSMaster_WriteReadings($$);
|
||||||
sub HEOSMaster_GetPlayers($);
|
|
||||||
sub HEOSMaster_PreResponseProsessing($$);
|
sub HEOSMaster_PreResponseProsessing($$);
|
||||||
|
sub HEOSMaster_GetPlayers($);
|
||||||
|
sub HEOSMaster_EnableChangeEvents($);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -159,6 +160,8 @@ sub HEOSMaster_Undef($$) {
|
|||||||
HEOSMaster_Close($hash);
|
HEOSMaster_Close($hash);
|
||||||
delete $modules{HEOSMaster}{defptr}{$hash->{HOST}};
|
delete $modules{HEOSMaster}{defptr}{$hash->{HOST}};
|
||||||
|
|
||||||
|
Log3 $name, 3, "HEOSPlayer ($name) - device $name deleted;
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -216,7 +219,8 @@ sub HEOSMaster_Set($@) {
|
|||||||
} elsif($cmd eq 'getPlayers') {
|
} elsif($cmd eq 'getPlayers') {
|
||||||
return "usage: getPlayers" if( @args != 0 );
|
return "usage: getPlayers" if( @args != 0 );
|
||||||
|
|
||||||
HEOSMaster_GetPlayers($hash);
|
$heosCmd = 'getPlayers';
|
||||||
|
$action = undef;
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
|
|
||||||
@ -224,7 +228,7 @@ sub HEOSMaster_Set($@) {
|
|||||||
return "usage: enableChangeEvents" if( @args != 1 );
|
return "usage: enableChangeEvents" if( @args != 1 );
|
||||||
|
|
||||||
$heosCmd = $cmd;
|
$heosCmd = $cmd;
|
||||||
$action = join(' ',@args);
|
$action = $args[0];
|
||||||
|
|
||||||
} elsif($cmd eq 'eventSend') {
|
} elsif($cmd eq 'eventSend') {
|
||||||
return "usage: eventSend" if( @args != 0 );
|
return "usage: eventSend" if( @args != 0 );
|
||||||
@ -249,29 +253,6 @@ sub HEOSMaster_send($) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub HEOSMaster_firstRun($) {
|
|
||||||
|
|
||||||
my $hash = shift;
|
|
||||||
my $name = $hash->{NAME};
|
|
||||||
|
|
||||||
|
|
||||||
RemoveInternalTimer($hash);
|
|
||||||
|
|
||||||
HEOSMaster_Open($hash) if( !IsDisabled($name) );
|
|
||||||
}
|
|
||||||
|
|
||||||
sub HEOSMaster_GetPlayers($) {
|
|
||||||
|
|
||||||
my $hash = shift;
|
|
||||||
my $name = $hash->{NAME};
|
|
||||||
|
|
||||||
|
|
||||||
RemoveInternalTimer($hash);
|
|
||||||
|
|
||||||
HEOSMaster_Write($hash,'getPlayers',undef);
|
|
||||||
Log3 $name, 3, "HEOSMaster ($name) - getPlayers";
|
|
||||||
}
|
|
||||||
|
|
||||||
sub HEOSMaster_Open($) {
|
sub HEOSMaster_Open($) {
|
||||||
|
|
||||||
my $hash = shift;
|
my $hash = shift;
|
||||||
@ -281,7 +262,7 @@ sub HEOSMaster_Open($) {
|
|||||||
my $timeout = 1;
|
my $timeout = 1;
|
||||||
|
|
||||||
|
|
||||||
Log3 $name, 3, "HEOSMaster ($name) - Baue Socket Verbindung auf";
|
Log3 $name, 4, "HEOSMaster ($name) - Baue Socket Verbindung auf";
|
||||||
|
|
||||||
|
|
||||||
my $socket = new Net::Telnet ( Host=>$host,
|
my $socket = new Net::Telnet ( Host=>$host,
|
||||||
@ -296,9 +277,10 @@ sub HEOSMaster_Open($) {
|
|||||||
|
|
||||||
readingsSingleUpdate($hash, 'state', 'connected', 1 );
|
readingsSingleUpdate($hash, 'state', 'connected', 1 );
|
||||||
|
|
||||||
Log3 $name, 3, "HEOSMaster ($name) - Socket Connected";
|
Log3 $name, 4, "HEOSMaster ($name) - Socket Connected";
|
||||||
|
|
||||||
HEOSMaster_GetPlayers($hash);
|
HEOSMaster_GetPlayers($hash);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub HEOSMaster_Close($) {
|
sub HEOSMaster_Close($) {
|
||||||
@ -324,12 +306,12 @@ sub HEOSMaster_Write($@) {
|
|||||||
$string .= "${value}" if(defined($value) or $value ne '&');
|
$string .= "${value}" if(defined($value) or $value ne '&');
|
||||||
$string .= "\r\n";
|
$string .= "\r\n";
|
||||||
|
|
||||||
Log3 $name, 3, "HEOSMaster ($name) - WriteFn called";
|
Log3 $name, 4, "HEOSMaster ($name) - WriteFn called";
|
||||||
|
|
||||||
return Log3 $name, 3, "HEOSMaster ($name) - socket not connected"
|
return Log3 $name, 4, "HEOSMaster ($name) - socket not connected"
|
||||||
unless($hash->{CD});
|
unless($hash->{CD});
|
||||||
|
|
||||||
Log3 $name, 3, "HEOSMaster ($name) - $string";
|
Log3 $name, 5, "HEOSMaster ($name) - $string";
|
||||||
syswrite($hash->{CD}, $string);
|
syswrite($hash->{CD}, $string);
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
@ -342,12 +324,12 @@ sub HEOSMaster_Read($) {
|
|||||||
my $len;
|
my $len;
|
||||||
my $buf;
|
my $buf;
|
||||||
|
|
||||||
Log3 $name, 3, "HEOSMaster ($name) - ReadFn gestartet";
|
Log3 $name, 4, "HEOSMaster ($name) - ReadFn gestartet";
|
||||||
|
|
||||||
$len = sysread($hash->{CD},$buf,4096);
|
$len = sysread($hash->{CD},$buf,1024); # die genaue Puffergröße wird noch ermittelt
|
||||||
|
|
||||||
if( !defined($len) || !$len ) {
|
if( !defined($len) || !$len ) {
|
||||||
Log 1, "Länge? !!!!!!!!!!";
|
Log 1, "unknown buffer length";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -357,12 +339,12 @@ sub HEOSMaster_Read($) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( $buf !~ m/^[\[{].*[}\]]$/ ) {
|
if( $buf !~ m/^[\[{].*[}\]]$/ ) {
|
||||||
Log3 $name, 3, "HEOSMaster ($name) - invalid json detected. start preprocessing";
|
Log3 $name, 4, "HEOSMaster ($name) - invalid json detected. start preprocessing";
|
||||||
HEOSMaster_PreResponseProsessing($hash,$buf);
|
HEOSMaster_PreResponseProsessing($hash,$buf);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Log3 $name, 3, "HEOSMaster ($name) - Daten: $buf";
|
Log3 $name, 5, "HEOSMaster ($name) - Daten: $buf";
|
||||||
HEOSMaster_ResponseProcessing($hash,$buf);
|
HEOSMaster_ResponseProcessing($hash,$buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -372,7 +354,7 @@ sub HEOSMaster_PreResponseProsessing($$) {
|
|||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
|
|
||||||
Log3 $name, 3, "HEOSMaster ($name) - pre processing respone data";
|
Log3 $name, 4, "HEOSMaster ($name) - pre processing respone data";
|
||||||
|
|
||||||
my $len = length($response);
|
my $len = length($response);
|
||||||
my @letterArray = split("",$response);
|
my @letterArray = split("",$response);
|
||||||
@ -415,13 +397,13 @@ sub HEOSMaster_ResponseProcessing($$) {
|
|||||||
my $decode_json;
|
my $decode_json;
|
||||||
|
|
||||||
|
|
||||||
Log3 $name, 3, "HEOSMaster ($name) - JSON String: $json";
|
Log3 $name, 5, "HEOSMaster ($name) - JSON String: $json";
|
||||||
|
|
||||||
return Log3 $name, 3, "HEOSMaster ($name) - empty answer received"
|
return Log3 $name, 3, "HEOSMaster ($name) - empty answer received"
|
||||||
unless( defined($json));
|
unless( defined($json));
|
||||||
|
|
||||||
|
|
||||||
Log3 $name, 3, "HEOSMaster ($name) - json detected: $json";
|
Log3 $name, 5, "HEOSMaster ($name) - json detected: $json";
|
||||||
$decode_json = decode_json($json);
|
$decode_json = decode_json($json);
|
||||||
|
|
||||||
return Log3 $name, 3, "HEOSMaster ($name) - decode_json has no Hash"
|
return Log3 $name, 3, "HEOSMaster ($name) - decode_json has no Hash"
|
||||||
@ -431,7 +413,7 @@ sub HEOSMaster_ResponseProcessing($$) {
|
|||||||
if( (defined($decode_json->{heos}{result}) and defined($decode_json->{heos}{command})) or ($decode_json->{heos}{command} =~ /^system/) ) {
|
if( (defined($decode_json->{heos}{result}) and defined($decode_json->{heos}{command})) or ($decode_json->{heos}{command} =~ /^system/) ) {
|
||||||
|
|
||||||
HEOSMaster_WriteReadings($hash,$decode_json);
|
HEOSMaster_WriteReadings($hash,$decode_json);
|
||||||
Log3 $name, 3, "HEOSMaster ($name) - call Sub HEOSMaster_WriteReadings";
|
Log3 $name, 4, "HEOSMaster ($name) - call Sub HEOSMaster_WriteReadings";
|
||||||
}
|
}
|
||||||
|
|
||||||
if( $decode_json->{heos}{command} =~ /^player/ or $decode_json->{heos}{command} =~ /^event\/player/ ) {
|
if( $decode_json->{heos}{command} =~ /^player/ or $decode_json->{heos}{command} =~ /^event\/player/ ) {
|
||||||
@ -444,7 +426,7 @@ sub HEOSMaster_ResponseProcessing($$) {
|
|||||||
$json .= '","heos": {"command": "player/get_players"}}';
|
$json .= '","heos": {"command": "player/get_players"}}';
|
||||||
|
|
||||||
Dispatch($hash,$json,undef);
|
Dispatch($hash,$json,undef);
|
||||||
Log3 $name, 3, "HEOSMaster ($name) - call Dispatcher";
|
Log3 $name, 4, "HEOSMaster ($name) - call Dispatcher";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -453,19 +435,19 @@ sub HEOSMaster_ResponseProcessing($$) {
|
|||||||
} elsif( defined($decode_json->{payload}{pid}) ) {
|
} elsif( defined($decode_json->{payload}{pid}) ) {
|
||||||
|
|
||||||
Dispatch($hash,$json,undef);
|
Dispatch($hash,$json,undef);
|
||||||
Log3 $name, 3, "HEOSMaster ($name) - call Dispatcher";
|
Log3 $name, 4, "HEOSMaster ($name) - call Dispatcher";
|
||||||
return;
|
return;
|
||||||
|
|
||||||
} elsif( $decode_json->{heos}{message} =~ /^pid=/ ) {
|
} elsif( $decode_json->{heos}{message} =~ /^pid=/ ) {
|
||||||
|
|
||||||
Dispatch($hash,$json,undef);
|
Dispatch($hash,$json,undef);
|
||||||
Log3 $name, 3, "HEOSMaster ($name) - call Dispatcher";
|
Log3 $name, 4, "HEOSMaster ($name) - call Dispatcher";
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Log3 $name, 3, "HEOSMaster ($name) - no Match for processing data";
|
Log3 $name, 4, "HEOSMaster ($name) - no Match for processing data";
|
||||||
}
|
}
|
||||||
|
|
||||||
sub HEOSMaster_WriteReadings($$) {
|
sub HEOSMaster_WriteReadings($$) {
|
||||||
@ -495,6 +477,46 @@ sub HEOSMaster_WriteReadings($$) {
|
|||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
###################
|
||||||
|
### my little Helpers
|
||||||
|
|
||||||
|
sub HEOSMaster_firstRun($) {
|
||||||
|
|
||||||
|
my $hash = shift;
|
||||||
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
|
|
||||||
|
RemoveInternalTimer($hash);
|
||||||
|
|
||||||
|
HEOSMaster_Open($hash) if( !IsDisabled($name) );
|
||||||
|
}
|
||||||
|
|
||||||
|
sub HEOSMaster_GetPlayers($) {
|
||||||
|
|
||||||
|
my $hash = shift;
|
||||||
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
|
|
||||||
|
HEOSMaster_Write($hash,'getPlayers',undef);
|
||||||
|
Log3 $name, 4, "HEOSMaster ($name) - getPlayers";
|
||||||
|
|
||||||
|
InternalTimer( gettimeofday()+2, 'HEOSMaster_EnableChangeEvents', $hash, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
sub HEOSMaster_EnableChangeEvents($) {
|
||||||
|
|
||||||
|
my $hash = shift;
|
||||||
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
|
|
||||||
|
RemoveInternalTimer($hash);
|
||||||
|
|
||||||
|
HEOSMaster_Write($hash,'enableChangeEvents','on');
|
||||||
|
Log3 $name, 3, "HEOSMaster ($name) - set enableChangeEvents on";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
152
21_HEOSPlayer.pm
152
21_HEOSPlayer.pm
@ -33,7 +33,7 @@ use warnings;
|
|||||||
use JSON;
|
use JSON;
|
||||||
|
|
||||||
|
|
||||||
my $version = "0.1.30";
|
my $version = "0.1.33";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -46,8 +46,11 @@ sub HEOSPlayer_Attr(@);
|
|||||||
sub HEOSPlayer_Parse($$);
|
sub HEOSPlayer_Parse($$);
|
||||||
sub HEOSPlayer_WriteReadings($$);
|
sub HEOSPlayer_WriteReadings($$);
|
||||||
sub HEOSPlayer_Set($$@);
|
sub HEOSPlayer_Set($$@);
|
||||||
sub HEOSPlayer_GetUpdate($);
|
|
||||||
sub HEOSPlayer_PreProcessingReadings($$);
|
sub HEOSPlayer_PreProcessingReadings($$);
|
||||||
|
sub HEOSPlayer_GetPlayerInfo($);
|
||||||
|
sub HEOSPlayer_GetPlayState($);
|
||||||
|
sub HEOSPlayer_GetNowPlayingMedia($);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -134,9 +137,13 @@ sub HEOSPlayer_Define($$) {
|
|||||||
|
|
||||||
|
|
||||||
if( $init_done ) {
|
if( $init_done ) {
|
||||||
HEOSPlayer_GetUpdate($hash);
|
InternalTimer( gettimeofday()+int(rand(2)), "HEOSPlayer_GetPlayerInfo", $hash, 0 );
|
||||||
|
InternalTimer( gettimeofday()+int(rand(4)), "HEOSPlayer_GetPlayState", $hash, 0 );
|
||||||
|
InternalTimer( gettimeofday()+int(rand(6)), "HEOSPlayer_GetNowPlayingMedia", $hash, 0 );
|
||||||
} else {
|
} else {
|
||||||
InternalTimer( gettimeofday()+15, "HEOSPlayer_GetUpdate", $hash, 0 );
|
InternalTimer( gettimeofday()+15+int(rand(2)), "HEOSPlayer_GetPlayerInfo", $hash, 0 );
|
||||||
|
InternalTimer( gettimeofday()+15+int(rand(4)), "HEOSPlayer_GetPlayState", $hash, 0 );
|
||||||
|
InternalTimer( gettimeofday()+15+int(rand(6)), "HEOSPlayer_GetNowPlayingMedia", $hash, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
@ -154,9 +161,10 @@ sub HEOSPlayer_Undef($$) {
|
|||||||
|
|
||||||
my $code = abs($pid);
|
my $code = abs($pid);
|
||||||
$code = $hash->{IODev}->{NAME} ."-". $code if( defined($hash->{IODev}->{NAME}) );
|
$code = $hash->{IODev}->{NAME} ."-". $code if( defined($hash->{IODev}->{NAME}) );
|
||||||
Log3 $name, 3, "HEOSPlayer ($name) - device deleted with Code: $code";
|
|
||||||
delete($modules{HEOSPlayer}{defptr}{$code});
|
delete($modules{HEOSPlayer}{defptr}{$code});
|
||||||
|
|
||||||
|
Log3 $name, 3, "HEOSPlayer ($name) - device $name deleted with Code: $code";
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -221,19 +229,19 @@ sub HEOSPlayer_Set($$@) {
|
|||||||
return "usage: play" if( @args != 0 );
|
return "usage: play" if( @args != 0 );
|
||||||
|
|
||||||
$heosCmd = 'setPlayState';
|
$heosCmd = 'setPlayState';
|
||||||
$action = 'state=play';
|
$action = "state=$cmd";
|
||||||
|
|
||||||
} elsif( $cmd eq 'stop' ) {
|
} elsif( $cmd eq 'stop' ) {
|
||||||
return "usage: stop" if( @args != 0 );
|
return "usage: stop" if( @args != 0 );
|
||||||
|
|
||||||
$heosCmd = 'setPlayState';
|
$heosCmd = 'setPlayState';
|
||||||
$action = 'state=stop';
|
$action = "state=$cmd";
|
||||||
|
|
||||||
} elsif( $cmd eq 'pause' ) {
|
} elsif( $cmd eq 'pause' ) {
|
||||||
return "usage: pause" if( @args != 0 );
|
return "usage: pause" if( @args != 0 );
|
||||||
|
|
||||||
$heosCmd = 'setPlayState';
|
$heosCmd = 'setPlayState';
|
||||||
$action = 'state=pause';
|
$action = "state=$cmd";
|
||||||
|
|
||||||
} elsif( $cmd eq 'mute' ) {
|
} elsif( $cmd eq 'mute' ) {
|
||||||
return "usage: mute on/off" if( @args != 1 );
|
return "usage: mute on/off" if( @args != 1 );
|
||||||
@ -256,21 +264,7 @@ sub HEOSPlayer_Set($$@) {
|
|||||||
$string .= "&$action" if( defined($action));
|
$string .= "&$action" if( defined($action));
|
||||||
|
|
||||||
IOWrite($hash,"$heosCmd","$string");
|
IOWrite($hash,"$heosCmd","$string");
|
||||||
Log3 $name, 3, "HEOSPlayer ($name) - IOWrite: $heosCmd${string} IODevHash=$hash->{IODev}";
|
Log3 $name, 4, "HEOSPlayer ($name) - IOWrite: $heosCmd${string} IODevHash=$hash->{IODev}";
|
||||||
|
|
||||||
return undef;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub HEOSPlayer_GetUpdate($) {
|
|
||||||
|
|
||||||
my $hash = shift;
|
|
||||||
|
|
||||||
|
|
||||||
RemoveInternalTimer($hash);
|
|
||||||
|
|
||||||
IOWrite($hash,'getPlayerInfo',"pid=$hash->{PID}");
|
|
||||||
IOWrite($hash,'getPlayState',"pid=$hash->{PID}");
|
|
||||||
IOWrite($hash,'getNowPlayingMedia',"pid=$hash->{PID}");
|
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
@ -285,7 +279,7 @@ sub HEOSPlayer_Parse($$) {
|
|||||||
|
|
||||||
$decode_json = decode_json($json);
|
$decode_json = decode_json($json);
|
||||||
|
|
||||||
Log3 $name, 3, "HEOSPlayer ($name) - ParseFn wurde aufgerufen";
|
Log3 $name, 4, "HEOSPlayer ($name) - ParseFn wurde aufgerufen";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -299,7 +293,7 @@ sub HEOSPlayer_Parse($$) {
|
|||||||
if( my $hash = $modules{HEOSPlayer}{defptr}{$code} ) {
|
if( my $hash = $modules{HEOSPlayer}{defptr}{$code} ) {
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
HEOSPlayer_GetUpdate($hash);
|
HEOSPlayer_GetUpdate($hash);
|
||||||
Log3 $name, 3, "HEOSPlayer ($name) - find logical device: $hash->{NAME}";
|
Log3 $name, 4, "HEOSPlayer ($name) - find logical device: $hash->{NAME}";
|
||||||
|
|
||||||
return $hash->{NAME};
|
return $hash->{NAME};
|
||||||
|
|
||||||
@ -321,7 +315,7 @@ sub HEOSPlayer_Parse($$) {
|
|||||||
} elsif ( $decode_json->{heos}{message} =~ /^pid=/ ) {
|
} elsif ( $decode_json->{heos}{message} =~ /^pid=/ ) {
|
||||||
my @pid = split('&', $decode_json->{heos}{message});
|
my @pid = split('&', $decode_json->{heos}{message});
|
||||||
$pid = substr($pid[0],4);
|
$pid = substr($pid[0],4);
|
||||||
Log3 $name, 3, "HEOSPlayer ($name) - PID[0]: $pid[0] and PID: $pid";
|
Log3 $name, 4, "HEOSPlayer ($name) - PID[0]: $pid[0] and PID: $pid";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -332,7 +326,7 @@ sub HEOSPlayer_Parse($$) {
|
|||||||
if( my $hash = $modules{HEOSPlayer}{defptr}{$code} ) {
|
if( my $hash = $modules{HEOSPlayer}{defptr}{$code} ) {
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
HEOSPlayer_WriteReadings($hash,$decode_json);
|
HEOSPlayer_WriteReadings($hash,$decode_json);
|
||||||
Log3 $name, 3, "HEOSPlayer ($name) - find logical device: $hash->{NAME}";
|
Log3 $name, 4, "HEOSPlayer ($name) - find logical device: $hash->{NAME}";
|
||||||
|
|
||||||
return $hash->{NAME};
|
return $hash->{NAME};
|
||||||
|
|
||||||
@ -358,34 +352,23 @@ sub HEOSPlayer_WriteReadings($$) {
|
|||||||
############################
|
############################
|
||||||
#### Aufbereiten der Daten soweit nötig (bei Events zum Beispiel)
|
#### Aufbereiten der Daten soweit nötig (bei Events zum Beispiel)
|
||||||
|
|
||||||
my ($string) = HEOSPlayer_PreProcessingReadings($hash,$decode_json)
|
my $readingsHash = HEOSPlayer_PreProcessingReadings($hash,$decode_json)
|
||||||
if( $decode_json->{heos}{message} =~ /^pid=/ );
|
if( $decode_json->{heos}{message} =~ /^pid=/ );
|
||||||
|
|
||||||
|
|
||||||
Log3 $name, 3, "HEOSPlayer ($name) - String: $string";
|
|
||||||
|
|
||||||
############################
|
############################
|
||||||
#### schreiben der Readings
|
#### schreiben der Readings
|
||||||
|
|
||||||
readingsBeginUpdate($hash);
|
readingsBeginUpdate($hash);
|
||||||
|
|
||||||
### Event Readings
|
### Event Readings
|
||||||
if( defined($string) ) {
|
if( defined($readingsHash) ) {
|
||||||
|
|
||||||
Log3 $name, 3, "HEOSPlayer ($name) - response json string back from HEOSPlayer_PreProcessingReadings: $string";
|
Log3 $name, 4, "HEOSPlayer ($name) - response json Hash back from HEOSPlayer_PreProcessingReadings";
|
||||||
|
|
||||||
|
|
||||||
my @valuestring = split( '@@@@', $string );
|
|
||||||
#my @valuestring = $string if( not defined($valuestring[0]));
|
|
||||||
my %buffer;
|
|
||||||
foreach( @valuestring ) {
|
|
||||||
my @values = split( '@@' , $_ );
|
|
||||||
$buffer{$values[0]} = $values[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
my $t;
|
my $t;
|
||||||
my $v;
|
my $v;
|
||||||
while( ( $t, $v ) = each %buffer ) {
|
while( ( $t, $v ) = each $readingsHash ) {
|
||||||
if( defined( $v ) ) {
|
if( defined( $v ) ) {
|
||||||
|
|
||||||
readingsBulkUpdate( $hash, $t, $v );
|
readingsBulkUpdate( $hash, $t, $v );
|
||||||
@ -405,24 +388,27 @@ sub HEOSPlayer_WriteReadings($$) {
|
|||||||
readingsBulkUpdate( $hash, 'ip-address', $decode_json->{payload}{ip} );
|
readingsBulkUpdate( $hash, 'ip-address', $decode_json->{payload}{ip} );
|
||||||
|
|
||||||
### playing Infos
|
### playing Infos
|
||||||
readingsBulkUpdate( $hash, 'type', $decode_json->{payload}{type} );
|
readingsBulkUpdate( $hash, 'currentMedia', $decode_json->{payload}{type} );
|
||||||
readingsBulkUpdate( $hash, 'song', $decode_json->{payload}{song} );
|
readingsBulkUpdate( $hash, 'currentTitle', $decode_json->{payload}{song} );
|
||||||
readingsBulkUpdate( $hash, 'album', $decode_json->{payload}{album} );
|
readingsBulkUpdate( $hash, 'currentAlbum', $decode_json->{payload}{album} );
|
||||||
readingsBulkUpdate( $hash, 'artist', $decode_json->{payload}{artist} );
|
readingsBulkUpdate( $hash, 'currentArtist', $decode_json->{payload}{artist} );
|
||||||
readingsBulkUpdate( $hash, 'imageUrl', $decode_json->{payload}{image_url} );
|
readingsBulkUpdate( $hash, 'currentImageUrl', $decode_json->{payload}{image_url} );
|
||||||
readingsBulkUpdate( $hash, 'mid', $decode_json->{payload}{mid} );
|
readingsBulkUpdate( $hash, 'currentMid', $decode_json->{payload}{mid} );
|
||||||
readingsBulkUpdate( $hash, 'qid', $decode_json->{payload}{qid} );
|
readingsBulkUpdate( $hash, 'currentQid', $decode_json->{payload}{qid} );
|
||||||
readingsBulkUpdate( $hash, 'sid', $decode_json->{payload}{sid} );
|
readingsBulkUpdate( $hash, 'currentSid', $decode_json->{payload}{sid} );
|
||||||
readingsBulkUpdate( $hash, 'station', $decode_json->{payload}{station} );
|
readingsBulkUpdate( $hash, 'currentStation', $decode_json->{payload}{station} );
|
||||||
|
|
||||||
|
|
||||||
|
readingsBulkUpdate( $hash, 'state', 'on' );
|
||||||
readingsEndUpdate( $hash, 1 );
|
readingsEndUpdate( $hash, 1 );
|
||||||
|
|
||||||
Log3 $name, 5, "HEOSPlayer ($name) - readings set for $name";
|
Log3 $name, 5, "HEOSPlayer ($name) - readings set for $name";
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
## little Helpers
|
### my little Helpers
|
||||||
|
|
||||||
sub HEOSPlayer_PreProcessingReadings($$) {
|
sub HEOSPlayer_PreProcessingReadings($$) {
|
||||||
|
|
||||||
@ -431,36 +417,30 @@ sub HEOSPlayer_PreProcessingReadings($$) {
|
|||||||
|
|
||||||
my $reading;
|
my $reading;
|
||||||
my $value;
|
my $value;
|
||||||
my $string = '';
|
my %buffer;
|
||||||
|
|
||||||
|
|
||||||
Log3 $name, 3, "HEOSPlayer ($name) - preprocessing readings";
|
Log3 $name, 4, "HEOSPlayer ($name) - preprocessing readings";
|
||||||
|
|
||||||
if ( $decode_json->{heos}{command} =~ /play_state/ ) {
|
if ( $decode_json->{heos}{command} =~ /play_state/ or $decode_json->{heos}{command} =~ /player_state_changed/ ) {
|
||||||
|
|
||||||
my @value = split('&', $decode_json->{heos}{message});
|
my @value = split('&', $decode_json->{heos}{message});
|
||||||
$value = '@@'.substr($value[1],6);
|
$buffer{'playStatus'} = substr($value[1],6);
|
||||||
$reading = 'state';
|
|
||||||
|
|
||||||
$string .= "$reading${value}";
|
|
||||||
|
|
||||||
} elsif ( $decode_json->{heos}{command} =~ /set_volume/ ) {
|
} elsif ( $decode_json->{heos}{command} =~ /set_volume/ ) {
|
||||||
|
|
||||||
my @value = split('&', $decode_json->{heos}{message});
|
my @value = split('&', $decode_json->{heos}{message});
|
||||||
$value = '@@'.substr($value[1],6);
|
$buffer{'volume'} = substr($value[1],6);
|
||||||
$reading = 'volume';
|
|
||||||
|
|
||||||
$string .= "$reading${value}";
|
|
||||||
|
|
||||||
} elsif ( $decode_json->{heos}{command} =~ /volume_changed/ ) {
|
} elsif ( $decode_json->{heos}{command} =~ /volume_changed/ ) {
|
||||||
|
|
||||||
my @value = split('&', $decode_json->{heos}{message});
|
my @value = split('&', $decode_json->{heos}{message});
|
||||||
$string .= 'volume';
|
$buffer{'volume'} = substr($value[1],6);
|
||||||
$string .= '@@'.substr($value[1],6);
|
$buffer{'mute'} = substr($value[2],5);
|
||||||
$string .= '@@@@mute';
|
|
||||||
$string .= '@@'.substr($value[2],5);
|
|
||||||
|
|
||||||
$string .= "$reading${value}";
|
} elsif ( $decode_json->{heos}{command} =~ /player_now_playing_changed/ ) {
|
||||||
|
|
||||||
|
IOWrite($hash,'getNowPlayingMedia',"pid=$hash->{PID}");
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
@ -468,10 +448,36 @@ sub HEOSPlayer_PreProcessingReadings($$) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Log3 $name, 3, "HEOSPlayer ($name) - no match found";
|
Log3 $name, 4, "HEOSPlayer ($name) - Match found for decode_json";
|
||||||
return $string;
|
return \%buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub HEOSPlayer_GetPlayerInfo($) {
|
||||||
|
|
||||||
|
my $hash = shift;
|
||||||
|
|
||||||
|
RemoveInternalTimer($hash,'HEOSPlayer_GetPlayerInfo');
|
||||||
|
IOWrite($hash,'getPlayerInfo',"pid=$hash->{PID}");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sub HEOSPlayer_GetPlayState($) {
|
||||||
|
|
||||||
|
my $hash = shift;
|
||||||
|
|
||||||
|
RemoveInternalTimer($hash,'HEOSPlayer_GetPlayState');
|
||||||
|
IOWrite($hash,'getPlayState',"pid=$hash->{PID}");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sub HEOSPlayer_GetNowPlayingMedia($) {
|
||||||
|
|
||||||
|
my $hash = shift;
|
||||||
|
|
||||||
|
RemoveInternalTimer($hash,'HEOSPlayer_GetNowPlayingMedia');
|
||||||
|
IOWrite($hash,'getNowPlayingMedia',"pid=$hash->{PID}");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user