Fhem -> Samsung TV

Begonnen von mcbain2k, 25 Mai 2013, 11:45:13

Vorheriges Thema - Nächstes Thema

Gerhard

Hi Zwibel & Uli

ich habe das neue STV Modul instaliert, supper danke!!

1. define SamsungTV ip (d.h. Kanal 52235 default) setings = sms, call, date, mute und volume
2. define SamsungTV ip 55000 setings = 0, 1, ... also alle wie bei TestRemote von Uli.

Da ich ein Samsung UE47D6200 (also alt) kann ich nur Kanal 52235 einstellen und somit die neuen setings nicht benutzen.
Könnte man die neuen setings auch bei 52235 einbinden (klar sms und call geht nicht, aber alles andere schon)?

Gruß, Gerhard
FB6890LTE, cubietruck, orangePi, raspberry 2/3/4, HM/HMIP, shelly > 50, etc.

UliM

Hi,
naja, vll können ja aktuellere Samsung-Firmware-Versionen mehr. Kannst ja mal googeln ob Du ne Quelle findest, die für die älteren Modelle (angesprochen via port 52235) inzwischen einen erweiterten Befehlssatz listet und dann hier informieren.
Gruß, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Zwiebel

Hallo Gerhard,

ich bin davon ausgegangen das Samsung auf den verschiedenen Ports auch nur verschieden Protokolle reden kann.
Port 52235 xml basierte SOAP message.
Port 55000 ein base64 codierter string.

Wie Uli schon geschrieben hat, vielleicht gibt es eine möglichkeit mit SOAP mehr Komandos zu senden.
Wenn du mehr infos hast dann kann ich das gern versuchen einzubauen.

Gruß
Zwiebel

Gerhard

hi,

o.k. jetzt habe ich es verstanden?!

in der Funktion sub samsungtv($) von Uli wird auch Port 55000 benutzt:

#### Configuration
#Debug "samsungtv ARGV 0:".$ARGV[0]. ($ARGV[1] ? " 1:".$ARGV[1] : "");
my $tv = "UE46D6200"; # Might need changing to match your TV type
my $port = "55000";    #TCP port of Samsung TV
my $tvip = "192.168.0.24"; # IP Address of TV
my $myip = "192.168.0.31"; # Doesn't seem to be really used
my $mymac = "00:13:CE:A9:18:C2"; # Used for the access control/validation

und das funktioniert ganz gut!

define tv ip 55000 keine Reaktion??

Gruß, Gerhard
FB6890LTE, cubietruck, orangePi, raspberry 2/3/4, HM/HMIP, shelly > 50, etc.

UliM

Hi,
was bedeutet "keine Reaktion"?
Bei Befehl senden an das TV? Welches Modell, welcher Port ausgewählt?

Bei Anlegen des device in fhem?
Wenn das exakt Deine define-Zeile war, fehlt die Angabe, dass es das ModulSTV ist. Müsste also heiseen:
define tv STV <richtige-ip-adresse> 55000

=8-)
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Gerhard

Hi Uli,

klar, ich hatte STV nicht gettipt, mein Eintrag ist:

define SamsungTV STV 192.168.0.24 55000

was bedeutet "keine Reaktion"? --> set SamsungTV 7 oder set SamsungTV MUTE on etc.
keine Reaction am Fehrnseher.

Gruß, Gerhard
FB6890LTE, cubietruck, orangePi, raspberry 2/3/4, HM/HMIP, shelly > 50, etc.

UliM

Zitat von: Gerhard schrieb am Sa, 29 Juni 2013 22:45keine Reaction am Fehrnseher.
Keine Reaktion an einem Fernseher des älteren Modells
mit dem port für die neueren Modelle?

Keine Reaktion -> works as designed :)

=8-)
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

bjoernhoefer

Hallo,

vielen Dank für das Übernehmen des Codes in FHEM.

Ich hab mir das ganze aus einen Beitrag ganz am Anfang rauskopiert und als 99_samsungtv.pm im FHEM Verzeichniss abgelegt.

Leider bekomm ich immer die folgende Meldung wenn ich FHEM neustarte:

2013.07.15 22:17:58 1: reload: Error:Modul 99_samsungtv deactivated:

Prototype mismatch: sub main::head ($) vs none at /usr/share/perl/5.14/CGI.pm line 312, <$fh> line 5.


Die Datei habe ich wie folgt eingebaut:

#99_myUtils.pm

#am Anfang hinzugefügt:
use CGI qw(:standard);
use IO::Socket;
use MIME::Base64;

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



#irgendwo weiter unten:

#### Samsung-TV steuern ########################################################################################################
# called by n_STV
sub
samsungtv($) {
my $cmd = shift;
my @ARGV = split(" ",$cmd);
#### Configuration
#Debug "samsungtv ARGV 0:".$ARGV[0]. ($ARGV[1] ? " 1:".$ARGV[1] : "");
my $tv = "UE46ES8090"; # Might need changing to match your TV type
my $port = "55000";    #TCP port of Samsung TV
my $tvip = "192.168.0.208"; # IP Address of TV
my $myip = "192.168.0.5"; # Doesn't seem to be really used
my $mymac = "b8-27-eb-d0-a0-bf"; # Used for the access control/validation

    my $appstring = "iphone..iapp.samsung"; # What the iPhone app reports
    my $tvappstring = "iphone.".$tv.".iapp.samsung"; # TV type
    my $remotename = "Perl Samsung Remote"; # What gets reported when it asks for permission/also shows in General->Wireless Remote Control menu

    # command-line help

    if ($ARGV[0] eq "--help") {
       print "Usage: samsungremote KEY [KEYS]\n";
       print "Normal remote keys:
       0 1 2 3 4 5 6 7 8 9
       UP DOWN LEFT RIGHT ENTER
       MENU PRECH GUIDE INFO RETURN CH_LIST EXIT
       SOURCE AD PICTURE_SIZE VOLUP VOLDOWN MUTE
       TOOLS POWEROFF CHUP CHDOWN CONTENTS W_LINK
       RSS MTS SRS CAPTION TOPMENU SLEEP ESAVING
       PLAY PAUSE REWIND FF REC STOP
       TV HDMI PIP_ONOFF ASPECT \n";
       exit;
    }


    my $sock = new IO::Socket::INET (
    PeerAddr => $tvip,
    PeerPort => '55000',
    Proto => 'tcp',
    );
    die "Could not create socket: $!\n" unless $sock;

    my $messagepart1 = chr(0x64) . chr(0x00) . chr(length(encode_base64($myip, ""))) . chr(0x00) . encode_base64($myip, "") . chr(length(encode_base64($mymac, ""))) . chr(0x00) . encode_base64($mymac, "") . chr(length(encode_base64($remotename, ""))) . chr(0x00) . encode_base64($remotename, "");
    my $part1 = chr(0x00) . chr(length($appstring)) . chr(0x00) . $appstring . chr(length($messagepart1)) . chr(0x00) . $messagepart1;
    print $sock $part1;

    my $messagepart2 = chr(0xc8) . chr(0x00);
    my $part2 = chr(0x00) . chr(length($appstring)) . chr(0x00) . $appstring . chr(length($messagepart2)) . chr(0x00) . $messagepart2;
    print $sock $part2;

    # Preceding sections all first time only

    if (defined(param("text"))) {
       # Send text, e.g. in YouTube app's search, N.B. NOT BBC iPlayer app.
       my $text = param("text");
       my $messagepart3 = chr(0x01) . chr(0x00) . chr(length(encode_base64($text, ""))) . chr(0x00) . encode_base64($text, "");
       my $part3 = chr(0x01) . chr(length($appstring)) . chr(0x00) . $appstring . chr(length($messagepart3)) . chr(0x00) . $messagepart3;
       print $sock $part3;
    }
    else {
      foreach my $argnum (0 .. $#ARGV) {
        # Send remote key(s)
#               Debug "samsungtv.pl sending ".uc($ARGV[$argnum]);
        my $key = "KEY_" . uc($ARGV[$argnum]);
        my $messagepart3 = chr(0x00) . chr(0x00) . chr(0x00) . chr(length(encode_base64($key, ""))) . chr(0x00) . encode_base64($key, "");
        my $part3 = chr(0x00) . chr(length($tvappstring)) . chr(0x00) . $tvappstring . chr(length($messagepart3)) . chr(0x00) . $messagepart3;
        print $sock $part3;
#        sleep(1);
        select(undef, undef, undef, 0.5);
       }
    }

    close($sock);

}



Komischerweise funktionieren die Befehle dann trotzdem, is hald nur unschön beim starten...


Kann man da was dagegen machen??

Eine Steuerung für Onkyo wurde auch im Thread erwähnt - da wär' ich auch ganz verzückt drüber... da wären dann meine gesamtne "Smart HomeCinema"-Systeme mit FHEM steuerbar... :-))


Vielen Dank im Voraus

Björn

UliM

Hi,
die eigenen Routinen brauchst Du nicht mehr - das ist mittlerweile alles im Modul STV aufgegangen :)
Wenn Du eine Instanz von STV mit Port 55000 definierst, steuert das Modul die neuen Geräteversionen. Es ist dann das volle Befehls-set verfügbar (auch wenn das nicht so in der commandref steht). http://fhem.de/commandref.html#STV
Viel Spaß damit,
Uli

PS: Woher die o.g. Fehlermeldung kommt weiss ich nicht - is ja aber jetz auch egal :)
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

bjoernhoefer

Works like a charm *g*

jetzt wäre nur noch die Frage wegen dem Onkyo-Receiver offen :-)

Das wäre dann einfach nur grandios...

UliM

Zitat von: bjoernhoefer schrieb am Di, 16 Juli 2013 17:42Works like a charm *g*
Jepp, schee, gell?  Und remotecontrol mit layout samsung passt auch dazu :)


Zitat von: bjoernhoefer schrieb am Di, 16 Juli 2013 17:42jetzt wäre nur noch die Frage wegen dem Onkyo-Receiver offen :-)
Weiss nicht welche Frage Du meinst, aber dafür gibt's nen separaten Fred: Link

=8-)
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Rince

Bezüglich der Nachrichten an TV Sache:
PIP geht nicht. Das kann keine externe Quelle ins laufende TV Programm einblenden, nur andersrum. Beim Umschalten auf eine externe Quelle jedoch geht leider der Pause Status des Live TV aus.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

UliM

@Gerhard: Wenn die msg-Befehle für beide Modelle identisch funktionieren, solte es doch gehen, diese Verarbeitung unabhängig vom Port zu machen - ginge dann also auch für die neueren Modelle. Oder?
Vll könntest Du so eine Version hier zum Test stellen?
=8-)
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Gerhard

Hi Uli,

mache ich gerne, aber erst am So., da Handwerker im Haus.

bis dann, Gerhard
FB6890LTE, cubietruck, orangePi, raspberry 2/3/4, HM/HMIP, shelly > 50, etc.

Gerhard

Hi Uli,

Uli schrieb:

@Gerhard: Wenn die msg-Befehle für beide Modelle identisch funktionieren, solte es doch gehen, diese Verarbeitung unabhängig vom Port zu machen - ginge dann also auch für die neueren Modelle. Oder?
Vll könntest Du so eine Version hier zum Test stellen?

hier die Testversion:

Hinweise:
Es gibt prinzipiell 2 Arten/Wege, mit dem Samsung TV zu kommunizieren:
     A) Messaging-System
          - Ist bei den allermeisten Samsung TVs möglich, ohne spezielle Anmeldung oder ähnlichem
          - Messaging-System:
              - Anruf
              - SMS
              - Termin
              - Lautstärke, Mute, Helligkeit, Kontrast, Schärfe, Farbtemperatur
          - bidirektional, d.h. aktuelle Einstellungen des TVs können ausgelesen bzw. abgefragt werden
          - Port 52235 bis D-Serie
          - Port 7676 ab E-Serie

     B) Remote Controll/Fernbedienung
           - Ist bei allen Samsung TVs der Serie C und nachfolgende Serien möglich
           - Bei B-Serie TVs nur durch Zuhilfenahme der Applikation "Remote Lan Control"
           - Remote Control:
              - Fernbedienung (wie remotecontrol von Uli)
           - Port 2345 bei B-Serie, Port 55000 bei C-Serie und Nachfolgeserien

bis jetzt:
define <name> STV <host> <port>
define <name> STV <host> 55000 for newer Samsung models

neu:
define <name> STV <host>
STV wird in remote mode gestartet da Port 55000 kommunal ist(außer B-Serie).
define <name> STV <host> 52235 für Samsung bis D-Serie
define <name> STV <host> 7676  für Samsung ab  E-Serie

examples:
set <name> mute on/off
set <name> volume 20
set <name> call Peter 1111111 Klaus 222222Peter 1111111 Klaus 222222
set <name> sms Peter 1111111 Klaus 222222 das ist der text
set <name> date 2012-12-10 18:07:04 Peter 11111 Bier 2012-12-11 23:59:20 Paulaner

@Uli:
das ist nur eine draft version, man könnte auch so:

define <name> STV <host> <port-rmote> <port-messaging>

define <name> STV <host> 55000 52235  für Samsung bis  D-Serie
define <name> STV <host> 55000 7676   für Samsung ab   E-Serie
define <name> STV <host> 2345 52235   für Samsung      B-Serie

unterstützung beider modi gleichzeitig?

@all:

1. in folder FHEM 70_STV.pm umbenenen als org.
2. neues modul reinkopieren
3. überprufe, dass chmode 666 gesetzt ist
4. reload 70_STV oder shutdown restart

bitte um feedback.

Gerhard


FB6890LTE, cubietruck, orangePi, raspberry 2/3/4, HM/HMIP, shelly > 50, etc.