Calendar Modul: lange Ladezeit und 98% CPU

Begonnen von slupus, 20 August 2016, 12:47:13

Vorheriges Thema - Nächstes Thema

slupus

Hallo zusammen,

ich habe einen sehr großen Google Kalender über das Calendar Modul eingebunden. Das Update dauert knapp 10 Minuten in denen auf meinem Raspi 98% CPU durch FHEM verwendet werden. Dadurch ist FHEM nicht nutzbar. Nach dem Update läuft alles wieder normal.

Den Kalender habe ich nun so definiert, dass ein Update nur all 25 Stunden durchgeführt wird. Mit einem at starte ich das Update nachts manuell, wenn ich FHEM ansich nicht brauche.

Gibt es eine Möglichkeit, dass der Kalender auch bei einem Neustart von FHEM nicht aktualisiert wird? Denn hier muss ich momentan 10 Minuten warten, bis ich FHEM nutzen kann.

Danke und Grüße
Sören

binford6000

Hi Sören,
selbes Problem bei mir. Zwar nur 5 Minuten aber es ist trotzdem nervend  :(
Ich habe hier im Forum auch schon gesucht aber leider nix gefunden...
Hast Du mittlerweile eine Lösung?
VG Sebastian

chris1284

verkleiner halt den kalendar. ist es wirklich calendar oder hast du evtl noch andere sachen die damit dran hängen? calview zb ob myutils funktionen. wie groß ist denn der calendar?

slupus

#3
@binford6000: Bisher habe ich noch keine Lösung

Mein Kalender enthält 5-10 Termine pro Tag. Aktuell behelfe ich mir wie gesagt mit einem manuellen Update nachts. calview oder andere Dinge hängen nicht dran. lediglich 1x täglich prüfe ich mit einer Funktion die Kalender Einträge. Diese hat jedoch keine Auswirkungs auf die Performance.
Störend ist die lange Ladezeit nur nach einem Neustart.

Deshalb die Frage, ob man über einen Attribute das Update nach dem FHEM Start unterbinden kann.

sTaN

Hallo Zusammen,

ich schließe mich hier mal an. Mein Google Kalender braucht auf meinem Rpi2 ca. 15 Minuten. Kann man dem irgendwie entgegenwirken?
Ich dachte durch die Optionen hideOlderThan 1 und hideLaterThan 5 zieht er immer nur 6 Tage?! Aus welchen Gründen braucht er so lange bzw. nimmt 96% CPU Last ein, sodass man währenddessen nichts mehr verwenden kann?

Gruß
sTaN
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

Amenophis86

Ich dachte Calender wurde auf nonblocking umgebaut, ist das nicht so?
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

chris1284

kann ich nicht sagen, aus dem bauch raus würde ich sagen nein

Amenophis86

mmmh komisch, hier hieß es mal, dass es als nonblocking kommen soll. Aber bei mir blockiert es trotzdem. Werde Dr. Boris Neubert mal anschreiben.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

chris1284

sowie ich das sehe holt er nu die daten aus dem netz nonblocking via HttpUtils_NonblockingGet. der rest kann der verabrietung kann dann durchaus auch noch blockieren

Dr. Boris Neubert

Hallo,

wie Chris schrieb: nichtblockierend ist der Abruf des Kalenders aus dem Netz. Der Rest der Verarbeitung blockiert. Das ist bekannt. Den Wunsch, das zu ändern, hatte ich letztes Jahr aufgenommen, und abschlägig beschieden. Warum?

Ich habe mir den Code nochmal angesehen. Gemäß den Kommentaren laufen Teile der Verarbeitung mit O(n^2) mit n=Anzahl Events im Kalender. Ich erinnere mich, die Passagen optimiert zu haben und ich meine, dass das Problem insbesondere Serientermine sind.

Die Schwierigkeiten bestehen darin, einen Codeteil nichtblockierend im Hintergrund auszuführen, der interne Daten an einem Device ändert, und dabei Probleme durch die Nebenläufigkeit auszuschließen. Die Prozedur, um die es geht, ist Calendar_UpdateCalendar(), die den in FHEM gespeicherten Kalender ausgehend von aus dem Netz geholten Kalender aktualisiert.

Ich denke, dass es zunächst wert ist, den Code weiter zu optimieren. Möchtest Du dabei mithelfen?

Viele Grüße
Boris

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

Amenophis86

Ich helfe sehr gerne dabei. Finde das Modul nämlich super und mein HMLAN ist auch dankbar, wenn es nicht mehr blockiert wird :)

Die Attr hideOlder helfen dabei wohl nicht, oder? Denn scheinbar werden die Daten wohl trotzdem geholt nur dann nicht angezeigt.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Dr. Boris Neubert

Hallo,

kannst Du mal eine FHEM-Installation bauen, die nur den Kalender enthält. Und dann profilieren wie hier beschrieben? Während des Profilings bitte einmal ein Kalenderupdate anstoßen. Dann shutdown von FHEM und dann hier die nytprof-Dateien gezippt einstellen.

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

Amenophis86

#12
Zitat von: Dr. Boris Neubert am 14 April 2017, 12:03:58
kannst Du mal eine FHEM-Installation bauen, die nur den Kalender enthält.
Ja

Zitat
Und dann profilieren wie hier beschrieben?
Man möge mein Unwissenheit entschuldigen, aber was genau meinst du mit profilieren? global verbose 5?

Zitat
Während des Profilings bitte einmal ein Kalenderupdate anstoßen. Dann shutdown von FHEM
Sobald ich Profilings verstanden habe kann ich das update anstoßen und danach FHEM runterfahren.

Zitat
und dann hier die nytprof-Dateien gezippt einstellen.

nytprof-Dateien? Kenne ich leider wieder nicht.


Werde jetzt mal eine neu FHEM Instanz aufbauen und es darauf soweit einrichten. Das kann ich und dann schauen wir weiter. Vielleicht macht suelle ja auch mit, da es bei ihm wohl wesentlich länger blockiert, als bei mir.

Edit:
Habe auf meinem zweiten Raspberry (Raspberry 1. Gen) jetzt mal ein frisches FHEM aufgesetzt und nur eine Kalender hinzugefügt. Dieser blockiert FHEM schon ca. 10 Sekunden, wenn er ein update des Kalender durchführt. Für alles weitere warte ich auf Erklärungen, was genau ich machen muss.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Dr. Boris Neubert

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

Amenophis86

ok, danke für den Link. Aber

1.) der cpan Link im Wiki geht nicht mehr. Habe es jetzt mittels sudo apt-get install libdevel-nytprof-perl
installiert und scheint zu gehen.

2.) Nun habe ich aber folgenden Fehler, wenn ich es starten will:
sudo perl -d:NYTProf /opt/fhem/fhem.pl /opt/fhem/conf/fhem.conf
Can't open /opt/fhem/conf/fhem.conf: No such file or directory


Leider weiß ich nicht was fhem.conf sein soll. Wird das automatisch angelegt und ich muss nur den Ordner vorher anlegen, oder woran scheitert es?
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Dr. Boris Neubert

Zitat von: Amenophis86 am 14 April 2017, 16:18:36
2.) Nun habe ich aber folgenden Fehler, wenn ich es starten will:
sudo perl -d:NYTProf /opt/fhem/fhem.pl /opt/fhem/conf/fhem.conf
Can't open /opt/fhem/conf/fhem.conf: No such file or directory


fhem.conf ist die FHEM-Konfigurationsdatei. Du solltest wissen, wo Du diese gespeichert hast.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Amenophis86

#16
.conf ist doch ne Datei, wenn ich FHEM über system.d starte, oder? Ich starte über init.d aktuell, so wird es ja standardmäßig installiert. Daher würde es vermutlich dann die Datei /etc/init.d/fhem sein?

Ne fhem.conf Datei ist mir noch nie untergekommen sonst. Habe FHEM wie hier beschrieben installiert.

Edit2:
ist die fhem.conf die fhem.cfg? Ich lese mich gerade quer durchs Forum, aber finde die Lösung leider noch nicht selbst.

Edit3:
Habe es jetzt einfach mal mit der fhem.cfg versucht und es scheint geklappt zu haben :) Kann die Datei nicht anfügen. Wirft immer einen Fehler aus. Habe sie hier hinterlegt.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Dr. Boris Neubert

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

Amenophis86

#18
wird mir "fhem.cfg" ausgegeben. Daher habe ich es wohl richtig gemacht :)

Habe jetzt auch nochmal die rar Datei angehängt. Der Uploadfehler wurde wohl behoben.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Dr. Boris Neubert

Danke!

Der Profiling-Output ist angekommen. Allerdings sind dort keine Spuren vom Kalendermodul zu sehen.

Hast Du Deinen Kalender in der Konfiguration und einmal ein

get <deinKalender> update

gemacht?
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Amenophis86

ich hatte nur mittels set Kalender.Test update gearbeitet, da es ja um das laden nachdem Download der Informationen ging. Bei get Kalender.Test update habe ich keine Probleme gehabt.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Amenophis86

#21
Habe den Kalender.Test jetzt mal auf verbose 5 gesetzt und nochmal mit deiner Art FHEM gestartet. Dann set Kalender.Test update ausgeführt. FHEM hing daraufhin wieder etwa 5-8 sek. Habe danach FHEM beendet und dir hier nochmal die nyt-Dateien angehängt.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Dr. Boris Neubert

Hallo und vielen Dank.

Leider immer noch keine Spuren vom Kalendermodul im Profilingoutput. Muss mir dazu mal Gedanken machen. Kann eine Weile dauern.

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

Amenophis86

Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Dr. Boris Neubert

Habe gerade selbst das Profiling nachgestellt und ich erhalte im Gegensatz zu Dir Angaben zu den Ausführungszeiten des Calendar-Moduls im Log.

Bist Du sicher, dass Du die richtige Instanz profiliert hast? Du brauchst eine Konfigurationsdatei mit folgenden minimalen Angaben (natürlich angepasst auf Deine Verhältnisse was die Pfade und den Kalender betrifft - Achtung: URL nicht hier posten):

attr global statefile /users/neubert/Development/Perl/fhem-data/fhem.save   
attr global verbose 5                 
attr global port 7072 global
attr global modpath /users/neubert/Development/Perl/fhem
define C Calendar ical url https://www.google.com/calendar/ical/foo.bar%40googlemail.com/private-0123456789abcdef/basic.ics 10


Die kannst Du z.B. als /tmp/fhem.conf abspeichern und dann FHEM wie folgt profilieren:

perl -d:NYTProf /opt/fhem/fhem.pl /tmp/fhem.conf

Zuvor vorherige Ausgaben von nytprof löschen! Beenden durch Ctrl-C auf der Konsole

Mit

nytprofhtml

erzeugst Du den Report im Verzeichnis, den Du Dir anzeigen lässt, indem Du den Browser auf nytprof/index.html lenkst. Aus der Combobox im oberen Teil solltest Du das Calender-Modul zur Anzeige auswählen können.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Amenophis86

Komme erst am Wochenende dazu es zu testen. Werde mich melden.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Amenophis86

#26
Ok, wir nähern uns. Ich habe es jetzt geschafft die Conf-File zu erstellen. Mir war nicht klar, dass ich die erstellen muss. Ich dachte, das sich einfach die cfg Datei nehmen kann. Jetzt habe ich gesehen, wenn ich FHEM so starte, dass in der Console alles ausgegeben wird. Allerdings habe ich nun das Problem, dass keine nytprof Dateien erstellt werden. Er macht ständig ein Update des Kalender, da ich natürlich auch das Intervall runter gesetzt habe. Zumindest kann ich schon mal erkennen, dass er hierfür 10 Sekunden in etwas brauche. Nur wenn ich den Prozess dann mittels "strg+c" beende, finde ich keine nytprof dateien in "opt/fhem/". Muss ich den Prozess irgendwie anders beenden, dass die Dateien gespeichert werden?

Edit:
Ok ich musste wohl vorher in den Ordner "opt/fhem" wechseln, dass er dort die Dateien ablegt. Allerding erstellt er nun nur eine Datei und nicht die Datei mit der pid am Ende. Vermutlich, weil ich es mittels strg+c abbreche. Gehe davon aus, dass ich es richtig beenden muss?

Habe dir trotzdem mal die output Datei angehängt.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Dr. Boris Neubert

Hallo,

es ist nicht ungewöhnlich, nur eine nytprof.out zu haben. Allerdings ist die beigefügte kaputt und lässt sich nicht mit nytprofhtml auswerten.

Dein Weg war richtig. Kannst Du es bitte erneut versuchen? Du kannst auch die Frequenz von 10 auf 30 Sekunden hochsetzen.

Raus kommst Du, indem Du unter Unix mit
telnet <DeinFHEMServer> 7072
auf die FHEM-Konsole gehst und
shutdown
eingibst. Du kannst auch selbst testen, ob das Profiling funktioniert, indem Du dann auf der Unix-Konsole
nytprofhtml
nach Wechsel nach /opt/fhem eingibst.

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

Amenophis86

Ok, schwere Geburt, aber scheint jetzt alles geklappt zu haben. Hier die Datei.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Dr. Boris Neubert

Danke.

Sehr aussagekräftig. Mal sehen, was sich optimieren lässt...
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Amenophis86

Da bin ich ja froh, dass es geklappt hat. Danke für die Hilfe :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Amenophis86

Ich habe übrigens mal eine Deutsche Übersetzung im Wiki Artikel hinzugefügt. So sollten Nachfolger weniger Probleme damit haben :) Wenn dir Fehler auffallen, dann gerne bescheid geben. Danke
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

sTaN

Hallo Ihr zwei,

ich verfolge sehr interessiert den Thread. Gibt es denn schon neue Erkenntnisse, warum das Calendar Modul 98% Auslastung erzeugt und FHEM komplett lahm legt? Bei mir sage und schreiben 30-45 Minuten.

Kann man etwas zur Problemlösung beisteuern?

Gruß
sTaN
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

Dr. Boris Neubert

Hallo,

ich bin noch nicht zur weiteren Optimierung geschritten.

Hilfreich wäre es, eine entsprechend große .ics-Datei zu erhalten, mit der ich bei mir herumexperimentieren kann, sofern die Daten darin nicht privat sind oder sich anonymisieren lassen.

Es wäre aber schon hilfreich, auch von Dir, sTaN, eine nytprof.out zu erhalten. Amenophis86 hat das sehr schön im Wiki beschrieben.

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

Amenophis86

Zitat von: Dr. Boris Neubert am 03 Mai 2017, 20:58:37
Hilfreich wäre es, eine entsprechend große .ics-Datei zu erhalten, mit der ich bei mir herumexperimentieren kann, sofern die Daten darin nicht privat sind oder sich anonymisieren lassen.

Ich hatte damals für die Erstellung des prof einen Kalender angelegt. Diesen gibt es noch und kannst du gerne dafür nutzen: https://calendar.google.com/calendar/ical/0cmedb3jn5ieaeokf9mss2qq3o%40group.calendar.google.com/public/basic.ics
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Dr. Boris Neubert

Zitat von: Amenophis86 am 03 Mai 2017, 21:23:19
Ich hatte damals für die Erstellung des prof einen Kalender angelegt. Diesen gibt es noch und kannst du gerne dafür nutzen:

Danke dafür. Der Kalender ist nun aber nicht wirklich groß. Braucht der 10 Sekunden pro Abruf bei Dir?

Welche Hardware? Muss der Rechner swappen?
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Amenophis86

#36
Richtig, er ist nicht der größte. Hat bei meinem genutzten PI aber gereicht um ihn 10 sek ins Freez zu versetzen :) Es ist ein P1 gewesen, welchen ich zum Testen nutze.

Als Produktivsystem habe ich einen PI B+, aber da kann ich dir den passenden Kalender leider nicht freigeben. Hätte meine Freundin sicher was dagegen. Sry.

Was meinst du mit swappen?
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Dr. Boris Neubert

Zitat von: Amenophis86 am 04 Mai 2017, 20:39:34
Was meinst du mit swappen?

Wenn der Hauptspeicher nicht ausreicht, werden Teile des Speichers nicht laufender Prozesse ausgeswappt (bei Raspian standardmäßig in einen Swapfile). Beim Wechsel von einem Prozess zu einem anderen (passiert ständig) wird dann sehr häufig Speicher auf die SD-Karte ausgelagert und ausgelagerter Speicher wieder eingelesen. Dann wird es langsam. Beim Pi1 mit nur 512 MB Hauptspeicher besteht diese Möglichkeit eher als bei einem Pi2 mit 1 GB Hauptspeicher.

Ich muss am Wochenende auf meinem Pi B+ weitertesten. Auf meinem i7-4790K CPU @ 4.00GHz laufen die relevanten Subroutinen leider in weniger als 1 µs durch  8)
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

sTaN

Bei 10 Sekunden wäre ich ja noch froh [emoji23] Versuche auch sobald ich Zeit habe das Profiling zu machen aber auch ich wüsste nicht, wie ich den Kalender anonymisieren kann.
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

Dr. Boris Neubert

Zitat von: sTaN am 04 Mai 2017, 21:23:17
Bei 10 Sekunden wäre ich ja noch froh [emoji23] Versuche auch sobald ich Zeit habe das Profiling zu machen aber auch ich wüsste nicht, wie ich den Kalender anonymisieren kann.

Poste bitte erstmal nur nytprof.out (gepackt) - ich würde gerne sehen, ob es dieselben Stellen sind, die langsam sind.

Wenn ich in einer Testumgebungen Messungen durchführen kann und Verbesserungen bewirke, stelle ich ein neues Modul zum Testen hier zur Verfügung.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Dr. Boris Neubert

Hallo,

habe mich jetzt nochmal rangesetzt. Auf dem i7 dauert die Routine parseSub bei Amenophis86' Kalender ca. 100 ms und auf dem Raspi B 2+ ca. 3.43 s. Heute ist es mir schon zu spät aber morgen suche ich nach Optimierungsmöglichkeiten.

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

Amenophis86

Zitat von: Dr. Boris Neubert am 06 Mai 2017, 21:05:57
Hallo,

habe mich jetzt nochmal rangesetzt. Auf dem i7 dauert die Routine parseSub bei Amenophis86' Kalender ca. 100 ms und auf dem Raspi B 2+ ca. 3.43 s. Heute ist es mir schon zu spät aber morgen suche ich nach Optimierungsmöglichkeiten.

Viele Grüße
Boris

Top, wenn man dich noch irgendwie unterstützen kann, einfach melden.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Dr. Boris Neubert

#42
Hallo,

anbei eine handoptimierte Version. Ein gewisser Gewinn dürfte darin liegen.

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

Amenophis86

Fhem stürzt ab mit:

Can't use an undefined value as an ARRAY reference at ./FHEM/57_Calendar.pm line 1390.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Dr. Boris Neubert

Zitat von: Amenophis86 am 07 Mai 2017, 20:11:12
Fhem stürzt ab mit:

Can't use an undefined value as an ARRAY reference at ./FHEM/57_Calendar.pm line 1390.

Okay, überoptimiert in Zeile 891ff. Kümmere ich mich nächstes Wochenende!
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Dr. Boris Neubert

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

Amenophis86

Es scheint ein bisschen besser geworden zu sein, aber immer noch nicht nonblocking. Problem ist, dass ich irgendwie beim starten von fhem über nytprof sehe was passiert. Es startet FHEM im nytprof modus, aber bringt mich direkt wieder zurück in die normalen konsolen Befehle. Letztes mal konnte hat die Aussgabe mir genau gezeigt was passiert und auch die Zeiten genannt, wie lange das update des Kalender gebraucht hat.

Ich habe jetzt nochmal ein prof mit dem großen Kalender gemacht, vielleicht hilft dieser dir weitere Probleme zu erkennen. Würde sie dir gerne per Mail schicken, da mir nicht bewusst ist, ob sich aus dieser Datei die URL für den Kalender auslesen lässt. Und die möchte ich nicht öffentlich machen :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Dr. Boris Neubert

Danke fürs Testen.

Du kannst mir das Profil gerne per E-Mail schicken.

Wirklich nichtblockierend wäre es nur, wenn ich auch das Parsen in einen separaten Thread auslagern würde. Das ist mir derzeit zu aufwendig.

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

Dr. Boris Neubert

Hallo,

die Analyse zeigt, dass es bei Dir dieselben Stellen sind wie bei mir, wo die meiste Zeit vergeht. Diese bekomme ich nicht wegoptimiert. Es sind das die Zerlegung der Zeilen mit einem regulären Ausdruck und die String-Vergleiche ind addproperty().

Besser geht es also leider nicht ohne Hintergrundverarbeitung. Ich habe diese Version jetzt eingecheckt.

Ich habe mir eine mögliche Hintergrundverarbeitung mit Blocking angeschaut. Ich fürchte Race Conditions. Vielleicht gebe ich mich in nächster Zeit mal daran.

Viele Grüße
Boris

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

Amenophis86

Ich weiß zwar nicht was Race Conditions sind, aber ich danke dir fürs Kümmern und würde mich freuen, wenn irgendwann komplett nonBlocking kommt. Wenn man dich unterstützen kann, dann einfach Bescheid geben. Programmieren fehlt mir aber leider das Wissen :(
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Dr. Boris Neubert

https://de.wikipedia.org/wiki/Race_Condition

nonBlocking wird durch Nebenläufigkeit zweier Programmstränge herbeigeführt: FHEM läuft weiter, während der Kalender im Hintergrund geholt und geparst wird. Zudem werden auch noch per Timer asynchron beim Erreichen bestimmter Uhrzeiten Events erzeugt und dann der Timer neu gestellt. Sowohl im Hauptstrang als auch in den Nebensträngen werden Timer gesetzt und der Kalender manipuliert. Das ist sehr schwer zu überblicken und ich werde mit sowas sie Semaphoren arbeiten müssen, das sind Merker, die den Eintritt in bestimmte Codepassagen verhindern, wenn diese Codepassage gerade in einem anderen Strang (nebenläufig) ausgeführt wird.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Amenophis86

liest sich kompliziert aber ich denke, dass ich verstanden habe was das Problem ist. Bleibt mir nur zu hoffen, dass du es programmtechnisch lösen kannst. Aber lese auch raus, dass es nicht von heute auf Morgen gehen wird. Daher freue ich mich, wenn ich wieder von dir höre und es hier was neues geben wird :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

slupus

Wow, vielen Dank Boris für diese Optimierung! Leider hat die Forumsbenachrichtigung nicht funktioniert, sodass ich erst beim Update von der Optimierung erfahren habe.
Der reine Reload meines Kalenders dauert nur noch knapp 2 Minuten, vorher weit über 10 Minuten. Das ist wirklich fantastisch :D 8)

Wie ich gelernt habe, sind die Regeltermine das Problem. Davon habe ich sehr viele.

Vielen Dank und viele Grüße
Sören

Praktiker

Danke für die Optimierung,

bei meinem Kalender nur ca. 1/3 der Zeit.
Leider gehen seit dem Update die Termine mit den Emojis nicht mehr.
Lässt sich das wohl noch fixen ?
Das 1. Bild ist aus dem Tablet ui (Sieht im Web interface genauso aus)
Das 2. Bild ist der Original Kalender (Google)
Vor dem Update sah es besser aus....

Grüsse
Praktiker



Dr. Boris Neubert

Hallo,

freut mich,dass die Optimierung einiges gebracht hat.

@Praktiker: die Emojis wurden vor dem Update alle angezeigt und jetzt fehlen welche?

Kannst Du mir eine ICS-Datei schicken zum Reproduzieren? Könnte ein Problem mit Kodierung sein.

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

Praktiker

#55
Hallo Boris,

ja alle bis auf das letzte Emoji,  in dem Original eine Sonne.
Hab mal einen Kalender erstellt und exportiert.
Grüsse
Praktiker


Dr. Boris Neubert

Zitat von: Praktiker am 18 Mai 2017, 18:20:37
ja alle bis auf das letzte Emoji,  in dem Original eine Sonne.

Testdaten waren sehr hilfreich.

Habe es gefixt.

Das Problem ist der reguläre Ausdruck \R, der alle nach Unicode zulässigen Zeilenenden matcht. Er zersemmelt die Emojis. Ich habe daher die defensivere Variante gewählt, die alle klassischen Möglichkeiten von Zeilenende bei Dos, Windows, Unix und Mac abdeckt.

Eingecheckt. Heute per SVN und morgen auch per Update verfügbar.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!


Dr. Boris Neubert

#58
Hallo,

anbei die erste Version des Kalendermoduls, die die iCalendar-Datei asynchron parst. Während des Parsens ist FHEM damit voll verfügbar.

Achtung: es wird eine neue Version von FHEM/SubProcess.pm benötigt. Diese ist morgen früh per Update verfügbar oder kann aus dem SVN-Repo bezogen werden.

Gute Nacht
Boris

Edit: Anhang mit Testmodul gelöscht.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

slupus

Hallo Boris,
habe mir die Änderungen per Update geholt.
Aufgefallen ist mir, dass debug Meldungen ins Log geschrieben werden. Die CPU Auslastung lag bei knapp 98% während des Updates des Kalenders. Dauer in etwa gleich lang wie vor dem Update.
Liegt vielleicht aber auch an meinem Pi1.
Grüße Sören

Amenophis86

2017.05.24 08:01:38 2: Calendar KL.Anja: update in progress, process aborted.
2017.05.24 08:02:51 2: Calendar KL.Anja: update in progress, process aborted.
2017.05.24 08:03:22 4: Calendar KL.Anja: Updating...
2017.05.24 08:03:22 4: Calendar KL.Anja: Getting data from URL <hidden>
2017.05.24 08:03:24 2: Calendar KL.Anja: update in progress, process aborted.


Habe die neue Datei mal ausprobiert und bekomme immer, dass der Prozess abgebrochen wird. Habe dann mal verbose auf 5 gesetzt, allerdings keine wirklichen weiteren Informationen.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Dr. Boris Neubert

Zitat von: Amenophis86 am 24 Mai 2017, 08:04:31
Habe die neue Datei mal ausprobiert und bekomme immer, dass der Prozess abgebrochen wird. Habe dann mal verbose auf 5 gesetzt, allerdings keine wirklichen weiteren Informationen.

Process aborted kommt, wenn zeitlich ein neues Kalenderupdate ausgelöst wird und das laufende Update noch nicht abgearbeitet ist. Das ist normal und richtig. Bitte mal einen Lauf mit verbose 5 machen und das Log hier posten.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Amenophis86

da kann aber trotzdem etwas nicht stimmen:

2017.05.24 08:01:38 2: Calendar KL.Anja: update in progress, process aborted.
2017.05.24 08:02:51 2: Calendar KL.Anja: update in progress, process aborted.
2017.05.24 08:03:22 4: Calendar KL.Anja: Updating...
2017.05.24 08:03:22 4: Calendar KL.Anja: Getting data from URL <hidden>
2017.05.24 08:03:24 2: Calendar KL.Anja: update in progress, process aborted.
2017.05.24 11:17:51 4: Calendar KL.Anja: Updating...
2017.05.24 11:17:51 4: Calendar KL.Anja: Getting data from URL <hidden>
2017.05.24 11:17:54 2: Calendar KL.Anja: update in progress, process aborted.


habe ein Update jetzt nochmal manuell angestoßen und es kommt immer wieder direkt aborted.

Dann habe ich einen restart durch geführt und es zerschießt mir das Memory:

2017.05.24 11:18:55 4: Calendar KL.Anja: Wakeup
2017.05.24 11:18:55 4: Calendar KL.Anja: Updating...
2017.05.24 11:18:55 4: Calendar KL.Anja: Getting data from URL <hidden>
2017.05.24 11:19:02 4: Calendar KL.Anja: parsing data asynchronously (PID= 734)
2017.05.24 11:19:03 4: Calendar KL.Anja: still waiting (read: no data).
2017.05.24 11:19:04 4: Calendar KL.Anja: still waiting (read: no data).
2017.05.24 11:19:05 4: Calendar KL.Anja: still waiting (read: no data).
2017.05.24 11:19:06 4: Calendar KL.Anja: still waiting (read: incomplete data).
Out of memory!
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Amenophis86

Fehler von mir. Habe vergessen auf der Testversion ein Update der SubProcess.pm zu machen, danach war der Fehler weg. Gefühlt dauert es jetzt aber länger. Habe dir nochmal die neusten Prof Dateien geschickt Boris.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Dr. Boris Neubert

Hallo,

die letzten Änderungen beschleunigen die eigentliche Arbeit nicht - da ist aus meiner Sicht keine Performance mehr rauszukitzeln.

Die Änderungen sorgen aber dafür, dass nicht nur das Herunterladen der ical-Datei vom Server sondern auch dessen Umwandlung in die internen Datenstrukturen im Hintergrund erfolgen.

In anderen Worten: FHEM sollte nicht mehr die 10 Sekunden blockieren, die es bei Dir braucht, um den Kalender zu verarbeiten. Kannst Du das bitte bestätigen?

Kann das auch bitte noch jemand anderes probieren, bevor ich das neue Modul in den größeren Test gebe?

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

Amenophis86

Ich muss es nochmal versuchen die Tage, aber ich meine, dass FHEM trotzdem blockiert hat beim Update des Kalenders. Verstehe ich dich richtig, dass FHEM eigentlich nicht mehr blockieren sollte, also der gesamte Update Prozess NonBlocking verlaufen sollte?
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Dr. Boris Neubert

Hallo,

Teile des Prozesses blockieren noch immer im asynchronen Modus. Den Auswertungen des Profilings zufolge sind diese aber nicht so langläufig wie jene Teile, die ich nebenläufig zum FHEM-Hauptprozess bearbeiten lasse.

Bitte finde anbei einen Kandidaten mit noch etwas mehr Logging und einem Attribut, um das Update zu steuern.

update sync|async|none
Wenn dieses Attribut nicht gesetzt ist oder wenn es auf sync gesetzt ist, findet die Verarbeitung des Kalenders im Vordergrund statt. Große Kalender werden FHEM auf langsamen Systemen blockieren. Wenn das Attribut auf async gesetzt ist, findet die Verarbeitung im Hintergrund statt, und FHEM wird während der Verarbeitung nicht blockieren. Wenn dieses Attribut auf none gesetzt ist, wird der Kalender überhaupt nicht aktualisiert.


Bitte setze

attr global verbose 3
attr DeinKalender update async
attr DeinKalender verbose 5


Bei mir sieht das wie folgt im Log aus:

2017.06.04 08:14:39 4: Calendar C: Wakeup
2017.06.04 08:14:39 4: Calendar C: Updating...
2017.06.04 08:14:39 4: Calendar C: Getting data from URL <hidden>
2017.06.04 08:14:39 4: Calendar C: parsing data asynchronously (PID= 10258)
2017.06.04 08:14:39 5: Calendar C: control passed back to main loop.
2017.06.04 08:14:40 4: Calendar C: got result from asynchronous parsing.
2017.06.04 08:14:40 4: Calendar C: asynchronous parsing finished.
2017.06.04 08:14:40 4: Calendar C: merging data
2017.06.04 08:14:40 4: Calendar C: 203 records processed, 0 new, 203 known, 0 modified, 0 changed.
2017.06.04 08:14:40 4: Calendar C: creating calendar events
2017.06.04 08:14:40 4: Calendar C: Checking times...
2017.06.04 08:14:40 4: Calendar C: process ended.


Zwischen den Meldungen control passed back to main loop. und got result from asynchronous parsing. sollte FHEM NICHT blockieren. Bitte poste auf jeden Fall mal diesen Teil des Logs. Profiler-Ergebnisse brauche ich keine mehr.

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

Amenophis86

Es läuft zumindest schon mal ohne Fehler. Auf dem Pi1 hängt er kurz beim Parsen der Daten vermutlich, zumindest, sobald er Daten empfängt. Denke auf einem P2 dürfte man dies schon nicht mehr merken. Apptime wirft folgendes aus:

ame                                     function                               max  count    total  average maxDly TS Max call     param Max call
tmr-Calendar_PollChild                   HASH(0x2063158)                      13303     10    26266  2626.60     67 04.06. 23:27:36 HASH(KL.Anja)
tmr-FW_closeInactiveClients                                                       1      1        1     1.00      2 04.06. 23:27:03
FHEM.Backup                              dummy_Set                                0      2        0     0.00      0
Import                                   dummy_Set                                0      2        0     0.00      0
KL.Anja                                  Calendar_Get                             0      2        0     0.00      0
KL.Anja                                  Calendar_Set                            19     10       36     3.60      0 04.06. 23:26:19 HASH(KL.Anja); KL.Anja; update
Logfile                                  FileLog_Log                              0     12        0     0.00      0
Logfile                                  FileLog_Set                              3      2        6     3.00      0 04.06. 23:26:15 HASH(Logfile); Logfile; ?
WEB                                      FW_Notify                                0     12        0     0.00      0
WEB                                      FW_Read                                 17     32       88     2.75      0 04.06. 23:27:18 HASH(WEB)
WEB                                      FW_Set                                   0      2        0     0.00      0
WEB_192.168.2.10_57944                   FW_Read                                 48      1       48    48.00      0 04.06. 23:26:39 HASH(WEB_192.168.2.10_57944)
WEB_192.168.2.10_57957                   FW_Read                                101     15      655    43.67      0 04.06. 23:27:18 HASH(WEB_192.168.2.10_57957)
WEB_192.168.2.10_57965                   FW_Read                                 68      4      122    30.50      0 04.06. 23:27:42 HASH(WEB_192.168.2.10_57965)
WEB_192.168.2.10_57968                   FW_Read                                  0      1        0     0.00      0
WEBphone                                 FW_Notify                                0     12        0     0.00      0
WEBphone                                 FW_Set                                   0      2        0     0.00      0
WEBtablet                                FW_Notify                                0     12        0     0.00      0
WEBtablet                                FW_Set                                   0      2        0     0.00      0
eventTypes                               eventTypes_Notify                        2     12        6     0.50      0 04.06. 23:27:36 HASH(eventTypes); HASH(KL.Anja)
eventTypes                               eventTypes_Set                           0      2        0     0.00      0


Daher würde ich sagen, dass es schon deutlich besser geworden ist. Die Wartezeit war wesentlich länger vorher. Wobei ich es nicht genau gemessen habe, aber rein vom Gefühl her.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

slupus

Hallo Boris,

ich konnte folgendes beobachten: Im synchronen Modus ist die CPU Auslastung meines Pi1 durchgängig bei ca. 97%. Im asynchronen Modus sind es zunächst 1-2 Prozesse, die eine Auslastung von ca. 70-90% erzeugen. FHEM ist dabei nicht blockiert.
Somit würde ich den Test positiv bewerten. Vielen Dank für deine Bemühungen!

Bei mir scheint nun das Problem die große Anzahl der Events zu sein. Ab dem Punkt creating calendar events ist die Auslastung bei ca. 97% und FHEM ist blockiert. Das mag aber auch am Pi1 liegen.

Grüße Sören

Dr. Boris Neubert

Danke für Deinen Test.

Zitat von: suelle am 05 Juni 2017, 22:03:12
Bei mir scheint nun das Problem die große Anzahl der Events zu sein. Ab dem Punkt creating calendar events ist die Auslastung bei ca. 97% und FHEM ist blockiert. Das mag aber auch am Pi1 liegen.

Das entspricht den Erwartungen. Der Abgleich der Termine aus dem Update mit den Terminen vom vorigen Update dauert halt auch eine Weile.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Amenophis86

Han gesehen, dass du die neue Version eingecheckt hast. Ich danke dir fürs bearbeiten des Problems.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

sTaN

Hallo Zusammen,

nach einem update all von FHEM erhalte ich unter anderem folgende Fehlermeldung:

2017.06.12 13:28:00 1: PERL WARNING: Use of uninitialized value $t in numeric lt (<) at ./FHEM/57_Calendar.pm line 1924.
2017.06.12 13:27:59 1: Calendar TRCalendar: retrieved no or empty data
2017.06.12 13:27:59 1: Calendar TRCalendar: retrieval failed with error message read from https://calendar.google.com:443 timed out


Vielleicht hat hier noch jemand einen Tipp oder das gleiche Problem?

Gruß
sTaN
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

Amenophis86

Kann es sein, dass du einen Eintrag ohne Anfangs-/Enddatum hast? Ich meine da war mal was in der Richtung.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

sTaN

#73
Puh, dass ist natürlich schwer zu sagen. Es gibt einige Einträge in dem Kalender  :-\ Bekommt man das irgendwie komfortabel im Google Kalender raus?
Ich sehe auch grad, dass ich das Problem im April schon mal im entsprechenden Thread geposted hatte, zumindest was die TimeOut Meldung angeht, bisher allerdings ohne eine Rückmeldung.

Das PERL Warning ist jetzt aber neu nach dem Update. Fehler erscheinen auch nach einem RPI Neustart.
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

Dr. Boris Neubert

Hi,

die Warnung kommt vermutlich, weil der Kalender leer ist. Muss ich ansehen und könnte Hinweise geben, ist aber erst mal unschädlich.

Ich habe auch das Problem, dass ich manchmal kein Ergebnis zurück bekomme beim HTTP- Request zu Google. Das geht aber bald wieder. Wie ist es bei Dir?

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

sTaN

Hi Dr. Boris,

ja das Problem der leeren Kalender habe ich eigentlich fast täglich...Heute werden mal wieder welche angezeigt aber nur von einem Kalender.
Mit "das geht bald wieder" meinst du Google wird hier Abhilfe schaffen?

Ich habe folgende Einstellungen für meine Kalender:

# Google Kalender Arbeit
define TACalendar Calendar ical url https://calendar.google.com/calendar/ical/XXXX/XXXX/basic.ics 84600
attr TACalendar group Kalender
attr TACalendar hideLaterThan 5
attr TACalendar hideOlderThan 1
attr TACalendar room Wohnzimmer,Kalender

# TACalendar 1x täglich automatisch um 03:00 Uhr aktualisieren
define UpdateTACalendar at *03:00:00 set TACalendar update

# Letzten 5 Einträge des TACalendar
define vKalenderTA CALVIEW TACalendar 1
attr vKalenderTA maxreadings 10
attr vKalenderTA modes next
attr vKalenderTA room Kalender

# Privater Google Kalender
define TPCalendar Calendar ical url https://calendar.google.com/calendar/ical/XXX/XXX/basic.ics 84600
attr TPCalendar group Kalender
attr TPCalendar hideLaterThan 5
attr TPCalendar hideOlderThan 1
attr TPCalendar room Wohnzimmer,Kalender

# privaten Kalender 1x täglich automatisch um 04:00 Uhr aktualisieren
define UpdateTPCalendar at *04:00:00 set TPCalendar update

# Letzten 5 Einträge des privaten Kalenders
define vKalenderTP CALVIEW TPCalendar 1
attr vKalenderTP maxreadings 10
attr vKalenderTP modes next
attr vKalenderTP room Kalender

# Alle Kalender
define calview_all CALVIEW TACalendar, TPCalendar 1
attr calview_all maxreadings 10
attr calview_all modes next
attr calview_all room Kalender


Das callview_all lasse ich im Tablet UI ausgeben mittels:

<li data-row="3" data-col="6" data-sizex="4" data-sizey="2" class="">
          <header><div data-type="label" class="normal">Termine</div></header>
            <div   data-type="calview"
                data-device="calview_all"
                data-get="all"
                data-max="7"
                data-detail='["bdate","btime","etime","summary"]'
                data-showempty="true"
                class="large">
            </div>
</li>


An der Konfiguration sollte das ja dann nicht liegen, oder? Ich möchte eigentlich immer nur die kommenden Termine für den nächsten Tage anzeigen lassen. Maximal 7 an der Zahl.

Gruß
sTaN
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

Dr. Boris Neubert

Hallo,

Zitat von: sTaN am 13 Juni 2017, 11:48:11
ja das Problem der leeren Kalender habe ich eigentlich fast täglich...Heute werden mal wieder welche angezeigt aber nur von einem Kalender.
Mit "das geht bald wieder" meinst du Google wird hier Abhilfe schaffen?

ich meine damit, dass der Abruf manchmal fehlt schlägt aber nicht immer. Deine Antwort bestätigt das. Bitte zeige uns einmal das Protokoll des Abrufs mit verbose 5.

Was erhältst Du, wenn Du den Kalender z.B. mit wget von Hand herunterlädst?

Zitat

define TACalendar Calendar ical url https://calendar.google.com/calendar/ical/XXXX/XXXX/basic.ics 84600
# TACalendar 1x täglich automatisch um 03:00 Uhr aktualisieren
[/quote]

Warum gibst Du an, dass der Kalender automatisch alle 84600 Sekunden aktualisiert wird, und lässt ihn zusätzlich noch per at aktualisieren? Das at kannst Du Dir sparen, es sei denn, dass Du unbedingt einmal nachts um 3 Uhr aktualisieren willst und nicht jeweils alle 84600 Sekunden (1 Tag sind 86400 Sekunden).

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

sTaN

Zitat von: Dr. Boris Neubert am 13 Juni 2017, 18:54:36
Bitte zeige uns einmal das Protokoll des Abrufs mit verbose 5.

Wie mache ich manuell am saubersten das Update? Habe verbose bereits bei beiden Kalendern auf 5 gesetzt.
Mittels get Calendar update oder set Calendar update?
Laut commandref müsste es ja das Gleiche sein. Ich frage lieber vorher, da ich dann wieder eine Weile meine Steuerung lahm lege.

Zitat von: Dr. Boris Neubert am 13 Juni 2017, 18:54:36
Was erhältst Du, wenn Du den Kalender z.B. mit wget von Hand herunterlädst?

Das scheint relativ zügig zu funktionieren und die basics.ics mit Daten liegt im Verzeichnis.

sudo wget https://calendar.google.com/calendar/ical/XXX/private-XXX/basic.ics
--2017-06-13 19:26:48--  https://calendar.google.com/calendar/ical/XXX/private-XXX/basic.ics
Resolving calendar.google.com (calendar.google.com)... 172.217.16.206, 2a00:1450:4001:817::200e
Connecting to calendar.google.com (calendar.google.com)|172.217.16.206|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/calendar]
Saving to: `basic.ics'

    [        <=>                                                                    ] 725,028      437K/s   in 1.6s   

2017-06-13 19:27:04 (437 KB/s) - `basic.ics' saved [725028]


Zitat von: Dr. Boris Neubert am 13 Juni 2017, 18:54:36
Warum gibst Du an, dass der Kalender automatisch alle 84600 Sekunden aktualisiert wird, und lässt ihn zusätzlich noch per at aktualisieren? Das at kannst Du Dir sparen, es sei denn, dass Du unbedingt einmal nachts um 3 Uhr aktualisieren willst und nicht jeweils alle 84600 Sekunden (1 Tag sind 86400 Sekunden).

Ja das stimmt...Das war bisher für mich noch ein unlösbares Problem. Eigentlich wollte ich den Kalender gern zeitgesteuert nur 1 x Nachts um 3 Uhr updaten lassen, da er tagsüber immer mein FHEM blockiert und ich meine Geräte nicht schalten konnte. Leider muss man bei der Kalenderdefinition ja eine Zeit mitgeben und dann zählt diese ab speichern der fhem.cfg
Dann dachte ich, wenn ich Nachts das Update zeitgesteuert mache, müsste er die 84600 Sekunden ab Fertigstellung triggern und somit bleiben die Updates immer Nachts. Wobei er diese dann natürlich hintereinander macht. Wenn ich so drüber nachdenke könnte das ja schon die Ursache für die bei mir häufiger leeren Kalender sein, oder?

Vielleicht gibt es hierfür ja noch eine elegantere Lösung? Am liebsten wäre es mir kein Zeit Intervall zu vergeben, sondern eine feste Uhrzeit.

Viele Grüße
sTaN
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

sTaN

Nach einem Update meines privaten Kalenders erhalte ich folgendes im Logfile:

2017.06.13 19:45:22 4: Calendar TPCalendar: process ended.
2017.06.13 19:45:20 4: Calendar TPCalendar: Checking times...
2017.06.13 19:45:02 4: Calendar TPCalendar: creating calendar events
2017.06.13 19:45:02 4: Calendar TPCalendar: 764 records processed, 1 new, 757 known, 6 modified, 0 changed.
2017.06.13 19:45:00 4: Calendar TPCalendar: merging data
2017.06.13 19:44:50 4: Calendar TPCalendar: parsing data synchronously
2017.06.13 19:44:44 4: Calendar TPCalendar: Getting data from URL <hidden>
2017.06.13 19:44:44 4: Calendar TPCalendar: Updating...


Nun sind die Einträge in der Calview vCalendarTP aber wieder leer.
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

Dr. Boris Neubert

Zitat von: sTaN am 13 Juni 2017, 19:37:40
Wie mache ich manuell am saubersten das Update? Habe verbose bereits bei beiden Kalendern auf 5 gesetzt.
Mittels get Calendar update oder set Calendar update?

Ich meine, dass Du attr global verbose 5 setzen musst, um auch die Meldungen beim Abholen zu sehen. set und get ... update sind äquivalent. Nimm eines davon.

ZitatVielleicht gibt es hierfür ja noch eine elegantere Lösung? Am liebsten wäre es mir kein Zeit Intervall zu vergeben, sondern eine feste Uhrzeit.

Idealerweise setzt Du die Zahl im define auf 9999999 und benutzt weiter Dein at. Dann solltest Du aber auch das attr ... update async setzen, damit FHEM während des Parsens nicht blockiert.

Oder Du lässt die Zahl im define und setzt attr ... update none und benutzt weiter Dein at.

Die Gründe für das fehlgeschlagene Herunterladen liegen nicht im Kalendermodul sondern im Fehlschlagen des Herunterladens (in anderen Worten: wir sind in diesem Thema off-topic). Vielleicht hilft uns das Log weiter.

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

sTaN

Okay danke Dr. Boris Neubert!

Erneutes update mit globalem attr. verbose 5 durchgeführt:

2017.06.13 20:10:15 4: Connection accepted from WEB_192.168.1XX.2XX_57773
/
2017.06.13 20:10:15 4: WEB: /fhem?cmd=%7BAttrVal(%22vKalenderTP%22%2C%22room%22%2C%22%22)%7D&XHR=1&fwcsrf=csrf_XXXXX / RL:29 / text/plain; charset=UTF-8 / Content-Encoding: gzip
2017.06.13 20:10:15 5: Cmd: >{AttrVal("vKalenderTP","room","")}<
2017.06.13 20:10:15 4: WEB_192.168.1XX.2XX_57772 GET /fhem?cmd=%7BAttrVal(%22vKalenderTP%22%2C%22room%22%2C%22%22)%7D&XHR=1&fwcsrf=csrf_XXX; BUFLEN:0
2017.06.13 20:10:15 4: Connection accepted from WEB_192.168.1XX.2XX_57772
/
2017.06.13 20:10:15 4: WEB: /fhem?cmd=%7BReadingsVal(%22vKalenderTP%22%2C%22update%22%2C%22%22)%7D&XHR=1&fwcsrf=csrf_XXX / RL:21 / text/plain; charset=UTF-8 / Content-Encoding: gzip
2017.06.13 20:10:15 5: Cmd: >{ReadingsVal("vKalenderTP","update","")}<
2017.06.13 20:10:15 4: WEB_192.168.1XX.2XX_57699 GET /fhem?cmd=%7BReadingsVal(%22vKalenderTP%22%2C%22update%22%2C%22%22)%7D&XHR=1&fwcsrf=csrf_XXX; BUFLEN:0
2017.06.13 20:10:15 4: Connection closed for WEB_192.168.1XX.2XX_57771: EOF
/
2017.06.13 20:10:15 4: WEB: /fhem?detail=vKalenderTP / RL:3453 / text/html; charset=UTF-8 / Content-Encoding: gzip
2017.06.13 20:10:15 4: WEB_192.168.1XX.2XX_57699 GET /fhem?detail=vKalenderTP; BUFLEN:0


Mehr finde ich dazu nicht im Logfile.

Habe den csrf Token und meine IP-Adresse mal auch unkenntlich gemacht, wobei das eigentlich egal sein sollte?!

Gruß
sTaN
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

Dr. Boris Neubert

Hallo,

das ist aber kein Kalenderabruf drin.

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