Hi,
ich probiere schon sehr lange mit der myUtils rum und so langsam verzweifle ich.
Selbst wenn ich den Code von machen hier aus dem Forum copiere bekomme ich immer diese Meldung beim Speichern:
ZitatERROR:
Undefined subroutine &main::myUtils_Speech_Initialize called at fhem.pl line 2044.
Im LogFile steht dann folgender Eintrag:
Zitat2015.04.06 08:25:22 1: PERL WARNING: Subroutine myUtils_Initialize redefined at ./FHEM/99_myUtils_Speech.pm line 15.
2015.04.06 08:29:35 1: PERL WARNING: Subroutine myUtils_Initialize redefined at ./FHEM/99_myUtils_Speech.pm line 19.
2015.04.06 08:29:35 1: PERL WARNING: Subroutine str_replace redefined at ./FHEM/99_myUtils_Speech.pm line 24.
2015.04.06 08:29:35 1: PERL WARNING: Subroutine SprechKommaUtils_Initialize redefined at ./FHEM/99_myUtils_Speech.pm line 31.
2015.04.06 08:29:35 1: PERL WARNING: Subroutine say redefined at ./FHEM/99_myUtils_Speech.pm line 36.
Der Inhalt der MyUtil ist aus folgendem Post:
und schaut so aus:
##############################################
# $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;
# Enter you functions below _this_ line.
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
sub str_replace($$$)
{
my ($find,$replace,$string) = @_;
$string =~ s/$find/$replace/g;
return $string;
}
sub
SprechKommaUtils_Initialize($$)
{
my ($hash) = @_;
}
sub say($)
{
my ($msg) = @_;
fhem "set androidTablet ttsSay $msg";
}
1;
Auch das wakeUp-Licht-Skript von Sandra bekomme ich aus genau den gleichen Gründen nicht zum laufen.
Natürlich mit anderen Fehlermeldungen in der Log...
Ich hoffe es kann mir einer weiterhelfen.
Gruß und schöne Ostern
Peer
Wenn man ein Modul kopiert & umbenennt, dann muss man die XXX_Iniitalize() Funktion im neuen Modul auch umbenennen.
Anders: Wenn FHEM ein Modul NN_XXX.pm laedt, dann muss in dem Modul eine Funktion mit dem Namen XXX_Initialize() existieren.
Nochmal anders: Bitte die Zeile myUtils_Initialize($$) aendern nach myUtils_Speech_Initialize($$)
Herzlichsten Dank.
Genau das war es. Speech funktioniert jetzt.
Leider aber immer noch nicht meine "99_myUtils_wakeup.pm"
##############################################
# $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;
# Enter you functions below _this_ line.
sub
myUtils_wakeup_Initialize($$)
{
my ($hash) = @_;
}
# Enter you functions below _this_ line.
# Sonnenaufgangssimulation für bis zu 4 Devices
# Author : Sandra Ohmayer (http://www.animeschatten.net)
# Aufruf: wakeUp(<Zeit in Minuten>,"<Devicename>"),wakeUp(<Zeit in Minuten>,"<Devicename1>","<Devicename2>") ...
sub wakeUp
{
# Dauer in Minuten (minimum 4 min)
local $dauer = $_[0];
# Initialisiern des Lichterarrays
local @lichter = ($_[1],$_[2],$_[3],$_[4]);
local @farben = (
["240,100,2",1],
["240,100,1",1],
["240,100,2",20],
["240,100,5",20],
["240,100,8",20],
["210,100,6",30],
["190,100,8",1],
["90,100,14",1],
["70,100,16",1],
["10,100,34",2],
["30,100,40",30],
["40,100,60",30],
["45,100,80",30],
["50,100,100",30],
["50,19,75",3],
["50,0,100",30]
);
local $gesamtdauersek = $dauer*60;
local $dauerfarben = 0;
foreach my $farbe ( @farben ) {
$dauerfarben+=$farbe->[1];
}
local $anteiligedauer = $gesamtdauersek/$dauerfarben;
Log3 (undef, 3, "WakeUp: start, angegebene Gesamtdauer in Sekunden $gesamtdauersek, Dauer Farben $dauerfarben, Anteil $anteiligedauer");
# Ausschalten der Lampen (Schalter - off)
foreach my $licht ( @lichter ) {
if(defined $licht) {
fhem("set $licht off");
}
}
# Durchlauf der Farbsimulation
my $i = 0;
foreach my $farbe ( @farben ) {
foreach my $licht ( @lichter ) {
if(defined $licht) {
if($i == 0) {
fhem("set $licht HSV ".($farben[$i][0])." ".ceil($anteiligedauer*($farben[$i][1])));
} else {
fhem("set $licht HSV ".($farben[$i][0])." ".ceil($anteiligedauer*($farben[$i][1]))." q");
}
}
}
$i++;
}
}
1;
Hier kommt immernoch die Meldung "Unknown command wakeUp, try help."
Ich hab versucht per "reload 99_myUtils_wakeup" das Modul nach zu laden. Bringt aber auch nichts. Shutdown restart ist selbstverständlich nach dem Speichern :)
Im Log steht dann nur:
Zitat2015.04.06 10:36:35 5: Cmd: >reload 99_myUtils_wakeup.pm<
2015.04.06 10:36:35 5: Loading ./FHEM/99_myUtils_wakeup.pm
Hat hierfür noch jemand eine Idee?
Danke im Voraus
Peer
Natürlich haben wir dazu Ideen.
Erste Idee: Nicht jedesmal einen FHEM-Neustart nach dem Speichern eines Moduls. reload Modulname genügt.
Zweite Idee: Nicht jede Pipifax-Routine in ein eigenes Modul auslagern. Geht alles nach myUtils
Dritte Idee: Mal überlegen, warum das Log genau diese Fehlermeldung zeigt - die kommt nämlich nicht aus dem Modul...
LG
pah
Hallo,
erstmal danke für die Hilfe.
Zu Idee1: OK, dachte das es besser ist, weil Änderungen in den *.cfg sonst nicht übernommern werden.
reload scheint nur *.pm neu starten zu können.
Zu Idee2: Ich habe aktuell nur diese beiden oben genannten myUtils.
Da der Code von Sandra nach ihrer Aussage nur läuft wenn "use strict;" auskommentiert ist, hab ich dafür ein extra myUtils angelegt.
Zu Idee3: Fehlermeldungen kommen keine mehr seit dem Ändern des "Initialize($$)"
Es kommt z.B. beim Aufruf "wakeUp (5,"MiLight1")" die Meldung "Unknown command wakeUp, try help."
Als ob er die SUB nicht kennen würde.
Gruß Peer
Tante Edith hat den Fehler gefundenen :) :) :)
Wenn ich das wakeUp (5,"MiLight1") noch in {} setze funktioniert es auch.
Sorry für die Umstände, bin leider noch übelster Perl Anfänger.