Ankündigung

Einklappen
Keine Ankündigung bisher.

Hilfe bei ical Plugin und Urlaubslogik

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

  • Sisamiwe
    antwortet
    Mike01
    Danke, habt geklappt!

    Einen Kommentar schreiben:


  • Mike01
    antwortet
    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

    Einen Kommentar schreiben:


  • greentux
    antwortet
    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...

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    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?

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    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.

    Einen Kommentar schreiben:


  • greentux
    antwortet
    Das geht online... komische Sache das ist... Es ist das gleiche ics File...

    Einen Kommentar schreiben:


  • greentux
    antwortet
    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.

    Einen Kommentar schreiben:


  • Mike01
    antwortet
    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

    Einen Kommentar schreiben:


  • greentux
    antwortet
    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ß

    Einen Kommentar schreiben:


  • aschwith
    antwortet
    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

    Einen Kommentar schreiben:


  • Mike01
    antwortet
    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 :-)

    Einen Kommentar schreiben:


  • aschwith
    antwortet
    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

    Einen Kommentar schreiben:


  • Max2612
    antwortet
    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

    Einen Kommentar schreiben:


  • Mike01
    hat ein Thema erstellt Hilfe bei ical Plugin und Urlaubslogik

    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')
Lädt...
X