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
{Kanal_Umschalten()}
aufrufen...
dann kommt
Undefined subroutine &main::Kanal_Umschalten called at (eval 6682) line 1.
?
du musst schon in deiner myUtils irgendwas haben was dem hier ähnelt...
sub Kanal_Umschalten() { }
Zitatirgendwas haben was dem hier ähnelt...
ähnelt, find ich lustig ;)
Die sub sollte schon so heißen wie deren Aufruf :)
VG
Frank
Das natürlich schon, nur wird mein Beispiel nicht gerade viel nützen wenn er das 1:1 übernehmen sollte ohne weiteren code.. ;)
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");
}
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 :)
Was sofort auffällt, das vor Kanal_Umschalten() sub fehlt
reload 99_myUtils ausgeführt?
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????
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();
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.
Net::Telnet hast du installiert?
Scheib mal in die Zeile direkt vor deine Sub: package main;
muss das installiert werden? dachte das ist schon drin wo bekomme ich das her?
diese zeile davor hat nichts verändert
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
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
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.
hab nen raspberry
Da frag im Einplatinencomputer Bereich noch mal nach, da sind die Linux Leute unterwegs.
VG
Frank
Zeig mal deine vollständige 99_myUtils.pm, wenn sie nicht kilometer lang ist.
#########################################################################
## 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
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...
Ups, da fehlt ja einiges.
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
Da fehlt am Ende der utils noch was immens wichtiges in die letzte Zeile ein 1;
VG
Frank
Und dann lösche den SYS_backup Krams raus, das funktioniert so auch nicht.
Dann reload 99_myUtils und schaust du in das log...
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;
???
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
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
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?
Habe mir gerade noch mal das Wiki zu Gemüte geführt vielen Dank für die HIlfe!!!!
Oder ein Perl Buch kaufen und deine Routine nicht hardcodieren. ;)
VG
Frank
Einen Einstieg in Perl findet man auch hier: https://wiki.selfhtml.org/wiki/Perl
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