diff --git a/fhem/CHANGED b/fhem/CHANGED
index de13674b9..7fd56b0e6 100644
--- a/fhem/CHANGED
+++ b/fhem/CHANGED
@@ -1,5 +1,8 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it.
+ - feature: 70_VIERA: new commands, direct access to apps, commands had
+ to be changed, if necessary reload RC layout
+ - bugfix: 70_VIERA: patch by nestor
- new: 98_MAX_Temperature.pm: new modul
- bugfix: 73_AutoShuttersControl: fix SelfDefense then drive day open
- bugfix: 73_AutoShuttersControl: fix adv icon for devStateIcon
diff --git a/fhem/FHEM/70_VIERA.pm b/fhem/FHEM/70_VIERA.pm
index 744c83cd0..d3e3a5bbe 100644
--- a/fhem/FHEM/70_VIERA.pm
+++ b/fhem/FHEM/70_VIERA.pm
@@ -9,9 +9,13 @@
# since version 1.25 modified by mabula
#
#
-# Version = 1.28
+# Version = 1.30
#
# Version History:
+# - 1.30 - 2020-01-10 Dr. H-J Breymayer
+# -- implemented additional commands, changed definition of commands
+# -- bugfix patch from Nestor
+#
# - 1.28 - 2019-12-14 Dr. H-J Breymayer
# -- correction of "Rolling Key" in case of bad command
# -- GetStatus call after on_off command
@@ -87,66 +91,93 @@ sub VIERA_RClayout_TV();
sub VIERA_RClayout_TV_SVG();
my %VIERA_remoteControl_args = (
- "NRC_CH_DOWN-ONOFF" => "Channel down",
- "NRC_CH_UP-ONOFF" => "Channel up",
- "NRC_VOLUP-ONOFF" => "Volume up",
- "NRC_VOLDOWN-ONOFF" => "Volume down",
- "NRC_MUTE-ONOFF" => "Mute",
- "NRC_TV-ONOFF" => "TV",
- "NRC_CHG_INPUT-ONOFF" => "AV",
- "NRC_RED-ONOFF" => "Red",
- "NRC_GREEN-ONOFF" => "Green",
- "NRC_YELLOW-ONOFF" => "Yellow",
- "NRC_BLUE-ONOFF" => "Blue",
- "NRC_VTOOLS-ONOFF" => "VIERA tools",
- "NRC_CANCEL-ONOFF" => "Cancel / Exit",
- "NRC_SUBMENU-ONOFF" => "Option",
- "NRC_RETURN-ONOFF" => "Return",
- "NRC_ENTER-ONOFF" => "Control Center click / enter",
- "NRC_RIGHT-ONOFF" => "Control RIGHT",
- "NRC_LEFT-ONOFF" => "Control LEFT",
- "NRC_UP-ONOFF" => "Control UP",
- "NRC_DOWN-ONOFF" => "Control DOWN",
- "NRC_3D-ONOFF" => "3D button",
- "NRC_SD_CARD-ONOFF" => "SD-card",
- "NRC_DISP_MODE-ONOFF" => "Display mode / Aspect ratio",
- "NRC_MENU-ONOFF" => "Menu",
- "NRC_INTERNET-ONOFF" => "VIERA connect",
- "NRC_VIERA_LINK-ONOFF"=> "VIERA link",
- "NRC_EPG-ONOFF" => "Guide / EPG",
- "NRC_TEXT-ONOFF" => "Text / TTV",
- "NRC_STTL-ONOFF" => "STTL / Subtitles",
- "NRC_INFO-ONOFF" => "Info",
- "NRC_INDEX-ONOFF" => "TTV index",
- "NRC_HOLD-ONOFF" => "TTV hold / image freeze",
- "NRC_R_TUNE-ONOFF" => "Last view",
- "NRC_POWER-ONOFF" => "Power off",
- "NRC_REW-ONOFF" => "Rewind",
- "NRC_PLAY-ONOFF" => "Play",
- "NRC_FF-ONOFF" => "Fast forward",
- "NRC_SKIP_PREV-ONOFF" => "Skip previous",
- "NRC_PAUSE-ONOFF" => "Pause",
- "NRC_SKIP_NEXT-ONOFF" => "Skip next",
- "NRC_STOP-ONOFF" => "Stop",
- "NRC_REC-ONOFF" => "Record",
- "NRC_D1-ONOFF" => "Digit 1",
- "NRC_D2-ONOFF" => "Digit 2",
- "NRC_D3-ONOFF" => "Digit 3",
- "NRC_D4-ONOFF" => "Digit 4",
- "NRC_D5-ONOFF" => "Digit 5",
- "NRC_D6-ONOFF" => "Digit 6",
- "NRC_D7-ONOFF" => "Digit 7",
- "NRC_D8-ONOFF" => "Digit 8",
- "NRC_D9-ONOFF" => "Digit 9",
- "NRC_D0-ONOFF" => "Digit 0",
- "NRC_P_NR-ONOFF" => "P-NR (Noise reduction)",
- "NRC_R_TUNE-ONOFF" => "Seems to do the same as INFO",
- "NRC_HDMI1" => "Switch to HDMI input 1",
- "NRC_HDMI2" => "Switch to HDMI input 2",
- "NRC_HDMI3" => "Switch to HDMI input 3",
- "NRC_HDMI4" => "Switch to HDMI input 4",
+ channel_down => "CH_DOWN",
+ channel_up => "CH_UP",
+ volume_up => "VOLUP",
+ volume_down => "VOLDOWN",
+ mute => "MUTE",
+ TV => "TV",
+ AV => "CHG_INPUT",
+ red_button => "RED",
+ green_button => "GREEN",
+ yellow_button => "YELLOW",
+ blue_button => "BLUE",
+ VIERA_tools => "VTOOLS",
+ cancel => "CANCEL",
+ exit => "CANCEL",
+ option => "SUBMENU",
+ return => "RETURN",
+ home => "HOME",
+ program => "PROG",
+ enter => "ENTER",
+ right => "RIGHT",
+ left => "LEFT",
+ up => "UP",
+ down => "DOWN",
+ "3D_button" => "3D",
+ SD_card => "SD_CARD",
+ display_mode => "DISP_MODE",
+ menu => "MENU",
+ VIERA_connect => "INTERNET",
+ VIERA_link => "VIERA_LINK",
+ EPG => "EPG",
+ guide => "GUIDE",
+ videotext => "TEXT",
+ subtitle => "STTL",
+ info => "INFO",
+ index => "INDEX",
+ hold => "HOLD",
+ last_view => "R_TUNE",
+ on_off => "POWER",
+ rewind => "REW",
+ play => "PLAY",
+ fast_forward => "FF",
+ skip_previous => "SKIP_PREV",
+ pause => "PAUSE",
+ skip_next => "SKIP_NEXT",
+ stop => "STOP",
+ record => "REC",
+ apps => "APPS",
+ aspect => "ASPECT",
+ favorite => "FAVORITE",
+ game => "GAME",
+ digit_1 => "D1",
+ digit_2 => "D2",
+ digit_3 => "D3",
+ digit_4 => "D4",
+ digit_5 => "D5",
+ digit_6 => "D6",
+ digit_7 => "D7",
+ digit_8 => "D8",
+ digit_9 => "D9",
+ digit_0 => "D0",
+ noise_reduction => "P_NR",
+ tune => "R_TUNE",
+ HDMI_1 => "HDMI1",
+ HDMI_2 => "HDMI2",
+ HDMI_3 => "HDMI3",
+ HDMI_4 => "HDMI4",
);
+my %VIERA_remoteControl_apps = (
+ netflix => "0010000200000001",
+ youtube => "0070000200180001",
+ shoutcast => "0070000400000001",
+ calendar => "0387878700150020",
+ browser => "0077777700160002",
+ amazonprime => "0010000100180001",
+ iplayer => "0020000A00000010",
+ bbc_iplayer => "0020000A00000010",
+ itv => "0387878700000124",
+ all_4 => "0387878700000125",
+ demand_5 => "0387878700000125",
+ recorded_tv => "0387878700000013",
+ multi_window => "0387878700000050",
+ bbc_news => "0020000A00000006",
+ bbc_sport => "0020000A00000007",
+ weather => "0070000C00000001",
+ developer => "0077777777777778",
+);
# Initialize the module and tell FHEM name of additional functions
# Param1: Hash of FHEM-Device
@@ -278,14 +309,16 @@ sub VIERA_Set($@) {
"volume:slider,0,1,100 ".
"channel ".
"remoteControl:" . join(",", sort keys %VIERA_remoteControl_args) . " " .
- "input:hdmi1,hdmi2,hdmi3,hdmi4,sdCard,tv";
+ "remoteControlApp:" . join(",", sort keys %VIERA_remoteControl_apps) . " " .
+ "input:HDMI_1,HDMI_2,HDMI_3,HDMI_4,SD_card,TV ".
+ "statusRequest:noArg ";
$usage =~ s/(NRC_|-ONOFF)//g;
- my $what = lc($a[0]);
+ my $what = $a[0];
return "\"set $name\" needs at least one argument" if(!defined($a[0]));
return "Unknown value $a[0] Device is not present or reachable (power on or check ethernet connection)" if(ReadingsVal($name,"state","off") eq "off" && $what ne "?");
return "Unknown value $a[0] use set $name on_off, choose one of on_off ?" if(ReadingsVal($name,"state","off") eq "dormant" && $what ne "on_off");
- my $state = lc($a[1]) if(defined($a[1]));
+ my $state = $a[1] if(defined($a[1]));
if ($what eq "mute"){
Log3 $name, 3, "$name: Set mute $state";
@@ -301,7 +334,7 @@ sub VIERA_Set($@) {
}
elsif ($what eq "on_off"){
Log3 $name, 3, "$name: Set on_off";
- VIERA_Encrypted_Command($hash, "POWER");
+ VIERA_Encrypted_Command($hash, "POWER", "key");
VIERA_Encrypt_Answer($hash);
sleep 0.6;
VIERA_GetStatus($hash, 1);
@@ -310,39 +343,49 @@ sub VIERA_Set($@) {
return "$name: Channel is too high or low!" if($state < 1 || $state > 9999);
Log3 $name, 3, "$name: Set channel $state";
for(my $i = 0; $i <= length($state)-1; $i++) {
- VIERA_Encrypted_Command($hash, "D".substr($state, $i, 1));
+ VIERA_Encrypted_Command($hash, "D".substr($state, $i, 1), "key");
sleep 0.1;
VIERA_Encrypt_Answer($hash);
}
- VIERA_Encrypted_Command($hash, "ENTER");
+ VIERA_Encrypted_Command($hash, "ENTER", "key");
VIERA_Encrypt_Answer($hash);
}
- elsif ($what eq "remotecontrol"){
- if($state eq "?"){
- $usage = "choose one of the states:\n";
- foreach $key (sort keys %VIERA_remoteControl_args){
- if(length($key) < 17){ $tab = "\t\t"; }else{ $tab = "\t"; }
- $usage .= "$key $tab=> $VIERA_remoteControl_args{$key}\n";
+ elsif ($what eq "remoteControl"){
+ Log3 $name, 3, "$name: Set remoteControl $state";
+
+ if( defined($VIERA_remoteControl_args{$state}) ) {
+ $state = $VIERA_remoteControl_args{$state};
+ Log3 $name, 4, "$name: Set remoteControl $state";
}
- $usage =~ s/(NRC_|-ONOFF)//g;
- return $usage;
- }
- else{
- $state = uc($state);
- Log3 $name, 3, "$name: Set remoteControl $state";
- VIERA_Encrypted_Command($hash, $state);
+ else {return "Unknown argument $what, $usage"}
+
+ VIERA_Encrypted_Command($hash, $state, "key");
VIERA_Encrypt_Answer($hash);
+ }
+ elsif ($what eq "remoteControlApp"){
+ Log3 $name, 3, "$name: Set remoteControlApp $state";
+
+ if( defined($VIERA_remoteControl_apps{$state}) ) {
+ $state = $VIERA_remoteControl_apps{$state};
+ Log3 $name, 4, "$name: Set remoteControlApp $state";
}
+ else {return "Unknown argument $what, $usage"}
+
+ VIERA_Encrypted_Command($hash, $state, "app");
+ VIERA_Encrypt_Answer($hash);
}
elsif ($what eq "input"){
- $state = uc($state);
- return "$name: Input $state isn't available." if($state ne "HDMI1" && $state ne "HDMI2" && $state ne "HDMI3" && $state ne "HDMI4" && $state ne "SDCARD" && $state ne "TV");
- $state = "SD_CARD" if ($state eq "SDCARD");
- Log3 $name, 3, "$name: Set input $state";
- VIERA_Encrypted_Command($hash, $state);
+ Log3 $name, 3, "$name: Set input $state";
+ if( defined($VIERA_remoteControl_args{$state}) ) {
+ $state = $VIERA_remoteControl_args{$state};
+ Log3 $name, 4, "$name: Set remoteControl $state";
+ }
+ else {return "Unknown argument $what, $usage"}
+
+ VIERA_Encrypted_Command($hash, $state, "key");
VIERA_Encrypt_Answer($hash);
}
- elsif ($what eq "statusrequest"){
+ elsif ($what eq "statusRequest"){
Log3 $name, 3, "$name: Set statusRequest";
VIERA_GetStatus($hash, 1);
}
@@ -369,7 +412,7 @@ sub VIERA_Get($@) {
return "$name: No argument given, $usage" if(int(@a) != 2);
- $what = lc($a[1]);
+ $what = $a[1];
if($what =~ /^(volume|mute|presence)$/) {
if (defined($hash->{READINGS}{$what})) {
@@ -540,7 +583,9 @@ sub VIERA_connection($$) {
Log3 $name, 5, "$name [$blocking]: Send Data to $hash->{helper}{HOST}:$hash->{helper}{PORT}:\n$data";
print $sock $data;
- while ((read $sock, $buff, 1024) > 0){
+ while (1){
+ my $res = read $sock, $buff, 1024;
+ last if (not defined($res) or $res == 0);
$buffer .= $buff;
}
@@ -556,48 +601,6 @@ sub VIERA_connection($$) {
}
-# Create RAW Data to sent pressed keys of remoteControl to device.
-# Param1: Hash of FHEM-Device
-# Param2: Name of key to send
-# Return: RAW html request for xml soap
-sub VIERA_BuildXML_NetCtrl($$) {
- my ($hash, $command) = @_;
-
- my $host = $hash->{helper}{HOST};
- my $port = $hash->{helper}{PORT};
-
- my $callsoap = "";
- my $message = "";
- my $head = "";
- my $blen = "";
-
- $callsoap .= "\r\n";
- $callsoap .= "
- 3D => 3D button
- BLUE => Blue
- CANCEL => Cancel / Exit
- CHG_INPUT => AV
- CH_DOWN => Channel down
- CH_UP => Channel up
- D0 => Digit 0
- D1 => Digit 1
- D2 => Digit 2
- D3 => Digit 3
- D4 => Digit 4
- D5 => Digit 5
- D6 => Digit 6
- D7 => Digit 7
- D8 => Digit 8
- D9 => Digit 9
- DISP_MODE => Display mode / Aspect ratio
- DOWN => Control DOWN
- ENTER => Control Center click / enter
- EPG => Guide / EPG
- FF => Fast forward
- GREEN => Green
- HOLD => TTV hold / image freeze
- INDEX => TTV index
- INFO => Info
- INTERNET => VIERA connect
- LEFT => Control LEFT
- MENU => Menu
- MUTE => Mute
- PAUSE => Pause
- PLAY => Play
- POWER => Power off
- P_NR => P-NR (Noise reduction)
- REC => Record
- RED => Red
- RETURN => Return
- REW => Rewind
- RIGHT => Control RIGHT
- R_TUNE => Seems to do the same as INFO
- SD_CARD => SD-card
- SKIP_NEXT => Skip next
- SKIP_PREV => Skip previous
- STOP => Stop
- STTL => STTL / Subtitles
- SUBMENU => Option
- TEXT => Text / TTV
- TV => TV
- UP => Control UP
- VIERA_LINK => VIERA link
- VOLDOWN => Volume down
- VOLUP => Volume up
- VTOOLS => VIERA tools
- YELLOW => Yellow
+ 3D_button => switch to 3D mode
+ apps => show apps
+ aspect => change aspect
+ AV => switch input to AV
+ blue_button => blue button
+ cancel => cancel or clear
+ channel_down => one channel down
+ channel_up => one channel up
+ digit_0 => Digit 0
+ digit_1 => Digit 1
+ digit_2 => Digit 2
+ digit_3 => Digit 3
+ digit_4 => Digit 4
+ digit_5 => Digit 5
+ digit_6 => Digit 6
+ digit_7 => Digit 7
+ digit_8 => Digit 8
+ digit_9 => Digit 9
+ display_mode
+ down => cursor down
+ enter => enter
+ EPG => program guide
+ exit => exit
+ fast_forward => fast foreward
+ favorite => favorites
+ game
+ green_button => green button
+ guide => guide
+ HDMI_1 => input HDMI 1
+ HDMI_2 => input HDMI 2
+ HDMI_3 => input HDMI 3
+ HDMI_4 => input HDMI 4
+ hold => hold
+ home => home
+ index => index
+ info => info
+ last_view => last view
+ left => cursor left
+ menu => menu
+ mute => mute
+ noise_reduction => noise reduction
+ on_off => on off switch
+ option => option
+ pause => pause
+ play => play
+ program => program
+ record => record
+ red_button => red button
+ return => return
+ rewind => rewind
+ right => cursor right
+ SD_card => SD card
+ skip_next => skip to next
+ skip_previous => skip to previous
+ stop => stop
+ subtitle => subtitle
+ tune => tune
+ TV => TV
+ up => cursor up
+ videotext => videotext
+ VIERA_connect
+ VIERA_link
+ VIERA_tools
+ volume_down => volume down
+ volume_up => volume up
+ yellow_button => yellow button
+
+ netflix
+ youtube
+ shoutcast
+ calendar
+ browser
+ amazonprime
+ iplayer
+ bbc_iplayer
+ itv
+ all_4
+ demand_5
+ recorded_tv
+ multi_window
+ bbc_news
+ bbc_sport
+ weather
+ developer
- 3D => 3D Knopf
- BLUE => Blau
- CANCEL => Cancel / Exit
- CHG_INPUT => AV
- CH_DOWN => Kanal runter
- CH_UP => Kanal hoch
- D0 => Ziffer 0
- D1 => Ziffer 1
- D2 => Ziffer 2
- D3 => Ziffer 3
- D4 => Ziffer 4
- D5 => Ziffer 5
- D6 => Ziffer 6
- D7 => Ziffer 7
- D8 => Ziffer 8
- D9 => Ziffer 9
- DISP_MODE => Anzeigemodus / Seitenverhältnis
- DOWN => Navigieren runter
- ENTER => Navigieren enter
- EPG => Guide / EPG
- FF => Vorspulen
- GREEN => Grün
- HOLD => Bild einfrieren
- INDEX => TTV index
- INFO => Info
- INTERNET => VIERA connect
- LEFT => Navigieren links
- MENU => Menü
- MUTE => Mute
- PAUSE => Pause
- PLAY => Play
- POWER => Power off
- P_NR => P-NR (Geräuschreduzierung)
- REC => Aufnehmen
- RED => Rot
- RETURN => Enter
- REW => Zurückspulen
- RIGHT => Navigieren Rechts
- R_TUNE => Vermutlich die selbe Funktion wie INFO
- SD_CARD => SD-card
- SKIP_NEXT => Skip next
- SKIP_PREV => Skip previous
- STOP => Stop
- STTL => Untertitel
- SUBMENU => Option
- TEXT => TeleText
- TV => TV
- UP => Navigieren Hoch
- VIERA_LINK => VIERA link
- VOLDOWN => Lauter
- VOLUP => Leiser
- VTOOLS => VIERA tools
- YELLOW => Gelb
+ 3D_button => in 3D Modus schalten
+ apps => apps anzeigen
+ aspect => Aspekt aendern
+ AV => Eingang auf AV umschalten
+ blue_button => blaue Taste
+ cancel => loeschen
+ channel_down => Kanal nach unten schalten
+ channel_up => Kanal nach oben schalten
+ digit_0 => Zahl 0
+ digit_1 => Zahl 1
+ digit_2 => Zahl 2
+ digit_3 => Zahl 3
+ digit_4 => Zahl 4
+ digit_5 => Zahl 5
+ digit_6 => Zahl 6
+ digit_7 => Zahl 7
+ digit_8 => Zahl 8
+ digit_9 => Zahl 9
+ display_mode
+ down => Pfeil nach unten
+ enter => Eingabe
+ EPG => elektronische Programmzeitschrift
+ exit => beenden
+ fast_forward => vorspulen
+ favorite => Favoriten
+ game
+ green_button => gruene Taste
+ guide => Programmzeitschrift
+ HDMI_1 => Eingang HDMI 1
+ HDMI_2 => Eingang HDMI 2
+ HDMI_3 => Eingang HDMI 3
+ HDMI_4 => Eingang HDMI 4
+ hold =>
+ home => Startbildschirm
+ index => Index
+ info => Info
+ last_view => letzte Ansicht
+ left => Pfeil nach unten
+ menu => Menue
+ mute => Ton aus
+ noise_reduction => Rauschreduzierung
+ on_off => Ein- / Ausschalter
+ option => Option
+ pause => Pause
+ play => Abspielen
+ program => Programm
+ record => Aufnahme
+ red_button => rote Taste
+ return => zurueck
+ rewind => zurueckspulen
+ right => Pfeil nach rechts
+ SD_card => => SD Karte
+ skip_next => springe vorwaerts
+ skip_previous => springe zurueck
+ stop => Stop
+ subtitle => Untertitel
+ tune => Suchlauf
+ TV => TV
+ up => Pfeil nach oben
+ videotext => Videotext
+ VIERA_connect
+ VIERA_link
+ VIERA_tools
+ volume_down => Lautstaerke leiser
+ volume_up => Lautstaerke lauter
+ yellow_button => gelbe Taste
+
+ netflix
+ youtube
+ shoutcast
+ calendar
+ browser
+ amazonprime
+ iplayer
+ bbc_iplayer
+ itv
+ all_4
+ demand_5
+ recorded_tv
+ multi_window
+ bbc_news
+ bbc_sport
+ weather
+ developer
+