auto enableEventChange

This commit is contained in:
Marko Oldenburg 2017-01-27 22:22:30 +01:00
parent b098e86fdd
commit 73f1cdca9e
2 changed files with 146 additions and 118 deletions

View File

@ -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";
}

View File

@ -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}");
}