Kurze Vorgeschichte... Hab das CGI-Script + Web IF getestet und es hat auf Anhieb funktioniert. Also hab ich mich doch an einem Plugin versucht - ich weiß zwar nicht warum, aber es funktioniert :P
[HILFE]
# Plugin Samsung SmartTV Steuerung
# Version: 0.2 BETA (12.10.2012)
# Copyright: Werner V (https://knx-user-forum.de/members/werner+v.html)
# License: GPL (v2)
# Benötigt Samsung SmartTV mit LAN Anschluss
use CGI qw(:standard);
use IO::Socket;
use MIME::Base64;
########################
### DEFINITION ###
########################
# Eigenen Aufruf-Zyklus setzen (Initialisierung/zyklisches prüfen)
$plugin_info{$plugname.'_cycle'} = 86400;
# Allgemeine Einstellungen
my $tvip = "192.168.1.41"; # IP des SmartTVs
my $knx_GA = "11/1/0"; # Gruppenadresse für die Bedienung
my $myip = "192.168.1.40"; #Remoute IP auf der das Plugin läuft
my $mymac = "01-23-45-67-89-ab"; #Remoute MAC Adresse auf der das Plugin läuft, wird nur beim erstmaligen anmelden gebraucht, wird danach im AllShare gespeichert
my $appstring = "iphone..iapp.samsung"; #What the iPhone app reports (wirklich benötigt?)
my $tvappstring = "iphone.UE32C6500.iapp.samsung"; #Might need changing to match your TV type (wirklich benötigt?)
my $remotename = "Samsung Remote"; #Wird am SmartTV (AllShare) angezeigt sobald man sich das erste mal anmeldet
#########################
### ENDE DEFINITION ###
#########################
#########################
### Hauptverarbeitung ###
#########################
# Socket erstellen
my $sock = new IO::Socket::INET (
PeerAddr => $tvip,
PeerPort => '55000',
Proto => 'tcp',
);
die "Could not create socket: $!\n" unless $sock;
# Telegramm vom KNX
if (%msg) {
if ($msg{'apci'} eq "A_GroupValue_Write" and $knx_GA eq $msg{'dst'}) {
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;
print $part1;
print "\n";
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;
print $part2;
print "\n";
my $key = decode_dpt16($msg{'data'});
my $message = 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($message)) . chr(0x00) . $message;
print $sock $part3;
print $part3;
print "\n";
return;
}
}
else {
$plugin_subscribe{$knx_GA}{$plugname} = 1;
}
return;
close($sock);
print "\n\n";
[/HILFE]
Hintergrund bzw. Aufbau: Man sendet per DPT 16 den gewünschten KEY (zB. KEY_VOLUP, KEY_VOLDOWN, KEY_CHUP, KEY_CHDOWN usw.) an die GA, dieser wird von Plugin umgewandelt und an den TV gesendet. Funktioniert soweit auch alles einwandfrei, hab mir zum Testen in der CV einen Multitrigger angelegt und die vier Buttons für Channel +/- und Lautstärke +/- belegt.
Jetzt bräuchte man nur noch ein Frontend oder ähnliches für die CV

Getestet hab ich mit einem C-Serie TV. Übrigens, wenn die bessere Hälfte gerade am fernsehen ist, hört man beim Testen gleich sehr gut ob es funktioniert oder nicht auch wenn man nicht vorm TV sitzt

Feedback und Verbesserungsvorschläge sind gerne gesehen

lg Werner


Einen Kommentar schreiben: