extended group support and bugfixes. special thanks to hanseis
This commit is contained in:
parent
8ae4f661be
commit
739617ae5d
@ -5,6 +5,10 @@
|
|||||||
# (c) 2017 Copyright: Marko Oldenburg (leongaultier at gmail dot com)
|
# (c) 2017 Copyright: Marko Oldenburg (leongaultier at gmail dot com)
|
||||||
# All rights reserved
|
# All rights reserved
|
||||||
#
|
#
|
||||||
|
# Special thanks goes to comitters:
|
||||||
|
# - Olaf Schnicke
|
||||||
|
#
|
||||||
|
#
|
||||||
# This script is free software; you can redistribute it and/or modify
|
# This script is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
@ -34,7 +38,7 @@ use JSON qw(decode_json);
|
|||||||
use Encode qw(encode_utf8);
|
use Encode qw(encode_utf8);
|
||||||
|
|
||||||
|
|
||||||
my $version = "0.1.51";
|
my $version = "0.1.56";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -50,6 +54,7 @@ sub HEOSGroup_Set($$@);
|
|||||||
sub HEOSGroup_PreProcessingReadings($$);
|
sub HEOSGroup_PreProcessingReadings($$);
|
||||||
sub HEOSGroup_GetGroupInfo($);
|
sub HEOSGroup_GetGroupInfo($);
|
||||||
sub HEOSGroup_GetGroupVolume($);
|
sub HEOSGroup_GetGroupVolume($);
|
||||||
|
sub HEOSGroup_GetGroupMute($);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -59,7 +64,7 @@ sub HEOSGroup_Initialize($) {
|
|||||||
|
|
||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
|
|
||||||
$hash->{Match} = '.*{"command":."group.*';
|
$hash->{Match} = '.*{"command":."group.*|.*{"command":."event\/group.*';
|
||||||
|
|
||||||
# Provider
|
# Provider
|
||||||
$hash->{SetFn} = "HEOSGroup_Set";
|
$hash->{SetFn} = "HEOSGroup_Set";
|
||||||
@ -139,9 +144,11 @@ sub HEOSGroup_Define($$) {
|
|||||||
if( $init_done ) {
|
if( $init_done ) {
|
||||||
InternalTimer( gettimeofday()+int(rand(2)), "HEOSGroup_GetGroupInfo", $hash, 0 );
|
InternalTimer( gettimeofday()+int(rand(2)), "HEOSGroup_GetGroupInfo", $hash, 0 );
|
||||||
InternalTimer( gettimeofday()+int(rand(4)), "HEOSGroup_GetGroupVolume", $hash, 0 );
|
InternalTimer( gettimeofday()+int(rand(4)), "HEOSGroup_GetGroupVolume", $hash, 0 );
|
||||||
|
InternalTimer( gettimeofday()+int(rand(6)), "HEOSGroup_GetGroupMute", $hash, 0 );
|
||||||
} else {
|
} else {
|
||||||
InternalTimer( gettimeofday()+15+int(rand(2)), "HEOSGroup_GetGroupInfo", $hash, 0 );
|
InternalTimer( gettimeofday()+15+int(rand(2)), "HEOSGroup_GetGroupInfo", $hash, 0 );
|
||||||
InternalTimer( gettimeofday()+15+int(rand(10)), "HEOSGroup_GetGroupVolume", $hash, 0 );
|
InternalTimer( gettimeofday()+15+int(rand(4)), "HEOSGroup_GetGroupVolume", $hash, 0 );
|
||||||
|
InternalTimer( gettimeofday()+15+int(rand(6)), "HEOSGroup_GetGroupMute", $hash, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
readingsBeginUpdate($hash);
|
readingsBeginUpdate($hash);
|
||||||
@ -287,6 +294,7 @@ sub HEOSGroup_Parse($$) {
|
|||||||
|
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
|
IOWrite($hash,'getGroupInfo',"gid=$hash->{GID}");
|
||||||
Log3 $name, 4, "HEOSGroup ($name) - find logical device: $hash->{NAME}";
|
Log3 $name, 4, "HEOSGroup ($name) - find logical device: $hash->{NAME}";
|
||||||
Log3 $name, 4, "HEOSGroup ($name) - find GID in root from decode_json";
|
Log3 $name, 4, "HEOSGroup ($name) - find GID in root from decode_json";
|
||||||
|
|
||||||
@ -373,26 +381,32 @@ sub HEOSGroup_WriteReadings($$) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
### PlayerInfos
|
### GroupInfos
|
||||||
readingsBulkUpdate( $hash, 'name', $decode_json->{payload}{name} );
|
readingsBulkUpdate( $hash, 'name', $decode_json->{payload}{name} );
|
||||||
readingsBulkUpdate( $hash, 'gid', $decode_json->{payload}{gid} );
|
readingsBulkUpdate( $hash, 'gid', $decode_json->{payload}{gid} );
|
||||||
readingsBulkUpdate( $hash, 'model', $decode_json->{payload}{model} );
|
|
||||||
readingsBulkUpdate( $hash, 'version', $decode_json->{payload}{version} );
|
|
||||||
readingsBulkUpdate( $hash, 'network', $decode_json->{payload}{network} );
|
|
||||||
readingsBulkUpdate( $hash, 'lineout', $decode_json->{payload}{lineout} );
|
|
||||||
readingsBulkUpdate( $hash, 'control', $decode_json->{payload}{control} );
|
|
||||||
readingsBulkUpdate( $hash, 'ip-address', $decode_json->{payload}{ip} );
|
|
||||||
|
|
||||||
### playing Infos
|
|
||||||
readingsBulkUpdate( $hash, 'currentMedia', $decode_json->{payload}{type} );
|
my @members;
|
||||||
readingsBulkUpdate( $hash, 'currentTitle', $decode_json->{payload}{song} );
|
|
||||||
readingsBulkUpdate( $hash, 'currentAlbum', $decode_json->{payload}{album} );
|
if( ref($decode_json->{payload}{players}) eq "ARRAY" ) {
|
||||||
readingsBulkUpdate( $hash, 'currentArtist', $decode_json->{payload}{artist} );
|
foreach my $player (@{ $decode_json->{payload}{players} }) {
|
||||||
readingsBulkUpdate( $hash, 'currentImageUrl', $decode_json->{payload}{image_url} );
|
|
||||||
readingsBulkUpdate( $hash, 'currentMid', $decode_json->{payload}{mid} );
|
readingsBulkUpdate( $hash, 'leader', $player->{name} ) if ( $player->{role} eq "leader" );
|
||||||
readingsBulkUpdate( $hash, 'currentQid', $decode_json->{payload}{qid} );
|
push( @members, $player->{name}) if ( $player->{role} eq "member" );
|
||||||
readingsBulkUpdate( $hash, 'currentSid', $decode_json->{payload}{sid} );
|
print"Player ###################################\n".Dumper($player);
|
||||||
readingsBulkUpdate( $hash, 'currentStation', $decode_json->{payload}{station} );
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( scalar @members > 1 ) {
|
||||||
|
|
||||||
|
readingsBulkUpdate( $hash, 'member', join(",",@members) );
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
readingsBulkUpdate( $hash, 'member', $members[0] );
|
||||||
|
}
|
||||||
|
|
||||||
|
print"Member ##################################\n".Dumper(@members);
|
||||||
|
|
||||||
|
|
||||||
readingsBulkUpdate( $hash, 'state', 'on' );
|
readingsBulkUpdate( $hash, 'state', 'on' );
|
||||||
@ -429,6 +443,10 @@ sub HEOSGroup_PreProcessingReadings($$) {
|
|||||||
$buffer{'volumeUp'} = substr($value[1],5) if( $decode_json->{heos}{command} =~ /volume_up/ );
|
$buffer{'volumeUp'} = substr($value[1],5) if( $decode_json->{heos}{command} =~ /volume_up/ );
|
||||||
$buffer{'volumeDown'} = substr($value[1],5) if( $decode_json->{heos}{command} =~ /volume_down/ );
|
$buffer{'volumeDown'} = substr($value[1],5) if( $decode_json->{heos}{command} =~ /volume_down/ );
|
||||||
|
|
||||||
|
} elsif ( $decode_json->{heos}{command} =~ /get_mute/ ) {
|
||||||
|
my @value = split('&', $decode_json->{heos}{message});
|
||||||
|
$buffer{'mute'} = substr($value[1],6);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
Log3 $name, 3, "HEOSGroup ($name) - no match found";
|
Log3 $name, 3, "HEOSGroup ($name) - no match found";
|
||||||
@ -458,6 +476,15 @@ sub HEOSGroup_GetGroupVolume($) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub HEOSGroup_GetGroupMute($) {
|
||||||
|
|
||||||
|
my $hash = shift;
|
||||||
|
|
||||||
|
RemoveInternalTimer($hash,'HEOSGroup_GetGroupMute');
|
||||||
|
IOWrite($hash,'getGroupMute',"gid=$hash->{GID}");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ use Encode qw(encode_utf8);
|
|||||||
use Net::Telnet;
|
use Net::Telnet;
|
||||||
|
|
||||||
|
|
||||||
my $version = "0.1.55";
|
my $version = "0.1.56";
|
||||||
|
|
||||||
|
|
||||||
my %heosCmds = (
|
my %heosCmds = (
|
||||||
@ -67,6 +67,8 @@ my %heosCmds = (
|
|||||||
'getGroupInfo' => 'group/get_group_info?',
|
'getGroupInfo' => 'group/get_group_info?',
|
||||||
'getPlayState' => 'player/get_play_state?',
|
'getPlayState' => 'player/get_play_state?',
|
||||||
'getPlayMode' => 'player/get_play_mode?',
|
'getPlayMode' => 'player/get_play_mode?',
|
||||||
|
'getMute' => 'player/get_mute?'
|
||||||
|
'getGroupMute' => 'group/get_mute?',
|
||||||
'clearQueue' => 'player/clear_queue?',
|
'clearQueue' => 'player/clear_queue?',
|
||||||
'saveQueue' => 'player/save_queue?',
|
'saveQueue' => 'player/save_queue?',
|
||||||
'getVolume' => 'player/get_volume?',
|
'getVolume' => 'player/get_volume?',
|
||||||
@ -74,12 +76,13 @@ my %heosCmds = (
|
|||||||
'setPlayState' => 'player/set_play_state?',
|
'setPlayState' => 'player/set_play_state?',
|
||||||
'setPlayMode' => 'player/set_play_mode?',
|
'setPlayMode' => 'player/set_play_mode?',
|
||||||
'setMute' => 'player/set_mute?',
|
'setMute' => 'player/set_mute?',
|
||||||
|
'setGroupMute' => 'group/set_mute?',
|
||||||
'playNext' => 'player/play_next?',
|
'playNext' => 'player/play_next?',
|
||||||
'playPrev' => 'player/play_prev?',
|
'playPrev' => 'player/play_prev?',
|
||||||
'playPresetStation' => 'browse/play_preset?',
|
'playPresetStation' => 'browse/play_preset?',
|
||||||
'playInput' => 'browse/play_input?',
|
'playInput' => 'browse/play_input?',
|
||||||
'playStream' => 'browse/play_stream?',
|
'playStream' => 'browse/play_stream?',
|
||||||
'playPlaylist' => 'browse/add_to_queue?',
|
'playPlaylist' => 'browse/add_to_queue?',
|
||||||
'setVolume' => 'player/set_volume?',
|
'setVolume' => 'player/set_volume?',
|
||||||
'setGroupVolume' => 'group/set_volume?',
|
'setGroupVolume' => 'group/set_volume?',
|
||||||
'volumeUp' => 'player/volume_up?',
|
'volumeUp' => 'player/volume_up?',
|
||||||
@ -137,7 +140,7 @@ sub HEOSMaster_Initialize($) {
|
|||||||
$hash->{WriteFn} = "HEOSMaster_Write";
|
$hash->{WriteFn} = "HEOSMaster_Write";
|
||||||
$hash->{Clients} = ":HEOSPlayer:";
|
$hash->{Clients} = ":HEOSPlayer:";
|
||||||
$hash->{MatchList} = { "1:HEOSPlayer" => '.*{"command":."player.*|.*{"command":."event\/player.*|.*{"command":."event\/repeat_mode_changed.*|.*{"command":."event\/shuffle_mode_changed.*|.*{"command":."event\/favorites_changed.*',
|
$hash->{MatchList} = { "1:HEOSPlayer" => '.*{"command":."player.*|.*{"command":."event\/player.*|.*{"command":."event\/repeat_mode_changed.*|.*{"command":."event\/shuffle_mode_changed.*|.*{"command":."event\/favorites_changed.*',
|
||||||
"2:HEOSGroup" => '.*{"command":."group.*'
|
"2:HEOSGroup" => '.*{"command":."group.*|.*{"command":."event\/group.*'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -386,6 +389,7 @@ sub HEOSMaster_Open($) {
|
|||||||
HEOSMaster_GetPlayers($hash);
|
HEOSMaster_GetPlayers($hash);
|
||||||
InternalTimer( gettimeofday()+1, 'HEOSMaster_EnableChangeEvents', $hash, 0 );
|
InternalTimer( gettimeofday()+1, 'HEOSMaster_EnableChangeEvents', $hash, 0 );
|
||||||
InternalTimer( gettimeofday()+2, 'HEOSMaster_GetMusicSources', $hash, 0 );
|
InternalTimer( gettimeofday()+2, 'HEOSMaster_GetMusicSources', $hash, 0 );
|
||||||
|
InternalTimer( gettimeofday()+3, 'HEOSMaster_GetGroups', $hash, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub HEOSMaster_Close($) {
|
sub HEOSMaster_Close($) {
|
||||||
@ -685,6 +689,14 @@ sub HEOSMaster_ResponseProcessing($$) {
|
|||||||
Log3 $name, 4, "HEOSMaster ($name) - user changed";
|
Log3 $name, 4, "HEOSMaster ($name) - user changed";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#Gruppen neu einlesen
|
||||||
|
if( $decode_json->{heos}{command} =~ /^event\/groups_changed/ ) {
|
||||||
|
#InternalTimer( gettimeofday()+5, 'HEOSMaster_GetGroups', $hash, 0 );
|
||||||
|
HEOSMaster_Write($hash,'getGroups',undef);
|
||||||
|
Log3 $name, 4, "HEOSMaster ($name) - groups changed";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if( $decode_json->{heos}{command} =~ /^player/ or $decode_json->{heos}{command} =~ /^event\/player/ or $decode_json->{heos}{command} =~ /^group/ or $decode_json->{heos}{command} =~ /^event\/group/ or $decode_json->{heos}{command} =~ /^event\/repeat_mode_changed/ or $decode_json->{heos}{command} =~ /^event\/shuffle_mode_changed/ ) {
|
if( $decode_json->{heos}{command} =~ /^player/ or $decode_json->{heos}{command} =~ /^event\/player/ or $decode_json->{heos}{command} =~ /^group/ or $decode_json->{heos}{command} =~ /^event\/group/ or $decode_json->{heos}{command} =~ /^event\/repeat_mode_changed/ or $decode_json->{heos}{command} =~ /^event\/shuffle_mode_changed/ ) {
|
||||||
|
|
||||||
@ -703,7 +715,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, 4, "HEOSMaster ($name) - call Dispatcher";
|
Log3 $name, 4, "HEOSMaster ($name) - call Dispatcher for Players";
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -718,7 +730,7 @@ sub HEOSMaster_ResponseProcessing($$) {
|
|||||||
$json .= '","heos": {"command": "group/get_groups"}}';
|
$json .= '","heos": {"command": "group/get_groups"}}';
|
||||||
|
|
||||||
Dispatch($hash,$json,undef);
|
Dispatch($hash,$json,undef);
|
||||||
Log3 $name, 4, "HEOSMaster ($name) - call Dispatcher";
|
Log3 $name, 4, "HEOSMaster ($name) - call Dispatcher for Groups";
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -727,10 +739,16 @@ 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, 4, "HEOSMaster ($name) - call Dispatcher";
|
Log3 $name, 4, "HEOSMaster ($name) - call Dispatcher for PlayerInfo";
|
||||||
return;
|
return;
|
||||||
|
|
||||||
} elsif( defined($decode_json->{heos}{message}) and $decode_json->{heos}{message} =~ /^pid=/ ) {
|
} elsif( defined($decode_json->{payload}{gid}) and defined($decode_json->{payload}{players}) ) {
|
||||||
|
|
||||||
|
Dispatch($hash,$json,undef);
|
||||||
|
Log3 $name, 4, "HEOSMaster ($name) - call Dispatcher for GroupInfo";
|
||||||
|
return;
|
||||||
|
|
||||||
|
} elsif( (defined($decode_json->{heos}{message})) and ($decode_json->{heos}{message} =~ /^pid=/ or $decode_json->{heos}{message} =~ /^gid=/) ) {
|
||||||
|
|
||||||
Dispatch($hash,$json,undef);
|
Dispatch($hash,$json,undef);
|
||||||
Log3 $name, 4, "HEOSMaster ($name) - call Dispatcher";
|
Log3 $name, 4, "HEOSMaster ($name) - call Dispatcher";
|
||||||
@ -863,6 +881,7 @@ sub HEOSMaster_PreProcessingReadings($$) {
|
|||||||
} elsif ( $decode_json->{heos}{command} eq 'system/check_account' or $decode_json->{heos}{command} eq 'system/sign_in' ) {
|
} elsif ( $decode_json->{heos}{command} eq 'system/check_account' or $decode_json->{heos}{command} eq 'system/sign_in' ) {
|
||||||
|
|
||||||
my @value = split('&', $decode_json->{heos}{message});
|
my @value = split('&', $decode_json->{heos}{message});
|
||||||
|
|
||||||
if( $decode_json->{heos}{message} eq 'signed_out' ) {
|
if( $decode_json->{heos}{message} eq 'signed_out' ) {
|
||||||
|
|
||||||
$buffer{'heosAccount'} = $value[0];
|
$buffer{'heosAccount'} = $value[0];
|
||||||
@ -870,6 +889,7 @@ sub HEOSMaster_PreProcessingReadings($$) {
|
|||||||
} else {
|
} else {
|
||||||
|
|
||||||
$buffer{'heosAccount'} = $value[0] . ' as ' . substr($value[1],3);
|
$buffer{'heosAccount'} = $value[0] . ' as ' . substr($value[1],3);
|
||||||
|
HEOSMaster_GetFavorites($hash) if( ReadingsVal($name,"enableChangeEvents", "off") eq "on" );
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -914,7 +934,7 @@ sub HEOSMaster_GetGroups($) {
|
|||||||
RemoveInternalTimer($hash,'HEOSMaster_GetGroups');
|
RemoveInternalTimer($hash,'HEOSMaster_GetGroups');
|
||||||
|
|
||||||
HEOSMaster_Write($hash,'getGroups',undef);
|
HEOSMaster_Write($hash,'getGroups',undef);
|
||||||
Log3 $name, 4, "HEOSMaster ($name) - getPlayers";
|
Log3 $name, 4, "HEOSMaster ($name) - getGroups";
|
||||||
}
|
}
|
||||||
|
|
||||||
sub HEOSMaster_EnableChangeEvents($) {
|
sub HEOSMaster_EnableChangeEvents($) {
|
||||||
|
@ -38,7 +38,7 @@ use JSON qw(decode_json);
|
|||||||
use Encode qw(encode_utf8);
|
use Encode qw(encode_utf8);
|
||||||
|
|
||||||
|
|
||||||
my $version = "0.1.55";
|
my $version = "0.1.56";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -58,6 +58,7 @@ sub HEOSPlayer_GetNowPlayingMedia($);
|
|||||||
sub HEOSPlayer_GetPlayMode($);
|
sub HEOSPlayer_GetPlayMode($);
|
||||||
sub HEOSPlayer_GetVolume($);
|
sub HEOSPlayer_GetVolume($);
|
||||||
sub HEOSPlayer_Get($$@);
|
sub HEOSPlayer_Get($$@);
|
||||||
|
sub HEOSPlayer_GetMute($);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -150,12 +151,14 @@ sub HEOSPlayer_Define($$) {
|
|||||||
InternalTimer( gettimeofday()+int(rand(6)), "HEOSPlayer_GetNowPlayingMedia", $hash, 0 );
|
InternalTimer( gettimeofday()+int(rand(6)), "HEOSPlayer_GetNowPlayingMedia", $hash, 0 );
|
||||||
InternalTimer( gettimeofday()+int(rand(8)), "HEOSPlayer_GetPlayMode", $hash, 0 );
|
InternalTimer( gettimeofday()+int(rand(8)), "HEOSPlayer_GetPlayMode", $hash, 0 );
|
||||||
InternalTimer( gettimeofday()+int(rand(10)), "HEOSPlayer_GetVolume", $hash, 0 );
|
InternalTimer( gettimeofday()+int(rand(10)), "HEOSPlayer_GetVolume", $hash, 0 );
|
||||||
|
InternalTimer( gettimeofday()+int(rand(12)), "HEOSPlayer_GetMute", $hash, 0 );
|
||||||
} else {
|
} else {
|
||||||
InternalTimer( gettimeofday()+15+int(rand(2)), "HEOSPlayer_GetPlayerInfo", $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(4)), "HEOSPlayer_GetPlayState", $hash, 0 );
|
||||||
InternalTimer( gettimeofday()+15+int(rand(6)), "HEOSPlayer_GetNowPlayingMedia", $hash, 0 );
|
InternalTimer( gettimeofday()+15+int(rand(6)), "HEOSPlayer_GetNowPlayingMedia", $hash, 0 );
|
||||||
InternalTimer( gettimeofday()+15+int(rand(8)), "HEOSPlayer_GetPlayMode", $hash, 0 );
|
InternalTimer( gettimeofday()+15+int(rand(8)), "HEOSPlayer_GetPlayMode", $hash, 0 );
|
||||||
InternalTimer( gettimeofday()+15+int(rand(10)), "HEOSPlayer_GetVolume", $hash, 0 );
|
InternalTimer( gettimeofday()+15+int(rand(10)), "HEOSPlayer_GetVolume", $hash, 0 );
|
||||||
|
InternalTimer( gettimeofday()+15+int(rand(12)), "HEOSPlayer_GetMute", $hash, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
readingsBeginUpdate($hash);
|
readingsBeginUpdate($hash);
|
||||||
@ -385,6 +388,11 @@ sub HEOSPlayer_Set($$@) {
|
|||||||
|
|
||||||
$pid .= ",$defs{$args[0]}->{PID}";
|
$pid .= ",$defs{$args[0]}->{PID}";
|
||||||
$heosCmd = 'createGroup';
|
$heosCmd = 'createGroup';
|
||||||
|
|
||||||
|
} elsif( $cmd eq 'clearGroup' ) {
|
||||||
|
return "usage: clearGroup" if( @args != 0 );
|
||||||
|
|
||||||
|
$heosCmd = 'createGroup';
|
||||||
|
|
||||||
} elsif( $cmd eq 'next' ) {
|
} elsif( $cmd eq 'next' ) {
|
||||||
|
|
||||||
@ -451,10 +459,6 @@ sub HEOSPlayer_Set($$@) {
|
|||||||
#$search =~ s/\s+/\ /g;
|
#$search =~ s/\s+/\ /g;
|
||||||
$search =~ s/\xC2\xA0/ /g;
|
$search =~ s/\xC2\xA0/ /g;
|
||||||
|
|
||||||
#print "Suchkriterium\n".Dumper($search);
|
|
||||||
#print hexdump(\$search);
|
|
||||||
#print "Quellen\n".Dumper($hash->{IODev}{helper}{sources});
|
|
||||||
|
|
||||||
if ( scalar @args == 1 && scalar @sids == 1 ) {
|
if ( scalar @args == 1 && scalar @sids == 1 ) {
|
||||||
|
|
||||||
readingsSingleUpdate($hash, "input", $args[0], 1);
|
readingsSingleUpdate($hash, "input", $args[0], 1);
|
||||||
@ -485,10 +489,6 @@ sub HEOSPlayer_Set($$@) {
|
|||||||
my $search = $args[0];
|
my $search = $args[0];
|
||||||
$search =~ s/\xC2\xA0/ /g;
|
$search =~ s/\xC2\xA0/ /g;
|
||||||
|
|
||||||
#print "Suchkriterium\n".Dumper($search);
|
|
||||||
#print hexdump(\$search);
|
|
||||||
#print "Medien\n".Dumper($hash->{IODev}{helper}{media});
|
|
||||||
|
|
||||||
my @ids = grep { $_->{name} =~ /\Q$search\E/i } (@{ $hash->{IODev}{helper}{media} });
|
my @ids = grep { $_->{name} =~ /\Q$search\E/i } (@{ $hash->{IODev}{helper}{media} });
|
||||||
#print "gefundenes Medium\n".Dumper(@ids);
|
#print "gefundenes Medium\n".Dumper(@ids);
|
||||||
|
|
||||||
@ -593,7 +593,6 @@ sub HEOSPlayer_Set($$@) {
|
|||||||
|
|
||||||
@media = map { my %n; $n{name} = $_->{name}; $n{name} =~ s/\s+/\ /g; $n{name} } (@{ $hash->{IODev}{helper}{media}});
|
@media = map { my %n; $n{name} = $_->{name}; $n{name} =~ s/\s+/\ /g; $n{name} } (@{ $hash->{IODev}{helper}{media}});
|
||||||
push(@media,"Alle") if grep { $_->{container} =~ /yes/i && $_->{playable} =~ /yes/i} (@{ $hash->{IODev}{helper}{media} });
|
push(@media,"Alle") if grep { $_->{container} =~ /yes/i && $_->{playable} =~ /yes/i} (@{ $hash->{IODev}{helper}{media} });
|
||||||
#print "#####################################################\n".Dumper(@media);
|
|
||||||
$list .= " media:".join(",",@media) if( scalar @media > 0 );
|
$list .= " media:".join(",",@media) if( scalar @media > 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -807,6 +806,10 @@ sub HEOSPlayer_PreProcessingReadings($$) {
|
|||||||
|
|
||||||
$buffer{'shuffle'} = substr($value[2],8);
|
$buffer{'shuffle'} = substr($value[2],8);
|
||||||
|
|
||||||
|
} elsif ( $decode_json->{heos}{command} =~ /get_mute/ ) {
|
||||||
|
my @value = split('&', $decode_json->{heos}{message});
|
||||||
|
$buffer{'mute'} = substr($value[1],6);
|
||||||
|
|
||||||
} elsif ( $decode_json->{heos}{command} =~ /volume_up/ or $decode_json->{heos}{command} =~ /volume_down/ ) {
|
} elsif ( $decode_json->{heos}{command} =~ /volume_up/ or $decode_json->{heos}{command} =~ /volume_down/ ) {
|
||||||
|
|
||||||
my @value = split('&', $decode_json->{heos}{message});
|
my @value = split('&', $decode_json->{heos}{message});
|
||||||
@ -905,6 +908,15 @@ sub HEOSPlayer_GetVolume($) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub HEOSPlayer_GetMute($) {
|
||||||
|
|
||||||
|
my $hash = shift;
|
||||||
|
|
||||||
|
RemoveInternalTimer($hash,'HEOSPlayer_GetMute');
|
||||||
|
IOWrite($hash,'getMute',"pid=$hash->{PID}");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user