Autor Thema: [Calendar] Fehlerhafte Termine bereinigen  (Gelesen 2473 mal)

Offline AitschPi

  • Full Member
  • ***
  • Beiträge: 192
[Calendar] Fehlerhafte Termine bereinigen
« am: 12 Juli 2015, 06:30:08 »
In einem der Kalender habe ich das Problem, dass die dort importierten Kalender der Abfallwirtschaft Fehler verursachen. Der Exportkalender hat die Abholtermine nur mit einem Startdatum, jedoch ohne Enddatum versehen. So sieht man in Google nichts ungewöhnliches - der Import hier zeigt jedoch, dass die Termine aus 2013, 2014,... als gestartet aber nicht beendet angezeigt werden. Leider ist das Modul so gut, so dass mir erst jetzt dieser Fehler in den Kalendern aufgefallen ist.

Es bieten sich zwei Möglichkeiten an, diese externen Fehler beim Import zu bereinigen - ich selbst kann das aber leider nicht.

  • Import nach UID beschränken
    Die fehlerhaften Termine stammen aus einer Quelle, beginnen also in der UID immer mit xxxx, die anderen Termine mit yyyy oder zzzz. Mit einem Attribut "ignoreUID xxxx" könnte man hier filtern. Der Abfallkalender wird parallel eingebunden und so kann man den dann mit Skripten entsprechend bearbeiten
  • gestartet ohne Ende filtern
    Generell oder durch Attribute gesteuert könnte man alle Termine ignorieren, die ohne Endzeitpunkt von älteren Tagen gefunden werden. Wiederholende Termine (auch ganztägige) haben immer Anfangs- und Endzeit. Termine über einen Tag hinaus (Party bis 05:00) haben eine Endzeit. Garantiert fehlerhaft ist also ein Termin "Abholung Restmuell 01.01.2013, 6:00", wenn der weder um 6:30 noch an einem Tag xx.01.2013 endet.

Das Problem hatte ich schon in Bezug auf CALVIEW geschildert, dort wurde aber angeregt, das hier in diesem Modul zu lösen. Sind die Termine optimal importiert, so können die Anzeige oder andere Module diese weiter nutzen.


Unabhängig davon:
Gleichzeitig ist auf kleinen Systemen auch jeder gesparter Dateneintrag von Interesse. Daher könnte man schon beim Import das maximale Startdatum in der Zukunft anzeigen. Was interessieren mich Dienstbeginn und Geburtstagspartys im Dezember, wenn wir noch Juli haben? Man könnte den Import auf Startzeitpunkte bis maximal xx Tage in der Zukunft (unabhängig vom Endtermin) beschränken, wenn man beispielsweise ein Attribut wie "importmaxdays xx" nutzt.
Echte Männer essen keinen Honig, sie kauen Bienen.

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5107
  • Are we just self-replicating DNA?
Antw:[Calendar] Fehlerhafte Termine bereinigen
« Antwort #1 am: 12 Juli 2015, 09:31:52 »
Hallo,

es gibt eine Reihe von Wünschen und Ideen, Termine bei der Aktualisierung eines Kalenders vor- und nachzuverarbeiten. Die Abfallkalender-Community vergnügt sich z.B. mit selbstgebauten Perl-Funktionen und das geht häufig schief - meine Frage nach Vorschlägen, wie das Calendar-Modul das unterstützen kann, blieben unbeantwortet. Daher zunächst einmal Danke für Deine Anregungen.

Ich stelle mir vor, die Möglichkeit für zwei Plugins im Updatelauf anzubieten. Eines (preproc), das aufgerufen wird, nachdem das Ereignis aus dem iCalender gelesen wurde, und eines (postproc), das aufgerufen wird, nachdem das geladene Ereignis im Modul verarbeitet und in die Liste der Ereignisse eingegliedert wurde.

Der Anwender müsste dann immer noch in Perl programmieren, aber hätte über eine definierte Schnittstelle Eingriffsmöglichkeiten:
- Ereignisse in weiter Zukunft werden nicht übernommen.
- Fehlende Endetermine werden ergänzt.
- Fehlende Alarme bei Müllabfuhrterminen werden ergänzt.

Was hältst Du davon?

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

Offline AitschPi

  • Full Member
  • ***
  • Beiträge: 192
Antw:[Calendar] Fehlerhafte Termine bereinigen
« Antwort #2 am: 12 Juli 2015, 09:38:56 »
Bequemer für den einfachen Nutzer sind eine Handvoll von Attributen, die in der commandref beschrieben werden und vielleicht 90%  der Wünsche abdecken, ohne wirklich programmieren zu müssen.
Der Charme der pre/post-Routine ist eine Möglichkeit, sich den eigenen 100% nähern zu können. Man muss das dann aber auch können - eventuell bleiben dabei die 90%-Nutzer auf der Strecke. Ich finde die Idee aber sehr reizend, das könnte man hier und da in anderen Modulen auch brauchen.

Du siehst und hast es ja mit der Frage schon geahnt: Beides hat Vor- und Nachteile. Wie ist es denn für Dich einfacher? Dabei meine ich auch den möglichen Support, der folgen könnte. Mir würde für mein aktuelles Problem eine der Optionen nach Deiner Wahl zur temporären Glückseligkeit reichen ;o)
Echte Männer essen keinen Honig, sie kauen Bienen.

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5107
  • Are we just self-replicating DNA?
Antw:[Calendar] Fehlerhafte Termine bereinigen
« Antwort #3 am: 12 Juli 2015, 09:45:11 »
Hallo,

Danke für Deine Einschätzung. Dann lasse ich mal den zweiten Teil meiner Idee raus, mit der ich noch hinterm Berg gehalten habe: es soll die Möglichkeit geben, eine Bibliothek zu laden mit vorkonfektioniertem Kode.

Beispiel:

attr myCalendar library /opt/fhem/lib/CalendarTools.pm
attr myCalendar preproc trimmer
attr myCalendar postproc alarmsetter

CalendarTools.pm wird dann von der Community mit Ideen bevölkert. Ich würde zwei, drei Vorschläge einbauen, aber mich darüber hinaus nicht für den Support des Content (nur der Verwendung) zuständig fühlen.

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

Offline AitschPi

  • Full Member
  • ***
  • Beiträge: 192
Antw:[Calendar] Fehlerhafte Termine bereinigen
« Antwort #4 am: 12 Juli 2015, 09:49:20 »
[quote author=Dr. Boris Neubert link=topic=39046.msg311785#msg311785 date=1436687111]
Dann lasse ich mal den zweiten Teil meiner Idee raus, mit der ich noch hinterm Berg gehalten habe: es soll die Möglichkeit geben, eine Bibliothek zu laden mit vorkonfektioniertem Kode.

Na dann mal los. Ich freue mich schon auf die Ergebnisse. Vielleicht verlagert das die Skripte bei CALVIEW bzw. entzerrt diese. Bisher holt man ja ellenlange Listen und bastelt später eine Lochschablone zum Lesen. Später könnte man schon selektiv eine Liste aufbauen, die dann im calview nur noch optisch aufgehübscht wird.
Echte Männer essen keinen Honig, sie kauen Bienen.

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5107
  • Are we just self-replicating DNA?
Antw:[Calendar] Fehlerhafte Termine bereinigen
« Antwort #5 am: 12 Juli 2015, 09:56:03 »
Okay, ich bitte aber um Geduld.

Ich habe gestern erst einmal den Rückstand von zwei Monaten FHEM-Entwicklung aufgeholt und will mich die nächsten Wochen mal wieder mit etwas anderem befassen.

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

Offline AitschPi

  • Full Member
  • ***
  • Beiträge: 192
Antw:[Calendar] Fehlerhafte Termine bereinigen
« Antwort #6 am: 12 Juli 2015, 09:57:54 »
Okay, ich bitte aber um Geduld.

Kein Problem. Im Moment liegt das auch bei mir auf Eis - andere Sachen haben da bei mir auch höhere Priorität.
Echte Männer essen keinen Honig, sie kauen Bienen.

Offline AitschPi

  • Full Member
  • ***
  • Beiträge: 192
Antw:[Calendar] Fehlerhafte Termine bereinigen
« Antwort #7 am: 13 Juli 2015, 07:37:16 »
Ich bin gerade über das Werkzeug "sed" gestolpert, welches über die Kommandozeile Suchen, Ersetzen und auch Löschen kann - und das sogar in mehrzeiligen Blöcken. So könnte ich mit wget den Kalender herunterladen und danach mit sed diesen bearbeiten. Am Ende verringert sich die Zahl der Daten(Sätze), die das Modul überhaupt zur Bearbeitung erhält.

http://sed.sourceforge.net/sedfaq4.html#s4.21
Zitat
4.21. How do I delete or change a block of text if the block contains a certain regular expression?
The following deletes the block between 'start' and 'end' inclusively, if and only if the block contains the string 'regex'. Written by Russell Davies, with additional comments:

# sed script to delete a block if /regex/ matches inside it
     :t
     /start/,/end/ {    # For each line between these block markers..
        /end/!{         #   If we are not at the /end/ marker
           $!{          #     nor the last line of the file,
              N;        #     add the Next line to the pattern space
              bt
           }            #   and branch (loop back) to the :t label.
        }               # This line matches the /end/ marker.
        /regex/d;       # If /regex/ matches, delete the block.
     }                  # Otherwise, the block will be printed.
     #---end of script---

Interessant ist auch der Ansatz hier:
https://uriesk.wordpress.com/2014/03/13/edit-ics-calendarfiles-with-bash-scripts-and-sed/


Folgende Ideen könnten so umgesetzt werden:
  • Löschen bestimmter Termine, die bestimmte Namen (z.B. Abfall im persönlichen Kalender), UID oder Kommentare enthalten.
  • Alte Termine löschen (das Enddatum liegt xx Tage vor heute, nicht dass man zu viel löscht)
  • Zukünftige Termine löschen (in xx Tagen beginnend - was interessiert mich der Restmüll im Dezember, wenn jetzt Juli ist)

sed ist für mich Neuland. Sollte jemand schneller bei der Umsetzung sein, würde ich mich über Ergebnisse hier freuen. Oder sollte dazu ein neues Thema eröffnet werden? Wo?
Echte Männer essen keinen Honig, sie kauen Bienen.