FHEM Forum

FHEM => Sonstiges => Thema gestartet von: franky08 am 23 Juli 2014, 15:26:59

Titel: [gelöst] Perl Script in 99_my Utils einbinden, wie?
Beitrag von: franky08 am 23 Juli 2014, 15:26:59
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
Titel: Antw:Perl Script in 99_my Utils einbinden, wie?
Beitrag von: franky08 am 23 Juli 2014, 15:46:40
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
Titel: Antw:Perl Script in 99_my Utils einbinden, wie?
Beitrag von: franky08 am 23 Juli 2014, 18:51:56
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
Titel: Antw:Perl Script in 99_my Utils einbinden, wie?
Beitrag von: betateilchen am 23 Juli 2014, 18:58:45
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.
Titel: Antw:Perl Script in 99_my Utils einbinden, wie?
Beitrag von: franky08 am 23 Juli 2014, 19:28:47
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
Titel: Antw:Perl Script in 99_my Utils einbinden, wie?
Beitrag von: Puschel74 am 23 Juli 2014, 20:16:33
Hallo,

Mit einer Logausgabe?
Ich mach sowas gern (mit dem alten)
Log(3,"$name $wert");
$name und $wert vorher noch passend ändern.

Grüße
Titel: Antw:Perl Script in 99_my Utils einbinden, wie?
Beitrag von: franky08 am 23 Juli 2014, 20:33:40
@Puschel
Joh, auf die Logausgabe bin ich nicht gekommen  8)