Ankündigung

Einklappen
Keine Ankündigung bisher.

iCal

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

    #31
    Hallo Jürgen,

    ich glaube Du hast da eine Endlosschleife implementiert. Vermutlich steht in dem Codeblock noch irgendwo kalender.muell(....).

    Der Codeblock wird bei jedem Aufruf durchlaufen. Codeblock muss in ein anderes Item oder noch besser in eine separate Logik.

    Bis bald

    Marcus

    Kommentar


      #32
      Wie kann man in einem sequentiellen logickprogramm eine Schleife machen? Es sind die drei Zeilen die du gepostet hast und die habe ich in den Codeblock gepostet! Da ist kein Schleife in dem Code drin.
      Zuletzt geändert von heckmannju; 26.06.2016, 10:42.

      Kommentar


        #33
        Hallo Jürgen,

        vereinfacht gesagt steht da momentan:

        Code:
        def item(wert):
            eval(item(wert))
        Damit hast Du eine Rekursion die eine Endlosschleife darstellt.

        Der Code darf nicht in das Item das es selbst ändert.

        Bis bald

        Marcus

        Kommentar


          #34
          Zitat von callidomus Beitrag anzeigen
          Hallo Jürgen,

          vereinfacht gesagt steht da momentan:

          Code:
          def item(wert):
          eval(item(wert))
          Damit hast Du eine Rekursion die eine Endlosschleife darstellt.

          Der Code darf nicht in das Item das es selbst ändert.

          Bis bald

          Marcus
          Deshalb habe ich es in eine Logik gepackt welche das Item füllt.

          Kommentar


            #35
            Zitat von callidomus Beitrag anzeigen
            Hallo Jürgen,

            vereinfacht gesagt steht da momentan:

            Code:
            def item(wert):
            eval(item(wert))
            Damit hast Du eine Rekursion die eine Endlosschleife darstellt.

            Der Code darf nicht in das Item das es selbst ändert.

            Bis bald

            Marcus
            Sorry das verstehe ich nicht das es dann in einer separaten Logik funktionieren soll. Da habe ich doch dan die gleiche Rekursion.

            Kommentar


              #36
              Zitat von nextwerk Beitrag anzeigen

              Deshalb habe ich es in eine Logik gepackt welche das Item füllt.
              Und was ist der Unterschied?

              Kommentar


                #37
                Hallo,

                Zitat von heckmannju Beitrag anzeigen
                Da habe ich doch dan die gleiche Rekursion.
                nein.

                Statt:

                Code:
                def item(wert):
                    eval(item(wert))
                
                item('starte Loop')
                hast Du:

                Code:
                def logik():
                    item('harmlos')
                
                def item(wert):
                    #  eval()
                    pass
                
                logik()
                Bis bald

                Marcus

                Kommentar


                  #38
                  Marcus, Mir fehlt die Tonspur zu den Beispiel. Auch wenn es für dich glasklar ist für mich ist es das nicht.

                  Kommentar


                    #39
                    Hi Jürgen,

                    ich versuche mal die "Tonspur": Ein eval (oder in callidomus-neudeutsch codeblock) wird immer dann ausgeführt, wenn der Wert eines Items geändert werden soll. Wenn jetzt in diesem codeblock der Wert des Items erneut geändert wird, dann wird der eval wiederum angestoßen, der dann wieder den Wert ändert, der dann wieder den eval anstößt usw. Das ist das erste Beispiel von Marcus.

                    Wenn das Coding in einer Logik steht, dann wird einfach die Logik aufgerufen und diese setzt den Item-Wert - und das war es dann schon. Das ist das 2. Beispiel. Ein auslagern in eine Logik löst somit Dein Problem.

                    Grundsätzlich gilt die Regel, dass ein Item mit eval nie in diesem eval den eigenen Wert setzen darf (ich meine explizit über item(wert)). Das darf nur in der einzeiligen Variante des codeblocks passieren (siehe ?-Doku, die ist für den codeblock bereits da), da passiert das aber implizit als funktionaler Rückgabewert.

                    Gruß, Waldemar


                    OpenKNX www.openknx.de

                    Kommentar


                      #40
                      Zitat von MarcusW Beitrag anzeigen

                      Hallo Marcus,
                      so sieht die Meldung nach Neustart der Core aus:

                      2016-06-25 13:57:41 INFO Main Start Network
                      2016-06-25 13:57:42 WARNING kalender-code Item kalender: problem evaluating heute = cd.now().date()
                      muell = cd.ical('https://calendar.google.com/calendar/ical/<adresse privater Kalender>/basic.ics')
                      cd.kalender(muell.get(heute), [])

                      : unorderable types: str() > int()


                      Hallo Marcus,
                      kannst Du jetzt was mit der Fehlermeldung anfangen?
                      Brauchst Du noch was anderes?
                      Gruß
                      MarcusW

                      Kommentar


                        #41
                        Zitat von mumpf Beitrag anzeigen
                        ich versuche mal die "Tonspur": Ein eval (oder in callidomus-neudeutsch codeblock) wird immer dann ausgeführt, wenn der Wert eines Items geändert werden soll. Wenn jetzt in diesem codeblock der Wert des Items erneut geändert wird, dann wird der eval wiederum angestoßen, der dann wieder den Wert ändert, der dann wieder den eval anstößt usw. Das ist das erste Beispiel von Marcus.
                        Und warum geht das bei den einzeiligen logicken da setze ich doch auch ein das Item und ändere es somit.

                        Kommentar


                          #42
                          Hi Jürgen,

                          hatte ich oben auch erwähnt: Die Einzeilige Variante kann man Funktional betrachten, der eval liefert dann ein Wert (es wird kein Wert mit item(wert) gesetzt) und diesen kann Marcus dann entsprechend verarbeiten, indem er den intern setzt.

                          Die einzige Möglichkeit, das zu umgehen, wäre einen weiteren public Setter anzubieten (sowas wie item.internal(wert)), der keinen eval aufruft, aber das ist mindestens genau so erläuterungsbedürftig (wenn nicht sogar schwieriger zu verstehen).

                          Gruß, Waldemar
                          OpenKNX www.openknx.de

                          Kommentar


                            #43
                            Okay.
                            also wenn ich das Supporten müsste würde ich schauen das man den ical link direkt beim item als Attribut angeben kann. ohne das ich dazu noch eine Logik anlegen muss.

                            Weil für mich bedeutet der zwang zur anlgegen einer Logik auch das es auch dazu eine Doku geben muss wie das geht.

                            Deswegen sollte meiner Meinung nach so ein Gradeausfall auch ohne das komplizierte anlegen einer Logik abgehen...

                            Viele Grüsse
                            Jürgen

                            Kommentar


                              #44
                              Hallo Marcus,

                              Zitat von MarcusW Beitrag anzeigen
                              kannst Du jetzt was mit der Fehlermeldung anfangen?
                              wenn ich mir das so ansehen, dann machst Du doch das gleiche wie heckmannju, oder?
                              Nämlich das Item updaten wollen durch den Codeblock des Items.
                              Packe das bitte in eine separate Logik. Wenn es noch Probleme gibt, dann schicke mir eine Mail an support@

                              Bis bald

                              Marcus

                              Kommentar


                                #45
                                Zitat von callidomus Beitrag anzeigen
                                Code:
                                heute = cd.now().date() # Das Datum von heute
                                muell = cd.ical('http://XXX/muell.ics') # holt und parst die Calenderdatei
                                cd.meinkalender(muell.get(heute), []) # wenn heute im Kalender ist werden die Events in cd.meinkalender geschrieben
                                # ansonsten wird der Kalender leer gefüllt.
                                leer gefüllt bedeutet ganz leer?

                                Wenn ja was muss ich den machen wenn ich die nächsten drei Termin sehen will?

                                Kommentar

                                Lädt...
                                X