57_Calendar.pm: alpha-Test der neuen Version

Begonnen von Dr. Boris Neubert, 02 Januar 2016, 19:08:17

Vorheriges Thema - Nächstes Thema

Benni

#30
für mich persönlich kein Problem.  :)
Ich hatte das Calendar-Modul bisher nur ganz rudimentär im Einsatz und für mich ist das Testen mit dem neuen Modul der perfekte Einstieg mich endlich mal näher damit zu beschäftigen.

Allerdings setzt, wie Chris weiter oben schon bemerkt hatte, zumindest das CALVIEW-Modul direkt auf das Calendar-Modul auf, was dazu wohl entsprechende get-Funktionalitäten benötigt. Ich schätze mal, dass das CALVIEW-Modul ein häufiger Anwendungsfall ist.

Ich könnte mir aber vorstellen, dass von dem Plus an Flexibilität, das durch diese Abfragemöglichkeiten entsteht letztendlich auch das CALVIEW-Modul profitieren würde.

Es ist halt immer schwierig wenn alte Zöpfe abgeschnitten werden sollen  aber grundsätzlich bin ich eher dafür ;D

Dr. Boris Neubert

Hallo Chris,

Zitat von: Benni am 03 Januar 2016, 11:46:46
Allerdings setzt, wie Chris weiter oben schon bemerkt hatte, zumindest das CALVIEW-Modul direkt auf das Calendar-Modul auf, was dazu wohl entsprechende get-Funktionalitäten benötigt. Ich schätze mal, dass das CALVIEW-Modul ein häufiger Anwendungsfall ist.

Ich könnte mir aber vorstellen, dass von dem Plus an Flexibilität, das durch diese Abfragemöglichkeiten entsteht letztendlich auch das CALVIEW-Modul profitieren würde.

brauchst Du ein API für CALVIEW? Was sollte das leisten - wenn Du mir eine Spezifikation zukommen lässt, kann ich das einbauen.

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

betateilchen

Zitat von: Dr. Boris Neubert am 03 Januar 2016, 11:26:36
Ich hoffe, dass es nicht zu schmerzhaft wird, wenn ich

get <name> full|text|summary|location|alarm|start|end <reading>|<uid> [max]

abschaffe.

Das gibt allerdings - vorhersehbar - massiven Ärger.
Hattest Du nicht irgendwann geschrieben, Du willst abwärtskompatibel bleiben?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Erster Test hier: Modul funktioniert offenbar auch mit ownCloud Kalendern.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Dr. Boris Neubert

Zitat von: betateilchen am 03 Januar 2016, 12:24:50
Das gibt allerdings - vorhersehbar - massiven Ärger.

Ich befürchte, dass Du Recht behalten wirst :-(

Fazit: ich mache es VOLLSTÄNDIG abwärtskompatibel (bis auf die Tatsache, dass man auf einmal ganz viele Termine sehen wird) und get ... events wird es zusätzlich geben.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

chris1284

Zitat von: Dr. Boris Neubert am 03 Januar 2016, 12:14:22
Hallo Chris,

brauchst Du ein API für CALVIEW? Was sollte das leisten - wenn Du mir eine Spezifikation zukommen lässt, kann ich das einbauen.

Viele Grüße
Boris

solange man die get-funktion aufrufen kann ist das denke ich kein problem mit neuen get-befehlen. das kernstück aktuell nur die abfrage der bestandteile eines termines über die uid.
ich hole erst pro mode die uid's, teile sie auf und hole die daten:

foreach my $calendername (@calendernamen){
foreach my $mode (@modes){
my $all = ReadingsVal($calendername, $mode, "");
my @uids=split(/;/,$all);

foreach my $uid (@uids){
my $terminstart = CallFn($calendername, "GetFn", $defs{$calendername},(" ","start", $uid));
my $termintext = CallFn($calendername, "GetFn", $defs{$calendername}, (" ","summary", $uid));
my $terminend = CallFn($calendername, "GetFn", $defs{$calendername}, (" ","end", $uid));
my $terminort = CallFn($calendername, "GetFn", $defs{$calendername}, (" ","location", $uid));
push(@terminliste, [$terminstart, $termintext, $terminend, $calendername, $terminort, $mode]);
};
};
};
return @terminliste;


also auch wenn du die mode-bezeichnung änderst sollte es kein problem sein.


Dr. Boris Neubert

Hallo,

ich habe mir die Ergebnisse der letzten 20 Stunden zu Herzen genommen und ein paar Anpassungen vorgenommen. Die Änderungen sind im ersten Beitrag in diesem Thema dokumentiert, wo auch die neue Version hängt.

Folgende Gedanken dazu:
- die Einstellung (hideOlderThan= 0, hideLaterThan inaktiv) führt dazu, dass nur nicht beendete Termine gezeigt werden. Früher wurde ein beendeter Termin noch gezeigt, bevor er beim nächsten Kalender-Update rausgeworfen wurde.
- get <name> <format> <reading> mit <reading>:= modeAlarm|modeAlarmed|... funktioniert wieder. Da aber über die UID ausgewertet wird, werden alle Termine mit der entsprechenden UID angezeigt und das auch egal in welchem Zustand sie sind. Das ist wahrscheinlich nicht das, was der Benutzer erwartet. Aufgrund der Neuerung, dass es zu einer UID mehrere Termine geben kann, weiß ich aber nicht, wie ich das noch viel besser machen kann. Echt abwärtskompatibel wird es vermutlich nur, wenn ich ein Attribut einbaue, mit dem aus einer Serie jeweils nur der interessanteste Termin behalten wird.

Was meint Ihr?

Bis zum kommenden Wochenende keine Updates mehr, außer bei gravierenden Fehlern.

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

hexenmeister

Halloo Boris,

bei der neuen Version fehlt der letzte Parameter im Aufruf von Calendar_GetEvents

Not enough arguments for main::Calendar_GetEvents at ./FHEM/57_Calendar.pm line 1471, near "undef)"
BEGIN not safe after errors--compilation aborted at ./FHEM/57_Calendar.pm line 1635.


Grüße,
Alexander
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Dr. Boris Neubert

Danke, Alexander, für den Hinweis. Hab's gefixt und im ersten Beitrag hinterlegt.

Bei mir meckert Perl nicht, wenn ich weniger Argumente übergebe als im Prototyp angegeben ($$$$). Ich bin explizit davon ausgegangen, dass der Rest dann undef ist.

Warum ist Dein perl pingeliger als meins?

This is perl 5, version 20, subversion 2 (v5.20.2) built for x86_64-linux-gnu-thread-multi
(with 51 registered patches, see perl -V for more detail)


auf KUbuntu 15.10.

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

betateilchen

#39
Zitat von: Dr. Boris Neubert am 03 Januar 2016, 17:36:30

Früher wurde ein beendeter Termin noch gezeigt, bevor er beim nächsten Kalender-Update rausgeworfen wurde.


Das Rauswerfen hat "früher" noch nie zuverlässig funktioniert  8)

Zitat von: Dr. Boris Neubert am 03 Januar 2016, 18:43:53
Bei mir meckert Perl nicht, wenn ich weniger Argumente übergebe als im Prototyp angegeben ($$$$). Ich bin explizit davon ausgegangen, dass der Rest dann undef ist.

Gib doch einfach in den Funktionsdefinitionen gar keine Argumente an, auch nicht im Prototyp.

Es gibt einfach zuviele verschiedene perl-Versionen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Warum wird ein neu definiertes Calendar-device (noch?) nicht automatisch beim define aktualisiert sondern erst nach einem "set ... reload"?

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Dr. Boris Neubert

Hallo,

nach einem global:initialized oder rereadcfg Event wird der Kalender nach einer zufälligen Verzögerung von 10 bis 20 Sekunden automatisch aktualisiert. Das verhindert, dass die Leitung verstopft, wenn nach dem Start alle Devices Daten aus dem Web holen.

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

Dr. Boris Neubert

Nachtrag:

ich könnte natürlich die Aktualisierung sofort beim define auslösen, wenn FHEM bereits initialisiert ist. Wie kann ich das feststellen?
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

betateilchen

#43
Variante 1: if ($init_done == 1)

Variante 2: $fhem_started auswerten, damit kannst Du die Zeit seit dem letzten fhem Start ermitteln


-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

#44
gibt es eigentlich keinen event "modeEnded" mehr?

Edit: Ich ziehe die Frage zurück. Es scheint den event doch noch zu geben - aber warum der vorhin nicht auftrat, keine Ahnung.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!