Aktoren per Google Kalender schalten

Begonnen von edition, 12 Juni 2016, 18:29:31

Vorheriges Thema - Nächstes Thema

edition

Hallo zusammen

Ich tüftle schon den ganzen Nachmittag daran, einen Aktor in fhem über einen Google Kalender zu schalten. Das soll folgendermaßen erfolgen:
Wenn im Google Kalender am Montag, den 01.01.20xx um 12:00 Uhr der Eintrag Licht ein steht, soll auch am Montag, den 01.01.20xx um 12:00 Uhr das Licht eingeschaltet werden.
Dazu habe ich einen Kalender namens Fhem angelegt und öffentlich gemacht. Das Kalendermodul ist definiert und mit dem Kalender verbunden. CALVIEW ist auch definiert und ich kann die Daten aus dem Kalender sehen.
Was ich nicht hinbekomme, ist ein Notify zu definieren, welches das Licht gemäß Kalendereintrag schaltet. Ich muß als Bedingung ja Datum und Uhrzeit verarbeiten. Da komme ich jetzt nicht weiter.
Hat jemand eine Idee, oder einen Link zu einem Beitrag, in dem das umgesetzt wurde? Ich habe bisher nichts verwertbares gefunden.

Gruß
edition

betateilchen

Schau in die commandref doku zum Calendar Modul

help calendar

da stehen sogar funktionierende Beispiele drin.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

edition

Du meinst diesen Teil hier?
Schalte die Aktoren an und aus

    Stell Dir einen Kalender vor, dessen Zusammenfassungen (Betreff, Titel) die Namen von Devices in Deiner fhem-Installation sind. Du willst nun die entsprechenden Devices an- und ausschalten, wenn das Kalender-Ereignis beginnt bzw. endet.

    define SwitchActorOn notify MyCalendar:start:.* {}
    Dann auf DEF klicken und im DEF-Editor folgendes zwischen die beiden geschweiften Klammern {} eingeben: my $reading="$EVTPART0"; my $uid= "$EVTPART1"; my $actor= fhem("get MyCalendar summary $uid"); if(defined $actor) { fhem("set $actor on") }

    define SwitchActorOff notify MyCalendar:end:.* {}
    Dann auf DEF klicken und im DEF-Editor folgendes zwischen die beiden geschweiften Klammern {} eingeben: my $reading="$EVTPART0"; my $uid= "$EVTPART1"; my $actor= fhem("get MyCalendar summary $uid"); if(defined $actor) { fhem("set $actor off") }

Das wüde Bedeuten, das das Licht so lange eingeschaltet bleibt, wie der Termin im Kalender dauert?

Damit werde ich es versuchen.

Danke
edition

edition

Super! Funktioniert! Danke für den Tipp!

Die Methode wirft aber ein kleines Problem auf.
Ich will über den Kalender meine Zentralheizung ein und aus schalten. Ich arbeite in drei Schichten, da soll die Heizung natürlich in den jeweiligen Wochen dann eingeschaltet sein, wenn ich zu hause bin. Da kann ich das benutzen.
Für den Rolladen im Schlafzimmer geht das wohl nicht. Der soll nämlich, wie alle anderen auch, mit dem Sonnenuntergang zu fahren. In der Früh, bzw. in der Spätschicht Woche soll er, wie alle anderen auch, zu einer bestimmten Zeit auf fahren. In der Nachtschicht Woche soll er aber nicht mit den anderen zusammen auf fahren, sondern erst um 15:00 Uhr. Wenn ich die Lösung hier anwende, würde der Rolladen ja nach Ablauf des Termins wieder zu fahren.
Da brauche ich eine andere Lösung.

Gruß
edition

betateilchen

Zitat von: edition am 12 Juni 2016, 20:50:42
Da brauche ich eine andere Lösung.

Ja. Und wenn Du eine Zeitlang mit dem Kalender-Modul "gespielt" und verstanden hast, wie das mit den events in fhem tatsächlich funktioniert, dann wirst Du auch dafür eine Lösung finden. Übung macht den Meister.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

edition

Hallo

Ich habe ein wenig herumgetestet und für alle Anwendungen eine Lösung gefunden. Die "Aktor-Schat_Lösung" funktionierte ja schon. Um Heizkörperthermostaten zu "pushen" habe ich auch eine funktionierende Lösung (erforderte einen weiteren Kalender) und für das Hochfahren des Rolladens habe ich einen dritten Kalender angelegt und nur das Notify für den Startzeitpunkt definiert. Alles funktioniert, solange ich einen einzelnen Termin einstelle. Mache ich daraus einen Serientermin (z.b. Wiederholung alle 3 Wochen Mo-Fr) wird nicht mehr geschaltet. in Calview werden die Termine richtig angezeigt und das Notify zeigt auch den Schaltpunkt an. Das Licht, oder der Rolladen und auch die Thermostate reagieren aber nicht.
Was ist denn bei einem Serientermin anders, als bei einem Einzeltermin? Oder wo liegt der Fehler?

Gruß
edition

edition

Ich bekomme es einfach nicht hin!
Egal was ich an Terminen im Kalender eintrage, sobald ich eine Wiederholung aktiviere, wird nicht mehr geschaltet.
CALVIEW zeigt mir alle Termine an, die im Kalender stehen. Das Notify zeigt auch jeden Schaltpunkt an, egal ob Start, oder Endpunkt.
Oder ist das Notify für Serientermine falsch? Bei mir sieht es so aus, wie in der Referenz, also mit $ Zeichen. In einem anderen Beitrag habe ich das Selbe aber mit % Zeichen gesehen. Da soll es mit Serienterminen funktionieren, zumindest, wenn sie wöchentlich wiederholt werden.

Beim studieren der Referenz habe ich aber auch folgendes entdeckt:
Wiederkehrende Kalendereinträge werden in einem gewissen Umfang unterstützt: FREQ INTERVAL UNTIL COUNT werden ausgewertet,
BYMONTHDAY BYMONTH WKST werden erkannt aber nicht ausgewertet. BYDAY wird nur für wöchentliche Termine korrekt behandelt.
Das Modul wird es sehr wahrscheinlich falsch machen, wenn Du wiederkehrende Termine mit unerkannten oder nicht ausgewerteten Schlüsselwörtern hast.

Kann mir das jemand entschlüsseln?

Gruß
edition

betateilchen

Ist doch relativ einfach:


  • Du kannst einen Termin "jede Woche Mittwoch" oder "alle 2 Wochen Mittwoch" definieren, das funktioniert (weiß ich aus meiner eigenen Installation)
  • Aber Deine Konstellation "alle drei Wochen mittwochs bis freitags" wird nicht unterstützt
  • Mach daraus drei Termine (für die drei Tage) mit dreiwöchentlicher Wiederholung, und es sollte funktionieren
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

edition

Schön wär es.
Ich habe einen Termin eingestellt und ihn alle 3 Wochen wiederholen lassen. Geschaltet wird aber nichts!
Das Notify zeigt aber wieder, das es ausgeführt wurde.
Muss die Terminserie einen Endpunkt haben, oder ist das egal?

edition

betateilchen

Zitat von: edition am 06 Juli 2016, 15:03:44
Muss die Terminserie einen Endpunkt haben, oder ist das egal?

Das ist egal. Und wenn Dein notify ausgeführt wird, liegt das Problem auch nicht am Kalender, sondern an Deinem notify.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

edition

#10
Wenn es am Notify liegt, warum funktioniert es dann mit einem einzelnen Termin, ohne Wiederholung?
hier das DEF:

Kalender:start:.* {my $reading="$EVTPART0"; my $uid= "$EVTPART1"; my $actor= fhem("get Kalender summary $uid"); if(defined $actor) { fhem("set $actor on") }}


edition

betateilchen

Weil Du bei einem Serienelement nicht EINE uid zurückbekommst, sondern eine ganze Liste. Und mit dieser Liste kann Dein notify nix anfangen.

Ein einfacher Blick in den Event-Monitor oder in ein Logfile, das den Kalender loggt, hätte genügt, um das herauszufinden.

Probiers mal so (ungetestet, da ich nicht zuhause bin):

Kalender:start:.* {my $reading="$EVTPART0"; my $uid= "$EVTPART1"; my $actor= fhem("get Kalender summary $uid 1"); if(defined $actor) { fhem("set $actor on") }}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Uns stell bitte Fragen zum Kalendermodul demnächst im richtigen Forumbereich.
Du kannst den ganzen Thread auch selbst dorthin verschieben.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

edition

Ok, so scheint es zu funktionieren. Auf jeden Fall wurde das Licht in der Vitrine (benutze ich zum testen) eingeschaltet. Ausschalten müsste es auch, weil ich das Notify für Kalender End auch geändert habe. Mal sehen, was in 3 Wochen passiert.
Für die Rolläden habe ich auch ein Notify, aber nur für die Startzeit. Das werde ich auch ändern.

Danke für die Hilfe

Gruß
edition