Ankündigung

Einklappen
Keine Ankündigung bisher.

Hilfe bei ical Plugin und Urlaubslogik

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Hilfe bei ical Plugin und Urlaubslogik

    Hallo,

    Ich hab das ical Plugin in verbindung mit einem Google Kalender in mein SmartHomeNG integriert,
    in diesen Kalender trage ich meinen Urlaub und Feiertage ein,
    zusätzlich hab ich mir eine kleine Logik geschrieben, die mir täglich prüft, ob am nächsten Tag ein Feiertag oder Urlaub ansteht,
    und dadurch schaltet sich mein Squeezebox Radiowecker entsprechend ein oder aus.

    Das ganze funktioniert mit eintägigen Ereignissen wie z.B. Feiertagen perfekt, trage ich aber z.B. eine oder 2 Urlaubswochen als durchgehenden Termin ein erkennt das meine Logik nicht. Kann mir hier jemand einen Tip geben, wie ich das lösen kann ?
    Alternativ gibt es zwar im ical Plugin bereits die Funktion, dass man wenn am besagten Tag ein Termin ansteht ein Bool Item triggern kann, allerdings bräuchte ich diese Funktion eben einen Tag vorher.

    hier die Logik:
    Code:
    #!/usr/bin/env python
    
    heute = sh.now().date()
    morgen = heute + datetime.timedelta(days=1)
    urlaub = sh.ical('urlaub', delta=14, offset=0)
    feiertag = sh.ical('feiertag')
    
    if (morgen in urlaub or morgen in feiertag) and not sh.calendar.merker():
        sh.Squeezebox_1.Alarm1sw('0')
        sh.calendar.merker('True')
    
    if sh.calendar.merker() == True:
        if not morgen in urlaub and not morgen in feiertag:
            sh.Squeezebox_1.Alarm1sw('1')
            sh.Squeezebox_1.Alarm1set('21600')
            sh.calendar.merker('False')

    #2
    Hallo Mike,

    soweit ich mich erinnere, hatte ich das gleiche Problem. Versuch mal die Urlaubstage einzeln anzulegen. Also nicht zB. Montag bis Freitag Urlaub, sondern Montag Urlaub, Dienstag Urlaub, usw.

    So hat's bei mir funktioniert.

    Gruß, Max

    Kommentar


      #3
      Hallo zusammen,

      das Problem kann ich nicht bestätigen. Ich habe es gerade bei mir nochmal getestet. Das Auswerten mehrtägiger Termine funktioniert gut und kann auch tageweise abgefragt werden. Das Beispiel in der Readme des iCal Plugins hilft hier weiter.
      Viele Grüße
      Alex

      Kommentar


        #4
        aschwith: Danke für deinen Hinweis, hab mich nochmal etwas besser mit der Readme befasst und eine kleine Testlogik erstellt.
        Damit kann ich jetzt start und ende eines Kalendereintrages auswerten, und damit den Wecker entsprechend steuern.

        Logik:
        Code:
        heute = sh.now().date()
        morgen = heute + datetime.timedelta(days=1)
        urlaub = sh.ical('urlaub', delta=3, offset=0)
        
        for day in urlaub:
            for event in urlaub[day]:
                logger.warning("Urlaubslogik wurde getriggert, Date: {0}".format(day))
                start = event['Start']
                end = event['End']        
                summary = event['Summary']
                logger.warning("Urlaubslogik wurde getriggert, Time: {0} {1}".format(start, summary))
                if 'testword' in str(summary).lower():
                    logger.warning("Urlaubslogik wurde getriggert, calendar entry with testword found")
                    if start.date() == heute:
                        logger.warning("Urlaubslogik wurde getriggert, Textword calendar entry starts today")
                    if start.date() == morgen:
                        logger.warning("Urlaubslogik wurde getriggert, Textword calendar entry starts tomorrow")
                    if end.date() == morgen:
                        logger.warning("Urlaubslogik wurde getriggert, Textword calendar entry ends tomorrow")
        smarthome.log:
        Code:
        2018-08-23  12:58:31 WARNING  logics.wecker    Urlaubslogik wurde getriggert, Date: 2018-08-23
        2018-08-23  12:58:31 WARNING  logics.wecker    Urlaubslogik wurde getriggert, Time: 2018-08-23 00:00:00+02:00 testword
        2018-08-23  12:58:31 WARNING  logics.wecker    Urlaubslogik wurde getriggert, calendar entry with testword found
        2018-08-23  12:58:31 WARNING  logics.wecker    Urlaubslogik wurde getriggert, Textword calendar entry starts today
        2018-08-23  12:58:31 WARNING  logics.wecker    Urlaubslogik wurde getriggert, Textword calendar entry ends tomorrow
        Gruß, Mike
        Zuletzt geändert von Mike01; 23.08.2018, 12:09. Grund: hab das Logikbeispiel endlich kapiert :-)

        Kommentar


          #5
          Hi Mike,
          top, dann passt das ja. Falls Du noch Vorschläge hast, das Logikbeispiel verständlicher zu gestalten oder noch die Doku zu erweitern, gerne her damit. Wir nehmen das dann mit auf.
          Beste Grüße
          Alex

          Kommentar


            #6
            Ich habe mal auf der Basis einen Muellkalender versucht. Allein es geht nicht:

            plugins.yaml
            Code:
            ical:
                class_name: iCal
                class_path: plugins.ical
                calendars:
                    - muell:/usr/local/smarthome/etc/muell2019.ics
            Der wird auch geladen:
            Code:
            2019-01-05  16:27:17 DEBUG    Main         Plugins, section: ical
            2019-01-05  16:27:17 DEBUG    Main         Plugins __init__: pluginname = 'ical', classpath 'plugins.ical'
            2019-01-05  16:27:17 INFO     Main         Loading '/usr/local/smarthome/plugins/ical/plugin.yaml' to 'OrderedDict'
            2019-01-05  16:27:17 INFO     Main         plugin 'ical': has no parameter definitions in metadata
            2019-01-05  16:27:17 INFO     Main         plugin 'ical': has no item definitions in metadata
            2019-01-05  16:27:17 DEBUG    Main         PluginWrapper __init__: Section ical, classname iCal, classpath plugins.ical
            2019-01-05  16:27:17 INFO     Main         Loading '/usr/local/smarthome/plugins/ical/locale.yaml' to 'dict'
            2019-01-05  16:27:17 DEBUG    Main         Plugin 'iCal': args = '{'calendars': ['muell:/usr/local/smarthome/etc/muell2019.ics']}'
            2019-01-05  16:27:17 INFO     Main         plugin 'ical': No parameter definitions found in metadata
            2019-01-05  16:27:17 INFO     Main         iCal: Registering calendar muell (/usr/local/smarthome/etc/muell2019.ics)
            2019-01-05  16:27:17 DEBUG    Main         iCalUpdate next time: 2019-01-05 16:28:00+01:00
            2019-01-05  16:27:17 DEBUG    Main         iCalRefresh next time: 2019-01-05 16:27:31+01:00
            Allerdings findet diese Logik keine Einträge. 'muell' scheint leer:

            Code:
            heute = sh.now().date()
            morgen = heute + datetime.timedelta(days=1)
            muell = sh.ical('muell', delta=3, offset=0)
            logger.debug("logic muell running...")
            logger.debug(muell)
            
            for day in muell:
                for event in muell[day]:
                    logger.debug("Muellkalender wurde getriggert, Date: {0}".format(day))
                    start = event['Start']
                    end = event['End']        
                    summary = event['Summary']
                    logger.debug("Muellkalender wurde getriggert, Time: {0} {1}".format(start, summary))
                    if 'restabfall' in str(summary).lower():
                        logger.warning("Muellkalender wurde getriggert, calendar entry with Restabfall found")
                        if start.date() == heute:
                            logger.debug("Muellkalender wurde getriggert, Restabfall calendar entry starts today")
                            sh.text.flur_eg.text1("Restmüll heute")
            
                        if start.date() == morgen:
                            logger.debug("Muellkalekder wurde getriggert, Restabfall calendar entry starts tomorrow")
                            sh.text.flur_eg.text1("Restmüll morgen")
            
                        if end.date() == morgen:
                            logger.debug("Muellkalender wurde getriggert, Restabfall calendar entry ends tomorrow")
            Sieht da schon jemand was? Sonst würde ich noch einen Auszug aus dem ics File anhängen?
            Danke und Gruß
            Derzeit zwischen Kistenauspacken und Garten anlegen.
            Baublog im Profil.

            Kommentar


              #7
              Hab das bei mir bis jetzt nur mit Google Kalendern versucht, nicht direkt mit ical Dateien.
              Klappt denn die Logik ohne die Keyword-Abfrage "restabfall" ?
              Also nur nach einem beliebigen Eintrag in den nächsten 3 Tagen ?
              ansonsten poste mal die .ics Datei.
              Alternativ wäre alternativ noch die möglichkeit, die ics Datei in einem Google Kalender zu importieren.

              Gruß, Mike

              Kommentar


                #8
                Nein,
                Code:
                 
                         logger.debug("Muellkalender wurde getriggert, Date: {0}".format(day))
                wird schon nicht getriggert... Obwohl da was drin steht...
                ich kann es mit dem Online Kalender gerade mal teste.
                Derzeit zwischen Kistenauspacken und Garten anlegen.
                Baublog im Profil.

                Kommentar


                  #9
                  Das geht online... komische Sache das ist... Es ist das gleiche ics File...
                  Derzeit zwischen Kistenauspacken und Garten anlegen.
                  Baublog im Profil.

                  Kommentar


                    #10
                    greentux Mike1

                    Hallo,
                    ich hätte zu euren BeispielLogiken eine Frage.
                    Wie löst ihr diese aus? Lasst ihr die bspw. 1x pro Tag mit crontab laufen oder zyklisch mit cycle?

                    Danke für Eure Rückmeldung.

                    Kommentar


                      #11
                      Zitat von aschwith Beitrag anzeigen
                      Hallo zusammen,

                      das Problem kann ich nicht bestätigen. Ich habe es gerade bei mir nochmal getestet. Das Auswerten mehrtägiger Termine funktioniert gut und kann auch tageweise abgefragt werden. Das Beispiel in der Readme des iCal Plugins hilft hier weiter.
                      Viele Grüße
                      Alex
                      Auch ich muss hier noch einmal nachfrage: Es wird doch nur Beginn und Ende eines Kalendereintrages in der Logik abgefragt. Wie können dann auch "Zwischentage" geprüft werden?
                      Wie ist dafür die logische Kette?

                      Kommentar


                        #12
                        Ich lasse diese einmal am Tag laufen, dann wird auf dem Smart2 angezeigt, welche Tonne raus muss und fertig.
                        Weiterhin gibt es ja auch Items, die True sind, wenn ein Eintrag anliegt, vermutlich auch bei mehrtägigen Einträgen. Ansonsten sind mehrtägige Sachen hier noch diskutiert worden...
                        Derzeit zwischen Kistenauspacken und Garten anlegen.
                        Baublog im Profil.

                        Kommentar


                          #13
                          Sisamiwe Ich nutze die Logik für meinen Squeezebox Radiowecker, die Logik rufe ich 1x Abends um 20 Uhr auf, Denn bis dahin hab ich meine Termine für den nächsten Tag eingetragen, und wenn der nächste Tag ein Feiertag oder Urlaub ist schalte ich den Radiowecker entsprechend aus.

                          Mehrtägige Events lassen sich z.B. mit dem Logikbeispiel in der ical/__init__.py recht gut auswerten, da gibt es ja die Funktion um ein Item am jeweiligen Tag einzuschalten:
                          Code:
                          val = False
                                          for date in events[calendar]:
                                              for event in events[calendar][date]:
                                                  if event['Start'] <= now <= event['End'] or (event['Start'] == event['End'] and event['Start'] <= now <= event['End'].replace(second=59, microsecond=999)):
                                                      val = True
                          Das lässt sich z.B. gut als vorlage verwenden um mehrtägige Events auszuwerten.

                          Gruß, Mike

                          Kommentar


                            #14
                            Mike01
                            Danke, habt geklappt!

                            Kommentar

                            Lädt...
                            X