Autor Thema: Kalender - Schaltzeiten nach Name, Alias oder Gruppe  (Gelesen 1677 mal)

Offline dirigent

  • Full Member
  • ***
  • Beiträge: 496
Kalender - Schaltzeiten nach Name, Alias oder Gruppe
« 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
« Letzte Änderung: 08 Juli 2018, 15:08:12 von dirigent »
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, AB440S, AB440R, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Rudibarani

  • New Member
  • *
  • Beiträge: 19
Antw:Kalender - Schaltzeiten nach Name, Alias oder Gruppe
« Antwort #1 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.

Offline dirigent

  • Full Member
  • ***
  • Beiträge: 496
Antw:Kalender - Schaltzeiten nach Name, Alias oder Gruppe
« Antwort #2 am: 08 Juli 2018, 15:09:08 »
Danke Rudibarani, die Zeile habe ich jetzt eingefügt. Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, AB440S, AB440R, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15202
  • s/fhem\.cfg/configDB/g
Antw:Kalender - Schaltzeiten nach Name, Alias oder Gruppe
« Antwort #3 am: 08 Juli 2018, 15:12:18 »
ab dem nächsten FHEM Release (5.9) funktioniert das so ohnehin nicht mehr.

-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 14.12.2018 - 18:30 Uhr

Offline dirigent

  • Full Member
  • ***
  • Beiträge: 496
Antw:Kalender - Schaltzeiten nach Name, Alias oder Gruppe
« Antwort #4 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
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, AB440S, AB440R, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten

Offline Rudibarani

  • New Member
  • *
  • Beiträge: 19
Antw:Kalender - Schaltzeiten nach Name, Alias oder Gruppe
« Antwort #5 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