Wort im Kalendertitel suchen und Device (dummy) schalten.

Begonnen von d0m2011, 08 Januar 2024, 21:36:56

Vorheriges Thema - Nächstes Thema

d0m2011

Hallo zusammen,

in meiner 99_myUtils.pm habe ich laut der Anleitung hier im Forum folgenden Code:

sub sub_Kalender ($$) {
   my ($uid,$cmd) = @_;
   $cmd = 'on'  if ($cmd eq 'start');
   $cmd = 'off' if ($cmd eq 'end');
   my $actor = fhem('get Kalender events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1',1);
   fhem("set $actor $cmd",1);
   return;
}

Damit muss jedoch der Titel vom Kalendereintrag mit dem Namen des $actor (Dummy) übereinstimmen.

Ich versuche aktuell, im Kalendertitel nach einem Wort zu suchen, um anschließend einen definierten Dummy zu schalten. Z.B. Suche ich nach dem Wort Homeoffice und möchte den Dummy Homeoffice schalten. Auch wenn der Titel beispielsweise "homeoffice KW2 123" etc. lautet.

Anbei mein Ansatz welcher leider nicht funktioniert:
sub sub_Kalender ($$) {
   my ($uid, $cmd) = @_;
   $cmd = 'on'  if ($cmd eq 'start');
   $cmd = 'off' if ($cmd eq 'end');
   my @events = split(/\n/, fhem('get Kalender events format:custom="$S" limit:count=100', 1));
   foreach my $event (@events) {
      if ($event =~ /uid.*Homeoffice/i) {
         # Wenn gefunden, den Befehl direkt an den Aktor 'Homeoffice' senden
         fhem("set Homeoffice $cmd",1);
         last;  # Verlassen der Schleife, da das Event bereits gefunden wurde
      }
   }

   return;
}

Mein Notify mit folgendem Inhalt reagiert aber es passiert am Ende nichts:
Kalender:changed:.* { sub_Kalender($EVTPART1,$EVTPART2) }

Otto123

Hi,

hast Du mal geschaut was bei
get Kalender events format:custom="$S" limit:count=100'zurück kommt?
Da steht doch nix von uid drin? Ich denke so kann es gehen:
fhem("set Homeoffice $cmd",1) if ($event =~ m/Homeoffice/i)ich mache zumindest sowas ähnliches auf diese Art. Ich habe das jetzt aber nicht für Deine Schleife getestet.

Denn Sinn mit den 100 Events habe ich noch nicht verstanden. Aber Dein notify triggert auf alles und die uid vom Event spielt gar keine Rolle (wie im eigentlichen Beispiel).

Was genau willst Du denn tun? Ich habe den Fall: am Morgen zu entscheiden, gibt es heute einen bestimmten Kalendereintrag. Dann soll eine Stunde vorher etwas geschaltet werden.

Ist dein Fall so in der Art? Ich erzeuge aus dem Termin einen zusätzlichen Alarm Event im Kalender und mein notify triggert dann auf den Alarm.
attr PraxisKalender onCreateEvent { $e->{alarm}= $e->{start}-3600 if($e->{summary} =~ m/Sprechstunde|Notdienst/i)}Zur Demo schaltet das notify bloß bei sich selbst ein Reading ;)
defmod n_PraxisKalender1 notify PraxisKalender:changed:.*alarm|PraxisKalender:changed:.*end {\
   my $stat=($EVTPART2 eq "alarm")?'on':'off';;\
   fhem("setreading $SELF Sprechstunde $stat") \
   if (\
      defined fhem('get '.$NAME.' events filter:uid=="'.$EVTPART1.'",field(summary)=~"(?i)sprechstunde|notdienst" limit:count=1,from=0d',1) \
   )\
}
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

betateilchen

Zitat von: d0m2011 am 08 Januar 2024, 21:36:56Damit muss jedoch der Titel vom Kalendereintrag mit dem Namen des $actor (Dummy) übereinstimmen.

Ich versuche aktuell, im Kalendertitel nach einem Wort zu suchen, um anschließend einen definierten Dummy zu schalten. Z.B. Suche ich nach dem Wort Homeoffice und möchte den Dummy Homeoffice schalten. Auch wenn der Titel beispielsweise "homeoffice KW2 123" etc. lautet.

Das setzt voraus, dass der Titel des Kalendereintrags immer einer gleichen Struktur folgt.
Dann könntest Du aus dem Eintrag z.B. das erste "Wort" extrahieren ("homeoffice") und hättest den korrekten Wert für $actor.

Das Problem ist, dass Du bisher nicht versuchst, zu verstehen, was die Philosophie hinter den Calendar-devices ist, sondern lediglich viel Zeit damit verbringst, mittels copy&paste irgendwas zusammenzustellen, ohne ein richtiges Konzept zu haben.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!