Ankündigung

Einklappen
Keine Ankündigung bisher.

UZSU - Neue Version von Onkelandy

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

    schuma Ups, sorry. Hätte eigentlich bei mir auch kommen müssen... wie auch immer, sollte nun gefixt sein.

    Kommentar


      Zitat von Onkelandy Beitrag anzeigen
      wie auch immer, sollte nun gefixt sein.
      Yup, sieht besser aus.

      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


          Zitat von Onkelandy Beitrag anzeigen
          Vielleicht kannst du den neuesten Push nochmals mit der alten Logik testen?
          Habe ich heute noch mal umgestellt...

          In der debug Ausgabe habe ich folgende Zeile gefunden:

          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
          Aber als Ergebnis hat sich eigentlich nichts geändert:
          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. Dee erste Eintrag ist nach dem Start, der zweite irgendwann? Und das Item ist aber scheduled?

            Kommentar


              Beides beim Start. Zwei unterschiedliche Starts.
              Das eine mit debuglog das zweite ohne debuglog.
              Und ja, das Item ist nach dem Start dann scheduled.

              Kommentar


                Hm, einen Versuch machen wir noch. Ansonsten bitte um Info, wie ich die Situation nachstellen kann.

                https://github.com/onkelandy/plugins/tree/uzsu/uzsu
                Zuletzt geändert von Onkelandy; 08.01.2019, 23:14.

                Kommentar


                  Zitat von Onkelandy Beitrag anzeigen
                  Hm, einen Versuch machen wir noch. Ansonsten bitte um Info, wie ich die Situation nachstellen kann.
                  Ich habe jetzt ca. 10x neu gestartet. Und, jetzt bekomme ich beim Start keine WARNING Meldung mehr.

                  Kommentar


                    Du bekommst aber die Meldung dass die entsprechende uzsu noch nicht initialisiert ist oder?

                    Kommentar


                      Ist das dann eine INFO Meldung oder WARNING?

                      Kommentar


                        Habe es gefunden:

                        Code:
                        2019-01-09 18:38:13 DEBUG    __init__     logics.haustuerevent Item 'EG.Raum1.Steckdosen.Fenster_oben.schaltuhr' is active but not fully initialized yet. -- __init__.py:_logics_planned:312
                        Also ja

                        Kommentar


                          Passt. Ich mache ne Info Meldung draus und pr dann

                          Kommentar


                            Zitat von Sisamiwe Beitrag anzeigen
                            Mach ich gern. Wird aber wohl Ende der Woche.
                            Getestet und keine Auffälligkeiten gefunden.
                            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


                              Klingt gut. Aber für Feiertag bräuchte es dennoch zwei weitere Optionen für "vor Feiertag" und "Feiertag" neben den 7 Wochentagen, oder..?

                              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
                                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
                                Hier müssen die privaten Links zum jeweiligen Kalender in Goolge im ics Format eingetragen werden.

                                Items:
                                Ich habe erstmal folgende Items angelegt:
                                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
                                Logiken:
                                Es gibt diverse Logiken als Beispiele. Daraus habe ich mir mal die folgenden Gebastelt, um die Items zu füllen.
                                Muell:
                                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")
                                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.

                                Feiertag:
                                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")
                                Bislang geht die Logik nur mit eintägigen Ereignissen bzw. wird nur Start und Ende geprüft.

                                Urlaub:
                                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")
                                Hier werden auch mehrtägige Ereignisse ausgewertet.

                                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

                                Lädt...
                                X