schuma Ups, sorry. Hätte eigentlich bei mir auch kommen müssen... wie auch immer, sollte nun gefixt sein.
Ankündigung
Einklappen
Keine Ankündigung bisher.
UZSU - Neue Version von Onkelandy
Einklappen
Dieses Thema ist geschlossen.
X
X
-
Yup, sieht besser aus.Zitat von Onkelandy Beitrag anzeigenwie auch immer, sollte nun gefixt sein.
Edit2: Zum Thema WARNING: Habe es jetzt schon bei mir korrigiert! In einer Logik wurde eine UZSU abgefragt. Und trotz if Abfrage auf != none wurde manchmal die uzsu abgefragt. Irgendwie ein Zeitliches Problem beim Systemstart manchmal ist in dem dict schon etwas vorhanden manchmal erst etwas zu spät.
Lag also an meiner Logik!Zuletzt geändert von schuma; 07.01.2019, 22:38.
Kommentar
-
Hab deinen Beitrag schon gelesen gehabt. Das Problem kann ja immer wieder mal vorkommen, wenn man's nicht in der Logik abfängt. Ich habe daher versucht, die Rückmeldung im Plugin anzupassen, wenn der "Plan" fürs Item noch nicht feststeht. Offenbar wird die Logik tatsächlich zu früh getriggert.
Vielleicht kannst du den neuesten Push nochmals mit der alten Logik testen? Beim Log erkennst du durch das logics.BLABLA, dass die Logik einige Sekunden vor dem Schedule Eintrag aufgerufen wird, was bisher zur unklaren Rückmeldung führte. Der "Plan" wird erst angelegt, wenn der komplette Schedule fürs Item durch ist, also erst direkt nach "will add scheduler named...."
Kommentar
-
Habe ich heute noch mal umgestellt...Zitat von Onkelandy Beitrag anzeigenVielleicht kannst du den neuesten Push nochmals mit der alten Logik testen?
In der debug Ausgabe habe ich folgende Zeile gefunden:
Aber als Ergebnis hat sich eigentlich nichts geändert:Code:2019-01-08 17:25:29 WARNING __init__ logics.haustuerevent Item 'EG.Raum1.Steckdosen.Fenster_oben.schaltuhr' is active but has no (active) entries. -- __init__.py:_logics_planned:316
Code:2019-01-08 17:34:37 WARNING logics.haustuerevent Item 'EG.Raum1.Steckdosen.Fenster_oben.schaltuhr' is active but has no (active) entries.
Kommentar
-
Hm, einen Versuch machen wir noch. Ansonsten bitte um Info, wie ich die Situation nachstellen kann.
https://github.com/onkelandy/plugins/tree/uzsu/uzsuZuletzt geändert von Onkelandy; 08.01.2019, 23:14.
Kommentar
-
Ich habe jetzt ca. 10x neu gestartet. Und, jetzt bekomme ich beim Start keine WARNING Meldung mehr.Zitat von Onkelandy Beitrag anzeigenHm, einen Versuch machen wir noch. Ansonsten bitte um Info, wie ich die Situation nachstellen kann.
- Likes 1
Kommentar
-
Getestet und keine Auffälligkeiten gefunden.Zitat von Sisamiwe Beitrag anzeigenMach ich gern. Wird aber wohl Ende der Woche.
Klappt wie es soll.
Bzgl. Feiertag, Urlaub arbeite ich mich gerade in den iCAL mit dem Plugin ein, um die Feiertage etc aus dem (Google)Kalender abzufragen.
Klappt schon ganz gut. Schreibe ich nachher nochmal zusammen.
Kommentar
-
Zum Thema Feiertag und Urlaub folgender Stand:
Kalender:
Ich habe in meinem Google-Kalender je einen Kalender für Feiertage, Muell und einen für Urlaub erstellt.
In den für Feiertag habe ich dann die für mich relevanten Feiertage importiert, fertig. Den Müllkalender dito. Den Kalender für Urlaub fülle ich von Hand, auch mit mehrtägigen, ganztägigen Ereignissen. Dabei kann man durch den Eintrag im Kalender noch unterscheiden, ob der Urlaub zu Hause (also anwesend) verbracht wird, oder ob man weg ist. Bspw. Urlaub_da und Urlaub_weg.
Kalendereinbindung:
Die Kalender habe ich mit dem ical-Plugin eingebunden.
plugin.yaml
Hier müssen die privaten Links zum jeweiligen Kalender in Goolge im ics Format eingetragen werden.Code:ical: class_name: iCal class_path: plugins.ical calendars: - urlaub:https://calendar.google.com/calendar/ical/....ics - feiertag:https://calendar.google.com/calendar/ical/....ics - muell:https://calendar.google.com/calendar/ical/.....ics # cycle: 3600
Items:
Ich habe erstmal folgende Items angelegt:
Logiken:Code:kalender: feiertag: heute: type: bool morgen: type: bool urlaub: heute: type: bool morgen: type: bool restmúell: heute: type: bool morgen: type: bool papiermuell: heute: type: bool morgen: type: bool
Es gibt diverse Logiken als Beispiele. Daraus habe ich mir mal die folgenden Gebastelt, um die Items zu füllen.
Muell:
Hier werden die Kalendereinträge auch auf den Kalendereintrag selbst geprüft. Bislang geht die Logik nur mit eintägigen Ereignissen bzw. wird nur Start und Ende geprüft.Code:#!/usr/bin/env python3 # muell.py heute = sh.now().date() morgen = heute + datetime.timedelta(days=1) muell = sh.ical('muell', delta=3, offset=0) logger.info("logic muell running...") logger.info(muell) for day in muell: for event in muell[day]: logger.info("Muellkalender wurde getriggert, Date: {0}".format(day)) start = event['Start'] end = event['End'] summary = event['Summary'] logger.info("Muellkalender wurde getriggert, Time: {0} {1}".format(start, summary)) if 'Restmuelltonne' in str(summary).lower(): logger.warning("Muellkalender wurde getriggert, calendar entry with Restmuelltonne 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, Restmuelltonne calendar entry starts tomorrow") sh.text.flur_eg.text1("Restmüll morgen") if end.date() == morgen: logger.debug("Muellkalender wurde getriggert, Restmuelltonne calendar entry ends tomorrow") elif 'Papiertonne/gelber Sack' in str(summary).lower(): logger.warning("Muellkalender wurde getriggert, calendar entry with Papiertonne found") if start.date() == heute: logger.debug("Muellkalender wurde getriggert, Papiertonne calendar entry starts today") sh.text.flur_eg.text1("Papiertonne heute") if start.date() == morgen: logger.debug("Muellkalekder wurde getriggert, Papiertonne calendar entry starts tomorrow") sh.text.flur_eg.text1("Papiertonne morgen") if end.date() == morgen: logger.debug("Muellkalender wurde getriggert, Papiertonne calendar entry ends tomorrow")
Feiertag:
Bislang geht die Logik nur mit eintägigen Ereignissen bzw. wird nur Start und Ende geprüft.Code:#!/usr/bin/env python3 # feiertag.py heute = sh.now().date() morgen = heute + datetime.timedelta(days=1) feiertag = sh.ical('feiertag', delta=3, offset=0) logger.info("logic feiertag running...") logger.info(feiertag) for day in feiertag: for event in feiertag[day]: logger.info("Feiertagskalender wurde getriggert, Date: {0}".format(day)) start = event['Start'] end = event['End'] summary = event['Summary'] logger.info("Feiertagskalender wurde getriggert, Time: {0} {1}".format(start, summary)) if start.date() == heute: logger.info("Feiertagskalender wurde getriggert, Feiertagseintrag startet heute") sh.kalender.feiertag.heute(1) else: sh.kalender.feiertag.heute(0) if start.date() == morgen: logger.info("Feiertagskalender wurde getriggert, Feiertagseintrag startet morgen") sh.kalender.feiertag.morgen(1) else: sh.kalender.feiertag.morgen(0) if end.date() == morgen: logger.info("Feiertagskalender wurde getriggert, Feiertagseintrag endet morgen")
Urlaub:
Hier werden auch mehrtägige Ereignisse ausgewertet.Code:#!/usr/bin/env python3 # feiertag.py jetzt = now = sh.now() heute = sh.now().date() morgen = heute + datetime.timedelta(days=1) urlaub = sh.ical('urlaub', delta=14, offset=0) logger.info("logic urlaub running...") logger.info(urlaub) for day in urlaub: for event in urlaub[day]: logger.info("Urlaubsskalender wurde getriggert, Date: {0}".format(day)) start = event['Start'] end = event['End'] summary = event['Summary'] logger.info("Urlaubskalender wurde getriggert, Time: {0} {1}".format(start, summary)) if start.date() == heute: logger.info("Urlaubskalender wurde getriggert, Urlaubseintrag beginnt heute") if start <= jetzt <= end or (start.date == end.date and start <= jetzt <= end.replace(second=59, microsecond=999)): logger.info("Urlaubskalender wurde getriggert, Urlaubseintrag für heute") sh.kalender.urlaub.heute(1) else: sh.kalender.urlaub.heute(0) if start.date() <= morgen <= end.date(): logger.info("Urlaubskalender wurde getriggert, Urlaubseintrag für morgen") sh.kalender.urlaub.morgen(1) else: sh.kalender.urlaub.morgen(0) if end.date() == morgen: logger.info("Urlaubskalender wurde getriggert, Urlaubseintrag endet morgen")
Allgemeines:
So wie ich es verstanden habe, wird der Kalender (wie in der plugin.yaml) definiert alle 3600s eingelesen. Die AuswerteLogik muss dann noch extra getriggert werden.
Klappt bei mir soweit erst einmal.
Vielleicht hilft es.
Kommentar


Kommentar