FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Thema gestartet von: dieoma am 18 Februar 2016, 23:15:10

Titel: Calendar Intervall geht nicht (mehr)??
Beitrag von: dieoma am 18 Februar 2016, 23:15:10
Hallo zusammen,

mir ist bekannt das das Modul gerade überarbeitet wird, jedoch ging ich davon aus das das aktuelle Modul erst mal soweit funktioniert wie vorher auch. Mir ist jedoch aufgefallen das bei mir das Intervall nicht mehr funktioniert. Das .ics File wird lediglich beim restart einmalig eingelesen was ich im Log sehe, aber das gesetzte Intervall führt nicht dazu das dies erneut durchgeführt wird. So sieht meine Definition aus: define Abfall Calendar ical file /opt/fhem/FHEM/2016_Abfall.ics 60
attr Abfall icon time_calendar
attr Abfall room Abfallkalender
define Abfall_Update notify Abfall:(modeUpcoming|modeAlarmOrStart).* {Abfalltermine("$EVENT")}
attr Abfall_Update room Abfallkalender
define MuellterminDummy dummy

define Papiertonne dummy
attr Papiertonne group Abfall Countdown
attr Papiertonne room Abfallkalender
...
Lediglich beim shutdown restart sehe ich im Log: 2016.02.18 22:54:55 3: get Abfall summary 23752ED596014D36B27BBB21BF3751DD : GelbeTonne
2016.02.18 22:54:55 3: get Abfall start 23752ED596014D36B27BBB21BF3751DD : 06.09.2016 10:00:00
2016.02.18 22:54:55 3: 1473112800
2016.02.18 22:54:55 3: get Abfall summary 5F627C215CA94565A354D29770BBCFE4 : Reste
2016.02.18 22:54:55 3: get Abfall start 5F627C215CA94565A354D29770BBCFE4 : 25.10.2016 10:00:00
2016.02.18 22:54:55 3: 1477346400
2016.02.18 22:54:55 3: get Abfall summary BDE920C133884F7BB0955D2B04BD9CF8 : Papiertonne
2016.02.18 22:54:55 3: get Abfall start BDE920C133884F7BB0955D2B04BD9CF8 : 28.10.2016 10:00:00
2016.02.18 22:54:55 3: 1477605600
2016.02.18 22:54:55 3: get Abfall summary 7305648DD6B44FCF9CE62E8EC94D5773 : GelbeTonne
2016.02.18 22:54:55 3: get Abfall start 7305648DD6B44FCF9CE62E8EC94D5773 : 09.08.2016 10:00:00
2016.02.18 22:54:55 3: 1470693600
2016.02.18 22:54:55 3: get Abfall summary D952ADD526CE4279AA7437007355B45D : Papiertonne
2016.02.18 22:54:55 3: get Abfall start D952ADD526CE4279AA7437007355B45D : 19.02.2016 10:00:00
2016.02.18 22:54:55 3: 1455836400
2016.02.18 22:54:55 3: get Abfall summary 6F988C52207B492EBF75B25A02DB8FDB : GelbeTonne
2016.02.18 22:54:55 3: get Abfall start 6F988C52207B492EBF75B25A02DB8FDB : 28.12.2016 10:00:00
2016.02.18 22:54:55 3: get Abfall summary 716500CD82134FC29AA0C45236FB3329 : GelbeTonne
2016.02.18 22:54:55 3: get Abfall start 716500CD82134FC29AA0C45236FB3329 : 29.11.2016 10:00:00
2016.02.18 22:54:55 3: get Abfall summary 4322415EFC9047B792DB4ED09E5C03A9 : GelbeTonne
2016.02.18 22:54:55 3: get Abfall start 4322415EFC9047B792DB4ED09E5C03A9 : 22.03.2016 10:00:00
...
Ich hätte erwartet das das alle 60sek. (so wie früher) ausgeführt und gelogt wird - ist aber nicht. Laut Wiki hat sich die definition aber nicht geändert ?!? Hat da jemand einen Tipp?

Danke vorab!
Titel: Antw:Calendar Intervall geht nicht (mehr)??
Beitrag von: betateilchen am 19 Februar 2016, 12:53:54
Probiers mal ohne Intervallangabe, oder zumindest nicht mit einem so kurzen Intervall wie von Dir gewählt.
Titel: Antw:Calendar Intervall geht nicht (mehr)??
Beitrag von: dieoma am 19 Februar 2016, 20:15:31
Ohne Interval wird der Kalender doch nur einmalig eingelesen - das nützt mir in diesem Fall nix - ich benötige schon einen intervall.
Das mit 60sek. ist nur testweise drin, normalerweise steht da 10800 drin. Aber ob 5, 60 oder 10800 macht eh keinen Unterschied da der Intervall eh ignoriert wird...
Titel: Antw:Calendar Intervall geht nicht (mehr)??
Beitrag von: Dr. Boris Neubert am 20 Februar 2016, 11:55:57
define Abfall_Update notify Abfall:triggered {Abfalltermine("$EVENT")}
Titel: Antw:Calendar Intervall geht nicht (mehr)??
Beitrag von: betateilchen am 20 Februar 2016, 12:29:56
Zitat von: dieoma am 19 Februar 2016, 20:15:31
Ohne Interval wird der Kalender doch nur einmalig eingelesen

Nein. Der default-Wert für den optionalen Paramter interval ist 3600 Sekunden.
Titel: Antw:Calendar Intervall geht nicht (mehr)??
Beitrag von: matze1986 am 20 Februar 2016, 19:00:54
Hallo ,

habe das gleiche Problem.

Die Readings "State" "lastupdate" "nextupdate" werden so wie im define testweise im 60sec Rythmus aktualisiert.
Allerdings wird in "modeUpcoming" wo die Termine stehen nichts geändert wenn Termine im Kalener hinzugefügt wurden.
Dadurch werden die vorhandenen vermutlich auch nicht aktualisiert(wieviele Tage noch bis zur Müllabholung sind).

Wenn ich die cfg allerings speicher, wird der Kalener geupdatet.

Anbei ie cfg.
define Abfall Calendar ical url https://...........basic.ics 60
  attr Abfall alias Abfallkalender
  attr Abfall fp_Wohnzimmer 359,726,1, ,Abfall
  attr Abfall icon recycling
  attr Abfall room Kalender

define Gelber.Sack dummy
  attr Gelber.Sack group Info
  attr Gelber.Sack icon bag@yellow
  attr Gelber.Sack room Kalender
define Resttonne dummy
  attr Resttonne group Info
  attr Resttonne icon dustbin@rgb(87,44,1)
  attr Resttonne room Kalender
define Papiertonne dummy
  attr Papiertonne group Info
  attr Papiertonne icon dustbin@blue
  attr Papiertonne room Kalender
define Biotonne dummy
  attr Biotonne group Info
  attr Biotonne icon dustbin@green
  attr Biotonne room Kalender


define Abfall_Update notify Abfall:modeUpcoming.* {Abfalltermine($NAME,"$EVENT")}
attr Abfall_Update room Kalender


und der Inhalt der 99myUtils


######Abfallkalener ##############

#
# Hilfsfunktion für Kalenderauswertungen
#

sub
KalenderDatum($$)
{
my ($KalenderName, $KalenderUid) = @_;
my $dt = fhem("get $KalenderName start $KalenderUid");
my @SplitDt = split(/ /,$dt);
my @SplitDate = split(/\./,$SplitDt[0]);
my $ret = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);

return $ret;
}

#
# Abfall Kalender auswerten / Google Kalender: "Abfall"
#

#### Google Kalender auswerten
#
sub Abfalltermincheck($$$$$$$){
  my ($text,$art,$check,$uid,$t,$cal,$Kt) = @_;
  my ($dt,@SplitDt,@SplitDate,$eventDate,$daydiff);
#  Log 3, "Abfalltermincheck - $text,$art,$check,$uid,$t,$cal";
  if ($Kt =~ /$text/) {
    $dt = fhem("get $cal start $uid",1);
    @SplitDt = split(/ /,$dt);
    @SplitDate = split(/\./,$SplitDt[0]);
    $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
    if ($check eq '' || ($eventDate < $check && $eventDate > $t)){
          $check = $eventDate;
          $daydiff = floor(($eventDate - $t) / 60 / 60 / 24 +1);
          fhem("set $art $daydiff",1);
        };
    };
    return ($check);
}

sub Abfalltermine($$){
  my ($cal,$Ereignis) = @_;
  my ($Kt);
  my @Ereignisarray = split(/.*:\s/,$Ereignis);
  my $Ereignisteil1 = $Ereignisarray[1];
  my @uids=split(/;/,$Ereignisteil1);
  my $t  = time;
# Prüfvariablen
  my $dtBio = '';
  my $dtGelb = '';
  my $dtRest = '';
#  my $dtGlas = '';
  my $dtPapier = '';
  foreach my $uid (@uids) {
    $Kt = fhem("get $cal summary $uid",1);
#   Prüfvariable = Abfalltermincheck("Suchtext","Dummyname",Prüfvariable,UID,Zeit,Kalender,Kalendertext)
    $dtPapier = Abfalltermincheck("Papier","Papiertonne",$dtPapier,$uid,$t,$cal,$Kt);
    $dtRest   = Abfalltermincheck("Rest","Resttonne",$dtRest,$uid,$t,$cal,$Kt);
    $dtBio   = Abfalltermincheck("Bio","Biotonne",$dtBio,$uid,$t,$cal,$Kt);
    $dtGelb   = Abfalltermincheck("Gelber","Gelber.Sack",$dtGelb,$uid,$t,$cal,$Kt);
  };
}
Titel: Antw:Calendar Intervall geht nicht (mehr)??
Beitrag von: Dr. Boris Neubert am 20 Februar 2016, 19:30:30
Meinen Beitrag dazu gesehen?

Wenn Du im Google-Kalender einen Termin hinzufügst, wir der Kalender beim nächsten Update aktualisiert. Du kannst das selbst debuggen, indem Du

get Abfall debug all
get Abfall vevents


vor und nach der Änderung im Kalender mit Update via

set Abfall update

vergleichst.

Viele Grüße
Boris

Titel: Antw:Calendar Intervall geht nicht (mehr)??
Beitrag von: dieoma am 20 Februar 2016, 21:11:14
habe das nun wie von Boris vorgeschlagen geändert aber im Log ist noch immer kein update zu sehen?!?
meine 99_myUtils sieht so aus: #
# Abfall Kalender auswerten / Google Kalender: "Abfall"
#

sub
Abfalltermine ($)
{
  my ($Ereignis) = @_;
  my @Ereignisarray = split(/.*:\s/,$Ereignis);
  my $Ereignisteil1 = $Ereignisarray[1];
  my @uids=split(/;/,$Ereignisteil1);
  my $t  = time;
  my $dtPapier = '';
  my $dtWertstofftonne = '';
  my $dtRest = '';
   foreach my $uid (@uids) {
    my $Kalendertext = fhem("get Abfall summary $uid");
        if ($Kalendertext =~ /Papiertonne/) {
                my $dt = fhem("get Abfall start $uid");
                my @SplitDt = split(/ /,$dt);
                my @SplitDate = split(/\./,$SplitDt[0]);
                my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
                if ($dtPapier eq '' || ($eventDate < $dtPapier && $eventDate > $t))
                        {
                        $dtPapier = $eventDate;
                        Log(3, $dtPapier);
                        }
        };
        if ($Kalendertext =~ /GelbeTonne/) {
                my $dt = fhem("get Abfall start $uid");
                my @SplitDt = split(/ /,$dt);
                my @SplitDate = split(/\./,$SplitDt[0]);
                my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
                if ($dtWertstofftonne eq '' || ($eventDate < $dtWertstofftonne && $eventDate > $t))
                        {
                        $dtWertstofftonne  = $eventDate;
                        Log(3, $dtWertstofftonne);
                        }
        };
        if ($Kalendertext =~ /Reste/) {
                my $dt = fhem("get Abfall start $uid");
                my @SplitDt = split(/ /,$dt);
                my @SplitDate = split(/\./,$SplitDt[0]);
                my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
                if ($dtRest eq '' || ($eventDate < $dtRest && $eventDate > $t))
                        {
                        $dtRest = $eventDate;
                        Log(3, $dtRest);
                        }
        };


  my $dayDiff1 = floor(($dtPapier - $t) / 60 / 60 / 24 +1);
  if ($dayDiff1 >= 0) {
        fhem("set Papiertonne $dayDiff1");
        fhem("setreading MuellterminDummy BlaueTonne $dayDiff1");
  }
  my $dayDiff2 = floor(($dtWertstofftonne - $t) / 60 / 60 / 24 +1);
  if ($dayDiff2 >= 0) {
        fhem("set Gelbe $dayDiff2");
        fhem("setreading MuellterminDummy GelbeTonne $dayDiff2");
  }
  my $dayDiff3 = floor(($dtRest - $t) / 60 / 60 / 24 +1);
  if ($dayDiff3 >= 0) {
        fhem("set Restmuell $dayDiff3");
        fhem("setreading MuellterminDummy Restmuell $dayDiff3");
  }
  }
}
1;
Kann es sein das "Abfall:triggered" anders auswertet als "Abfall:(modeUpcoming|modeAlarmOrStart)" und daher a) nix mehr im Log steht und b) der Countdown nicht mehr klappt? Wie gesagt - das hat mal alles mehrere Monate prima funktioniert  ::)
Titel: Antw:Calendar Intervall geht nicht (mehr)??
Beitrag von: Dr. Boris Neubert am 20 Februar 2016, 21:21:30
Sorry, es muss

define Abfall_Update notify Abfall:(alarm|start|end).* {Abfalltermine("$EVENT")}

heißen.
Titel: Antw:Calendar Intervall geht nicht (mehr)??
Beitrag von: dieoma am 20 Februar 2016, 23:38:04
Das sieht geringfügig besser aus, aber nicht gut. Mit debug zeigt er nun ...
EFFCB14CFE6C4C9C88AD7A172E766AE4         end                     26.01.2016 10:00:00-26.01.2016 11:00:00 GelbeTonne 
BA9A0C406A024BB3A3734B9FF7E9F057         end                     02.02.2016 10:00:00-02.02.2016 11:00:00 Reste 
32D9BBA7ED5B485194E6B00DEDDCCF72         end                     10.02.2016 10:00:00-10.02.2016 11:00:00 GelbeTonne 
80DFCF32AD684FB997A7C0DCCDBD51D5         end                     16.02.2016 10:00:00-16.02.2016 11:00:00 Reste 
D952ADD526CE4279AA7437007355B45D         end                     19.02.2016 10:00:00-19.02.2016 11:00:00 Papiertonne 
D53D8896EF55464AB6A1543224CE247D    upcoming                     23.02.2016 10:00:00-23.02.2016 11:00:00 GelbeTonne 
E224CFF789B14BAF8CD8F7547C0F94C3    upcoming                     01.03.2016 10:00:00-01.03.2016 11:00:00 Reste 
B9AA164FAA0145FE8230958520E7BF81    upcoming                     08.03.2016 10:00:00-08.03.2016 11:00:00 GelbeTonne 
E2CECFFA42744371BD4ACFE2C1396C3D    upcoming                     15.03.2016 10:00:00-15.03.2016 11:00:00 Reste 
27F366849C6341599D61C389AE00A9F2    upcoming                     18.03.2016 10:00:00-18.03.2016 11:00:00 Papiertonne 
4322415EFC9047B792DB4ED09E5C03A9    upcoming                     22.03.2016 10:00:00-22.03.2016 11:00:00 GelbeTonne 
...
was richtig ist bezogen auf "end" und "upcoming" aber die Zähler werden nicht aktualisiert denn für Papiertonne zeigt er 0 an was ja nicht stimmen kann. Außerdem bin ich was das Intervall angeht auch noch unsicher denn noch immer sehe ich keine Updates im log...