Antw:Lautstärke von Philips TV abfragen [gelöst]

Begonnen von Carsten K., 18 Januar 2014, 17:14:48

Vorheriges Thema - Nächstes Thema

Carsten K.

Hallo,

ich möchte bei eingehendem Telefonanruf die TV-Lautstärke herunterstellen und danach wieder auf den ursprünglichen Wert.
Über Beispiele habe ich bereits mein Grundgerüst stehen.

Nach 2 Tagen suchen und ausprobieren habe ich noch folgendes Problem:
Das Modul 74_PhilipsTV.pm liefert über get {device} AudioVolume ein JSON-Hash (ich vermute, dass es sich um ein "JSON-Hash" handelt).
Die Rückgabe hat folgendes Muster (kommt auch im Konsolen-Log "tail -f ..."):
{
"muted": false,
"current": 24,
"min": 0,
"max": 60
}


Da ich in JSON und perl noch nicht versiert bin, habe ich hier Verständnisprobleme und konnte daher noch keinen eigenen Lösungsansatz finden.

Wo kann ich suchen, um den Wert von "current" in eine perl-Variable zu bekommen?


Sollte diese Frage in der falschen Gruppe stehen, bitte Hinweis, wo es besser hinpasst  ;)

Freundliche Grüße
NUC FHEM on Debian, CC1101-USB-Lite 868MHz;
HM_HM_CC_RT_DN, HM-LC-SW1-PL2, HM_HM_TC_IT_WM_W_EU, HM-SEC-SC-2, HM-ES-TX-WM
FRITZ!DECT 200
Philips TV (Android), VuDuo2, VU Ultimo4k

Starkstrombastler

Hi,

für die Dekodierung des JSON-Strings existiert bereits ein Perl-Modul: PP.pm

http://cpansearch.perl.org/src/MAKAMAKA/JSON-PP-2.27203/lib/JSON/PP.pm

Auf der Fritz-Box hierzu einen Ordner "JSON" anlegen:
   /fritz.nas/fhem/JSON

In der 99_Utils muss ergänzt werden:

use lib '.';
use JSON::PP;


Dann noch in der 99_Utils eine Funktion ergänzen (greift auf eine Funktion in 74_PhilipsTV zurück):

sub
get_Audio($)
{
my $devicename=shift;
my $json = JSON::PP->new;
my $JS_Stream = PhilipsTV_GetValue("/1/audio/volume",$devicename);
my $data = $json->decode($JS_Stream);
my $Level= $data->{current};
my $Mute= $data->{muted};
return $Level;
};


Die Funktion wird dann z.B. in einem at oder notify wie folgt verwendet

my $ip_adress="192.168.178.88";
my $volume=get_Audio($ip_adress);


Viel Erfolg!

IPC\Ubuntu + Fhem, 1wire, Shellies, Siemens Logo!, Z-Wave, PhilipsTV, Vu+duo2, KM200

Carsten K.

ich habe nicht damit gerechnet so eine präzise Antwort zu bekommen :D
Vielen Dank,  werde ich heute noch ausprobieren.
NUC FHEM on Debian, CC1101-USB-Lite 868MHz;
HM_HM_CC_RT_DN, HM-LC-SW1-PL2, HM_HM_TC_IT_WM_W_EU, HM-SEC-SC-2, HM-ES-TX-WM
FRITZ!DECT 200
Philips TV (Android), VuDuo2, VU Ultimo4k

Carsten K.

So, jetzt läuft's bei mir  ;D

Ich habe es komplett in die 99_myUtils.pm integriert:
...
use lib '.';
use JSON::PP;

sub getPhilipsTvAudioVolume($)
{
  my $deviceName = shift;
  my $volStream = PhilipsTV_GetValue("/1/audio/volume", $deviceName);
  my $json = JSON::PP->new;
  my $data = $json->decode($volStream);

  return $data;
}

sub testPhilipsTvVolume()
{
  my $data = getPhilipsTvAudioVolume("philips-tv.fritz.box");
  my $muted = $data->{muted};
  my $volume = $data->{current};
  Log 1, "MUTED: ".$muted;
  Log 1, "VOLUME: ".$volume;
}


VIELEN DANK !!!
NUC FHEM on Debian, CC1101-USB-Lite 868MHz;
HM_HM_CC_RT_DN, HM-LC-SW1-PL2, HM_HM_TC_IT_WM_W_EU, HM-SEC-SC-2, HM-ES-TX-WM
FRITZ!DECT 200
Philips TV (Android), VuDuo2, VU Ultimo4k