Probleme mit fhem und perl bei Parameterübergabe

Begonnen von Spartacus, 22 Dezember 2014, 17:35:04

Vorheriges Thema - Nächstes Thema

Spartacus

Hallo,
ich versuche einen FerienCountdown in fhem nach dem muster des Abfallkalenders zu bauen.
Habe den Kalender im Google definiert und kann auch die Ferien auslesen.

Nun rufe ich über folgendes Notify die CountDown Routine auf:
define cal.02.Ferien.not notify cal.01.Ferien:modeUpcoming.* {CountDownFerien("$EVENT")}

Die Routine sieht so aus:
sub
CountDownFerien ($)
{
  my ($Ereignis) = @_;
  my @Ereignisarray = split(/.*:\s/,$Ereignis);
  my $Ereignisteil1 = $Ereignisarray[1];
  my @uids=split(/;/,$Ereignisteil1);
  my $t  = time;
  my $eventDateStart= 0;
  my $eventDateEnd = 0;


    my $Kalendertext = fhem("get cal.01.Ferien summary $uids[0]");
    if ($Kalendertext =~ /ferien/) {
        my $dtStart = fhem("get cal.01.Ferien start $uids[0]");
my $dtEnd = fhem("get cal.01.Ferien end $uids[0]");
        my @SplitDtStart = split(/ /,$dtStart);
my @SplitDtEnd = split(/ /,$dtEnd);
        my @SplitDateStart = split(/\./,$SplitDtStart[0]);
my @SplitDateEnd = split(/\./,$SplitDtEnd[0]);
        $eventDateStart = timelocal(0,0,0,$SplitDateStart[0],$SplitDateStart[1]-1,$SplitDateStart[2]);
$eventDateEnd = timelocal(0,0,0,$SplitDateEnd[0],$SplitDateEnd[1]-1,$SplitDateEnd[2]);
};

  my $dayDiff = floor(($eventDateStart - $t) / 60 / 60 / 24 + 1);
  if ($dayDiff >= 0) {
    fhem("set cal.02.Ferien.dum $dayDiff");
   }
  my $dayDiff = floor(($eventDateEnd - $t) / 60 / 60 / 24);
  if ($dayDiff >= 0) {
    fhem("set cal.03.Ferien.dum $dayDiff");
   }
}

geht wahrscheinlich auch viel einfacher, aber es läuft...
im Log sieht das Ganze so aus..
2014.12.22 17:13:52 4: cal.02.Ferien.not exec {CountDownFerien("$EVENT")}
2014.12.22 17:13:52 5: Cmd: >{CountDownFerien("$EVENT")}<
2014.12.22 17:13:52 5: Cmd: >get cal.01.Ferien summary F_2014_6129schulferienorg<
2014.12.22 17:13:52 3: get cal.01.Ferien summary F_2014_6129schulferienorg : Weihnachtsferien 2014 Nordrhein-Westfalen
2014.12.22 17:13:52 5: Cmd: >get cal.01.Ferien start F_2014_6129schulferienorg<
2014.12.22 17:13:52 3: get cal.01.Ferien start F_2014_6129schulferienorg : 22.12.2014 00:00:00
2014.12.22 17:13:52 5: Cmd: >get cal.01.Ferien end F_2014_6129schulferienorg<
2014.12.22 17:13:52 3: get cal.01.Ferien end F_2014_6129schulferienorg : 07.01.2015 00:00:00


Jetzt verstehe ich nicht, warum ich mit
{CountDownFerien ("F_2014_6129schulferienorg")}
den Fehler "missing Argument" bekomme! Wie muss ich das aus fhem korrekt aufrufen? Das "$EVENT" ist doch das KalenderEvent "F_2014_6129schulferienorg"!

Kann das jemand erklären?
Danke,
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Hans Franz

Hallo,
ohne es jetzt verifiziert zu haben, könnte es das Leerzeichen in
CountDownFerien ($)
sein. Mal mit:
CountDownFerien($)
versuchen.

Viel Glück
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

Spartacus

Hallo Hans,
danke, aber as ist es nicht! Das habe ich schon versucht! Das Event scheint ein Feld zu sein. Muss man das anders übergeben?
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Spartacus

Hallo,
hat niemand eine Idee dazu? Was ist der Unterschied bei dem automatischen und bei dem manuellen Aufruf meiner Routine?
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Doggiebert

Na, wenn Dein notify funktioniert, mach doch einfach einen zusätzlichen Logeintrag in Deiner Routine, die Dir die Variable $EVENT loggt - dann weißt Du, wie's aussehen muss.
SW: FHEM 5.5, Raspian, XBMC, Testinstallation auf Win7
HW: Raspi B, 32GB SD, enocean Pi, RFXTRX433E, BSC - MwC-32, Onkyo TX-NR709, Samsung UE55F8090, Jung LS-Eno, permundo SmartPlug, KDG-FB 6490cable (ohne FHEM)

Spartacus

Moin,
Zitat von: Doggiebert am 23 Dezember 2014, 13:57:37
Na, wenn Dein notify funktioniert, mach doch einfach einen zusätzlichen Logeintrag in Deiner Routine, die Dir die Variable $EVENT loggt - dann weißt Du, wie's aussehen muss.
Hallo,
das war in der tat ein guter Tipp!
der Aufruf muss so lauten:
{CountDownFerien("modeStarted: F_2014_6129schulferienorg")}

Vielleicht hast Du noch nen weiteren Tipp für mich:

Ich ermittle, beginnend vom heutigen Datum aus, den CountDown für Ferienstart und Ferienende.
Beim Aufruf des o.a. Ausdrucks, bekomme ich für Start keinen Wert, da der Start in der Vergangenheit liegt und für Ende den Wert 14. Das Ende ist korrekt. "Start" sollte aber auf "0" oder besser noch auf "-1" gesetzt werden. Allerdings habe ich keine Idee, wie ich das abfangen kann.  Derzeit bleibt der Wert des Dummy auf den letzte gültigen Wert ("1") stehen (also 1 Tag vor Start der Ferien)
Gruß,
Spartacus.
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R