Abfallkalender auswerten

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

Vorheriges Thema - Nächstes Thema

Jack-Luck

danke dir, an DOIF hab ich noch garnicht gedacht. Scheint auch zu funktionieren. :)

Nemo0815

Hallo,

ich habe folgendes Problem:

Ich habe den Kalender ganz normal über

define myCal Calendar ical url http://web.zaw-sr.de/sites/all/modules/custom/jobspooler_createical/************.ics 43200

angelegt.

Mit einem get full all bekomme ich aber nur den allerletzten Eintrag im ical file angezeigt, und folglich auch keine upcoming oder sonstige Termine, es wird immer der allerletzte angezeigt, ende 2016. Alle Readings im Calender sind leer

known upcoming 21.12.2016 17:00:00 22.12.2016 05:00:00-22.12.2016 20:00:00 Papiermuell ****,***********

Mache ich irgendwas falsch?



Internals:
   DEF        ical url http://web.zaw-sr.de/sites/all/modules/custom/jobspooler_createical/23234_************.ics 43200
   NAME       AbfallKalender
   NR         225
   STATE      Active
   TYPE       Calendar
   CHANGETIME:
   Readings:
     2016-01-05 09:13:07   all
     2016-01-05 09:13:07   lastCheck       2016-01-05 09:13:05
     2016-01-05 09:13:07   lastUpdate      2016-01-05 09:13:05
     2016-01-05 09:13:07   modeAlarm
     2016-01-05 09:13:07   modeAlarmOrStart
     2016-01-05 09:13:07   modeAlarmed
     2016-01-05 09:13:07   modeChanged
     2016-01-05 09:13:07   modeEnd
     2016-01-05 09:13:07   modeEnded
     2016-01-05 09:13:07   modeStart
     2016-01-05 09:13:07   modeStarted
     2016-01-05 09:13:07   modeUpcoming
     2016-01-05 09:13:07   stateChanged
     2016-01-05 09:13:07   stateDeleted
     2016-01-05 09:13:07   stateNew
     2016-01-05 09:13:07   stateUpdated
   Fhem:
     interval   43200
     lastCheck  2016-01-05 09:13:05
     lastChkTs  1451981585
     lastUpdate 2016-01-05 09:13:05
     lstUpdtTs  1451981585
     nextCheck  2016-01-05 21:13:05
     nextChkTs  1452024785
     nextUpdate 2016-01-05 21:13:05
     nxtUpdtTs  1452024785
     type       url
     url        http://web.zaw-sr.de/sites/all/modules/custom/jobspooler_createical/23234_**********.ics
Attributes:
   room       Abfall



Im Logfile bekomme ich folgende Warnings:

2016.01.05 08:55:22 1: PERL WARNING: Use of uninitialized value $uid in regexp compilation at ./FHEM/57_Calendar.pm line 1047.
2016.01.05 09:01:12 1: PERL WARNING: Use of uninitialized value in sprintf at ./FHEM/57_Calendar.pm line 498.

aloz77

Ähnliches Problem hier. Nur ein einziger (nächster) Termin wird aus ical eingelesen.

define Abfallkalender Calendar ical url http://www.dormagen.mein-abfallkalender.de/ical.ics?sid=22668&cd=inline&ft=6&fp=next_1000&wids=575,573,574,577 21600

list Abfallkalender

Internals:
   CFGFN
   DEF        ical url http://www.dormagen.mein-abfallkalender.de/ical.ics?sid=22668&cd=inline&ft=6&fp=next_1000&wids=575,573,574,577 21600
   NAME       Abfallkalender
   NR         302
   STATE      Active
   TYPE       Calendar
   Readings:
     2016-01-08 18:00:02   all             181553wwwdormagenmeinabfallkalenderde
     2016-01-08 18:00:02   calname         Von-Witzleben-Straße\, Dormagen (Delhoven) [Mein-Abfallkalender.de]
     2016-01-08 18:00:02   lastCheck       2016-01-08 18:00:00
     2016-01-08 18:00:02   lastUpdate      2016-01-08 18:00:00
     2016-01-08 18:00:02   modeAlarm
     2016-01-08 18:00:02   modeAlarmOrStart
     2016-01-08 18:00:02   modeAlarmed
     2016-01-08 18:00:02   modeChanged     181553wwwdormagenmeinabfallkalenderde
     2016-01-08 18:00:02   modeEnd
     2016-01-08 18:00:02   modeEnded
     2016-01-08 18:00:02   modeStart
     2016-01-08 18:00:02   modeStarted
     2016-01-08 18:00:02   modeUpcoming    181553wwwdormagenmeinabfallkalenderde
     2016-01-08 18:00:02   stateChanged    181553wwwdormagenmeinabfallkalenderde
     2016-01-08 18:00:02   stateDeleted
     2016-01-08 18:00:02   stateNew        181553wwwdormagenmeinabfallkalenderde
     2016-01-08 18:00:02   stateUpdated
   Fhem:
     interval   21600
     lastCheck  2016-01-08 18:00:00
     lastChkTs  1452272400
     lastUpdate 2016-01-08 18:00:00
     lstUpdtTs  1452272400
     nextCheck  2016-01-09 00:00:00
     nextChkTs  1452294000
     nextUpdate 2016-01-09 00:00:00
     nxtUpdtTs  1452294000
     type       url
     url        http://www.dormagen.mein-abfallkalender.de/ical.ics?sid=22668&cd=inline&ft=6&fp=next_1000&wids=575,573,574,577
Attributes:
   room       CALENDAR


get Abfallkalender full all

181553wwwdormagenmeinabfallkalenderde     new upcoming 11.01.2016 18:00:00 12.01.2016 00:00:00-13.01.2016 00:00:00 Restmüll 14 tägig Von-Witzleben-Straße\, Dormagen


Keine Warnings im Log.

Hans Franz

Hallo,
Manchmal hilft es die Datei herunterzuladen, mittels Editor ein Zeichen zu ändern und nach dem Speichern lokal (mit file statt url) in fhem einzubinden.

Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

aloz77

Danke. In meinem Fall sind es die MAC-style Zeilenumbrüche (0x0D,0x0A), die den Kalender aus der URL nicht benutzbar machen. Wenn ich zu UNIX-style (0x0A) konvertiere, werden alle Termine ausgelesen.

Gibt's eine Möglichkeit, das dem Calender-Modul beizubringen?

aloz77

Ich habe das provisorisch für mich in 57_Calendar.pm mit einer Regex-Zeile gefixt, ab Zeile 918:

    ($errmsg, $ics)= HttpUtils_BlockingGet( { url => $url, hideurl => 1, timeout => 10, } );
    $ics =~ s/\r[\n]*/\n/gm; # Neu


Jetzt werden alle Termine eingelesen. :-) Geht's irgendwie nachhaltiger?

kvo1

Zitat von: aloz77 am 09 Januar 2016, 10:55:16
Ich habe das provisorisch für mich in 57_Calendar.pm mit einer Regex-Zeile gefixt, ab Zeile 918:

    ($errmsg, $ics)= HttpUtils_BlockingGet( { url => $url, hideurl => 1, timeout => 10, } );
    $ics =~ s/\r[\n]*/\n/gm; # Neu


Jetzt werden alle Termine eingelesen. :-) Geht's irgendwie nachhaltiger?
Schick doch mal Boris eine Info, Vlt. Kann er da was machen, über ein Attribute o.ä.

Kvo
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

Dr. Boris Neubert

Danke für den Hinweis.

Ich berücksichtige jetzt so was vor dem Parsen der ical-Datei. Realisiert ist es in der neuen Version, die sich derzeit noch im Test befindet. Wenn Du testen möchtest, dann schau bitte hier:

http://forum.fhem.de/index.php/topic,46609.0.html

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Nemo0815

Zitat von: aloz77 am 09 Januar 2016, 10:55:16
Ich habe das provisorisch für mich in 57_Calendar.pm mit einer Regex-Zeile gefixt, ab Zeile 918:

    ($errmsg, $ics)= HttpUtils_BlockingGet( { url => $url, hideurl => 1, timeout => 10, } );
    $ics =~ s/\r[\n]*/\n/gm; # Neu


Jetzt werden alle Termine eingelesen. :-) Geht's irgendwie nachhaltiger?

Hat bei mir so nichts gebraucht, es wird immer noch nur der letzte Eintrag im ics File angezeigt...

Dr. Boris Neubert

Hallo Nemo0815,

kannst Du mir bitte anhand eines angefügten Auszug aus der ical-Datei zeigen, wie die Zeilenenden bei Dir aussehen?

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Nemo0815

#205
Zitat von: Dr. Boris Neubert am 13 Januar 2016, 19:35:50
Hallo Nemo0815,

kannst Du mir bitte anhand eines angefügten Auszug aus der ical-Datei zeigen, wie die Zeilenenden bei Dir aussehen?

Viele Grüße
Boris

Hallo, du kannst dir einfach unter http://www.zaw-sr.de/abfuhrplan/kalender irgendeinen Kalender runterladen, sollten alle das gleiche Format haben

Habe seit dem heutigen Update (oder auch schon vorher?) folgendes im Log:

2016.01.14 10:56:49 1: PERL WARNING: Use of uninitialized value $uid in regexp compilation at ./FHEM/57_Calendar.pm line 1047.
2016.01.14 10:57:01 1: PERL WARNING: Use of uninitialized value $uid in delete at ./FHEM/57_Calendar.pm line 724.
2016.01.14 10:57:01 1: PERL WARNING: Use of uninitialized value in substitution (s///) at ./FHEM/57_Calendar.pm line 387.
2016.01.14 10:57:01 1: PERL WARNING: Use of uninitialized value $uid in hash element at ./FHEM/57_Calendar.pm line 715.
2016.01.14 10:57:01 1: PERL WARNING: Use of uninitialized value in hash element at ./FHEM/57_Calendar.pm line 720.
2016.01.14 10:57:01 1: PERL WARNING: Use of uninitialized value in sort at ./FHEM/57_Calendar.pm line 986.
2016.01.14 10:57:01 1: PERL WARNING: Use of uninitialized value $all[0] in join or string at ./FHEM/57_Calendar.pm line 996.
2016.01.14 10:57:01 1: PERL WARNING: Use of uninitialized value in sort at ./FHEM/57_Calendar.pm line 867.
2016.01.14 10:57:01 1: PERL WARNING: Use of uninitialized value in sort at ./FHEM/57_Calendar.pm line 874.
2016.01.14 10:57:01 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/57_Calendar.pm line 878.
2016.01.14 10:57:01 1: PERL WARNING: Use of uninitialized value $upcoming[0] in join or string at ./FHEM/57_Calendar.pm line 880.
2016.01.14 10:57:01 1: PERL WARNING: Use of uninitialized value $changed[0] in join or string at ./FHEM/57_Calendar.pm line 884.

Dr. Boris Neubert

Hallo Nemo0815

die Kalender von der genannten Quelle sind fehlerhaft: die UID steht zwischen den VEVENTs. Am besten sagst Du dem Anbieter Bescheid, dass die generierten Kalender fehlerhaft sind.

Ich habe eine Erweiterung eingebaut, die das Problem behebt, indem synthetische UIDs erzeugt werden. Hier die beta-Version:

http://forum.fhem.de/index.php?topic=46608.msg383378#msg383378

Bitte beachten, dass a.a.O. das neue Kalendermodul liegt, dass sich im Verhalten vom noch aktuellen Modul unterscheidet.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Nemo0815

Zitat von: Dr. Boris Neubert am 16 Januar 2016, 19:14:04
Hallo Nemo0815

die Kalender von der genannten Quelle sind fehlerhaft: die UID steht zwischen den VEVENTs. Am besten sagst Du dem Anbieter Bescheid, dass die generierten Kalender fehlerhaft sind.

Ich habe eine Erweiterung eingebaut, die das Problem behebt, indem synthetische UIDs erzeugt werden. Hier die beta-Version:

http://forum.fhem.de/index.php?topic=46608.msg383378#msg383378

Bitte beachten, dass a.a.O. das neue Kalendermodul liegt, dass sich im Verhalten vom noch aktuellen Modul unterscheidet.

Viele Grüße
Boris

Danke, scheint zu funktionieren! :)

roadghost

Hallo Freunde des elektronischen Müllkalenders,

ich habe mir den Code aus dem Zitierten Beitrag geschnappt und bei mir integriert - läuft soweit auch.

Wenn ich die Abfrage mittels

get Countdown full all

starte erhalte ich alle Einträge aus meinem Kalender. Die 4 Dummys tragen die entsprechenden Zahlen an Tagen bis zur Leerung der jeweiligen Tonne - aber die Aktualisierung der Dummys ist nicht OK.

Bsp.

Wir haben jetzt 08:10 Uhr am Montag, am Donnerstag wäre die Leerung und ich seh noch immer eine "4" für Restmüll - wann wird der Dummy denn durch das notify aktualisiert ?

Kann man das notify manuell / automatisch zum update zwingen, und wenn ja, wie ??

Meine Kalendereinträge sind alle auf "Ganztägig" eingestellt - ist das evtl. das Problem ?

Gruß


Zitat von: xsasx am 12 Mai 2015, 15:18:28

fhem.cfg

#MuellKalender

define Abfall Calendar ical url https://www.google.com/calendar/ical/......6d36/basic.ics 600
attr Abfall room Kalender
define Papiertonne dummy
attr Papiertonne group Abfall Countdown
attr Papiertonne room Kalender
define Abfall_Update notify Abfall:(modeUpcoming|modeAlarmOrStart).* {Abfalltermine("$EVENT")}
attr Abfall_Update room Kalender
define Restmuell dummy
attr Restmuell group Abfall Countdown
attr Restmuell room Kalender
define Wertstofftonne dummy
attr Wertstofftonne group Abfall Countdown
attr Wertstofftonne room Kalender
define Biomuell dummy
attr Biomuell group Abfall Countdown
attr Biomuell room Kalender


99_myUtils.pm

##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;
use POSIX;
use Time::Local;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

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 = '';
  my $dtBiomuell = '';
   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 =~ /Gelbe/) {
        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;
        }
    };
    if ($Kalendertext =~ /Restmüll/) {
        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;
        }
    };
    if ($Kalendertext =~ /Biomüll/) {
        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 ($dtBiomuell eq '' || ($eventDate < $dtBiomuell && $eventDate > $t))
        {
          $dtBiomuell  = $eventDate;
        }
    };
   
   
  my $dayDiff = floor(($dtPapier - $t) / 60 / 60 / 24 + 1);
  if ($dayDiff >= 0) {
    fhem("set Papiertonne $dayDiff");
  }
  my $dayDiff = floor(($dtWertstofftonne - $t) / 60 / 60 / 24 + 1);
  if ($dayDiff >= 0) {
    fhem("set Wertstofftonne $dayDiff");
  }
  my $dayDiff = floor(($dtRest - $t) / 60 / 60 / 24 + 1);
  if ($dayDiff >= 0) {
    fhem("set Restmuell $dayDiff");
  }
    my $dayDiff = floor(($dtBiomuell - $t) / 60 / 60 / 24 + 1);
  if ($dayDiff >= 0) {
    fhem("set Biomuell $dayDiff");
  }
  }
}


NUC/Ubuntu 22.04 m. FHEM, div. Tasmota-Steckdosen, HMCFGUSB-2 für 12x HM-CC-RT-DN + 8x HM-TC-IT-WW
Rademacher DuoFern für 12 Jalousien, JeeLink für LaCrosse Temp.Sensor, WLAN-smart-Plugs, 
NUKI smartlock, 2xIP-CAM, Pylontech Speicher + Sungrow WR, Unifi-AP´s + Controller auf weiterem NUC

Aim23

Zitat von: roadghost am 29 Februar 2016, 08:14:37
Hallo Freunde des elektronischen Müllkalenders,

ich habe mir den Code aus dem Zitierten Beitrag geschnappt und bei mir integriert - läuft soweit auch.

Wenn ich die Abfrage mittels

get Countdown full all

starte erhalte ich alle Einträge aus meinem Kalender. Die 4 Dummys tragen die entsprechenden Zahlen an Tagen bis zur Leerung der jeweiligen Tonne - aber die Aktualisierung der Dummys ist nicht OK.

Bsp.

Wir haben jetzt 08:10 Uhr am Montag, am Donnerstag wäre die Leerung und ich seh noch immer eine "4" für Restmüll - wann wird der Dummy denn durch das notify aktualisiert ?

Kann man das notify manuell / automatisch zum update zwingen, und wenn ja, wie ??

Meine Kalendereinträge sind alle auf "Ganztägig" eingestellt - ist das evtl. das Problem ?

Gruß

Welche Uhrzeit steht im Kalender für den Abholtag?