FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: ostseehuepfer am 11 Oktober 2015, 11:37:51

Titel: Telnet Befehl Senden
Beitrag von: ostseehuepfer am 11 Oktober 2015, 11:37:51
Hallo,

habe diesen Link gefunden und bin danach vorgegangen.

http://forum.fhem.de/index.php?topic=12606.15 (http://forum.fhem.de/index.php?topic=12606.15)

Habe die IP Adresse abgeändert auf meinen Adressbereich und versuche nun das ganze mit {fhem("{Kanal_Umschalten}")} aufzurufen.
Dabei bringt er mir immer folgende Meldung

Bareword "Kanal_Umschalten" not allowed while "strict subs" in use at (eval 87) line 1.

Ich habe den Code in die 99_myUtils.pm kopiert.

Hoffe mir kann jemand helfen. Das ganze läuft bei mir aber auf einem Raspberry Pi

Grüße
Titel: Antw:Telnet Befehl Senden
Beitrag von: rapster am 11 Oktober 2015, 18:32:33
{Kanal_Umschalten()} aufrufen...
Titel: Antw:Telnet Befehl Senden
Beitrag von: ostseehuepfer am 11 Oktober 2015, 20:05:19
dann kommt


Undefined subroutine &main::Kanal_Umschalten called at (eval 6682) line 1.

?
Titel: Antw:Telnet Befehl Senden
Beitrag von: rapster am 11 Oktober 2015, 20:08:05
du musst schon in deiner myUtils irgendwas haben was dem hier ähnelt...
sub Kanal_Umschalten() { }
Titel: Antw:Telnet Befehl Senden
Beitrag von: franky08 am 11 Oktober 2015, 20:13:15
Zitatirgendwas haben was dem hier ähnelt...

ähnelt, find ich lustig  ;)

Die sub sollte schon so heißen wie deren Aufruf  :)

VG
Frank
Titel: Antw:Telnet Befehl Senden
Beitrag von: rapster am 11 Oktober 2015, 20:17:07
Das natürlich schon, nur wird mein Beispiel nicht gerade viel nützen wenn er das 1:1 übernehmen sollte ohne weiteren code..  ;)
Titel: Antw:Telnet Befehl Senden
Beitrag von: ostseehuepfer am 11 Oktober 2015, 20:20:22
Das ist der Inhalt


Kanal_Umschalten()
{
    use Net::Telnet();
    my $tab = new Net::Telnet (Timeout => 50);
    #my $fh1 = $tab->dump_log("telnetclient.txt"); <-- macht zum debuggen Sinn.
    #my $fh2 = $tab->input_log("telnetclient_input.txt"); <-- macht zum debuggen Sinn.
    #my $fh3 = $tab->output_log("telnetclient_output.txt"); <-- macht zum debuggen Sinn.

    $tab->open("192.168.11.15");
    $tab->print("xyz");
}
Titel: Antw:Telnet Befehl Senden
Beitrag von: rapster am 11 Oktober 2015, 20:23:01
Das ähnelt meinem Beispiel leider nicht genug,  die Zeichen & Wörter die ich dir vorhin geschrieben habe sind das mindeste was vorhanden sein muss, mehr darfs sein, weniger nicht :)
Titel: Antw:Telnet Befehl Senden
Beitrag von: franky08 am 11 Oktober 2015, 20:25:37
Was sofort auffällt, das vor Kanal_Umschalten() sub fehlt
Titel: Antw:Telnet Befehl Senden
Beitrag von: dev0 am 11 Oktober 2015, 20:25:52
reload 99_myUtils ausgeführt?
Titel: Antw:Telnet Befehl Senden
Beitrag von: ostseehuepfer am 11 Oktober 2015, 20:37:05
So hab das hier als Antwort bekommen

Undefined subroutine &main::Kanal_Umschalten called at (eval 26) line 1.

das hab ich aufgerufen oben ober die leiste

{Kanal_Umschalten()}

und das die geänderte my 99 .

sub Kanal_Umschalten()
{
    use Net::Telnet();
    my $tab = new Net::Telnet (Timeout => 50);
    #my $fh1 = $tab->dump_log("telnetclient.txt"); <-- macht zum debuggen Sinn.
    #my $fh2 = $tab->input_log("telnetclient_input.txt"); <-- macht zum debuggen Sinn.
    #my $fh3 = $tab->output_log("telnetclient_output.txt"); <-- macht zum debuggen Sinn.

    $tab->open("192.168.11.15");
    $tab->print("xyz");
}


hab nach änderung in der datei fhem neu gestartet

hab ich noch fehler drin????
Titel: Antw:Telnet Befehl Senden
Beitrag von: franky08 am 11 Oktober 2015, 20:49:23
Das use Net::Telnet(); gehört m.W. nicht in die sub sondern an den Anfang der 99_myUtils ungefähr so:

package main;
use strict;
use warnings;
use POSIX;
use LWP::Simple;
use Net::Telnet();
Titel: Antw:Telnet Befehl Senden
Beitrag von: ostseehuepfer am 11 Oktober 2015, 20:53:48
dann haut er mir beim speichern das um die ohren

Can't locate Net/Telnet.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl . ./FHEM) at ./FHEM/99_myUtils.pm line 1. BEGIN failed--compilation aborted at ./FHEM/99_myUtils.pm line 1.

und den bei ausführen

Undefined subroutine &main::Kanal_Umschalten called at (eval 26) line 1.
Titel: Antw:Telnet Befehl Senden
Beitrag von: dev0 am 11 Oktober 2015, 21:08:54
Net::Telnet hast du installiert?
Scheib mal in die Zeile direkt vor deine Sub: package main;
Titel: Antw:Telnet Befehl Senden
Beitrag von: ostseehuepfer am 11 Oktober 2015, 21:13:52
muss das installiert werden? dachte das ist schon drin wo bekomme ich das her?

diese zeile davor hat nichts verändert
Titel: Antw:Telnet Befehl Senden
Beitrag von: franky08 am 11 Oktober 2015, 21:18:28
Entweder
sudo apt-get install telnetd
oder sudo apt-get install telnet, denke da wird telnet-perl gebraucht

Wie das Paket genau heißt, müsstest du selber mal suchen

Guckst du hier: https://packages.debian.org/sid/perl/libnet-telnet-perl
Titel: Antw:Telnet Befehl Senden
Beitrag von: ostseehuepfer am 11 Oktober 2015, 21:25:54
so in etwa??

Voraussetzungen

    Telnet auf der Fritzbox aktiviert
    perl NET::Telnet Modul auf dem Host wo FHEM läuft installiert. Beim Raspberry-PI geht das so:

sudo apt-get install libnet-telnet-perl


ändert nix
Titel: Antw:Telnet Befehl Senden
Beitrag von: franky08 am 11 Oktober 2015, 21:33:12
Wird an dem beschränkten Perl auf der Fritte liegen, vlt. kann es auf der Fritte nicht installiert werden. Telnet ist auf der Fritte seit einiger Zeit von AVM nicht mehr aktiviert/unterstützt.
Titel: Antw:Telnet Befehl Senden
Beitrag von: ostseehuepfer am 11 Oktober 2015, 21:34:20
hab nen raspberry
Titel: Antw:Telnet Befehl Senden
Beitrag von: franky08 am 11 Oktober 2015, 21:36:16
Da frag im Einplatinencomputer Bereich noch mal nach, da sind die Linux Leute unterwegs.

VG
Frank
Titel: Antw:Telnet Befehl Senden
Beitrag von: dev0 am 11 Oktober 2015, 21:40:20
Zeig mal deine vollständige 99_myUtils.pm, wenn sie nicht kilometer lang ist.
Titel: Antw:Telnet Befehl Senden
Beitrag von: ostseehuepfer am 11 Oktober 2015, 22:40:56

#########################################################################
## Funktion......: FHEM Backup
## Besonderheiten: Anzeige der vorhandenen Backups im dummy
#########################################################################
SYS_Backup:* {
fhem("backup");;
opendir DIR, \media\usbstick\backup or die $!;;
my $mybackups = "";;
while(my $file = readdir DIR){
  next if($file eq "." || $file eq "..");;
  $mybackups = $mybackups."$file
";;
}
closedir DIR;;
fhem("set SYS_Backup ".$mybackups);;
}
#########################################################################

package main;
sub Kanal_Umschalten()
{
    use Net::Telnet();
    my $tab = new Net::Telnet (Timeout => 50);
    #my $fh1 = $tab->dump_log("telnetclient.txt"); <-- macht zum debuggen Sinn.
    #my $fh2 = $tab->input_log("telnetclient_input.txt"); <-- macht zum debuggen Sinn.
    #my $fh3 = $tab->output_log("telnetclient_output.txt"); <-- macht zum debuggen Sinn.

    $tab->open("192.168.11.15");
    $tab->print("xyz");
}



hatte use ... auch schon ganz oben

grüsse
Titel: Antw:Telnet Befehl Senden
Beitrag von: dev0 am 11 Oktober 2015, 22:52:03
schau mal ins wiki, wie die 99_myUtils.pm aufgebaut sein muss. Am Anfang/Ende fehlt was und die Deklaration der ersten sub ist falsch...
Titel: Antw:Telnet Befehl Senden
Beitrag von: franky08 am 11 Oktober 2015, 22:59:17
Ups, da fehlt ja einiges.
Titel: Antw:Telnet Befehl Senden
Beitrag von: ostseehuepfer am 12 Oktober 2015, 17:59:13
Moin,

habe die Config angepasst

package main;
use strict;
use warnings;
use POSIX;
use Net::Telnet();
sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}
#########################################################################
## Funktion......: FHEM Backup
## Besonderheiten: Anzeige der vorhandenen Backups im dummy
#########################################################################
SYS_Backup:* {
fhem("backup");;
opendir DIR, \media\usbstick\backup or die $!;;
my $mybackups = "";;
while(my $file = readdir DIR){
  next if($file eq "." || $file eq "..");;
  $mybackups = $mybackups."$file
";;
}
closedir DIR;;
fhem("set SYS_Backup ".$mybackups);;
}
#########################################################################

sub Kanal_Umschalten($)
{
    use Net::Telnet();
    my $tab = new Net::Telnet (Timeout => 50);
    #my $fh1 = $tab->dump_log("telnetclient.txt"); <-- macht zum debuggen Sinn.
    #my $fh2 = $tab->input_log("telnetclient_input.txt"); <-- macht zum debuggen Sinn.
    #my $fh3 = $tab->output_log("telnetclient_output.txt"); <-- macht zum debuggen Sinn.

    $tab->open("192.168.11.15");
    $tab->print("xyz");
}


der Fehler bleibt der selbe

Titel: Antw:Telnet Befehl Senden
Beitrag von: franky08 am 12 Oktober 2015, 18:37:44
Da fehlt am Ende der utils noch was immens wichtiges in die letzte Zeile ein 1;

VG
Frank
Titel: Antw:Telnet Befehl Senden
Beitrag von: dev0 am 12 Oktober 2015, 18:54:00
Und dann lösche den SYS_backup Krams raus, das funktioniert so auch nicht.
Dann reload 99_myUtils und schaust du in das log...
Titel: Antw:Telnet Befehl Senden
Beitrag von: ostseehuepfer am 12 Oktober 2015, 18:56:34
Also so

package main;
use strict;
use warnings;
use POSIX;
use Net::Telnet();
sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}
#########################################################################
## Funktion......: FHEM Backup
## Besonderheiten: Anzeige der vorhandenen Backups im dummy
#########################################################################
SYS_Backup:* {
fhem("backup");;
opendir DIR, \media\usbstick\backup or die $!;;
my $mybackups = "";;
while(my $file = readdir DIR){
  next if($file eq "." || $file eq "..");;
  $mybackups = $mybackups."$file
";;
}
closedir DIR;;
fhem("set SYS_Backup ".$mybackups);;
}
#########################################################################

sub Kanal_Umschalten()
{
    use Net::Telnet();
    my $tab = new Net::Telnet (Timeout => 50);
    #my $fh1 = $tab->dump_log("telnetclient.txt"); <-- macht zum debuggen Sinn.
    #my $fh2 = $tab->input_log("telnetclient_input.txt"); <-- macht zum debuggen Sinn.
    #my $fh3 = $tab->output_log("telnetclient_output.txt"); <-- macht zum debuggen Sinn.

    $tab->open("192.168.11.15");
    $tab->print("xyz");
}

1;


???
Titel: Antw:Telnet Befehl Senden
Beitrag von: rapster am 12 Oktober 2015, 19:16:53
Reduzier das ganze doch erstmal auf das notwendigste!, also auf deine Problem-Subroutine!

package main;
use strict;
use warnings;
use POSIX;

use Net::Telnet ();

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

sub Kanal_Umschalten() {
    my $tab = new Net::Telnet (Timeout => 50);

    $tab->open("192.168.11.15");
    $tab->print("xyz");
}

1;


Starte Fhem anschließend am besten mal neu und schau dir im Log alle Warning usw. an!

Wenn Net::Telnet nicht installiert ist musst du das natürlich auch erst installieren!
Bei Debian ist es das Paket libnet-telnet-perl, evtl. ist es das auch bei raspbian, oder über CPAN installieren.

Gruß
  Claudiu
Titel: Antw:Telnet Befehl Senden
Beitrag von: franky08 am 12 Oktober 2015, 19:25:19
ZitatGuckst du hier: https://packages.debian.org/sid/perl/libnet-telnet-perl

Das hatte ich ihm oben auch schon gepostet.
Zitat von: ostseehuepfer am 11 Oktober 2015, 21:25:54
so in etwa??

Voraussetzungen

    Telnet auf der Fritzbox aktiviert
    perl NET::Telnet Modul auf dem Host wo FHEM läuft installiert. Beim Raspberry-PI geht das so:

sudo apt-get install libnet-telnet-perl


ändert nix

Da war die sub aber auch noch nicht OK.

VG
Frank
Titel: Antw:Telnet Befehl Senden
Beitrag von: ostseehuepfer am 12 Oktober 2015, 19:26:56
ja läuft hatte ich gestern installiert jetzt kommt xyz an

Kann ich jetzt die Routinen in eine eigene datei schreiben so das ich für z.B. jedes Gerät eine Datei hab?

Titel: Antw:Telnet Befehl Senden
Beitrag von: ostseehuepfer am 12 Oktober 2015, 19:50:58
Habe mir gerade noch mal das Wiki zu Gemüte geführt vielen Dank für die HIlfe!!!!
Titel: Antw:Telnet Befehl Senden
Beitrag von: franky08 am 12 Oktober 2015, 19:53:07
Oder ein Perl Buch kaufen und deine Routine nicht hardcodieren.  ;)

VG
Frank
Titel: Antw:Telnet Befehl Senden
Beitrag von: dev0 am 12 Oktober 2015, 20:05:22
Einen Einstieg in Perl findet man auch hier: https://wiki.selfhtml.org/wiki/Perl
Titel: Antw:Telnet Befehl Senden
Beitrag von: ostseehuepfer am 12 Oktober 2015, 20:13:44
Wenn es nur das wäre versuche auch parallel dazu den Arduino programmieren zu lernen hab zum glück nen Kollegen der das jetzt übernommen hat der Arduino übersetzt alles was ich via Telnet hin werfe auf RS233  so kann ich jetzt nahezu jedes Gerät mit RS232 und offener Dokumentation mit den Befehlen jetzt ansprechen aus Fhem raus...


Danke noch mal für die Hilfe