Panasonic TV 65hz2000, MQTT?

Begonnen von Dirk070, 13 Oktober 2026, 18:19:21

Vorheriges Thema - Nächstes Thema

Dirk070

Hallo zusammen,

ich würde gerne den Status meines Panasonic TV 65hz2000 auslesen, z.B. per MQTT. Ich muss den TV nicht bedienen können, mir genügt der Status on/off.
Für das Modul VIERA müsste ich noch PERL Module installieren. Das würde ich machen, wenn es keine schlankere Lösung gibt.

Hat jemand einen Tipp, eine Idee oder Erfahrungswerte?

Danke Euch und schöne Grüße
Dirk

rabehd

Und was hast du schon unternommen?
Eine Suche im Internet?
https://github.com/slvwolf/panasonic-comfort-cloud-mqtt
Wäre ein Treffer den man anklicken könnte.
Auch funktionierende Lösungen kann man hinterfragen.

Dirk070

Vielen Dank für den sehr freundlichen Hinweis.

Grundsätzlich suche ich nach einer möglichst simplen Lösung, da es nur um den On/Off Status geht.
Aus diesem Grunde habe ich hier schlicht nach Erfahrungen gefragt.

Dein Link führt zur Panasonic Comfort Cloud MQTT Bridge.
Die Cloud-Komponenten kannte ich noch nicht, nutze sie nicht und wenn ich auf der Homepage schaue, ist das Ziel die Steuerung der Klimageräte des Herstellers: https://www.aircon.panasonic.eu/DE_de/happening/panasonic-comfort-cloud-app-21/

Übersehe ich die Lösung in Deinem Post?

Dirk070

#3
Hilfe zur Selbsthilfe, falls jemand dieselbe Frage hat.
Mit 2 Funktionen in einer myUtils lässt sich der Status über die IP abfragen.
In dieser Konstellation sollte es Non-Blocking sein ("sollte", weil ich es noch nie selbst gemacht habe).
So lässt sich die Funktion z.B. alle 10 Sekunden aufrufen.
Hier im Code ist zu Testzwecken das Schreiben eines Readings deaktiviert, stattdessen wird ein Log-Eintrag geschrieben.

sub
myUtils_Panasonic_Initialize ($$)
{
  my ($hash) = @_;
}

# Enter you functions below _this_ line.
##################################################
# 1. Funktion: Startet die Hintergrund-Abfrage
sub checkPanasonicStatusNB($) {
    my ($ip) = @_;
   
    # SOAP-Daten für die Anfrage vorbereiten
    my $soap_action = '"urn:schemas-upnp-org:service:RenderingControl:1#GetMute"';
    my $xml_data = '<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="http://xmlsoap.org"><s:Body><u:GetMute xmlns:u="urn:schemas-upnp-org:service:RenderingControl:1"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetMute></s:Body></s:Envelope>';

    # Parameter-Hash für HttpUtils befüllen
    my $param = {
        url        => "http://" . $ip . ":55000/dmr/control_0",
        timeout    => 2.0,                  # Großzügiger Timeout, da im Hintergrund unkritisch
        data       => $xml_data,            # Sendet die XML-Daten per POST
        callback   => \&checkPanasonicStatusNB_Callback, # Diese Funktion wird nach Antwort aufgerufen
        header     => "Content-Type: text/xml; charset=utf-8\r\nSOAPAction: $soap_action",
    };

    # Anfrage im Hintergrund abfeuern (gibt sofort die Kontrolle an FHEM zurück)
    HttpUtils_NonblockingGet($param);
    return;
}
# 2. Funktion: Wird automatisch aufgerufen, wenn der TV antwortet oder der Timeout greift
sub checkPanasonicStatusNB_Callback($$$) {
    my ($param, $err, $data) = @_;
    my $new_stat = "off";

    # Wenn kein Netzwerkfehler vorliegt und die Antwort die richtige XML-Struktur hat
    if (!$err && $data && $data =~ /<CurrentMute>/) {
        $new_stat = "on";
    }

    # Nur wenn sich der Status im Vergleich zum aktuellen Dummy-Wert geändert hat,
    # setzen wir das Reading neu, um ein FHEM-Event auszulösen.
##    my $current_stat = ReadingsVal("TV_Status", "state", "");
##    if ($current_stat ne $new_stat) {
##        fhem("setreading TV_Status state $new_stat");
Log 1, "TV_Status: $new_stat";
##    }
    return;
}