Abfallkalender auswerten

Begonnen von raspklaus, 17 Juni 2014, 17:45:34

Vorheriges Thema - Nächstes Thema

Tommy82

Hi, danke hab ich jetzt geändert, mal sehen was passiert
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

Tommy82

Hab jetzt leider neue Fehler im Log
2015.01.25 03:00:23.202 1: PERL WARNING: Use of uninitialized value $dt in split at ./FHEM/99_myUtils.pm line 239.
2015.01.25 03:00:23.203 1: PERL WARNING: Use of uninitialized value in split at ./FHEM/99_myUtils.pm line 240.
2015.01.25 03:00:23.203 1: PERL WARNING: Use of uninitialized value $SplitDate[1] in subtraction (-) at ./FHEM/99_myUtils.pm line 241.
2015.01.25 03:00:23.205 3: AbfallA_Update.not.Update return value: Month '-1' out of range 0..11 at ./FHEM/99_myUtils.pm line 241


in 239
        my @SplitDt = split(/ /,$dt);
240
        my @SplitDate = split(/\./,$SplitDt[0]);
241
        my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);

Wo liegt da der Fehler?
Ist das auch der grund dafür das ich nur noch angezeigt bekomme Keine weiteren Termine?
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

stromer-12

Du hast da einen Fehler in Zeile 238.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

Tommy82

Genau das wars, da hatte ich noch was übersehen. Jetzt gibts endlich keine Fehler mehr im Log :-)

Allerdings kommt mir die heutige Anzeige Restabfall mit 3 Tagen seltsam vor, da der am MIttwoch geht
Zitata1d062c70344bfb3213d04eb9016240d   known upcoming                     28.01.2015 00:00:00-29.01.2015 00:00:00 Restabfall Limbach Hauptstraße
Aber mal sehen was passiet
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

RoBra81

Hallo,

weil's geht  ;)

Nein, im ernst, ich habe bei mir neben der Wohnungstür ein Tablet hängen, das zum Bedienen verwendet wird. Das Tablet wird beim Vorbeigehen aktiviert und zeigt auf der Übersichtsseite z.B. an, ob morgen (ich muss die Tonnen schon mal vorholen) oder heute (ich muss die Tonne auf dem Weg zum Auto mit auf die Straße stellen) die Müllabfuhr kommt. Da brauche ich keine zusätzliche App und sehe die Information in dem Moment, wo ich sie brauche - auf dem Weg aus dem Haus...

Ronny

Tommy82

Ronny hat recht, an meiner Wand wird auch angezeigt das Morgen der Müll geholt wird:-)
Mal davon abgesehen, das ich nicht glaube das es für jede kleine Ordschaft so eine App gibt...
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

stelzi76

Hallo,
habe bei mir jetzt auch mal probiert euren Aballkalender zu integrieren. Kann bei dem Code zwar einiges nachvollziehen, aber kenn mich nicht wirklich aus.
Habe versucht den Kalender für mich anzupassen, aber irgendwie komm ich nicht weiter. Ich habe einen Google-Kalender in Fhem integriert und zwar nicht als Datei, sondern mit url. Der Kalender ist auch korrekt integriert.

Leider wird bei mir der State in den Dummies falsch gesetzt - mehr oder weniger willkürliche Werte.
Evtl. kann mir ja jemand weiterhelfen. Wär super.

Ich denke mein notify ist verkehrt.
Im Log wird mir immer folgendes angezeigt (damit kann ich aber nix anfangen)

Abfall return value: Global symbol "$EVTPART1" requires explicit package name at (eval 59) line 1.

Folgendes sind meine Einträge:

Google-Kalender:
define FhemCalendar Calendar ical url https://www.google.com/calendar/ical/<privat-adresse>.basic.ics

Dummies:

define BiomuellIn dummy
define GelbeTonneIn dummy
define RestmuellIn dummy


Notify:

define Abfall notify FhemCalendar.all:.* {Abfallkalender("$EVTPART1")}

Sub:

sub
Abfallkalender ($)
{
  my ($Ereignis) = @_;
  my @uids=split(/;/,$Ereignis);
  my (undef,undef,undef,$mday,$mon,$year) = localtime;
  my $t  = timelocal(0,0,0,$mday,$mon,$year);
  my $dtBio = '';
  my $dtYellow = '';
  my $dtRest = '';
  foreach my $uid (@uids) {
    my $Kalendertext = fhem("get FhemCalendar summary $uid",1);
    if ($Kalendertext =~ /Biotonne/) {
        my $dt = fhem("get FhemCalendar start $uid",1);
        my @SplitDt = split(/ /,$dt);
        my @SplitDate = split(/\./,$SplitDt[0]);
        my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
        if (($dtBio eq '' || $eventDate < $dtBio) && $eventDate >= $t)
        {
          $dtBio = $eventDate;
        }
    };
    if ($Kalendertext =~ /Gelbe Tonne/) {
        my $dt = fhem("get FhemCalendar start $uid",1);
        my @SplitDt = split(/ /,$dt);
        my @SplitDate = split(/\./,$SplitDt[0]);
        my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
        if (($dtYellow eq '' || $eventDate < $dtYellow) && $eventDate >= $t)
        {
          $dtYellow  = $eventDate;
        }
    };
    if ($Kalendertext =~ /Schwarze Tonne/) {
        my $dt = fhem("get FhemCalendar start $uid",1);
        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;
        }
    };
  };

  my $dayDiff = 0; 
 
  if ($dtBio eq '') {
    fhem("set BiomuellIn Keine weiteren Termine");
  }
  else {
    $dayDiff = floor(($dtBio - $t) / 60 / 60 / 24);
    if ($dayDiff >= 0) {
      fhem("set BiomuellIn $dayDiff");
    }
  }
  if ($dtYellow eq '') {
    fhem("set GelbeTonneIn Keine weiteren Termine");
  }
  else {
    $dayDiff = floor(($dtYellow - $t) / 60 / 60 / 24);
    if ($dayDiff >= 0) {
      fhem("set GelbeTonneIn $dayDiff");
    }
  }
  if ($dtRest eq '') {
    fhem("set RestmuellIn Keine weiteren Termine");
  }
  else {
    $dayDiff = floor(($dtRest - $t) / 60 / 60 / 24);
    if ($dayDiff >= 0) {
      fhem("set RestmuellIn $dayDiff");
    }
  }
}

stelzi76

Hat sich erledigt.
Funktioniert jetzt.
Das Problem ist einfach, dass Serientermine nicht richtig verarbeitet werden, bzw. die Anzeige ist nicht richtig,
wenn man einen Termin der Serie verschiebt oder löscht.

DrJJ

Ich habe auch den Müllkalender wie hier beschrieben umgesetzt. Allerdings passte bei mir ab und zu die Anzeige der Tage nicht, dies konnte ich lösen in dem ich bei den Auswertungen die Zeile $dayDiff = floor(($dtRest - $t) / 60 / 60 / 24); in $dayDiff = ceil(($dtRest - $t) / 60 / 60 / 24); umänderte. Vielleicht hilft es dem ein oder anderen auch weiter

pointde

Ich bekomme folgende Fehlermeldung im Log:
2015.04.19 11:35:44 3: AbfallA_Update.not.Update return value: Undefined subroutine &main::timelocal called at ./FHEM/99_myUtils.pm line 16.

Leider werden auch die Tage nicht geupdatet!

Hier meine Daten.
99 myUtils
package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}
sub
MuelltermineA ($)
{
  my ($Ereignis) = @_;
  my @uids=split(/;/,$Ereignis);
  my (undef,undef,undef,$mday,$mon,$year) = localtime;
  my $t  = timelocal(0,0,0,$mday,$mon,$year);
  my $dtRest = '';
  my $dtPapier = '';
  foreach my $uid (@uids) {
    my $Kalendertext = fhem("get AbfallA summary $uid",1);
    if ($Kalendertext =~ /Restmuelltonne/) {
        my $dt = fhem("get AbfallA start $uid",1);
        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;
        }
    };
if ($Kalendertext =~ /Papiertonne/) {
        my $dt = fhem("get AbfallA start $uid",1);
        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 < $dtPapier) && $eventDate >= $t)
        {
          $dtRest = $eventDate;
        }
    };
  };

  my $dayDiff = 0; 
 
    if ($dtRest eq '') {
    fhem("set RestmuellIn Keine weiteren Termine");
  }
  else {
    $dayDiff = floor(($dtRest - $t) / 60 / 60 / 24);
    if ($dayDiff >= 0) {
      fhem("set RestmuellIn $dayDiff");
    }
  }
  if ($dtPapier eq '') {
    fhem("set PapierIn Keine weiteren Termine");
  }
  else {
    $dayDiff = floor(($dtPapier - $t) / 60 / 60 / 24);
    if ($dayDiff >= 0) {
      fhem("set PapierIn $dayDiff");
    }
  }
}


define AbfallA Calendar ical file /opt/fhem/Mike/Leerungstermine.ics
attr AbfallA alias Abfallkalender
attr AbfallA room Kalender

define RestmuellIn dummy
attr RestmuellIn alias Restmüll
attr RestmuellIn group Info
attr RestmuellIn room Kalender

define PapierIn dummy
attr PapierIn alias Papier
attr PapierIn group Info
attr PapierIn room Kalender

Das notify
define AbfallA_Update.not.Update notify AbfallA.all:.* {MuelltermineA("$EVTPART1")}
attr AbfallA_Update.not.Update room Kalender


Tommy82

Hast du in deiner 99_MyUtils oben diesen Eintrag?

use Time::Local;

Sonst füg ihn mal ein und versuch es nochmal, sollte ca so aussehen
package main;
use strict;
use warnings;
use POSIX;
use Time::Local;
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

pointde

#161
Ich habe es jetzt mal nachgetragen. An den Dummys hat sich aber nichts geändert. Nachdem ich den Abfallkalender manuell geupadetet und reloaded habe, steht jetzt bei Rest 11 und bei Papier keine weiteren... was ja nicht stimmt. Also irgendwas passt immer noch nicht!

Im Log steht jetzt das:
2015.04.19 16:52:29 1: PERL WARNING: Argument "" isn't numeric in numeric lt (<) at ./FHEM/99_myUtils.pm line 37.
2015.04.19 16:58:15 1: PERL WARNING: Subroutine myUtils_Initialize redefined at ./FHEM/99_myUtils.pm line 8.
2015.04.19 16:58:15 1: PERL WARNING: Subroutine MuelltermineA redefined at ./FHEM/99_myUtils.pm line 13.


Tommy82

Puh, da steh ich mir grade auch auf dem Schlauch, wie sieht die 99_My jetzt aus?
Starte Fhem mal neu
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

pointde

Hab alles schon mehrfach gestartet. Beim Restmüll passt es jetzt! Da wird der Dummy mit Zahlen befüllt. Hat auch einen Tag runter gezählt seit gestern.

Hier der Inhalt der Datei:
package main;
use strict;
use warnings;
use POSIX;
use Time::Local;
sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}
sub
MuelltermineA ($)
{
  my ($Ereignis) = @_;
  my @uids=split(/;/,$Ereignis);
  my (undef,undef,undef,$mday,$mon,$year) = localtime;
  my $t  = timelocal(0,0,0,$mday,$mon,$year);
  my $dtRest = '';
  my $dtPapier = '';
  foreach my $uid (@uids) {
    my $Kalendertext = fhem("get AbfallA summary $uid",1);
    if ($Kalendertext =~ /Restmuelltonne/) {
        my $dt = fhem("get AbfallA start $uid",1);
        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;
        }
    };
if ($Kalendertext =~ /Papiertonne/) {
        my $dt = fhem("get AbfallA start $uid",1);
        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 < $dtPapier) && $eventDate >= $t)
        {
          $dtRest = $eventDate;
        }
    };
  };

  my $dayDiff = 0; 
 
    if ($dtRest eq '') {
    fhem("set RestmuellIn Keine weiteren Termine");
  }
  else {
    $dayDiff = floor(($dtRest - $t) / 60 / 60 / 24);
    if ($dayDiff >= 0) {
      fhem("set RestmuellIn $dayDiff");
    }
  }
  if ($dtPapier eq '') {
    fhem("set PapierIn Keine weiteren Termine");
  }
  else {
    $dayDiff = floor(($dtPapier - $t) / 60 / 60 / 24);
    if ($dayDiff >= 0) {
      fhem("set PapierIn $dayDiff");
    }
  }
}

RoBra81

Da hast du scheinbar fehlerhaften Code aus den Thread kopiert, den Fehler hatten wir nämlich schon mal: bei deiner Papierabfrage wird dtRest geprüft und auch beschrieben anstelle von dtPapier...