[Gelöst] Eigene Routine gibt nichts zurück

Begonnen von Darkmozart, 19 August 2017, 12:04:34

Vorheriges Thema - Nächstes Thema

Darkmozart

Hallo,

ich möchte mir eine eigene Routine basteln, die mir aus einer formatierten Uhrzeit (wie z.B. FmtTime(time()) ) die Doppelpunkte entfernt damit ich mit den Zahlen dann rechnen kann.
Nach langem hin- und herprobieren haben ich in der 99_myUtils folgende Routine gebastelt:
sub TimeToInt($){
my $rein = @_;
my $raus ='';

$rein =~ /(\d+):(\d+):(\d+)/;

$raus .= $1.$2.$3;

return $raus
}

Zum teste (um nicht immer alles Tippen zu müssen habe ich mir ein DOIF gezimmert, das eigentlich nix macht ausser einem Dummy eine Ausgabe zuzuweisen:
Code aus der Raw kopiert:
defmod doif_test DOIF (1)({\
my $var=TimeToInt(FmtTime(time()));;;;\
print $var;;;;\
(fhem "set test $var")\
}\
)
attr doif_test room Übungen
defmod test dummy
attr test room Übungen

Mein Problem ist nun, wenn ich den Code für die Routine in z.B. Eclipse test, funktioniert er, ich bekomme als Ausgabe dann die erwarteten 6 Zahlen - sobald ich das ganze in FHEM ausführe, bekomme ich eintweder einen Fehler (no set value specified) oder nichts. Warum bekomme ich hier keine Rückgabe von meiner Routine?


Grüße
Darkmozart
RasPi3 mit aktuellem FHEM
CUL 433MHZ
Ne Menge Somfy Rollläden
Aktuelles Projekt: Sensoren (MySensors) für Helligkeit und Temperatur zur Rollladensteuerung
Diverse Spielereien...

CoolTux

Bau dir debugausgaben oder Logausgaben oder Printausgabe ein um zu schauen wie weit er mit was kommt
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Darkmozart

Gute Idee.

Umgebaute Routine:
sub TimeToInt($){
my $rein = @_;
my $raus ='';

$rein =~ /(\d+):(\d+):(\d+)/;

Debug("TimeToInt: \@_: ".@_." \$rein: ".$rein." \$1:".$1." \$2:".$2." \$3: ".$3);

$raus .= $1.$2.$3;

Debug("$raus: ".$raus);

return $raus
}

Ausgabe:
2017.08.19 12:32:10 1: DEBUG>TimeToInt: @_: 1 $rein: 1 $1: $2: $3:
2017.08.19 12:32:10 1: DEBUG>: 

Also scheint mit dem Einlesen der Variablen was nicht zu stimmen...
Seltsam, ich übergebe ja mit {TimeToInt(FmtTime(time()))} was ja sowas wie 12:45:36 sein sollte....
Wenn ich in der Routine eine Variable mit "12:45:36" definiere und die auswerten lasse funktioniert das ganze auch.
So, nun suche ich weiter das Grab des Hundes. Muss ja irgendwo sein...
RasPi3 mit aktuellem FHEM
CUL 433MHZ
Ne Menge Somfy Rollläden
Aktuelles Projekt: Sensoren (MySensors) für Helligkeit und Temperatur zur Rollladensteuerung
Diverse Spielereien...

DeeSPe

sub TimeToInt($){
my $rein = @_;
my $raus;

$rein =~ /(\d+):(\d+):(\d+)/;

$raus = "$1$2$3";

Debug("raus: $raus");

return $raus;
}


Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Darkmozart

Gefunden  8)
Hier lag der Fheler:

my $rein = @_;
sollte heissen:
my ($rein) = @_;
Die Klammer macht den Unterschied.

Danke!
RasPi3 mit aktuellem FHEM
CUL 433MHZ
Ne Menge Somfy Rollläden
Aktuelles Projekt: Sensoren (MySensors) für Helligkeit und Temperatur zur Rollladensteuerung
Diverse Spielereien...

CoolTux

Man kann auch statt @_ einfach shift schreiben. Dann darf aber wirklich auch nur ein Übergabeparameter vorhanden sein.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

DeeSPe

Zitat von: CoolTux am 19 August 2017, 12:49:34
Man kann auch statt @_ einfach shift schreiben. Dann darf aber wirklich auch nur ein Übergabeparameter vorhanden sein.

Nö, Du kannst auch weiter shift'en.

my $a = shift;
my $b = shift;


Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Manche sind "ganz verrückt" und lassen sogar Prototypes weg:
sub TimeToInt {
  my $rein = shift;
  ........................
}


Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

CoolTux

Das mit dem weiter shiften kann man, wenn man es gerne komplex mag, das stimmt.
Das weg lassen habe ich auch schon mal gesehen. Wäre für mich nichts, da würde ich nicht mehr durch sehen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net