FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: berndp am 27 März 2015, 19:59:07

Titel: (Google) Kalender zur Müllabfuhr Auswertung & Visualisierung
Beitrag von: berndp am 27 März 2015, 19:59:07
Hallo zusammen,

nachdem ich hier schon viel gelesen und gelernt habe, möchte ich mal mein Snippet zur Müllabfuhr Auswertung einwerfen.
Hab selbst viel gespielt, bis ich zu diesem brauchbaren Ergebnis gekommen bin. Das Script basiert auf den Wiki Eintrag
http://www.fhemwiki.de/wiki/Google-Kalender_zur_Steuerung_von_Dummies (http://www.fhemwiki.de/wiki/Google-Kalender_zur_Steuerung_von_Dummies)
und wurde von mir etwas vereinfacht.

Ich wollte:
Voraussetungen:

Deutsch/Englisch ist bei mir etwas gemischt, da ich Backend Code gerne Englisch verfasse.

define AbfallNotify notify Abfallkalender:.*googlecom.* {\
GarbageParsing("$EVENT");;;;\
}


use Date::Parse;
use Time::Piece;

my $calenderName = "Abfallkalender"; # name of calendar
my $timeDiffSet = 48; #time in hours to set event dummy 1
my $dateDummyName = "Datum"; #name of dummy for event date
my $stateDummyName ="Status"; #name of dummy for event status

sub GarbageParsing ($)  {
  my ($eventData) = @_;
  my @eventArray = split(":",$eventData);
  my $eventType = $eventArray[0];
  my @uids=split(/;/, $eventArray[1]);
foreach my $uid (@uids) {
      my $calendarText = fhem("get $calenderName summary $uid");
      my $calendarDate = fhem("get $calenderName start $uid");
      my $calendarTime = Time::Piece->strptime($calendarDate, "%d.%m.%Y %H:%M:%S");
      my $date = $calendarTime->strftime('%d.%m');
      my $now = localtime;

      my $timeDiff = ($calendarTime-$now)/3600;
      fhem("set $calendarText$dateDummyName $date");
     
      if($eventType eq "modeUpcoming" || $eventType eq "modeStarted") {
        if($timeDiff<$timeDiffSet) {
          fhem("set $calendarText$stateDummyName on");
        }
        else {
          fhem("set $calendarText$stateDummyName off");
        }
      }
      elsif($eventType eq "modeEnded" || $eventType eq "modeEnd") {
        fhem("set $calendarText$stateDummyName off");
        fhem("set $calendarText$dateDummyName 0");
      }
};
}


Die Termine werden geholt, das Datum mittels Piece und strftime in mm.tt umgewandelt und die Dummies entsprechend gesetzt.
Um das Anlegen von vielen Notifies und Anpassung des Scripts für verschiedene Terminarten zu vermeiden habe ich es so allgemein gestaltet.
Es müssen eben zu jedem Ereignisname im Kalender die entsprechenden Dummies mit den Namenserweiterungen, wie in $dateDummyName und $stateDummyName definiert, vorhanden sein.

Am Ende des Termins wird der Status Dummy wieder auf off gesetzt und das Datum, sofern nicht durch einen neuen, wiederkehrenden Termin neu gesetzt, auf 0 gestellt.
Titel: Antw:(Google) Kalender zur Müllabfuhr Auswertung & Visualisierung
Beitrag von: 2P4u am 10 April 2015, 11:52:22
Hi,
coole Idee mit dem Kalender über Google.
Ich hab das jetzt mal nachgebaut. Habe meinen Abfallkalender von Google eingebunden.
Dort habe ich im "Titel" des Termines immer stehen was abgeholt wird, z.B.: BlaueTonne, GelberSack.

Ich habe dein Noti erstellt und den unteren Code in 99_myUtils.pm eingefügt.
Anschliessend habe ich erstmal Dummys für die Blaue Tonne erstellt: BlaueTonneDatum und BlaueTonneStatus.
Nun frage ich mich, ob den der Titel des Kalenders ausgelesen wird?
Ich sehe da immer nur diese IDs.

Vielleicht kannst du mir da weiterhelfen.

Lieben Dank
Gruss Daniel
Titel: Antw:(Google) Kalender zur Müllabfuhr Auswertung & Visualisierung
Beitrag von: berndp am 14 April 2015, 21:30:11
Hi!

Ja, der Titel des Ereignisses wird ausgewertet. Diese werden aus den vorhandenen Einträgen ausgelesen. Am Ende bleibt dann das Datum und der Status (Abholung in x-Stunden) übrig.
Dass nur IDs da stehen, kannst du ruhig ignorieren :)

Vg
bernd