FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: ms_steini am 12 September 2018, 15:09:13

Titel: ical Uhrzeiten-Problem
Beitrag von: ms_steini am 12 September 2018, 15:09:13
Hallo zusammen,


ich lasse aus einer mysql Datenbank per PHP eine .ICS Datei mit meinem Dienstplan generieren sobald mein Chef eine Änderung für mich vornimmt.
Diese .ics Datei wird im Anschluß automatisch auf meinen Privaten Server verschoben, da ich von ausserhalb nicht an den Firmenrechner komme.
Soweit so gut.

Die einzelnen Blöcke der .ics Dateien sehen wie folgt aus:

BEGIN:VCALENDAR
VERSION:2.0
METHOD:PUBLISH
PRODID:Steini
BEGIN:VEVENT
CREATED:20180912T111201Z
LAST-MODIFIED:20180912T111201Z
DTSTAMP:20180911T111201Z
SUMMARY:Früh
DTSTART;VALUE=DATE:20180911T054500Z
DTEND;VALUE=DATE:20180911T124500Z
DESCRIPTION:Früh
TRANSP:TRANSPARENT
UID:0_Früh
END:VEVENT
BEGIN:VEVENT
CREATED:20180912T111201Z
LAST-MODIFIED:20180912T111201Z
DTSTAMP:20180912T111201Z
SUMMARY:Spät
DTSTART;VALUE=DATE:20180912T124500Z
DTEND;VALUE=DATE:20180912T200000Z
DESCRIPTION:Spät
TRANSP:TRANSPARENT
UID:1_Spät
END:VEVENT
BEGIN:VEVENT
CREATED:20180912T111201Z
LAST-MODIFIED:20180912T111201Z
DTSTAMP:20180915T111201Z
SUMMARY:A-Nacht
DTSTART;VALUE=DATE:20180915T180000Z
DTEND;VALUE=DATE:20180916T054500Z
DESCRIPTION:A-Nacht
TRANSP:TRANSPARENT
UID:2_Nacht
END:VEVENT
.
.
.
usw.
END:VCALENDAR


Wenn ich dann unter Fhem, "get events" eingebe erhalte ich so etwas:

156: VEVENT @5 [known]
    CREATED: 20180912T111201Z
    DESCRIPTION: Früh
    DTEND: 20180911T124500Z
    DTSTAMP: 20180911T111201Z
    DTSTART: 20180911T054500Z
    LAST-MODIFIED: 20180912T111201Z
    SUMMARY: Früh
    TRANSP: TRANSPARENT
    UID: 0_Früh
    >>> Events:
      0_Frh         end                     11.09.2018 07:45-11.09.2018 14:45 Früh   
    >>> Skipped events:
.
.
.
160: VEVENT @49 [known]
    CREATED: 20180912T111201Z
    DESCRIPTION: Nacht
    DTEND: 20180918T054500Z
    DTSTAMP: 20180917T111201Z
    DTSTART: 20180917T200000Z
    LAST-MODIFIED: 20180912T111201Z
    SUMMARY: Nacht
    TRANSP: TRANSPARENT
    UID: 4_Nacht
    >>> Events:
      4_Nacht    upcoming                     17.09.2018 22:00-18.09.2018 07:45 Nacht   
    >>> Skipped events:

Hier sieht man das die Uhrzeiten PLUS 2 STUNDEN ausgegeben werden.
Kann mir bitte jemand sagen was ich tun muss damit die 2 Stunden nicht addiert werden.

Weiterhin möchte ich, das die Rollos im Schlafzimmer erst um 13:30 Uhr hoch gehen wenn ich Nachtdienst hatte
nur leider ist das Event um 05:45 Uhr beendet wenn der Wert "DTEND:" auf 054500  also (05:45:00) steht.

Die Abfrage "Nachtdienst - Ja oder Nein" erfolgt über ein userReadings
N_schicht {ReadingsVal("Schichtdienst", "modeStart", "") =~ "_Nacht" ? "Ja":"Nein"},
welches dann natürlich "Nein" ausgibt.
Ich habe sonst keine weiteren Ideen wie ich das lösen könnte.
Über Anregungen, Vorschläge oder Lösungen würde ich mich sehr freuen.

Besten Dank und schonmal ein schöne Wochenende



Titel: Antw:ical Uhrzeiten-Problem
Beitrag von: Morgennebel am 12 September 2018, 15:19:13
Klingt nach einem Zeitzonen-Problem. Der eine Rechner in UTC, der andere in Sommerzeit?

Ciao, -MN
Titel: Antw:ical Uhrzeiten-Problem
Beitrag von: Otto123 am 12 September 2018, 15:22:04
ZitatHier sieht man das die Uhrzeiten PLUS 2 STUNDEN ausgegeben werden.
Hi,
ich würde sagen da fehlt die Zeitzonen Information und es wird UTC angenommen?

Ich habe mir hier  (https://heinz-otto.blogspot.com/2018/07/kalender-in-fhem-einbinden.html)mal etwas aufgeschrieben, vielleicht ist das für Dich verwendbar.

Ich frage die Termine zu einem bestimmten Zeitpunkt ab und setze dann damit etwas, kannst Du auch machen, sozusagen früh um 5 die Schicht abfragen und damit setzen das die  Rollos erst 13:30 hochgehen.

Gruß Otto
Titel: Antw:ical Uhrzeiten-Problem
Beitrag von: ms_steini am 12 September 2018, 15:34:36
Zitat von: Morgennebel am 12 September 2018, 15:19:13
Klingt nach einem Zeitzonen-Problem. Der eine Rechner in UTC, der andere in Sommerzeit?

Ciao, -MN

Der Hinweis war gut, ich habe sogar etwas gefunden wie man die Zeitzone direkt in der .ics Datei angeben kann.
z.B.
DTSTART;TZID=Europe/Berlin:20100922T073000
DTEND;TZID=Europe/Berlin:20100922T081500

@Otto123
Dein Hinweis hätte mich aber auch weitergebracht.


So, bleibt aber noch das Rollo im Schlafzimmer
mache ich ein DoIf auf das userReading N_schicht, steht das userReading ab 05:45 Uhr auf "NEIN" und das Rollo würde auf gehen.

Habt ihr dazu vieleicht auch noch so einen guten Hinweis oder Tipp ??

Vielen Dank nochmal


PS. hatte ich vergessen zu erwähnen. Ich möchte das nach Möglichkeit OHNE notify machen, NUR mit userReadings.....  und einem DoIf
Titel: Antw:ical Uhrzeiten-Problem
Beitrag von: Otto123 am 12 September 2018, 15:53:25
Dann  frag in deinem DOIF den Calendar um 5:00 Uhr ab und schreibe das Ergebnis in ein Reading des DOIF welches Du dann als Bedingung für das Rollo abfragst.

notify ist Schweinskram?  ;D ;D ;D

Gruß Otto
Titel: Antw:ical Uhrzeiten-Problem
Beitrag von: ms_steini am 12 September 2018, 16:58:16
Ja das geht schon, ich habe mir, (warum auch immer) in den Kopf gesetzt das direkt im Kalender mit userReadings zu machen...

N_schicht {ReadingsVal("Schichtdienst", "modeStart", "") =~ "_Nacht" ? "Ja":"Nein"},
S_schicht {ReadingsVal("Schichtdienst", "modeStart", "") =~ "_Spaet" ? "Ja":"Nein"},
F_schicht {ReadingsVal("Schichtdienst", "modeStart", "") =~ "_Frueh" ? "Ja":"Nein"}


aber das ist ja nur die halbe Miete, ist der Termin um z.B. 13 Uhr zu Ende, dann hat das reading ein "NEIN"

Ich fummel mal weiter, vieleicht finde ich ja noch den passenden Anstoss...

Trotzdem vielen lieben Dank
Titel: Antw:ical Uhrzeiten-Problem
Beitrag von: Otto123 am 12 September 2018, 17:19:30
UserReadings aktualisieren sich immer dann wenn etwas im Device "passiert"

Wenn Du mit Terminen die zum Zeitpunkt x liegen, etwas zum späteren Zeitpunkt y beeinflussen willst, musst Du zum Zeitpunkt x einen Merker setzen der zum späteren Zeitpunkt y noch vorhanden ist.

Du kannst ja mit dem UserReading etwas triggern was den Merker setzt.
Wie gesagt, da sich dein Schichtzustand nur einmal am Tag ändert, würde ich zu einem Zeitpunkt die Schicht abfragen und alles andere danach ausrichten.
Titel: Antw:ical Uhrzeiten-Problem
Beitrag von: Beta-User am 12 September 2018, 17:53:06
Evtl. ReadingsAge() aus das userreading nutzen?

Kurz, da mobil.
Titel: Antw:ical Uhrzeiten-Problem
Beitrag von: ms_steini am 12 September 2018, 19:53:26
ZitatDie Funktion ReadingsAge() gibt die Dauer in Sekunden seit der letzten Aktualisierung des Readings $reading der Definition $name zurück.

Mh, im Moment weiß ich damit noch nichts anzufangen, bin mir nicht sicher ob mir die Sekunden seit der letzten Aktualisierung hier weiterhelfen können.
Muß ich mal nachdenken... und ggf. auch mal etwas rumtesten.
Danke
Titel: Antw:ical Uhrzeiten-Problem
Beitrag von: Beta-User am 12 September 2018, 20:11:34
Na ja, zuerst solltest du prüfen, ob der Zeitstempel des Readings auch aktualisiert wird, wenn sich was anderes an dem Device ändert (z.B. wg. Spätschicht). Wenn nein, könnte es in etwa so gehen:

Zum Ausführungszeitpunkt für den Öffnen-Befehl vergleichst du, ob das Reading alt genug ist, also ReadingsAge() einen bestimmten Schwellwert überschritten hat. Soll das Ende der Nachtschicht also mind. 8 Stunden her sein, muß der Wert größer als 8*60*60 sein.

Ist eine einfache if-Abfrage. Wenn ja: Öffnen, wenn nein: später nochmal machen (temporäres at definieren, z.B.).

Viel Erfolg, Beta-User
Titel: Antw:ical Uhrzeiten-Problem
Beitrag von: ms_steini am 16 September 2018, 14:27:00
@Beta-User
das hört sich gut an, das werde ich so mal angehen.

Sorry, aber ich habe schon das nächste Problem.
Wenn z.b. Heute um 20 Uhr mein Nachtdienst beginnt, wie frage ich das denn ab, der Nachtdienst der Heute um 20 Uhr beginnt steht ja nur unter "upcomming" und würde frühestens
um 20 Uhr angezeigt.
Ich möchte aber im TabletUi eine tägliche Übersicht die anzeigt welchen Dienst ich aktuel an diesem Tag habe (für meine Frau und die Kinder).
Titel: Antw:ical Uhrzeiten-Problem
Beitrag von: Otto123 am 16 September 2018, 14:29:47
ZitatSorry, aber ich habe schon das nächste Problem.
Hast Du mal meinen Link durchgelesen?
Ich frage am Vortag den Termin für den darauffolgende Tag ab. Es ist kein Problem!
Titel: Antw:ical Uhrzeiten-Problem
Beitrag von: ms_steini am 16 September 2018, 14:48:23
oh sorry, den Link habe ich wohl übersehen...
Das ist ja super beschrieben, ich denke damit sollte ich klar kommen.  "tolle Anleitung" Daumen hoch!
Besten Dank
Titel: Antw:ical Uhrzeiten-Problem
Beitrag von: ms_steini am 16 September 2018, 15:07:05
mh, ich habe einfach mal so wie beschrieben ein Dummy erstellt:
define Tonne dummy
und dann ein AT:
define a_Tonne at *14:45:00 set Tonne {(my $evt=fhem('get Schichtplan events format:custom="$S" limit:from=1d,to=1d');;;;$evt?$evt:"0")}
und eigendlich sollte doch jetzt der Termin für morgen im Dummy stehen, es steht aber leider nur die 0 drin.

Im Kalender Schichtplan ist für morgen (start) 18:00 Uhr ein Termin drin... was mache ich falsch ?
 
Titel: Antw:ical Uhrzeiten-Problem
Beitrag von: Otto123 am 16 September 2018, 16:07:02
Du kannst die Abfrage direkt in der Kommandozeile testen und optimieren:
get Schichtplan events format:custom="$S" limit:from=1d,to=8d
Titel: Antw:ical Uhrzeiten-Problem
Beitrag von: ms_steini am 16 September 2018, 16:33:33
ja, habe ein wenig rumgetestet,
mit limit:from=0d,to=1d erhalte ich den Termin von heute und
mit limit:from=1d,to=2d erhalte ich den Termin von Morgen

also alles gut, hoffe ich zumindest

Besten Dank
Titel: Antw:ical Uhrzeiten-Problem
Beitrag von: Otto123 am 16 September 2018, 16:42:51
Meine Abfrage mit der Tonne geht auf Termine die für den ganzen Tag eingetragen sind - das wird der Unterschied sein.  ;)
Titel: Antw:ical Uhrzeiten-Problem
Beitrag von: ms_steini am 16 September 2018, 16:56:40
das mag sein, ich bin jedenfalls begeistert !

ich habe jetzt folgendes AT:
*05:45:01 setreading Schichtplan Schicht_Heute {(my $evt=fhem('get Schichtplan events format:custom="$S" limit:from=0d,to=1d');;$evt?$evt:"")};
setreading Schichtplan Schicht_Morgen {(my $evt=fhem('get Schichtplan events format:custom="$S" limit:from=1d,to=2d');;$evt?$evt:"")}


Ich habs noch nicht getestet, aber kann man nicht die Abfrage
{(my $evt=fhem('get Schichtplan events format:custom="$S" limit:from=0d,to=1d');;$evt?$evt:"")}
auch direkt im Kalender als userReadings definieren bzw. eintragen ?

Dann könnte ich mir auch das AT sparen.
Titel: Antw:ical Uhrzeiten-Problem
Beitrag von: Otto123 am 16 September 2018, 17:16:24
Geht schon - aber: Da hast Du wieder das Problem, wann steht was in dem Reading.

Ich bin mir nicht sicher wie gut man den Zeitpunkt des Triggerns eines userReadings beherrschen kann.
Titel: Antw:ical Uhrzeiten-Problem
Beitrag von: ms_steini am 18 September 2018, 14:22:56
so, ich habe das jetzt als userReading direkt im Schichtplan gemacht:
attr Schichtplan userReadings Schicht_Heute {my $evt=fhem('get Schichtplan events format:custom="$S" limit:from=0d,to=1d');;;;$evt?$evt:"-"},\
Schicht_Morgen {my $evt=fhem('get Schichtplan events format:custom="$S" limit:from=1d,to=2d');;;;$evt?$evt:"-"},\
Schicht_Gestern {my $evt=fhem('get Schichtplan events format:custom="$S" limit:from=-1d,to=0d');;;;$evt?$evt:"-"}


Da der Interval im Schichtplan auf 3600 (also stündlich) steht und ich "Heute" das Reading "Schicht_Gestern" abfrage und gestern Nachtdienst war gehen die Rollos Heute erst um 13:30 auf.

Für mich ist das eine gute Lösung. Mir fällt jetzt auch nichts mehr ein was dagegen sprechen könnte.
Anderfalls gebt mir bitte Bescheid.

Danke