FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Spartacus am 22 Dezember 2014, 17:35:04

Titel: Probleme mit fhem und perl bei Parameterübergabe
Beitrag von: Spartacus am 22 Dezember 2014, 17:35:04
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
Titel: Antw:Probleme mit fhem und perl bei Parameterübergabe
Beitrag von: Hans Franz am 22 Dezember 2014, 18:37:36
Hallo,
ohne es jetzt verifiziert zu haben, könnte es das Leerzeichen in
CountDownFerien ($)
sein. Mal mit:
CountDownFerien($)
versuchen.

Viel Glück
Hans
Titel: Antw:Probleme mit fhem und perl bei Parameterübergabe
Beitrag von: Spartacus am 22 Dezember 2014, 18:43:25
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
Titel: Antw:Probleme mit fhem und perl bei Parameterübergabe
Beitrag von: Spartacus am 23 Dezember 2014, 13:24:55
Hallo,
hat niemand eine Idee dazu? Was ist der Unterschied bei dem automatischen und bei dem manuellen Aufruf meiner Routine?
Christian
Titel: Antw:Probleme mit fhem und perl bei Parameterübergabe
Beitrag 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.
Titel: Antw:Probleme mit fhem und perl bei Parameterübergabe
Beitrag von: Spartacus am 23 Dezember 2014, 14:27:38
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.