57_Calendar - Ausgabeverzerrt

Begonnen von Sailor, 08 September 2021, 10:34:42

Vorheriges Thema - Nächstes Thema

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.

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\"");

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
******************************
Man wird immer besser...

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:


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


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

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

Sailor

Hallo Boris

hast Recht gehabt. Ist gar nicht so schwer gewesen:


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


Sowie die entsprechend Pod Zeilen


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>   


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

Also:
get myCalendar events limit:when=jump7
zeigt die Events in 7 Tagen an

Magst du das einchecken?

Gruß
    Sailor

PS: Nein, ich habe keine Ahnung wie man DIFF-Files erzeugt  :(
******************************
Man wird immer besser...

Sailor

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


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


Das muss doch irgendwie zu verhindern sein.

Gruß
    Sailor
******************************
Man wird immer besser...

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:

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.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Sailor

Zitat von: Dr. Boris Neubert am 17 September 2021, 12:17:15
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.

Hallo Boris

nach Eingabe der richtigen Suchparameter habe ich es im Forum gefunden.
Das Rätsels Lösung ist ein ",1"

fhem("get myDevice Parameter", 1);

Gruss
    Sailor
******************************
Man wird immer besser...

Dr. Boris Neubert

Hier meine Version mit der Bitte um Test.


get C events limit:when=3
get C events limit:when=2..4
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Dr. Boris Neubert

positives Feedback auf Seitenkanal erhalten => eingecheckt, ab morgen früh wird die Ergänzung per Update verteilt
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Sailor

Moin Boris

Habe das Update eingespielt und folgendes nach dem "shutdown restart" im Log erhalten:

2021.09.27 15:53:25.534 1: PERL WARNING: Use of uninitialized value $4 in string ne at .//FHEM/57_Calendar.pm line 2091.

Das hatte ich während des Testlaufs nicht...

Gruß
    Sailor
******************************
Man wird immer besser...

Dr. Boris Neubert

Hi,

Zitat von: Sailor am 27 September 2021, 16:03:19
2021.09.27 15:53:25.534 1: PERL WARNING: Use of uninitialized value $4 in string ne at .//FHEM/57_Calendar.pm line 2091.

das passiert, wenn statt when=2..4 nur when=2 u.ä. eingegeben wird. Kannst Du bitte mal die Zeile 2091 so ändern:

              if(defined($4) and ($4 ne '')) {


Dann sollte die Warnung weg sein.

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

Sailor

Hallo Boris

Zitat von: Dr. Boris Neubert am 27 September 2021, 16:45:52
Kannst Du bitte mal die Zeile 2091 so ändern:
Dann sollte die Warnung weg sein.

Habe ich gemacht und es taucht nicht mehr auf.
Funktion ist nach wie vor gegeben.

Danke

Gruß
    Sailor
******************************
Man wird immer besser...

Dr. Boris Neubert

Zitat von: Sailor am 28 September 2021, 13:21:28
Habe ich gemacht und es taucht nicht mehr auf.
Funktion ist nach wie vor gegeben.

Danke für den Test. Eingecheckt ist's.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

betateilchen

Zitat von: Sailor am 09 September 2021, 17:49:04
#Check whether the DeltaDays are numerical
if ($DeltaDays == int($DeltaDays)){

Zitat von: Sailor am 09 September 2021, 17:49:04
Einziger Schoenheitsfehler: Wegen deiner Programmierung irgendwo weiter oben muss die Zahl direkt nach dem Befehl jump eingegeben werden, sonst gibt es eine Fehlermeldung.

Zitat von: Sailor am 09 September 2021, 17:49:04
PS: Nein, ich habe keine Ahnung wie man DIFF-Files erzeugt  :(

Komm doch mal wieder zum Kaffee rüber, dann gebe ich Dir ein paar Tipps :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Sailor

Zitat von: betateilchen am 28 September 2021, 21:47:21
Komm doch mal wieder zum Kaffee rüber, dann gebe ich Dir ein paar Tipps :)

:D

Gruss
    Sailor
******************************
Man wird immer besser...