readingschleife für eventhändling hinzugefügt

This commit is contained in:
Marko Oldenburg 2017-01-26 21:53:39 +01:00
parent 18ef7f7fa9
commit b098e86fdd
2 changed files with 58 additions and 21 deletions

View File

@ -45,14 +45,14 @@ use JSON;
use Net::Telnet; use Net::Telnet;
my $version = "0.1.28"; my $version = "0.1.30";
my %heosCmds = ( my %heosCmds = (
'enableChangeEvents' => 'system/register_for_change_events?enable=', 'enableChangeEvents' => 'system/register_for_change_events?enable=',
'getPlayers' => 'player/get_players', 'getPlayers' => 'player/get_players',
'getPlayerInfo' => 'player/get_player_info?', 'getPlayerInfo' => 'player/get_player_info?',
'getPlayerState' => 'player/get_player_state?', 'getPlayState' => 'player/get_play_state?',
'setPlayState' => 'player/set_play_state?', 'setPlayState' => 'player/set_play_state?',
'setMute' => 'player/set_mute?', 'setMute' => 'player/set_mute?',
'setVolume' => 'player/set_volume?', 'setVolume' => 'player/set_volume?',
@ -133,7 +133,7 @@ sub HEOSMaster_Define($$) {
readingsBeginUpdate($hash); readingsBeginUpdate($hash);
readingsBulkUpdate($hash,'state','Initialized'); readingsBulkUpdate($hash,'state','Initialized');
readingsBulkUpdate($hash,'enableEvents', 'off'); readingsBulkUpdate($hash,'enableChangeEvents', 'off');
readingsEndUpdate($hash,1); readingsEndUpdate($hash,1);
@ -227,7 +227,7 @@ sub HEOSMaster_Set($@) {
$action = join(' ',@args); $action = join(' ',@args);
} elsif($cmd eq 'eventSend') { } elsif($cmd eq 'eventSend') {
return "usage: enableChangeEvents" if( @args != 0 ); return "usage: eventSend" if( @args != 0 );
HEOSMaster_send($hash); HEOSMaster_send($hash);
return undef; return undef;

View File

@ -33,7 +33,7 @@ use warnings;
use JSON; use JSON;
my $version = "0.1.28"; my $version = "0.1.30";
@ -207,10 +207,10 @@ sub HEOSPlayer_Set($$@) {
$heosCmd = 'getPlayerInfo'; $heosCmd = 'getPlayerInfo';
} elsif( $cmd eq 'getPlayerState' ) { } elsif( $cmd eq 'getPlayState' ) {
return "usage: getPlayerState" if( @args != 0 ); return "usage: getPlayState" if( @args != 0 );
$heosCmd = 'getPlayerState'; $heosCmd = 'getPlayState';
} elsif( $cmd eq 'getNowPlayingMedia' ) { } elsif( $cmd eq 'getNowPlayingMedia' ) {
return "usage: getNowPlayingMedia" if( @args != 0 ); return "usage: getNowPlayingMedia" if( @args != 0 );
@ -248,11 +248,10 @@ sub HEOSPlayer_Set($$@) {
$action = "level=$args[0]"; $action = "level=$args[0]";
} else { } else {
my $list = "getPlayerInfo:noArg getPlayerState:noArg play:noArg stop:noArg pause:noArg mute:on,off volume:slider,0,5,100"; my $list = "getPlayerInfo:noArg getPlayState:noArg getNowPlayingMedia:noArg play:noArg stop:noArg pause:noArg mute:on,off volume:slider,0,5,100";
return "Unknown argument $cmd, choose one of $list"; return "Unknown argument $cmd, choose one of $list";
} }
#IOWrite($hash,"$heosCmd","pid=$hash->{PID}&$action");
$string .= "&$action" if( defined($action)); $string .= "&$action" if( defined($action));
@ -269,8 +268,9 @@ sub HEOSPlayer_GetUpdate($) {
RemoveInternalTimer($hash); RemoveInternalTimer($hash);
IOWrite($hash,'getPlayerState',"pid=$hash->{PID}");
IOWrite($hash,'getPlayerInfo',"pid=$hash->{PID}"); IOWrite($hash,'getPlayerInfo',"pid=$hash->{PID}");
IOWrite($hash,'getPlayState',"pid=$hash->{PID}");
IOWrite($hash,'getNowPlayingMedia',"pid=$hash->{PID}");
return undef; return undef;
} }
@ -358,15 +358,41 @@ sub HEOSPlayer_WriteReadings($$) {
############################ ############################
#### Aufbereiten der Daten soweit nötig (bei Events zum Beispiel) #### Aufbereiten der Daten soweit nötig (bei Events zum Beispiel)
my ($reading,$value) = HEOSPlayer_PreProcessingReadings($hash,$decode_json) my ($string) = 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);
readingsBulkUpdate( $hash, $reading, $value ) if( defined($reading) and defined($value));
### Event Readings
if( defined($string) ) {
Log3 $name, 3, "HEOSPlayer ($name) - response json string back from HEOSPlayer_PreProcessingReadings: $string";
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 $v;
while( ( $t, $v ) = each %buffer ) {
if( defined( $v ) ) {
readingsBulkUpdate( $hash, $t, $v );
}
}
}
### PlayerInfos ### PlayerInfos
readingsBulkUpdate( $hash, 'name', $decode_json->{payload}{name} ); readingsBulkUpdate( $hash, 'name', $decode_json->{payload}{name} );
@ -405,34 +431,45 @@ sub HEOSPlayer_PreProcessingReadings($$) {
my $reading; my $reading;
my $value; my $value;
my $string = '';
Log3 $name, 3, "HEOSPlayer ($name) - preprocessing readings"; Log3 $name, 3, "HEOSPlayer ($name) - preprocessing readings";
if ( $decode_json->{heos}{command} =~ /play_state/ ) { if ( $decode_json->{heos}{command} =~ /play_state/ ) {
my @value = split('&', $decode_json->{heos}{message}); my @value = split('&', $decode_json->{heos}{message});
$value = substr($value[1],6); $value = '@@'.substr($value[1],6);
$reading = 'state'; $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); $value = '@@'.substr($value[1],6);
$reading = 'volume'; $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});
$value = substr($value[1],6); $string .= 'volume';
$reading = 'volume'; $string .= '@@'.substr($value[1],6);
$string .= '@@@@mute';
$string .= '@@'.substr($value[2],5);
$string .= "$reading${value}";
} else { } else {
Log3 $name, 3, "HEOSPlayer ($name) - no match found"; Log3 $name, 3, "HEOSPlayer ($name) - no match found";
} }
return($reading,$value);
Log3 $name, 3, "HEOSPlayer ($name) - no match found";
return $string;
} }