Autor Thema: [gelöst] Wie die Tage jetzt ohne Komma ?  (Gelesen 1251 mal)

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 1449
Antw:[gelöst] Wie die Tage jetzt ohne Komma ?
« Antwort #30 am: 30 August 2019, 12:09:29 »
Zitat
Mal ganz nebenbei: Der Calendar erzeugt selbst Events, also Du kannst einen Termin eintragen und mit dem entsprechenden notify wird exakt zu diesem Termin (oder einen daraus erzeugten Alarm) getriggert.

Nochmal darüber geschlafen ist mir heute klar das mein Vorgehen umständlich ist und ja auch ein zusätzliches (das AT) benötigt. Mit einem kurzen notify auf das Event (aber doch mit kurzer Verzögerung ? bis der Kalender aktualisiert ist) muss man scheinbar leben und gut ist.

Gruß

Thomas

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 13268
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:[gelöst] Wie die Tage jetzt ohne Komma ?
« Antwort #31 am: 10 September 2019, 19:58:22 »
Hallo Thomas,

in meinem Kopf war da noch so eine Idee, jetzt habe ich sie mal ausformuliert:
Zwei Zeilen für den AbfallKalender:
  • onCreateEvent erzeugt einen Alarm vorm eigentlichen Termin. Meine Abfalltermine sind Ganztages, im Beispiel erzeugt er einen Event zusätzlichen Alarmevent 12:00 Uhr am Vortag
  • zwei (oder mehr) userReadings die bei jedem trigger des Kalenders (also auch beim Alarm) aktualisiert werden
    - nextWasteDays: Anzahl Tage bis zur Leerung
    - Tonne: Type der nächsten Abholung
Edit: Formel korrigiert, siehe diesen Beitrag.
attr AbfallKalender onCreateEvent { $e->{alarm}= $e->{start}-43200 }
attr AbfallKalender userReadings nextWasteDays {int((fhem('get '.$name.' events format:custom="$t1" limit:from=0,count=1') + 86399 - time)/86400)}, \
     Tonne {fhem('get '.$name.' events format:custom="$S" limit:from=0,count=1')}
Kein Dummy, kein at, kein notify zusätzlich :)

Hoffentlich habe ich nichts übersehen, hab es jetzt noch nicht über Tage getestet.

Gruß Otto
« Letzte Änderung: 12 September 2019, 13:45:33 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 1449
Antw:[gelöst] Wie die Tage jetzt ohne Komma ?
« Antwort #32 am: 10 September 2019, 21:58:11 »
Zitat
Hoffentlich habe ich nichts übersehen, hab es jetzt noch nicht über Tage getestet.

Völlig Schnurz ob das onCreateEvent wirklich funzt (muss ja, wenn du es schon schreibst, werde es testen),  du beantwortest mir mit dem zusätzlichen Alarm eine Frage die mir seit Tagen (unbewusst) durch den Kopf geht. DANKE.

Kein zusätzliches Device ist voll und ganz erfüllt, ein userReadings stört mich grundsätzlich auch nicht, die Aussage eines  :P Users hier aus dem Forum generell ohne userReadings auszukommen beschäftigt mich jetzt erst recht weiterhin  ???
Oder bleibt in dem Falle dann wirklich nur notify und die Funktion in eine MyUtils.pm auszulagern ?

Gruß

Thomas

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 13268
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:[gelöst] Wie die Tage jetzt ohne Komma ?
« Antwort #33 am: 10 September 2019, 22:03:47 »
du beantwortest mir mit dem zusätzlichen Alarm eine Frage die mir seit Tagen (unbewusst) durch den Kopf geht. DANKE.
Hier meine Notiz und Beispiel dazu.
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 13268
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:[gelöst] Wie die Tage jetzt ohne Komma ?
« Antwort #34 am: 11 September 2019, 14:49:09 »
Ich muss meine Formel noch mal revidieren. Die Idee erst int() zu machen und dann einen ganzen Tag dazu zu zählen ist nicht richtig. Dabei passiert folgendes:
Termin Datum nochTage
13       11       2
13       12       1
13       13       1 <- falsch hier müsste 0 kommen!

das liegt daran, dass int(+0.irgendwas) und int(-0.irgendwas) jeweils null ergibt! Mann muss den Tag also vor int dazu zählen. Damit das Ganze bei Ganztages Terminen auch schon 00:00:00 und nicht erst 00:00:01 funktioniert würde ich 86399 (sec) dazu addieren.
Also Tage bis zum nächsten Termin:
{int((fhem('get '.$name.' events format:custom="$t1" limit:from=0,count=1',1) + 86399 - time) / 86400)}
Wichtig! zwischen dem minus und time muss ein Leerzeichen, wenn man -time schreibt bekommt man diesen Fehler:
Zitat
2019.09.12 13:37:09 1: PERL WARNING: Ambiguous use of -time resolved as -&time() at (eval 1919) line 1.
2019.09.12 13:37:09 3: eval: {int((fhem('get AbfallKalender events format:custom="$t1" limit:from=0,count=1')+86399-time)/86400)}
Um das Logging des get Befehls zu unterdrücken habe ich noch die ,1 eingefügt -> fhem('get Befehl',1)

Gruß Otto
« Letzte Änderung: 12 September 2019, 13:52:19 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 1449
Antw:[gelöst] Wie die Tage jetzt ohne Komma ?
« Antwort #35 am: 11 September 2019, 15:25:28 »
Zitat
Termin Datum nochTage
13       11       1
13       12       1
13       13       1 <- falsch hier müsste 0 kommen!

Bei mir war heute Abholungstag und vor drei Tagen stand bei mir eine 1 keine 2. Hab mich aber, im Gegensatz zu dir,  nicht weiter mit beschäftigt.

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 1449
Antw:[gelöst] Wie die Tage jetzt ohne Komma ?
« Antwort #36 am: 11 September 2019, 23:10:30 »
Zitat
Meine Abfalltermine sind Ganztages ...

Was heißt das genau, in $T1 steht bei dir 00:00 und in $T2 auch, $D also 24h ?
Hast dir dazu manuell den Kalender angepasst oder bekommst den so vom VerEntsorger ?
« Letzte Änderung: 11 September 2019, 23:38:21 von TomLee »

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 13268
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:[gelöst] Wie die Tage jetzt ohne Komma ?
« Antwort #37 am: 11 September 2019, 23:35:27 »
Was heißt das genau, in $T1 steht bei dir 00:00 und in $T2 auch, $D also 24h ?
So ist es.
Der Kalender meines Versorgers ist schön zum anschauen, die Termine darin sind aus meiner Sicht unbrauchbar.
3 Tonnen sind 3 Serientermine und 3-5 Terminverschiebungen im Jahr. Das dauert wenige Minuten am Jahresende. Und kostet keine grauen Haare wenn beim Versorger die Applikation oder der Praktikant für Webdesign wechselt. Das man nicht einfach die Uhr stellt sondern auch die richtige Zeitzone braucht haben ja auch nicht wirklich alle verstanden.
 ;)
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 1449
Antw:[gelöst] Wie die Tage jetzt ohne Komma ?
« Antwort #38 am: 15 September 2019, 15:08:27 »
Das mit der Tonne hab ich mit einer Funktion in einer myUtils.pm umgesetzt, mit einem anderen Kalender spiel ich aber mit deinem letzten userReadings-Beispiel und da fällt auf das es im Log genauso viele get-Abfragen wie Events beim update gibt, das ja normal bei einem userReadings.
Gabs deswegen den Vorschlag das Logging des get Befehls zu unterdrücken (das mans nicht sieht ;D) oder nimmst du mit event-on-change-reading oder sonstwie noch Einfluss darauf das der get Befehl nur einmal ausgeführt wird. Es gibt insgesamt 7 Events bei einem update.

Gruß

Thomas

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 13268
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:[gelöst] Wie die Tage jetzt ohne Komma ?
« Antwort #39 am: 15 September 2019, 20:37:18 »
Hallo Thomas,

event-on-change-reading habe ich im Kalender nicht gesetzt. Wenn es einmal funktioniert, unterdrücke ich dann immer das logging der get Befehle. Das ist übrigens nicht Calendar Device spezifisch.

Du kannst beim userReadings ja auch noch einen trigger setzen.

Gruß Otto
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266