Hallo, ich versuche gerade folgendes Perl Script als Modul (in die 99_myUtils) einzubinden. Das Script hab ich mir aus meinem Perl Handbuch "zusammengebastelt" und im Terminal funktioniert das ganze auch. Ich brauche die ausgabe von Datum und zeit um mit einem say Befehl das ganze als Sprachausgabe, mit WebViewControl, auf dem Tablet auszugeben.
Das Perl Script:
Zitat#!/usr/bin/perl -w
use strict;
use CGI::Carp qw(fatalsToBrowser);
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
$Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
my $CTIME_String = localtime(time);
$Monat += 1;
$Jahrestag += 1;
$Jahr += 1900;
my @Wochentage = qw(Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag);
my @Monatsnamen = qw(Januar Februar März April Mai Juni Juli August September Oktober November Dezember);
my $datum_2 = sprintf("%s der %02d. %s %04d",
$Wochentage[$Wochentag],
$Monatstag,
$Monatsnamen[$Monat-1],
$Jahr,
);
my $zeit_1 = sprintf("%02d:%02d Uhr",
$Stunden,
$Minuten,
);
print <<"END";
Content-type: text/plain
Datum : $datum_2
Uhrzeit : $zeit_1
END
;
Das funktioniert.
In 99_myUtils:
package main;
use strict;
use warnings;
use POSIX;
use CGI::Carp qw(fatalsToBrowser);
sub
myoutdateUtils_Initialize($$)
{
my ($hash) = @_;
}
sub date_time()
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
$Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
my $CTIME_String = localtime(time);
$Monat += 1;
$Jahrestag += 1;
$Jahr += 1900;
my @Wochentage = qw(Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag);
my @Monatsnamen = qw(Januar Februar März April Mai Juni Juli August September Oktober November Dezember);
my $datum_2 = sprintf("%s der %02d. %s %04d",
$Wochentage[$Wochentag],
$Monatstag,
$Monatsnamen[$Monat-1],
$Jahr,
);
my $zeit_1 = sprintf("%02d:%02d Uhr",
$Stunden,
$Minuten,
);
print <<"END";
Content-type: text/plain
Datum : $datum_2
Uhrzeit : $zeit_1
END
;
1;
Das funktioniert leider nicht.
Fehler:
Illegal declaration of subroutine main::date_time at ./FHEM/99_myoutdateUtils.pm line 20.
Die Ausgabe erfolgt dann mit:
sub say($)
{
my ($msg) = @_;
fhem "set androidTablet ttsSay $msg";
}
kann mir da bitte jemand weiterhelfen?
VG
Frank
Habe es jetzt etwas umgebaut und bekomme keine Fehlermeldung mehr, leider aber beim Aufruf {date_time} auch keine Ausgabe.
##############################################
package main;
use strict;
use warnings;
use POSIX;
use CGI::Carp qw(fatalsToBrowser);
sub
myoutdateUtils_Initialize($$)
{
my ($hash) = @_;
}
sub date_time()
{
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
$Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
my $CTIME_String = localtime(time);
$Monat += 1;
$Jahrestag += 1;
$Jahr += 1900;
my @Wochentage = qw(Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag);
my @Monatsnamen = qw(Januar Februar März April Mai Juni Juli August September Oktober November Dezember);
my $datum_2 = sprintf("%s der %02d. %s %04d",
$Wochentage[$Wochentag],
$Monatstag,
$Monatsnamen[$Monat-1],
$Jahr,
);
my $zeit_1 = sprintf("%02d:%02d Uhr",
$Stunden,
$Minuten,
);
}
1;
Jemand einen weiterführenden Tipp??
VG
Frank
So, jetzt bekomme ich eine Ausgabe zurück aber leider nur die Zeit und nicht beide Strings. Habe es jetzt so geändert:
##############################################
package main;
use strict;
use warnings;
use POSIX;
use CGI::Carp qw(fatalsToBrowser);
sub
myoutdateUtils_Initialize($$)
{
my ($hash) = @_;
}
sub date_time()
{
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
$Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
my $CTIME_String = localtime(time);
$Monat += 1;
$Jahrestag += 1;
$Jahr += 1900;
my @Wochentage = qw(Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag);
my @Monatsnamen = qw(Januar Februar März April Mai Juni Juli August September Oktober November Dezember);
my $datum_2 = sprintf("%s der %02d. %s %04d",
$Wochentage[$Wochentag],
$Monatstag,
$Monatsnamen[$Monat-1],
$Jahr,
);
my $zeit_1 = sprintf("%02d:%02d Uhr",
$Stunden,
$Minuten,
);
return $datum_2, $zeit_1;
}
1;
Wie muss return $datum_2, $zeit_1 umgebaut werden um in der Ausgabe beide Strings zu bekommen?
VG
Frank
Klammer um die zwei Rückgabewerte und darauf achten, dass Du das Ergebnis dann auch direkt an zwei Variablen zuweisen musst. Ein Aufruf im Webinterface wird Dir nie beide Werte anzeigen.
Danke betateilchen, Klammern hatte ich schon um den Ausdruck, was ich nicht wusste, dass beim Aufruf im Webinterface nie beide Werte angezeigt werden.
habe jetzt return ($datum_2, $zeit_1)
Wie könnte ich das ganze jetzt testen, im Webif wird ja nur ein Wert ausgegeben
Hallo,
Mit einer Logausgabe?
Ich mach sowas gern (mit dem alten)
Log(3,"$name $wert");
$name und $wert vorher noch passend ändern.
Grüße
@Puschel
Joh, auf die Logausgabe bin ich nicht gekommen 8)