Hauptmenü

ical Uhrzeiten-Problem

Begonnen von ms_steini, 12 September 2018, 15:09:13

Vorheriges Thema - Nächstes Thema

ms_steini

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




Morgennebel

Klingt nach einem Zeitzonen-Problem. Der eine Rechner in UTC, der andere in Sommerzeit?

Ciao, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

Otto123

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

ms_steini

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

Otto123

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

ms_steini

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

Otto123

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

Beta-User

Evtl. ReadingsAge() aus das userreading nutzen?

Kurz, da mobil.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

ms_steini

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

Beta-User

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
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

ms_steini

@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).

Otto123

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

ms_steini

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

ms_steini

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 ?
 

Otto123

Du kannst die Abfrage direkt in der Kommandozeile testen und optimieren:
get Schichtplan events format:custom="$S" limit:from=1d,to=8d
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