FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: JensS am 20 Dezember 2014, 18:34:15

Titel: Kalender - Schaltzeiten nach Name, Alias oder Gruppe
Beitrag von: JensS am 20 Dezember 2014, 18:34:15
Hallo,
im folgenden Script werden die Termine im bereits angelegten Kalender nach Übereinstimmungen zu Name, Alias oder Gruppe von Devices durchsucht und die jeweilige Schaltzeiten angelegt.
99_myUtils.pm
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_fhem summary $uid");
my @ret;
my @etDev = devspec2array("NAME=.*");
foreach my $d (@etDev){
                                next unless $d;
my $Geraetename= $defs{$d}{NAME};
my $Alias=AttrVal($Geraetename,"alias",0);
my $Gruppenstring=AttrVal($Geraetename,"group",0);
my @Gruppen=split(/\,/,$Gruppenstring);
my $Gruppe;
foreach my $w (@Gruppen){
                                        next unless $w;
                                        if($Kalendertext eq $w){$Gruppe=$w};
                                        };
my $Geraet;
if($Kalendertext eq $Geraetename or $Kalendertext eq $Alias or $Kalendertext eq $Gruppe){$Geraet=$Geraetename;
fhem("set $Geraet on");
};
}
};
}
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_fhem summary $uid");
my @ret;
my @etDev = devspec2array("NAME=.*");
foreach my $d (@etDev){
                                next unless $d;
my $Geraetename= $defs{$d}{NAME};
my $Alias=AttrVal($Geraetename,"alias",0);
my $Gruppenstring=AttrVal($Geraetename,"group",0);
my @Gruppen=split(/\,/,$Gruppenstring);
my $Gruppe;
foreach my $w (@Gruppen){
                                        if($Kalendertext eq $w){$Gruppe=$w};
                                        };
my $Geraet;
if($Kalendertext eq $Geraetename or $Kalendertext eq $Alias or $Kalendertext eq $Gruppe){$Geraet=$Geraetename;
fhem("set $Geraet off");
};
}
};
}


Zum Aufruf müssen noch zwei Notifys erzeugt werden:
define Kalender_Beginn notify meinGoogleKalender:modeStarted.*.* {Kalenderstart("$EVENT");;}
define Kalender_Ende notify meinGoogleKalender:modeEnded.*.* {Kalenderende("$EVENT");;}

Danke an all jene, deren Scripte ich hierfür verwendet habe.
Gruß Jens
Titel: Antw:Kalender - Schaltzeiten nach Name, Alias oder Gruppe
Beitrag von: Rudibarani am 04 Juni 2018, 08:35:39
Hallo dirigent,

vielen Dank für den Code - damit konnte ich meine Kalendersteuerung deutlich vereinfachen. Eine Ergänzung würde ich allerdings für die Gruppenschleifen vorschlagen:

my $Gruppe;
foreach my $w (@Gruppen){
  next unless $w;
  if($Kalendertext eq $w){
    $Gruppe=$w};
  };
};

Ohne "next unless $w" kann es passieren, dass bei einem fehlerhaften Kalendereintrag dieser leer bleibt und in der Folge in der abschließenden If-Abfrage zu jeder leeren Gruppe passt. Dadurch wird dann JEDES Gerät auf on oder off gesetzt.
Titel: Antw:Kalender - Schaltzeiten nach Name, Alias oder Gruppe
Beitrag von: JensS am 08 Juli 2018, 15:09:08
Danke Rudibarani, die Zeile habe ich jetzt eingefügt. Gruß Jens
Titel: Antw:Kalender - Schaltzeiten nach Name, Alias oder Gruppe
Beitrag von: betateilchen am 08 Juli 2018, 15:12:18
ab dem nächsten FHEM Release (5.9) funktioniert das so ohnehin nicht mehr.

Titel: Antw:Kalender - Schaltzeiten nach Name, Alias oder Gruppe
Beitrag von: JensS am 08 Juli 2018, 15:23:37
Hallo Betateilchen,

das Featurelevel 5.9 ist mir neu - hab ich wohl was überlesen. Wo stehen die Info's zu den Änderungen? In den Ankündigungen und per Suche habe ich sie nicht gefunden.

Gruß Jens
Titel: Antw:Kalender - Schaltzeiten nach Name, Alias oder Gruppe
Beitrag von: Rudibarani am 15 August 2018, 18:49:31
Hallo Jens,

hast Du hier was rausfinden können, warum das beim nächsten größeren Update nicht mehr gehen soll?

Viele Grüße
Phillip