Sony Bravia Fernseher/TV ansteuern (RasPi/ Linux)

Hier eine Variante Sony TVs zu steuern. Diese habe ich auf RasPi aktiv. Auf Ubuntu Linux dürfte es auch klappen. Danke für die Hilfe hier im Forum!

Ausgangsbasis dieser Scripts ist die Arbeit von:
https://github.com/breunigs/bravia-auth-and-remote

Es gibt zwei Varianten

  1. Script erstellen mit dem Inhalt „Sony Bravia steuern“ und dieses Script dann über include in andere Scripte einbinden und die Sony-Funktionen aufrufen.
  2. Script erstellen mit dem Inhalt „Sony Bravia schalten per Variable“

„Sony Bravia steuern“:


<?
// Ausgangsbasis dieses Scripts ist die Arbeit von:
// https://github.com/breunigs/bravia-auth-and-remote

// 1. im Sony Bravia ein statisches Passwort/& Pre-Shared-Key einstellen (Details siehe Readme.txt bei github (siehe oben))
// 2. in der Datei send_command.sh das eben gesetzte Passwort hinter "X-Auth-PSK:" eintragen
// 3. Datei bzw. Ordner auf den RasPi schieben
// 4. Die auf den RasPi kopierte Datei muss ausführbar (Berechtigung "x" für Execute) gemacht werden!
// 5. ggf. curl auf Linux/ RasPi installieren

// So kann über Linux Ubuntu getestet werden, wenn curl installiert ist über den terminal:
// ./send_command.sh 192.168.178.29 AAAAAQAAAAEAAAATAw==

// Tipps um das auf dem RasPi zum laufen zu bringen sind von Ralla in diesem Beitrag zu finden:
// https://www.symcon.de/forum/threads/32156-Auf-RasPi-Linux-Befehle-ausführen?p=298340
// Die auf den RasPi kopierte Datei muss ausführbar (Berechtigung "x" für Execute) gemacht werden!

/*Ausgewählte Befehle für Sony Bravia 2015er-Modell KD-43x8307C:
TV Power: AAAAAQAAAAEAAAAVAw==
Power off: AAAAAQAAAAEAAAAvAw==
Wake up: AAAAAQAAAAEAAAAuAw==
HDMI 1: AAAAAgAAABoAAABaAw==
HDMI 2: AAAAAgAAABoAAABbAw==
HDMI 3: AAAAAgAAABoAAABcAw==
Mute: AAAAAQAAAAEAAAAUAw==
Volume up: AAAAAQAAAAEAAAASAw==
Volume down: AAAAAQAAAAEAAAATAw==
*/

//-----------------config------------------------
$ip = "192.168.178.29"; //IP-Adresse vom Fernseher in eurem Netzwerk
$pfad = "/var/lib/symcon/bravia"; //z.B. "/var/lib/symcon/bravia" Pfad auf eurem RasPi
//-----------------config------------------------

//--------------->Beispiel zum DIREKT ANSTEUERN<-------------------------------------------------
/*
 $cmd = "AAAAAQAAAAEAAAAvAw==";
 $result = IPS_Execute("$pfad/send_command.sh","$ip $cmd",false,true);
*/

//--------------->ODER per FUNKTION<-------------------------------------------------
//Dieses Script per include Befehl in jedem Script wo die Functions benutzt werden zu beginn einbinden
//danach stehen die SONY_Functions in dem Script zur Verfügung
//Die Befehle sind CaseSensitive!!!!
// und dann so aufrufen: SONY_Power($ip, $pfad);

function SONY_Power($ip, $pfad)
{
 $cmd = "AAAAAQAAAAEAAAAVAw==";
 $result = IPS_Execute("$pfad/send_command.sh","$ip $cmd",false,true);
}

function SONY_WakeUp($ip, $pfad)
{
 $cmd = "AAAAAQAAAAEAAAAuAw==";
 $result = IPS_Execute("$pfad/send_command.sh","$ip $cmd",false,true);
}

function SONY_OFF($ip, $pfad)
{
 $cmd = "AAAAAQAAAAEAAAAvAw==";
 $result = IPS_Execute("$pfad/send_command.sh","$ip $cmd",false,true);
}

function SONY_MUTE($ip, $pfad)
{
 $cmd = "AAAAAQAAAAEAAAAUAw==";
 $result = IPS_Execute("$pfad/send_command.sh","$ip $cmd",false,true);
}

function SONY_up($ip, $pfad)
{
 $cmd = "AAAAAQAAAAEAAAASAw==";
 $result = IPS_Execute("$pfad/send_command.sh","$ip $cmd",false,true);
}

function SONY_down($ip, $pfad)
{
 $cmd = "AAAAAQAAAAEAAAATAw==";
 $result = IPS_Execute("$pfad/send_command.sh","$ip $cmd",false,true);
}

function SONY_HDMI1($ip, $pfad)
{
 $cmd = "AAAAAgAAABoAAABaAw==";
 $result = IPS_Execute("$pfad/send_command.sh","$ip $cmd",false,true);
}

function SONY_HDMI2($ip, $pfad)
{
 $cmd = "AAAAAgAAABoAAABbAw==";
 $result = IPS_Execute("$pfad/send_command.sh","$ip $cmd",false,true);
}

function SONY_HDMI3($ip, $pfad)
{
 $cmd = "AAAAAgAAABoAAABcAw==";
 $result = IPS_Execute("$pfad/send_command.sh","$ip $cmd",false,true);
}


/* Um alle Befehle des TVs zu bekommen im Terminal/putty diesen Befehl ausführen: print_ircc_codes.sh IP-des-TVs
Dies ist das Ergebnis für den Sony Bravia KD-43x8307C:
{
    "id": 10,
    "result": [
        {
            "bundled": true,
            "type": "IR_REMOTE_BUNDLE_TYPE_AEP_N"
        },
        [
            {
                "name": "Num1",
                "value": "AAAAAQAAAAEAAAAAAw=="
            },
            {
                "name": "Num2",
                "value": "AAAAAQAAAAEAAAABAw=="
            },
            {
                "name": "Num3",
                "value": "AAAAAQAAAAEAAAACAw=="
            },
            {
                "name": "Num4",
                "value": "AAAAAQAAAAEAAAADAw=="
            },
            {
                "name": "Num5",
                "value": "AAAAAQAAAAEAAAAEAw=="
            },
            {
                "name": "Num6",
                "value": "AAAAAQAAAAEAAAAFAw=="
            },
            {
                "name": "Num7",
                "value": "AAAAAQAAAAEAAAAGAw=="
            },
            {
                "name": "Num8",
                "value": "AAAAAQAAAAEAAAAHAw=="
            },
            {
                "name": "Num9",
                "value": "AAAAAQAAAAEAAAAIAw=="
            },
            {
                "name": "Num0",
                "value": "AAAAAQAAAAEAAAAJAw=="
            },
            {
                "name": "Num11",
                "value": "AAAAAQAAAAEAAAAKAw=="
            },
            {
                "name": "Num12",
                "value": "AAAAAQAAAAEAAAALAw=="
            },
            {
                "name": "Enter",
                "value": "AAAAAQAAAAEAAAALAw=="
            },
            {
                "name": "GGuide",
                "value": "AAAAAQAAAAEAAAAOAw=="
            },
            {
                "name": "ChannelUp",
                "value": "AAAAAQAAAAEAAAAQAw=="
            },
            {
                "name": "ChannelDown",
                "value": "AAAAAQAAAAEAAAARAw=="
            },
            {
                "name": "VolumeUp",
                "value": "AAAAAQAAAAEAAAASAw=="
            },
            {
                "name": "VolumeDown",
                "value": "AAAAAQAAAAEAAAATAw=="
            },
            {
                "name": "Mute",
                "value": "AAAAAQAAAAEAAAAUAw=="
            },
            {
                "name": "TvPower",
                "value": "AAAAAQAAAAEAAAAVAw=="
            },
            {
                "name": "Audio",
                "value": "AAAAAQAAAAEAAAAXAw=="
            },
            {
                "name": "MediaAudioTrack",
                "value": "AAAAAQAAAAEAAAAXAw=="
            },
            {
                "name": "Tv",
                "value": "AAAAAQAAAAEAAAAkAw=="
            },
            {
                "name": "Input",
                "value": "AAAAAQAAAAEAAAAlAw=="
            },
            {
                "name": "TvInput",
                "value": "AAAAAQAAAAEAAAAlAw=="
            },
            {
                "name": "TvAntennaCable",
                "value": "AAAAAQAAAAEAAAAqAw=="
            },
            {
                "name": "WakeUp",
                "value": "AAAAAQAAAAEAAAAuAw=="
            },
            {
                "name": "PowerOff",
                "value": "AAAAAQAAAAEAAAAvAw=="
            },
            {
                "name": "Sleep",
                "value": "AAAAAQAAAAEAAAAvAw=="
            },
            {
                "name": "Right",
                "value": "AAAAAQAAAAEAAAAzAw=="
            },
            {
                "name": "Left",
                "value": "AAAAAQAAAAEAAAA0Aw=="
            },
            {
                "name": "SleepTimer",
                "value": "AAAAAQAAAAEAAAA2Aw=="
            },
            {
                "name": "Analog2",
                "value": "AAAAAQAAAAEAAAA4Aw=="
            },
            {
                "name": "TvAnalog",
                "value": "AAAAAQAAAAEAAAA4Aw=="
            },
            {
                "name": "Display",
                "value": "AAAAAQAAAAEAAAA6Aw=="
            },
            {
                "name": "Jump",
                "value": "AAAAAQAAAAEAAAA7Aw=="
            },
            {
                "name": "PicOff",
                "value": "AAAAAQAAAAEAAAA+Aw=="
            },
            {
                "name": "PictureOff",
                "value": "AAAAAQAAAAEAAAA+Aw=="
            },
            {
                "name": "Teletext",
                "value": "AAAAAQAAAAEAAAA/Aw=="
            },
            {
                "name": "Video1",
                "value": "AAAAAQAAAAEAAABAAw=="
            },
            {
                "name": "Video2",
                "value": "AAAAAQAAAAEAAABBAw=="
            },
            {
                "name": "AnalogRgb1",
                "value": "AAAAAQAAAAEAAABDAw=="
            },
            {
                "name": "Home",
                "value": "AAAAAQAAAAEAAABgAw=="
            },
            {
                "name": "Exit",
                "value": "AAAAAQAAAAEAAABjAw=="
            },
            {
                "name": "PictureMode",
                "value": "AAAAAQAAAAEAAABkAw=="
            },
            {
                "name": "Confirm",
                "value": "AAAAAQAAAAEAAABlAw=="
            },
            {
                "name": "Up",
                "value": "AAAAAQAAAAEAAAB0Aw=="
            },
            {
                "name": "Down",
                "value": "AAAAAQAAAAEAAAB1Aw=="
            },
            {
                "name": "ClosedCaption",
                "value": "AAAAAgAAAKQAAAAQAw=="
            },
            {
                "name": "Component1",
                "value": "AAAAAgAAAKQAAAA2Aw=="
            },
            {
                "name": "Component2",
                "value": "AAAAAgAAAKQAAAA3Aw=="
            },
            {
                "name": "Wide",
                "value": "AAAAAgAAAKQAAAA9Aw=="
            },
            {
                "name": "EPG",
                "value": "AAAAAgAAAKQAAABbAw=="
            },
            {
                "name": "PAP",
                "value": "AAAAAgAAAKQAAAB3Aw=="
            },
            {
                "name": "TenKey",
                "value": "AAAAAgAAAJcAAAAMAw=="
            },
            {
                "name": "BSCS",
                "value": "AAAAAgAAAJcAAAAQAw=="
            },
            {
                "name": "Ddata",
                "value": "AAAAAgAAAJcAAAAVAw=="
            },
            {
                "name": "Stop",
                "value": "AAAAAgAAAJcAAAAYAw=="
            },
            {
                "name": "Pause",
                "value": "AAAAAgAAAJcAAAAZAw=="
            },
            {
                "name": "Play",
                "value": "AAAAAgAAAJcAAAAaAw=="
            },
            {
                "name": "Rewind",
                "value": "AAAAAgAAAJcAAAAbAw=="
            },
            {
                "name": "Forward",
                "value": "AAAAAgAAAJcAAAAcAw=="
            },
            {
                "name": "DOT",
                "value": "AAAAAgAAAJcAAAAdAw=="
            },
            {
                "name": "Rec",
                "value": "AAAAAgAAAJcAAAAgAw=="
            },
            {
                "name": "Return",
                "value": "AAAAAgAAAJcAAAAjAw=="
            },
            {
                "name": "Blue",
                "value": "AAAAAgAAAJcAAAAkAw=="
            },
            {
                "name": "Red",
                "value": "AAAAAgAAAJcAAAAlAw=="
            },
            {
                "name": "Green",
                "value": "AAAAAgAAAJcAAAAmAw=="
            },
            {
                "name": "Yellow",
                "value": "AAAAAgAAAJcAAAAnAw=="
            },
            {
                "name": "SubTitle",
                "value": "AAAAAgAAAJcAAAAoAw=="
            },
            {
                "name": "CS",
                "value": "AAAAAgAAAJcAAAArAw=="
            },
            {
                "name": "BS",
                "value": "AAAAAgAAAJcAAAAsAw=="
            },
            {
                "name": "Digital",
                "value": "AAAAAgAAAJcAAAAyAw=="
            },
            {
                "name": "Options",
                "value": "AAAAAgAAAJcAAAA2Aw=="
            },
            {
                "name": "Media",
                "value": "AAAAAgAAAJcAAAA4Aw=="
            },
            {
                "name": "Prev",
                "value": "AAAAAgAAAJcAAAA8Aw=="
            },
            {
                "name": "Next",
                "value": "AAAAAgAAAJcAAAA9Aw=="
            },
            {
                "name": "DpadCenter",
                "value": "AAAAAgAAAJcAAABKAw=="
            },
            {
                "name": "CursorUp",
                "value": "AAAAAgAAAJcAAABPAw=="
            },
            {
                "name": "CursorDown",
                "value": "AAAAAgAAAJcAAABQAw=="
            },
            {
                "name": "CursorLeft",
                "value": "AAAAAgAAAJcAAABNAw=="
            },
            {
                "name": "CursorRight",
                "value": "AAAAAgAAAJcAAABOAw=="
            },
            {
                "name": "ShopRemoteControlForcedDynamic",
                "value": "AAAAAgAAAJcAAABqAw=="
            },
            {
                "name": "FlashPlus",
                "value": "AAAAAgAAAJcAAAB4Aw=="
            },
            {
                "name": "FlashMinus",
                "value": "AAAAAgAAAJcAAAB5Aw=="
            },
            {
                "name": "AudioQualityMode",
                "value": "AAAAAgAAAJcAAAB7Aw=="
            },
            {
                "name": "DemoMode",
                "value": "AAAAAgAAAJcAAAB8Aw=="
            },
            {
                "name": "Analog",
                "value": "AAAAAgAAAHcAAAANAw=="
            },
            {
                "name": "Mode3D",
                "value": "AAAAAgAAAHcAAABNAw=="
            },
            {
                "name": "DigitalToggle",
                "value": "AAAAAgAAAHcAAABSAw=="
            },
            {
                "name": "DemoSurround",
                "value": "AAAAAgAAAHcAAAB7Aw=="
            },
            {
                "name": "*AD",
                "value": "AAAAAgAAABoAAAA7Aw=="
            },
            {
                "name": "AudioMixUp",
                "value": "AAAAAgAAABoAAAA8Aw=="
            },
            {
                "name": "AudioMixDown",
                "value": "AAAAAgAAABoAAAA9Aw=="
            },
            {
                "name": "PhotoFrame",
                "value": "AAAAAgAAABoAAABVAw=="
            },
            {
                "name": "Tv_Radio",
                "value": "AAAAAgAAABoAAABXAw=="
            },
            {
                "name": "SyncMenu",
                "value": "AAAAAgAAABoAAABYAw=="
            },
            {
                "name": "Hdmi1",
                "value": "AAAAAgAAABoAAABaAw=="
            },
            {
                "name": "Hdmi2",
                "value": "AAAAAgAAABoAAABbAw=="
            },
            {
                "name": "Hdmi3",
                "value": "AAAAAgAAABoAAABcAw=="
            },
            {
                "name": "Hdmi4",
                "value": "AAAAAgAAABoAAABdAw=="
            },
            {
                "name": "TopMenu",
                "value": "AAAAAgAAABoAAABgAw=="
            },
            {
                "name": "PopUpMenu",
                "value": "AAAAAgAAABoAAABhAw=="
            },
            {
                "name": "OneTouchTimeRec",
                "value": "AAAAAgAAABoAAABkAw=="
            },
            {
                "name": "OneTouchView",
                "value": "AAAAAgAAABoAAABlAw=="
            },
            {
                "name": "DUX",
                "value": "AAAAAgAAABoAAABzAw=="
            },
            {
                "name": "FootballMode",
                "value": "AAAAAgAAABoAAAB2Aw=="
            },
            {
                "name": "iManual",
                "value": "AAAAAgAAABoAAAB7Aw=="
            },
            {
                "name": "Netflix",
                "value": "AAAAAgAAABoAAAB8Aw=="
            },
            {
                "name": "Assists",
                "value": "AAAAAgAAAMQAAAA7Aw=="
            },
            {
                "name": "ActionMenu",
                "value": "AAAAAgAAAMQAAABLAw=="
            },
            {
                "name": "Help",
                "value": "AAAAAgAAAMQAAABNAw=="
            },
            {
                "name": "TvSatellite",
                "value": "AAAAAgAAAMQAAABOAw=="
            },
            {
                "name": "WirelessSubwoofer",
                "value": "AAAAAgAAAMQAAAB+Aw=="
            }
        ]
    ]
}
*/
?>


zur 2. Variante:

  1. Dummy-Instanz anlegen
  2. Integer-Variable anlegen (bei mir „Sony schalten“)
  3. neues Variablen-Profil anlegen und mit den Werten belegen (siehe Screenshot)
  4. dahinter habe ich als nicht sichtbares Objekt das Script angehängt (siehe Screenshot)

„Sony Bravia schalten per Variable“


<?
/*Ausgewählte Befehle für Sony Bravia 2015er-Modell KD-43x8307C:
TV Power: AAAAAQAAAAEAAAAVAw==
Power off: AAAAAQAAAAEAAAAvAw==
Wake up: AAAAAQAAAAEAAAAuAw==
HDMI 1: AAAAAgAAABoAAABaAw==
HDMI 2: AAAAAgAAABoAAABbAw==
HDMI 3: AAAAAgAAABoAAABcAw==
Mute: AAAAAQAAAAEAAAAUAw==
Volume up: AAAAAQAAAAEAAAASAw==
Volume down: AAAAAQAAAAEAAAATAw==
*/

// Unbedingt darauf achten, dass die Berechtigung X für Execute bei der Datei send_command.sh gesetzt ist!

//-----------------config------------------------
$ip = "192.168.178.29"; //IP-Adresse vom Fernseher in eurem Netzwerk
$pfad = "/var/lib/symcon/bravia"; //z.B. "/var/lib/symcon/bravia" Pfad auf eurem RasPi
//-----------------config------------------------

switch($_IPS['SENDER'])
{
    case "WebFront":
        SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
    switch($_IPS['VALUE'])
    {
       case 0: // Wert Assoziation
         $cmd = "AAAAAQAAAAEAAAAVAw==";
       break;
       case 1:
         $cmd = "AAAAAQAAAAEAAAAvAw==";
       break;
       case 12:
         $cmd = "AAAAAQAAAAEAAAASAw==";
        break;
       case 13:
         $cmd = "AAAAAQAAAAEAAAATAw==";
        break;
       case 14:
         $cmd = "AAAAAQAAAAEAAAAUAw==";
        break;
       case 31:
         $cmd = "AAAAAgAAABoAAABaAw==";
        break;
       case 32:
         $cmd = "AAAAAgAAABoAAABbAw==";
        break;
       case 33:
         $cmd = "AAAAAgAAABoAAABcAw==";
        break;
    }
    break;
}
$result = IPS_Execute("$pfad/send_command.sh","$ip $cmd",false,true);
?>

Viel Spaß damit! :loveips:



Danke für die ausführliche Beschreibung. Endlich kann ich meinen Fernsehen über IPS und Alexa ein- und ausschalten :D.

Nochmal vielen Dank für die Hilfsbereitschaft. Das finde ich so faszinierend an dieser Community hier.

Grüße
Florian

Ich oute mich mal als absoluter Noob, was Linux und den Pi angeht. Ich habe mir den Pi am WE zugelegt, da ich schon ewig lange mit dem Gedanken gespielt habe, mir einen zu kaufen und jetzt muss ich feststellen, dass aus meiner Ausbildung (12 Jahre her) nicht viel von Linux im Kopf geblieben ist. Ich wurstel mich ein wenig durch und bin schon mit dem Ergebnis sehr zu frieden. Aber ich bin noch auf dem Level: Scripten für Doofe

Als ich jetzt dieses Script durch suchen gefunden habe, wollte ich es direkt ausprobieren. Aber ich verstehe nur Bahnhof. Muss ich erst das Git-Hub Script installieren und wenn ja, welchen Pfad nutze ich da oder reicht es nur das 1. Script irgendwo auf meinen Pi zu schreiben, es entsprechend ausführbar zu machen und dann über z.B. send_command.sh 192.168.178.29 AAAAAQAAAAEAAAATAw== den Befehl absetzen. Zum Beispiel dann auch über die HA-Bridge und Echo?

Ich hoffe es kann mir jemand weiter helfen.

Ich versuchs mal ;-):

  • du lädst das Script von git, passt es analog der Anleitung mit festem Passwort im Script und TV-Gerät an und kopierst es auf den Pi in ein Verzeichnis
  • das Verzeichnis kommt dann in die Variable des PHP-Scripts in IPS
  • nun machst du was oben beschrieben ist, erstellst also Script/ Variable in IPS und änderst die individuellen Werte.
    Wenn das läuft dann lässt sich das natürlich auch mit anderen Scripten ausführen.

Es hat geklappt.

Ich habe einen aus der 2016er Serie, aber dank dem Befehl print_ircc_codes.sh konnte ich die Befehle auslesen. Jetzt kann ich zumindest die wichtigsten Dinge auch per Echo steuern :slight_smile:

Danke für die Hilfe.

Hi!

Dürfte ich mal fragen ab welchem SONY BRAVIA TV das funktioniert?
Ich habe einen 2010er…
IP Adresse hat er.

lg Christian

Sorry, das kann ich dir nicht sagen. IP-Control heißt die Funktion, die vorhanden und aktiviert sein muss meine ich.