letzter Termin für heute im Calendar

Begonnen von Otto, 30 Januar 2019, 22:32:30

Vorheriges Thema - Nächstes Thema

Otto123

Zitat von: Otto am 04 Februar 2019, 10:01:10
mit get UntisCal vevents
Da unten war ich noch nicht - danke.  ;D

Meine Einträge (Google Kalender) sehen etwas anders aus. Aber ich kann da irgendwie nichts ableiten. Mal sehen ob Boris eine Idee hat.
Der wird wohl ein Stückchen Kalender haben wollen, vielleicht kannst Du schon mal einen Teil (oder alles, ich weiß nicht was da alles drin steht) Deiner ics Datei als Anhang liefern.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Otto

Hallo,

das wäre sehr nett, hier die ics Datei.
Gruss Otto

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

docker - homematic

betateilchen

#17
ich wünsche mir insgeheim auch schon lange ein limit=today

Dabei könnte das Schlüsselwort today dafür sorgen, dass zum Ausführungszeitpunkt der Abfrage mit einer Funktion secondsSinceMidnight() der Filter limit:from und mit 86400-secondsSinceMidnight() der Filter limit:to (jeweils in Sekunden) bestückt werden.

Klar, kann man sich das auch selbst bauen...

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

betateilchen

#18
ich hab da mal was vorbereitet...

--- aktualisierter patch im weiteren Verlauf des Threads ---
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Otto

Hi,

Ich bin begeistert !

Das Ergebnis sieht gut aus.

Vielen Dank.

Gruss Otto

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

docker - homematic

Dr. Boris Neubert

Hallo,

das ist schön.

Ich würde lediglich die Syntax auf limit:when=today verändern, um im Rhythmus zu bleiben.

Ich würde den Patch einspielen zusammen mit der aktualisierten deutschen Commandref. Bin derzeit nur eingeschränkt in der Lage, an FHEM zu entwickeln.

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

betateilchen

Man könnte auf gleiche Weise auch when=tomorrow einbauen...

$from = 86400 - Calendar_GetSecondsFromMidnight();
$to = $from + 86400;
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

#22
Zitat von: Dr. Boris Neubert am 04 Februar 2019, 18:50:01
Ich würde lediglich die Syntax auf limit:when=today verändern, um im Rhythmus zu bleiben.

Zitat von: betateilchen am 04 Februar 2019, 19:00:03
Man könnte auf gleiche Weise auch when=tomorrow einbauen...

Here we go...

--- aktualisierter patch im weiteren Verlauf des Threads ---

Auf zwei FHEM Installationen erfolgreich getestet.


get calName events limit:when=today
get calName events limit:when=tomorrow


Nur die commandref für today/tomorrow sollte noch jemand ergänzen und möglichst auch gleich übersetzen.

Edit: die commandref mit ihren 5 Mio HTML-tags ist echt gruslig. Aber ich habe zumindest den englischen Teil entsprechend ergänzt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Und als nächstes werde ich Rudi bitten, in der fhem.pl global eine Variable $daySeconds mit dem Wert 86400 zu definieren, weil man diesen Wert beim Rechnen mit Zeiten immer wieder braucht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Otto123

Neben der lobenswerten Weiterentwicklung des Moduls  ;D - habe ich jetzt richtig verstanden:
Damit ist Ottos ursprüngliches Problem auch behoben?
D.h. es ist ein Unterschied ob man bei der Abfrage to=0d oder to="die Sekunden bis Mitternacht" angibt?  ::)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

betateilchen

Zitat von: Otto123 am 04 Februar 2019, 22:58:58
D.h. es ist ein Unterschied ob man bei der Abfrage to=0d oder to="die Sekunden bis Mitternacht" angibt?  ::)

Natürlich ist das ein Unterschied. Der Filter bei limit:to=0d wird berechnet aus

jetzt + 0 * 86400

und da kommt eben kein späterer Zeitpunkt als "jetzt" raus.

Zeitangaben in der Form 0d 7h 5m 3s werden immer in Sekunden umgerechnet, die dann zum Zeipunkt "jetzt" aufaddiert werden.

d*86400 + h*3600 + m*60 + s
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Otto123

Danke Udo, Deine Erklärung ist völlig logisch und verständlich. Jetzt wo ich drüber nachdenke, frage ich mich warum ich mit try&error zu einer anderen Erkenntnis gekommen bin (ich habe nicht in den Code geschaut sondern einfach mit dem Filter gespielt)
Und ich habe immer Ganztagestermine abgefragt! Ich habe irgendwie gedacht: wenn ich Tage angebe dann denke ich in Tagen
jetzt=heute also from=0d, to=0d immer noch heute (von 00:00-24:00) ;D

das war ein Trugschluss: jetzt ist diese Sekunde!
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

betateilchen

Zitat von: betateilchen am 04 Februar 2019, 21:29:21
Und als nächstes werde ich Rudi bitten, in der fhem.pl global eine Variable $daySeconds mit dem Wert 86400 zu definieren, weil man diesen Wert beim Rechnen mit Zeiten immer wieder braucht.

Rudi hat die vorgeschlagenen Konstanten inzwischen schon in fhem.pl bereitgestellt.
Daraufhin habe ich meinen patch nochmal entsprechend überarbeitet und diese Konstanten verwendet.


Index: 57_Calendar.pm
===================================================================
--- 57_Calendar.pm      (revision 18497)
+++ 57_Calendar.pm      (working copy)
@@ -1995,6 +1995,18 @@
         for my $limit (@limits) {
           if($limit =~ /count=([1-9]+\d*)/) {
             $count= $1;
+          } elsif($limit =~ /when=(today|tomorrow)/i) {
+            my ($from,$to);
+            if (lc($1) eq 'today') {
+              $from  = Calendar_GetSecondsFromMidnight();
+              $to    = DAYSECONDS - $from;
+              $from *= -1;
+            } else {
+              $from  = DAYSECONDS - Calendar_GetSecondsFromMidnight();
+              $to    = $from + DAYSECONDS;
+            }
+            push @filters, { ref => \&filter_endafter, param => $t+$from };
+            push @filters, { ref => \&filter_startbefore, param => $t+$to };
           } elsif($limit =~ /from=([+-]?)(.+)/ ) {
             my $sign= $1 eq "-" ? -1 : 1;
             my ($error, $from)= Calendar_GetSecondsFromTimeSpec($2);
@@ -2227,6 +2239,12 @@
#

###################################
+sub Calendar_GetSecondsFromMidnight(){
+  my @time = localtime();
+  return (($time[2] * HOURSECONDS) + ($time[1] * MINUTESECONDS) + $time[0]);
+}
+
+###################################
sub Calendar_GetSecondsFromTimeSpec($) {

   my ($tspec) = @_;
@@ -3370,11 +3388,13 @@
     <tr><td><code>to=[+|-]&lt;timespec&gt;</code></td><td>shows only events that start before
       a timespan &lt;timespec&gt; from now; use a minus sign for events in the
       past; &lt;timespec&gt; is described below in the Attributes section</td></tr>
+    <tr><td><code>when=today|tomorrow</code></td><td>shows events for today or tomorrow</td></tr>
     </table><br>

     Examples:<br>
     <code>get MyCalendar events limit:count=10</code><br>
     <code>get MyCalendar events limit:from=-2d</code><br>
+    <code>get MyCalendar events limit:when=today</code><br>
     <code>get MyCalendar events limit:count=10,from=0,to=+10d</code><br>
     <br><br>
-----------------------
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: Dr. Boris Neubert am 04 Februar 2019, 18:50:01
Bin derzeit nur eingeschränkt in der Lage, an FHEM zu entwickeln.

Hallo Boris,

wenn es Dir hilft, kann ich meinen patch gerne vorab einchecken, damit die neue Funktion kurzfristig verfügbar wird.

-----------------------
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 07 Februar 2019, 23:20:10
wenn es Dir hilft, kann ich meinen patch gerne vorab einchecken, damit die neue Funktion kurzfristig verfügbar wird.

Danke Udo, gerne.



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