FHEM - Hausautomations-Systeme > Kalendermodule

57_Calendar - Ausgabeverzerrt

(1/3) > >>

Sailor:
Ein herzerfrischendesd Moin vom achtern Diek vorweg

Ich habe ein kleines Problem bei dem Ihr mir sicher helfen könnt.

Ich habe eine Schleife gebaut, die mir die Kalender-Einträge abfragt.


--- Code: ---my $CalItem = fhem("get ". $CurrentCalendar . " events timeFormat:\"%H:%M\" format:text limit:from=" . sprintf("%+d", $i) . "d,to=" . sprintf("%+d", $i+1) . "d format:custom=\"\$T1 \$D \$S\"");
--- Ende Code ---

Wie man sehen kann wird mit "$i" jeweils von heute bis in i-Tagen alle Einträge abgefragt.
Dummerweise musste ich feststellen, das die Einträge für übermorgen auf morgen verschoben werden, sobald sich die Uhrzeit heute auf nach dem Ablauf des Termins in 2 Tagen verschiebt.
Also um 00:05Uhr Morgen istimmt noch alles aber ein paar Stunden spaeter verschieben sich die Termine auf den Vortag zum Zeitpunkt ihrer Anfangsuhrzeit.

Soll heißen, dass meine Abfrage oben nicht die nächsten i Tage abfragt sondern die nächsten i*24h.

Frage: Wie kann ich eine Kalender-Abfrage an einem bestimmten Datum (in i-Tagen) abfragen ohne, dass es zu diesem Zeitverschiebungen kommt?

Gruß
    Sailor

Dr. Boris Neubert:
Hallo Sailor,

from/to ist so spezifiziert und dokumentiert, wie Du es erlebt hast.

Es gibt den when-Filter, der aber nur entweder today oder tomorrow kennt.

Wenn Du Dir mal den Code in 57_Calendar.pm ab Zeile 2080 anschaust, siehst Du, wie daraus Zeitpunkte für from/to errechnet werden:



--- Code: ---          } elsif($limit =~ /when=(today|tomorrow)/i) {
            my ($from,$to);
            if (lc($1) eq 'today') {
              $from  = Calendar_GetSecondsFromMidnight();
              $to    = DAYSECONDS - $from - 1;
              $from *= -1;
            } else {
              $from  = DAYSECONDS - Calendar_GetSecondsFromMidnight();
              $to    = $from + DAYSECONDS - 1;
            }
--- Ende Code ---

Es ist vermutlich auch gar nicht schwer, den when-Filter zu erweitern, dass er eine Syntax in der Form 2..3 oder -5..2 oder 0 (= today) oder 1 (= tomorrow) akzeptieren würde.

Ich bin offen für Patches, damit ich mich nicht da ransetzen muss  ;)

Viele Grüße
Boris

Sailor:
Hallo Boris

hast Recht gehabt. Ist gar nicht so schwer gewesen:


--- Code: --- } elsif($limit =~ /when=(today|tomorrow|jump.*)/i) {
my ($from,$to);
if (lc($1) eq 'today') {
$from  = Calendar_GetSecondsFromMidnight();
$to    = DAYSECONDS - $from - 1;
$from *= -1;
}
elsif (lc($1) eq 'tomorrow') {
$from  = DAYSECONDS - Calendar_GetSecondsFromMidnight();
$to    = $from + DAYSECONDS - 1;
}
elsif ($1=~ m/jump/i) {
#Extract everything behind "jump "
my $DeltaDays = substr($limit,9);

#Check whether the DeltaDays are numerical
if ($DeltaDays == int($DeltaDays)){

# If the day to be jumped from today is 0 and therefore today
if ($DeltaDays == 0){
$from  = Calendar_GetSecondsFromMidnight();
$to    = DAYSECONDS - $from - 1;
$from *= -1;
}
# If the day to be jumped from today is not 0
else {
$from  = (DAYSECONDS * $DeltaDays) - Calendar_GetSecondsFromMidnight();
$to    = $from + DAYSECONDS - 1;
}
}
else{
# Do nothing or write a log entry at least
}
}
else {
# Do nothing or write a log entry at least
}
### For debugging purpose only
Log3 $name, 5, $name. " : Calendar_events - from                    : " . $from;
Log3 $name, 5, $name. " : Calendar_events - to                      : " . $to;

--- Ende Code ---

Sowie die entsprechend Pod Zeilen


--- Code: ---EN (Alt Zeile 3593 / Neu 3624)  <tr><td><code>when=today|tomorrow|jump &lt;i&gt;</code></td><td>shows events for today, tomorrow or in &lt;i&gt; days</td></tr> 
DE (Alt Zeile 4325 / Neu 4356)  <tr><td><code>when=today|tomorrow|jump &lt;i&gt;</code></td><td>zeigt anstehende Termin f&uuml;r heute, morgen oder in &lt;i&gt; Tagen an</td></tr>   

--- Ende Code ---

Einziger Schoenheitsfehler: Wegen deiner Programmierung irgendwo weiter oben muss die Zahl direkt nach dem Befehl jump eingegeben werden, sonst gibt es eine Fehlermeldung.

Also:

--- Code: ---get myCalendar events limit:when=jump7
--- Ende Code ---
zeigt die Events in 7 Tagen an

Magst du das einchecken?

Gruß
    Sailor

PS: Nein, ich habe keine Ahnung wie man DIFF-Files erzeugt  :(

Sailor:
PS: Wie kann man eigentlich verhindern, dass trotz Verbose=1 die folgende Meldung im Log erscheint:


--- Code: ---2021.09.17 11:50:25.627 3: get UI_Calendar_MD events timeFormat:"%H:%M" format:text limit:when=jump28 format:custom="$T1 $D $S" : 19:00 1h Termin
2021.09.17 11:50:25.633 3: get UI_Calendar_DD events timeFormat:"%H:%M" format:text limit:when=jump28 format:custom="$T1 $D $S" : 19:00 1h Termin
2021.09.17 11:50:25.636 3: get UI_Calendar_LD events timeFormat:"%H:%M" format:text limit:when=jump28 format:custom="$T1 $D $S" : 15:30 2:30 Termin
2021.09.17 11:50:25.638 3: get UI_Calendar_BD events timeFormat:"%H:%M" format:text limit:when=jump28 format:custom="$T1 $D $S" : 16:00 1h Termin

--- Ende Code ---

Das muss doch irgendwie zu verhindern sein.

Gruß
    Sailor

Dr. Boris Neubert:

--- Zitat von: Sailor am 17 September 2021, 11:52:02 ---PS: Wie kann man eigentlich verhindern, dass trotz Verbose=1 die folgende Meldung im Log erscheint:

--- Ende Zitat ---

Ich meine, dass das aus dem fhem.pl kommt und über global verbose abgeregelt werden muss.

Danke auch für Deine Anpassung. Ich wollte diese gerne noch etwas generalisieren, bin aber aus Zeitgründen noch nicht dazugekommen.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln