FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Rince am 14 Mai 2013, 18:10:46

Titel: Was bedeutet folgendes: Undefined subroutine &main::param
Beitrag von: Rince am 14 Mai 2013, 18:10:46
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
Titel: Aw: Was bedeutet folgendes: Undefined subroutine &main::param
Beitrag von: Icebear am 14 Mai 2013, 22:46:54
moin
die 99utils reloaded?
Titel: Aw: Was bedeutet folgendes: Undefined subroutine &main::param
Beitrag von: Rince am 15 Mai 2013, 00:28:49
Ja.
Auch fhem neu gestartet, und den ganzen Raspberry hinterher auch nochmal :-)

Ich kann dir auch gerne das Startlog posten :-)
Titel: Aw: Was bedeutet folgendes: Undefined subroutine &main::param
Beitrag von: MisterEltako am 15 Mai 2013, 10:10:23
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



Titel: Aw: Was bedeutet folgendes: Undefined subroutine &main::param
Beitrag von: Rince am 15 Mai 2013, 18:19:35
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 :(

Titel: Aw: Was bedeutet folgendes: Undefined subroutine &main::param
Beitrag von: MisterEltako am 15 Mai 2013, 22:12:10
Zitatsub samsungremote($) {
{

Das ist eine "{" zuviel!

Es müsste so lauten:
sub samsungremote($)
{

MfG, MisterEltako
Titel: Aw: Was bedeutet folgendes: Undefined subroutine &main::param
Beitrag von: Rince am 16 Mai 2013, 00:13:14
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?