mehrtägiger Ganztagestermin als z.B. now_text in ABFALL Modul anzeigen

Begonnen von beatmastaT, 04 Juli 2018, 11:46:07

Vorheriges Thema - Nächstes Thema

beatmastaT

Hallo,

ich möchte einen Urlaubsmodus automatisch durch einen Kalendereintrag schalten.
Ich bekomme es einfach nicht hin. Das schalten an sich funktioniert... aber nicht auf einen "Trigger" zu einem passenden Kalendereintrag bzw. der Trigger wird nicht ausgelöst, da das Modul ABFALL es nicht bereit stellt.
Das Problem ist:
Einen einzelnen Eintrag (Tagesereignis) stellt das Modul ABFALL als now_text (aktuell anstehendes Ereignis an diesem Tag) dar. Ist der Eintrag im Kalender aber über mehrere Tage wird dieses Ereignis nicht mehr angezeigt, wenn der Start des Termins in der Vergangenheit liegt. Dann exestiert das Reading now_text nicht.
Das Ergeinis/Termin ist doch aber noch aktuell. Verstehe ich das falsch?
Ich verwende dazu einen Googlekalender.


Diesen Eitrag bekomme aich aus meinem Kalender mit "get Kalender_XYZ full all":
c8s3aopn6lh34b9j74s3ib9k6lj30bb268rjab9kckoj6cb1cli36d9o6ggooglecom     start                     25.06.2018 00:00-07.07.2018 00:00 Urlaub

Erkennt das ABFALL Modul den Zeitraum nicht? Fehlt dazu das Ende?

Sorry für die wahrscheinlich nicht fachgerechte Ausdrucksweise. Ich hoffe es ist verständlich ausgedrückt.
Ich möchte ungern den Weg über eine "umfangreiches Notify" und die 99_myUtils.pm gehen.

Vielleicht kann mir ja jemand helfen???




Otto123

Hi,

ich finde ja das hat gar nichts mit dem Abfallmodul zu tun. Das ist doch einfach nur das Kalendermodul und fertig?
Abfall ist Abfall und Urlaub ist kein Abfall - sagt doch irgendwie der Name schon.

Ich habe gerade deinen Doppelpost im AbfallKalender Thread gelesen. Vielleicht kannst Du den dort besser löschen.
Du musst einfach mal nach Beispielen für das Calendar Modul suchen, definiert hast Du das ja schon.

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

beatmastaT

Hallo Otto,

den doppelten Post habe ich gelöscht.

So wie ich das verstanden habe:

1. Calendar Modul ruft ical Kalender ab --> bei mir Kalender_TundS

2. ABFALL Modul bezieht sich auf Kalender_TundS --> bei mir Urlaub_Kalender_TundS

ABFALL Modul schlüsselt doch den jeweiligen Kalender auf besser gesagt erzeugt die Readings
Somit bekomme ich bei einem Ganztagesereignis an dem Tag (aber nur bei einem eingetragenen Tag im Kalender) das Reading (now_text Urlaub) aus dem verknüpften Kalender im ABFALL Modul.

mit: stateFormat now_text wird es in STATE übergeben

Das Notify dazu sieht so aus:
.*Urlaub_Kalender_.* {
   
   if(Value("Urlaub_Kalender_TundS") eq "Urlaub" ) {
      fhem ("set Rollo_SZ_morgens_automatisch_auf inactive")
   } else {
      fhem ("set Rollo_SZ_morgens_automatisch_auf active") 
      }
      }

Das klappt soweit auch. Das Problem ist nur, dass das nur bei einem Tagesereignis funktioniert das für einen Tag im Kalender eingetragen ist.
Ist das Ereignis (Urlaub) für mehrere Tage im Kalender eingetragen gib es das Reading now_text nicht. Obwohl das Ereignis an diesem Tag doch gültig ist/sein sollte.

Auch wenn das Modul Abfall heißt, ist das doch eine genauso passende Anwendung. Klar wird eine Mülltonne an einem bestimmten Tag abgeholt und somit nur der Eintrag an diesem Tag eingestellt.
Ich habe mir gedacht vielleicht irgendeine Einstellung übersehen zu haben. Vielleicht kann der Entwickler das auch implementieren?

Ich finde diesen Weg (für mich als nicht Programierer ;-) ) sehr einfach, verständlicher und es würde sich somit einfach auf mehrere Kalender ausweiten lassen.

2x Kalender definieren (Calendar & ABFALL) & Notify erweitern:
.*Urlaub_Kalender_.* {
   
   if(Value("Urlaub_Kalender_TundS") eq "Urlaub" || Value("Urlaub_Kalender_Thomas") eq "Urlaub" ) {
      fhem ("set Rollo_SZ_morgens_automatisch_auf inactive")
   } else {
      fhem ("set Rollo_SZ_morgens_automatisch_auf active") 
      }
      }

fertig.

Bei den anderen Varianten muss man die 99_myUtils.pm an mehreren Stellen erweitern, alles muss genau passen, mehrere Notifys für einen Kalender etc.
Das finde ich etwas umständlich. Wenn es nicht anders geht, muss ich mich wohl daran wagen.
Nachdem ich nicht sooo häufig etwas programmiere (bzw. zusammen suche) kommen schnell Fehler auf und man vergisst das meiste wieder.
Deshalb hatte ich mir gedacht den einfachen Weg zu gehen.

Otto123

Hallo,

irgendwie erbarmt sich keiner und hat noch eine einfache Idee. Ich habe mal das Beispiel von betateilchen angeschaut und umgesetzt, es ist wirklich einfach und gut beschrieben! :)
Ich wollte es selbst lernen.  :D

Es gibt ja pro Eintrag im Kalender einfach zwei Events, beim Start und beim Ende vom Termin. Wenn Du Hemmungen vor der 99_myUtils hast, kannst Du auch erstmal nur ein notify machen. Wenn Du z.B. einen Dummy Urlaub hast und dein Eintrag im Kalender lautet Urlaub, wird hiermit der Dummy analog zum Kalender auf on bzw. off gesetzt.
Ich habe das mal zusammengestrichen und getestet.
Zusätzlich zu dem Beispiel im Link wird nur der "$actor" "Urlaub" gesetzt, alle anderen Termine bleiben unberücksichtigt.

TestKalender müsstest 3 x gegen Kalender_TundS ersetzen, damit es für Dich passt, wenn ich dein Konstrukt richtig verstanden habe.
Für die Raw Def ;)
defmod n_TestKalender notify TestKalender:changed:.* {my $cmd ='';;\
   $cmd = 'on'  if ($EVTPART2 eq 'start');;\
   $cmd = 'off' if ($EVTPART2 eq 'end');;\
   my $actor = fhem('get TestKalender events format:custom="$S" filter:uid=="'.$EVTPART1.'" limit:count=1',1);;\
   fhem("set $actor $cmd",1) if ($actor eq 'Urlaub');;\
}


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