Mike01
Danke, habt geklappt!
Ankündigung
Einklappen
Keine Ankündigung bisher.
Hilfe bei ical Plugin und Urlaubslogik
Einklappen
X
-
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
Gruß, Mike
Einen Kommentar schreiben:
-
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:
-
Zitat von aschwith Beitrag anzeigenHallo 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
Wie ist dafür die logische Kette?
Einen Kommentar schreiben:
-
Das geht online... komische Sache das ist... Es ist das gleiche ics File...
Einen Kommentar schreiben:
-
Nein,
Code:logger.debug("Muellkalender wurde getriggert, Date: {0}".format(day))
ich kann es mit dem Online Kalender gerade mal teste.
Einen Kommentar schreiben:
-
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:
-
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
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
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")
Danke und Gruß
- Likes 1
Einen Kommentar schreiben:
-
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
- Likes 1
Einen Kommentar schreiben:
-
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")
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
Einen Kommentar schreiben:
-
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:
-
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:
-
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')
Stichworte: -
Einen Kommentar schreiben: