57_CALENDAR - welche RRULE funktionieren?

Begonnen von betateilchen, 06 Mai 2018, 14:33:12

Vorheriges Thema - Nächstes Thema

betateilchen

Hallo Boris,
gibt es irgendwo eine zuverlässige Aufstellung darüber, welche RRULE für wiederkehrende Termine im Kalendermodul funktionieren und welche nicht?

In folgendem Kalendereintrag werden mir bei "get .. vevents" zwar alle events angezeigt,


130: VEVENT @213 [new]
    CREATED: 20180506T121321Z
    DTEND: 20180507T020000
    DTSTAMP: 20180506T121347Z
    DTSTART: 20180507T010000
    RRULE: FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE,FR
    SEQUENCE: 0
    SUMMARY: bd_Ventilator
    TRANSP: OPAQUE
    UID: 63646721-388B-4BCF-81F8-46DFBC7FD941
    X-APPLE-TRAVEL-ADVISORY-BEHAVIOR: AUTOMATIC
    >>> is a series
    >>> Events:
      63646721388B4BCF81F846DFBC7FD941    upcoming                     07.05.2018 01:00-07.05.2018 02:00 bd_Ventilator   
      63646721388B4BCF81F846DFBC7FD941    upcoming                     09.05.2018 01:00-09.05.2018 02:00 bd_Ventilator   
      63646721388B4BCF81F846DFBC7FD941    upcoming                     11.05.2018 01:00-11.05.2018 02:00 bd_Ventilator   
      63646721388B4BCF81F846DFBC7FD941    upcoming                     14.05.2018 01:00-14.05.2018 02:00 bd_Ventilator   
      63646721388B4BCF81F846DFBC7FD941    upcoming                     16.05.2018 01:00-16.05.2018 02:00 bd_Ventilator   


aber bei einem "get ... text next 10" taucht nur der Eintrag für morgen (Montag) auf.


06.05.18 21:00 sz_Bett_rechts
07.05.18 01:00 bd_Ventilator
07.05.18 02:00 ar_Ventilator
07.05.18 21:00 sz_Bett_rechts
08.05.18 21:00 sz_Bett_rechts
16.05.18 21:00 sz_Bett_rechts
17.05.18 21:00 sz_Bett_rechts
18.05.18 21:00 sz_Bett_rechts
19.05.18 21:00 sz_Bett_rechts
-----------------------
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,

es gibt eine kurze Beschreibung dazu in der commandref unter Description beim Modul.

Der gezeigte Fall ist implementiert.

Kannst Du bitte mal get ... events  ... benutzen?

Ich schau mir das am Wochenende an.

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

betateilchen

Hallo Boris,

in "get events" kommen die events alle korrekt:


07.05.2018 21:00 8h sz_Bett_rechts
08.05.2018 21:00 8h sz_Bett_rechts
>> 09.05.2018 01:00 1h bd_Ventilator
09.05.2018 02:00 1h ar_Ventilator
>> 11.05.2018 01:00 1h bd_Ventilator
11.05.2018 02:00 1h ar_Ventilator
>> 14.05.2018 01:00 1h bd_Ventilator
14.05.2018 02:00 1h ar_Ventilator
14.05.2018 21:00 8h sz_Bett_rechts
15.05.2018 21:00 8h sz_Bett_rechts
>> 16.05.2018 01:00 1h bd_Ventilator
16.05.2018 02:00 1h ar_Ventilator
16.05.2018 21:00 8h sz_Bett_rechts
17.05.2018 21:00 8h sz_Bett_rechts
>> 18.05.2018 01:00 1h bd_Ventilator
18.05.2018 02:00 1h ar_Ventilator
18.05.2018 21:00 8h sz_Bett_rechts
19.05.2018 21:00 8h sz_Bett_rechts
20.05.2018 21:00 8h sz_Bett_rechts
>> 21.05.2018 01:00 1h bd_Ventilator
21.05.2018 02:00 1h ar_Ventilator
-----------------------
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 Udo,

ich möchte in einer kommenden Version nur noch get events zulassen und die alten Methoden entfernen. Eine Markierung als deprecated in der Commandref und ein Hinweis in den Ankündigen genügen vermutlich dafür nicht. Eine Ausgabe bei Benutzung der Methoden stört bestehende Systeme. Hast Du eine praktische Idee?

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

amenomade

@betateilchen: bin mal neugierig. Anscheinend sind deine Events nach Dauer + Devices genannt. Wie füllst Du diesen Kalender aus (hast Du z.B. eine komplexe Kalkulation abhängig von Feiertage, Urlaub usw..), und wie werden dann die Events genutzt?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Dr. Boris Neubert

Zitat von: amenomade am 10 Mai 2018, 12:43:00
Anscheinend sind deine Events nach Dauer ... genannt.

Nein. get events liefert eine konfigurierbare Ausgabe. Die Dauer wird aus Start- und Endzeitpunkt abgeleitet und ausgewiesen. Siehe Commandref.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

amenomade

Ok, sorry und danke. Trotzdem bin ich interessiert, wie man Events mit Devicenamen nutzt.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Dr. Boris Neubert

Siehe commandref, unter "switch actors on and off"
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

betateilchen

Zitat von: Dr. Boris Neubert am 10 Mai 2018, 12:30:37
ich möchte in einer kommenden Version nur noch get events zulassen und die alten Methoden entfernen

Dann sollte aber "get events" bitte auch die Angabe "next <n>" akzeptieren, was bisher nicht funktioniert. Sonst hätte ich längst umgestellt.

Diese grundsätzliche Umstellung solltest Du zu einem nächsten Major Release einfach hart umsetzen aber im Vorfeld ankündigen und bis dahin als "deprecated" ins Logfile schreiben.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: amenomade am 10 Mai 2018, 13:23:14
Trotzdem bin ich interessiert, wie man Events mit Devicenamen nutzt.

das ist doch ein der grundsätzlichen Aufgaben, weshalb man das Calendar-Modul überhaupt verwendet?

Hier im Forum habe ich schon ein paar Lösungsansätze mit notify beschrieben, sowohl zum Schalten von Aktoren als auch zum Steuern von Raumheizungen.
-----------------------
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 10 Mai 2018, 18:39:58
Dann sollte aber "get events" bitte auch die Angabe "next <n>" akzeptieren, was bisher nicht funktioniert. Sonst hätte ich längst umgestellt.

series:next=<n>

geht nicht oder tut nicht das von Dir Erwartete?

Zitat
Diese grundsätzliche Umstellung solltest Du zu einem nächsten Major Release einfach hart umsetzen aber im Vorfeld ankündigen und bis dahin als "deprecated" ins Logfile schreiben.

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

betateilchen

Zitat von: Dr. Boris Neubert am 10 Mai 2018, 19:01:33
series:next=<n>

geht nicht oder tut nicht das von Dir Erwartete?

nicht wirklich das, was ich erwarte...

get ... events series:next=10

liefert


11.05.2018 01:00 1h bd_Ventilator
11.05.2018 02:00 1h ar_Ventilator
14.05.2018 01:00 1h bd_Ventilator
14.05.2018 02:00 1h ar_Ventilator
14.05.2018 21:00 8h sz_Bett_rechts
15.05.2018 21:00 8h sz_Bett_rechts
16.05.2018 01:00 1h bd_Ventilator
16.05.2018 02:00 1h ar_Ventilator
16.05.2018 21:00 8h sz_Bett_rechts
17.05.2018 21:00 8h sz_Bett_rechts
18.05.2018 01:00 1h bd_Ventilator
18.05.2018 02:00 1h ar_Ventilator
18.05.2018 21:00 8h sz_Bett_rechts
19.05.2018 21:00 8h sz_Bett_rechts
20.05.2018 21:00 8h sz_Bett_rechts
21.05.2018 01:00 1h bd_Ventilator
21.05.2018 02:00 1h ar_Ventilator
21.05.2018 21:00 8h sz_Bett_rechts
22.05.2018 21:00 8h sz_Bett_rechts
23.05.2018 01:00 1h bd_Ventilator
23.05.2018 02:00 1h ar_Ventilator
23.05.2018 21:00 8h sz_Bett_rechts
25.05.2018 01:00 1h bd_Ventilator
25.05.2018 02:00 1h ar_Ventilator
27.05.2018 12:00 17h sz_Bett_rechts
28.05.2018 01:00 1h bd_Ventilator
28.05.2018 02:00 1h ar_Ventilator
28.05.2018 21:00 8h sz_Bett_rechts
29.05.2018 21:00 8h sz_Bett_rechts
30.05.2018 01:00 1h bd_Ventilator
30.05.2018 02:00 1h ar_Ventilator
30.05.2018 21:00 8h sz_Bett_rechts
31.05.2018 21:00 8h sz_Bett_rechts
01.06.2018 01:00 1h bd_Ventilator
01.06.2018 02:00 1h ar_Ventilator
01.06.2018 21:00 8h sz_Bett_rechts
02.06.2018 21:00 8h sz_Bett_rechts
03.06.2018 21:00 8h sz_Bett_rechts
04.06.2018 21:00 8h sz_Bett_rechts
05.06.2018 21:00 8h sz_Bett_rechts
06.06.2018 21:00 8h sz_Bett_rechts
10.06.2018 12:00 17h sz_Bett_rechts
11.06.2018 21:00 8h sz_Bett_rechts
12.06.2018 21:00 8h sz_Bett_rechts
13.06.2018 21:00 8h sz_Bett_rechts
14.06.2018 21:00 8h sz_Bett_rechts
15.06.2018 21:00 8h sz_Bett_rechts
16.06.2018 21:00 8h sz_Bett_rechts
17.06.2018 21:00 8h sz_Bett_rechts
18.06.2018 21:00 8h sz_Bett_rechts
19.06.2018 21:00 8h sz_Bett_rechts
20.06.2018 21:00 8h sz_Bett_rechts
24.06.2018 12:00 17h sz_Bett_rechts
25.06.2018 21:00 8h sz_Bett_rechts
26.06.2018 21:00 8h sz_Bett_rechts
27.06.2018 21:00 8h sz_Bett_rechts
28.06.2018 21:00 8h sz_Bett_rechts
29.06.2018 21:00 8h sz_Bett_rechts
30.06.2018 21:00 8h sz_Bett_rechts
01.07.2018 21:00 8h sz_Bett_rechts
02.07.2018 21:00 8h sz_Bett_rechts
03.07.2018 21:00 8h sz_Bett_rechts
04.07.2018 21:00 8h sz_Bett_rechts
08.07.2018 12:00 17h sz_Bett_rechts
09.07.2018 21:00 8h sz_Bett_rechts
10.07.2018 21:00 8h sz_Bett_rechts
11.07.2018 21:00 8h sz_Bett_rechts
12.07.2018 21:00 8h sz_Bett_rechts
13.07.2018 21:00 8h sz_Bett_rechts
14.07.2018 21:00 8h sz_Bett_rechts
15.07.2018 21:00 8h sz_Bett_rechts
16.07.2018 21:00 8h sz_Bett_rechts
17.07.2018 21:00 8h sz_Bett_rechts
18.07.2018 21:00 8h sz_Bett_rechts
22.07.2018 12:00 17h sz_Bett_rechts
26.07.2018 21:00 8h sz_Bett_rechts
27.07.2018 21:00 8h sz_Bett_rechts
28.07.2018 21:00 8h sz_Bett_rechts
29.07.2018 21:00 8h sz_Bett_rechts
05.08.2018 12:00 17h sz_Bett_rechts
09.08.2018 21:00 8h sz_Bett_rechts
10.08.2018 21:00 8h sz_Bett_rechts
11.08.2018 21:00 8h sz_Bett_rechts
12.08.2018 21:00 8h sz_Bett_rechts
19.08.2018 12:00 17h sz_Bett_rechts
23.08.2018 21:00 8h sz_Bett_rechts
24.08.2018 21:00 8h sz_Bett_rechts
25.08.2018 21:00 8h sz_Bett_rechts
26.08.2018 21:00 8h sz_Bett_rechts
02.09.2018 12:00 17h sz_Bett_rechts
06.09.2018 21:00 8h sz_Bett_rechts
07.09.2018 21:00 8h sz_Bett_rechts
08.09.2018 21:00 8h sz_Bett_rechts
09.09.2018 21:00 8h sz_Bett_rechts
16.09.2018 12:00 17h sz_Bett_rechts
20.09.2018 21:00 8h sz_Bett_rechts
21.09.2018 21:00 8h sz_Bett_rechts
22.09.2018 21:00 8h sz_Bett_rechts
23.09.2018 21:00 8h sz_Bett_rechts
30.09.2018 12:00 17h sz_Bett_rechts


und das sind definitiv mehr als 10 Einträge  8)
-----------------------
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 10 Mai 2018, 20:38:19
und das sind definitiv mehr als 10 Einträge  8)

Ich habe mit ein paar Varianten gespielt und kann das nicht nachvollziehen. Bei mir funktioniert es spezifikationsgemäß. Sogar mit dem Kalender, den Du mir mal in einem anderen Thema gegeben hast. Kannst Du mir bitte den iCalender zur Verfügung stellen zum Testen?

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

betateilchen

-----------------------
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

Danke. Ursache identifiziert.

get ... events format:custom="$T1-$T2 $U  $S $DS $M" series:next=3

zeigt anhand der UIDs, dass die Termine mit Beschreibung sz_Bett_rechts mehreren Serienterminen entstammen. Aus jeder Serie kommen korrekt bis zu 3 Termine.

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

betateilchen

#15
Naja, ich finde den Begriff "series" in diesem Zusammenhang schon sehr irreführend. Was ich als Ergebnis erwarte, sind einfach die nächsten 10 Termine aus einem bestimmten Kalender, egal ob sie einer Serie, mehreren Serien oder Einzelereignissen entstammen.

So wie das bisher ja auch funktionierrt 😀
-----------------------
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

Also werde ich noch den vierten Parameter implementieren, der bei mir auf der Liste stand:

limit:count=<count>,from=<fromDate>,to=<toDate>

Es können einer, zwei oder drei von count, from und to angegeben werden.

Brauche dazu noch einem Datumsparser. Den gibt es sicher schon irgendwo im FHEM.


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

betateilchen

mir würde ja

list:next=10

ausreichen (und besser gefallen), weil der Zweck durch das "next" einfach erkennbar bleibt.

In das Modul habe ich jetzt noch nicht geschaut, aber "series:next=10" liefert doch die Ergebnisse vermutlich in einem sortierten Array zurück - davon müsste man eben nur die 10 ersten Einträge verwenden.

Also "list:next=10" ruft "series:next=10" auf und gibt die gewünschte absolute Anzahl der Einträge zurück. (wobei ich mich aktuelle frage, ob bei series auch Einzeltermine, die keine Serie haben, berücksichtigt werden)

-----------------------
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

Also es ist einfach zu realisieren. Wie Du sagst stehen die Termine zeitlich sortiert in einem Array.

Dein Anwendungsfall ist mit

limit:count=10,from=now

oder, alternativ, mit

limit:count=10 filter:mode=~"upcoming|start"

abgedeckt. Mache mich diese Tage daran.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

betateilchen

wenn Du grade am Frickeln bist, dann spendiere doch dem "get ... events" noch einen Parameter "raw" ganz am Schluß, der dafür sorgt, dass direkt das Ergebnis-Array zurückgeliefert wird, anstatt eines reinen Textes mit \n zur Zeilentrennung

Dann kann ich in meinen Anwendungen schreiben

my @a = fhem("get myCalendar events .... raw");

anstatt

my @a = split(/\n/,fhem("get myCalendar events ..."));

Danke  8)
-----------------------
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 11 Mai 2018, 13:13:26
wenn Du grade am Frickeln bist, dann spendiere doch dem "get ... events" noch einen Parameter "raw" ganz am Schluß, der dafür sorgt, dass direkt das Ergebnis-Array zurückgeliefert wird, anstatt eines reinen Textes mit \n zur Zeilentrennung

Ist machbar - schließlich wird das Array erst am Schluss zu einem String gejoint.

Zum Keystore. Das wollte ich sowieso mal angehen, damit die geheime URL aus dem define herauskommt. Ich würde dann die Variante

define myCalendar ical key <key> [interval]

einführen. Wie geht denn Keystore bzw. wo ist die Doku? Habe das noch nie benutzt.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

betateilchen

Zitat von: Dr. Boris Neubert am 11 Mai 2018, 15:22:19
Wie geht denn Keystore bzw. wo ist die Doku? Habe das noch nie benutzt.

Schau Dir in der fhem.pl die Funktionen getKeyValue() und setKeyValue() an.
-----------------------
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

So, der limit-Parameter ist implementiert und eingecheckt.

get MyCalendar events limit:count=10
get MyCalendar events limit:from=-2d
get MyCalendar events limit:count=10,from=0,to=+10d


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

betateilchen

Jetzt solltest Du bitte noch die besprochene "Ankündigung" schreiben, damit die Anwender wissen, was die plötzlich vorhandenen Hinweise im Log bedeuten :)

https://forum.fhem.de/index.php/topic,87846.0.html
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

#24
Also mal ganz ehrlich ...

Wenn ich die Wahl hätte zwischen


$actor = CommandGet(undef,"oc_Schalter summary $uid 1");


und


$actor = CommandGet(undef,'oc_Schalter events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1');


fände ich die erste Variante auf jeden Fall sympathischer.

Vor allem finde ich es absolut unlogisch - und schwer zu merken - dass ich überall mit einem einfachen = arbeiten kann und nur beim Filterkriterien einen zweistelligen Vergleichsoperator verwenden muss.




Auf jeden Fall habe ich nun die ersten notify auf die neue Syntax umgebaut und werde vergleichen, ob meine eingebauten Debug-Ausgaben dem entsprechen, was die bisherige Syntax als Ergebnis lieferte.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!