Google Kalender zum Steuern benutzen

Begonnen von Toto1973, 16 Februar 2015, 15:12:57

Vorheriges Thema - Nächstes Thema

Toto1973

Hallo!
Ich bin erfolgreich nach der Anleitung von hier http://www.fhemwiki.de/wiki/Google-Kalender_zur_Steuerung_von_Dummies verfahren.
Im Moment frage ich die Einträge URLAUB und FA ab.
Was ich jetzt noch erweitern möchte, wäre die Abfrage nach Frühschicht und Mittelschicht. Das dürfte ich auch ohne Probleme hinbekommen.
Da ich die Einträge Frühschicht und Mittelschicht automatisch alle 2 Wochen in den Kalender eintragen lasse, kommt es vor, das sich URLAUB bzw FA mit Frühschicht und Mittelschicht überlagern.

define FA_dummy dummy
attr FA_dummy group Kalender
attr FA_dummy room WakeUp Light
attr FA_dummy setList ja nein
attr FA_dummy webCmd ja:nein

define Urlaub_dummy dummy
attr Urlaub_dummy group Kalender
attr Urlaub_dummy room WakeUp Light
attr Urlaub_dummy setList ja nein
attr Urlaub_dummy webCmd ja:nein


So sehen meine Dummys aus. Dazu kommt noch das Dummy Fruehschicht_dummy und Mittelschicht_dummy
Wie müsste ich es dann machen, wenn ich als Beispiel je nach dummy Status eine Lampe zu verschiedenen Zeiten schalten möchte?
Der Status URLAUB und FA soll Mittelschicht bzw Frühschicht überdecken. Oder anders gesagt, wenn Urlaub oder FA auf ja stehen, soll das immer berücksichtigt werden. Ist Urlaub und FA auf nein, dann soll entweder Frühschicht oder Mittelschicht aktiv sein.
(URLAUB und FA = Lampe an um 9 Uhr; Frühschicht = Lampe an um 10 Uhr; Mittelschicht = Lampe an um 11 Uhr)
Könnte ich da mit DOIF weiter kommen?
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000

Toto1973

#1
Irgendwas tut da nicht!
Das ist meine 99_MyUtils.pm:
package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}
sub
Kalenderstart ($)
{
my ($Ereignis) = @_;
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
my @uids=split(/;/,$Ereignisteil1);
foreach my $uid (@uids) {
my $Kalendertext = fhem("get Kalender summary $uid");
if ($Kalendertext =~ /URLAUB/) {
fhem("set Urlaub_dummy ja");
};
if ($Kalendertext =~ /FA/) {
fhem("set Urlaub_dummy ja");
};
if ($Kalendertext =~ /Fruehschicht/) {
fhem("set Fruehschicht_dummy ja");
};
if ($Kalendertext =~ /Mittelschicht/) {
fhem("set Mittelschicht_dummy ja");
};
};
}
sub
Kalenderende ($)
{
my ($Ereignis) = @_;
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
my @uids=split(/;/,$Ereignisteil1);
foreach my $uid (@uids) {
my $Kalendertext = fhem("get Kalender summary $uid");
if ($Kalendertext =~ /URLAUB/) {
fhem("set Urlaub_dummy nein");
};
if ($Kalendertext =~ /FA/) {
fhem("set Urlaub_dummy nein");
};
if ($Kalendertext =~ /Fruehschicht/) {
fhem("set Fruehschicht_dummy nein");
};
if ($Kalendertext =~ /Mittelschicht/) {
fhem("set Mittelschicht_dummy nein");
};
};
}
1;


Und mit folgenden Zeilen aus der fhem.cfg wird die Subroutine abgefrag:
define Kalender_Start notify Kalender:modeStarted.*googlecom.* {\ Kalenderstart("$EVENT");;}
define Kalender_Ende notify Kalender:modeEnded.*googlecom.* {\ Kalenderende("$EVENT");;}


Bei Kalender_Ende habe ich als State nur ein active stehen wobei bei Kalender_Start ein Datum bei State steht.
Deshalb werden die Schalter wohl nicht richtig gesetzt?

Wenn ich die 99_MyUtils.pm speichere, kommt folgende Fehlermeldung:
ERROR:

Undefined subroutine &main::MyUtils_Initialize called at fhem.pl line 2052.

Wäre cool, wenn hier jemand von den erfahrenen Usern eine Idee hätte, was da falsch läuft!
Unter Global, version steht $Id: fhem.pl 7994 2015-02-15 13:10:48Z rudolfkoenig $

Was sehr seltsam ist, sind die ausgelesen Daten des Kalenders:
2015.02.17 11:08:34 3: get Kalender summary bjtubodhhlcqoer322veqt35gcgooglecom : URLAUB
2015.02.17 11:08:34 3: get Kalender summary nra94k2oo263la0hvfp7rj7bc0googlecom : Heidi PC
2015.02.17 11:08:34 3: get Kalender summary qb4urf5gqcr2lvjrlpim6c56mkgooglecom : Mittelschicht
2015.02.17 11:08:34 3: get Kalender summary r1it55t7kkc7t10bbv3jn3d2fggooglecom : Ilse 70. Geburtstag
2015.02.17 11:08:34 3: get Kalender summary uucvaddvkk252fa0jitmt3kh5cgooglecom : Online eincheken
Das sind uralte Daten!

P.S.: Wie ich DOIF benutzen muss, habe ich inzwischen herausgefunden. Hier ein kleines Beispiel, wie man eine Licht anschalten kann, wenn 1. ein Dummy auf on gesetzt ist, 2. der TV an ist und 3. die Dämmerung erreicht wurde.
define wz_Licht_PC_an DOIF ([wz_Licht_an_aus_dummy:state] eq "on" and [wz_SamsungTV:state] eq "opened" and [{sunset(-2700,"16:00","23:00")}-03:00]) ((set wz_LED_PC HSV 40,100,26 900)) DOELSE (set wz_LED_PC dim 0 240)
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000

Toto1973

Das mit dem Google-Kalender habe ich nun verworfen!
Irgendwie funktioniert das Modul bei meinen vielen Terminen nicht wirklich!

Der nächste Denkschritt wäre eine holiday Datei gewesen, in der ich die Wochen eintrage (von - bis), an denen ich Früh bzw Mittelschicht habe.
Aber bei weiterem Nachdenken, bin ich nun auf die Idee gekommen, Das Dummy umzubauen, so das ein Frueh und ein Mittel als Status angezeigt wird.
Das ganze mache ich nun mit DOIF.
define schicht DOIF ([22:00|0] and [Schicht_dummy:state] eq "Frueh") (set Schicht_dummy Mittel) DOELSE (set Schicht_dummy Frueh)
Funktioniert das so oder wird dann automatisch wieder zurück geschallten?
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000