Hi,
vermutlich ist es eine der dümmsten Fragen, die man stellen kann *schäm*
Ich habe versucht von Armink das Skript aus den Google Groups "Samsung TV - neues Modul" zu benutzen.
https://groups.google.com/d/msg/fhem-users/CKAHUqniUVs/-xN1liOLA7gJ (//groups.google.com/d/msg/fhem-users/CKAHUqniUVs/-xN1liOLA7gJ)
(Hey, war schon aufregend genug, dass ein COpy&Paste aus dem Forum nicht klappt wegen der Zeilenumbrüche, in den Google Groups passt das aber dann :) )
Die IP Adressen habe ich angepasst.
Beim ersten Aufruf fragte mein TV mich auch glatt, ob ich eine neue Fernbedienung zulassen will :) => logisch
Jetzt mein Problem:
Wenn ich versuche, den Dummy auf AUS zu setzen
ZitatSo jetzt zur fhem.cfg:
Hier ein Dummy-Device um die Power-Off-Taste zu senden:
Hier Auszug aus fhem.cfg
#TV Fernbedienung
#POWEROFF
define wz_tv1_poweroff dummy
attr wz_tv1_poweroff alias Power off
attr wz_tv1_poweroff eventMap on:an off:aus
attr wz_tv1_poweroff group TV
attr wz_tv1_poweroff room Wohnzimmer
define act_on_wz_tv1_poweroff notify wz_tv1_poweroff {\
{samsungremote('POWEROFF')} \
}
passiert nix, bis auf den Eintrag:
act_on_wz_tv1_poweroff return value: Undefined subroutine &main::param called at ./FHEM/99_Utils.pm line 189.Der entsprechende Eintrag lautet:
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;
}
Google befragt, die meinten man bräuchte ein use CGI;
Daher habe ich den Anfang meiner 99_Utils geändert:
Zitat##############################################
# $Id: 99_Utils.pm 1932 2012-10-06 20:15:33Z ulimaass $
package main;
use strict;
use warnings;
use POSIX;
use CGI;
Leider ändert das nix am Verhalten.
Fehlermeldung bleibt gleich :(
Hat jemand zufällig eine Idee was da schief läuft?
Besten Dank,
Rince
moin
die 99utils reloaded?
Ja.
Auch fhem neu gestartet, und den ganzen Raspberry hinterher auch nochmal :-)
Ich kann dir auch gerne das Startlog posten :-)
Also was mir auffällt:
Zitatsub samsungremote {
{
#### Konfiguration
....
hat keinen Parameter, wird aber bei dir mit: {samsungremote('POWEROFF')} also mit Parameter aufgerufen in der 99_Utils.pm.
d.h. entweder sub samsungremote($) {....
oder ohne Parameter samsungremote() {...
oder {samsungremote()} als Aufruf
wäre komisch m.E., wenn das so wie bisher definiert funktioniert.
MfG, MisterEltako
Danke für die Antwort Mister :)
Habe den Eintrag in der 99_Utils.pm geändert.
Hier ist mal die ganze Datei:
######### TV fernbedienen #########
sub samsungremote($) {
{
#### Konfiguration
my $tv = "UE55ES8090"; # Bezeichnung des Geräts (weiß nicht ob man das braucht)
my $tvip = "192.168.10.27"; # IP Addresse TV
my $myip = "192.168.10.37"; # wird wohl nicht benutzt
my $mymac = "AB-CD-E1-23-45-67"; # wird anscheinend einmalig zur Zulassung der virtuellen FB gebraucht, Adresse ist egal
####
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
my $tvcmd = shift;
Log 1, "samsungremote cmd: $tvcmd";
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 {
# Send remote key(s)
my $key = "KEY_" . $tvcmd;
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;
select(undef, undef, undef, 0.5);
}
close($sock);
}
}
Leider hat das am Fehlverhalten nix geändert. Gleiche Fehlermeldung im Logfile :(
Zitatsub samsungremote($) {
{
Das ist eine "{" zuviel!
Es müsste so lauten:
sub samsungremote($)
{
MfG, MisterEltako
Kommt die Fehlermeldung, dass diebrackets nicht stimmen beim speichern.
Habe ganz unten noch eine weitere Klammer gelöscht.
Alles wie gehabt :-(
Gleicher Fehler, gleiche Zeile :-(
PS
Danke für deine Versuche :-)
Kann ich mehr Daten bereit stellen?