Hallo zusammen,
ich hatte einen Fehler in meiner 99_myUtils.pm. Ich hatte am Ende das "1;" vergessen. Das habe ich berichtigt und erhalte nun nach dem Speichern eine Fehlermeldung "Undefined subroutine &main::myUtils_Initialize called at fhem.pl line 1656." Ohne die "1;" am Ende erscheint diese Meldung nicht, aber im Log steht " reload: Error:Modul 99_myUtils deactivated:"
Was habe ich denn da falsch gemacht?
hier meine 99_myUtils.pm##############################################
# $Id: 99_myUtils.pm 1932 2013-06-06 Harald $
package main;
use strict;
use warnings;
use POSIX;
sub
Utils_Initialize($$)
{
my ($hash) = @_;
}
#
# Telefone der FB klingeln beim Betätigen der Türklingel
#
sub FBCall ($)
{
my ($callnr) = @_;
$callnr = "ATP3 ATDT".$callnr."#";
my $ret = "ATD: " . `echo $callnr | nc 127.0.0.1 1011`;
$ret =~ s,[\r\n]*,,g;
InternalTimer(gettimeofday()+8, "FBHangOn", "", 0);
return;
}
sub FBHangOn ()
{
my $ret = " ATH0: " . `echo "ATH0" | nc 127.0.0.1 1011`;
$ret =~ s,[\r\n]*,,g;
return;
}
#### Log-abriss vermeiden
# called by
# define addLog notify addLog {addLog("ez_Aussensensor","state");addLog("ez_FHT","actuator");\
# addLog("MunichWeather","humidity");addLog("MunichWeather","pressure");\
# addLog("MunichWeather","temperature");addLog("MunichWeather","wind_chill");}
# define a_midnight1 at *23:59 trigger addLog
# define a_midnight2 at *00:01 trigger addLog
sub
addLog($$) {
my ($logdevice, $reading) = @_; # device and reading to be used
my $logentry = ReadingsVal($logdevice,$reading,"addLog: invalid reading");
if ($reading =~ m,state,i) {
fhem "trigger $logdevice $logentry << addLog";
} else {
fhem "trigger $logdevice $reading: $logentry << addLog";
}
}
1;
Wäre toll, wenn mir jemand auf die Sprünge helfen könnte
Ich kann grad in meiner nicht nachsehen, aber im Wiki steht es so drin:
package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
Bei deiner steht:
package main;
use strict;
use warnings;
use POSIX;
sub
Utils_Initialize($$)
{
my ($hash) = @_;
}
Also myUtils_Initialize($$) statt Utils_Initialize($$)
Hilft das?
Oh, danke Rince,
das habei ich trotz zigmaligem überprüfen übersehen :-(
Hab's gerade korrigiert, mal sehen ob's klappt.
Nochmals danke und viele Grüße
Harald
PS: Es klappt! das war's wohl. Besten Dank nochmal.
Ich bekomme diese Fehler:
2015.02.21 16:17:27 1: reload: Error:Modul 99_myUtils deactivated:
Kann jemand mich bitte Helfen diese raus zu bekommen?
Hier meine 99_myUtils.pm:
Zitat##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.
package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
# Enter you functions below _this_ line.
# Device Timeoutueberwachung ################################################
sub myTimeout($$$$) {
my ($Tdevice, $Twarning, $Terror, $Tdummy) = @_;
my $Tdev1 = (time - time_str2num(ReadingsTimestamp($Tdevice,"state",0))) / 60;
my $Tdev2 = Value($Tdummy);
if ($Tdev1 < $Twarning && $Tdev2 ne "ok") {fhem "set ".$Tdummy." ok"};
if ($Tdev1 >= $Twarning && $Tdev1 < $Terror && $Tdev2 ne "timeout") {fhem "set ".$Tdummy." timeout"};
if ($Tdev1 >= $Terror && $Tdev2 ne "error") {fhem "set ".$Tdummy." error"};
}
# Funktion ermittelt den Tagesnamen als String ausgehend von Heute plus einem Tagesoffset
# Aufruf : z.B. DayName(3) ermittel den Tagesnamen in 3 Tagen Sonntag->Mittwoch
#########################################################################################
sub DayName
{
my $DayOffset = shift;
$DayOffset %= 7;
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
$Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
my @Wochentage = ("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
return $Wochentage[$Wochentag + $DayOffset];
}
Das Wiki zur 99_myUtils kennst du?
Vermutlich nicht.
Als erstes fällt mir auf das
1; am Schluss fehlt.
Schau dir doch nochmal das Wiki an und versuch es dann nochmal.
Lies dir mal den ersten Beitrag durch:
Zitat von: Harald am 19 Juni 2013, 11:10:20
.. Ich hatte am Ende das "1;" vergessen. ... Ohne die "1;" am Ende erscheint diese Meldung nicht, aber im Log steht " reload: Error:Modul 99_myUtils deactivated:"
Gruß,
Gero
Nein aber jetzt schon! 8) :o :o :o :-[ :-[
Danke Danke!
99 myUtils anlegen
Mit wachsender Anzahl von eigenen Helfer-Programmen wird die Speicherung von perl-code in notify unübersichtlich. Es besteht die Möglichkeit, eine eigene Programmdatei zu erzeugen, in der mehrere kleine Programme gesammelt und dann aus diversen notify- oder at-Anweisungen aufgerufen werden.
Inhaltsverzeichnis
1 Eine neue Programmdatei erzeugen
2 Eigene Routinen einfügen
2.1 Routinen mit mehreren Parametern
2.2 Routinen ohne Parameter
3 Eigene Programmdatei laden
4 Links
Eine neue Programmdatei erzeugen
Eine ,leere' Programmdatei sieht folgendermassen aus:
package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
1; 8) 8) 8) 8) 8) 8)
ZitatLies dir mal den ersten Beitrag durch:
Lesen?
Oh Gott - das wollen doch die wenigsten hier.
Posten und warten bis Hilfe kommt aber lesen und verstehen ... das geht doch garnicht.
warum denn nicht einfach die myUtilsTemplate verwenden, die in fhem automatisch enthalten ist? Die kann man mit "edit files" einfach mittels "Save as" als 99_myUtils.pm abspeichern und das Grundgerüst funktioniert.
Alles weitere steht in der Vorlage - vor allem, wo man seinen eigenen Code hinschreiben muss.