Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehler in Item-Properties?

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

    Fehler in Item-Properties?

    Ich habe immer mal wieder die Properties verwenden wollen, anstatt die Funktionen. Aber jedes Mal gab es da Fehler, deshalb hatte ich das verworfen und nun teste ich genauer. Offensichtlich ist es nicht machbar, mehr als ein Property in einem eval abzufragen:

    Code:
    eval: True if sh...self.property.last_update_by.lower().startswith('knx:') and sh...self.prev_update_age() < 0.5 and sh...self.age() > 0.5 else False
    geht und wird umgewandelt in:

    Code:
    True if sh.EG.Buero.Taster.property.last_update_by.lower().startswith('knx:') and sh.EG.Buero.Taster.prev_update_age() < 0.5 and sh.EG.Buero.Taster.age() > 0.5 else False

    Geht nicht, weil ich das 2. Property verwende:

    Code:
    eval: True if sh...self.property.last_update_by.lower().startswith('knx:') and sh...self.property.prev_update_age < 0.5 and sh...self.age() > 0.5 else False
    und wird umgewandelt in + Fehlermeldung im Log (invalid syntax (<string>, line 1)):

    Code:
    True if sh.EG.Buero.Taster.property.last_update_by.lower().startswith('knx:') and sh.EG.Buero.Taster.property.prev_update_age < 0.5 and sh...age() > 0.5 else False

    #2
    So kann man gar nichts dazu sagen wo bei Dir der Fehler liegt. Wenn Du relative Item Referenzen verwendest musst Du schon den Teil des Item Trees mitliefern damit man nachvollziehen kann was Du da tust.
    Viele Grüße
    Martin

    There is no cloud. It's only someone else's computer.

    Kommentar


      #3
      Zitat von Msinn Beitrag anzeigen
      So kann man gar nichts dazu sagen wo bei Dir der Fehler liegt. Wenn Du relative Item Referenzen verwendest musst Du schon den Teil des Item Trees mitliefern damit man nachvollziehen kann was Du da tust.
      Den von SmartHomeNG umgewandelten Code in absolute Item-Referenzen habe ich doch dazu geliefert:

      Hier bei der Umwandlung gibts ein Problem, dass ich wie gesagt schon mehrfach beobachtet habe und mich dann immer gegen die Properties entschieden habe. Aber ich will ja die Fehlerbehebung unterstützen:

      True if sh.EG.Buero.Taster.property.last_update_by.lower() .startswith('knx:') and sh.EG.Buero.Taster.property.prev_update_age < 0.5 and sh...age() > 0.5 else False

      Irgendwo ab der Stelle, wo das Fett markiert ist, wird die Umwandlung seitens SmartHomeNG nicht mehr durchgeführt. Und wohlgemerkt nur dann, wenn mehr als ein Property in einer Zeile verwendet werden. Das Einzige, was ich nicht getestet habe, ob das nur bei relativen Referenzen so ist oder ob komplette absolute Referenzen auch das Problem verursachen. Das teste ich mal. Ich werde dazu noch ein anderes Test-Item erstellen, was dann kürzer ist. Das kann ich dann auch posten, weil es leichter zu lesen ist.

      Kommentar


        #4
        Zitat von Cannon Beitrag anzeigen
        Den von SmartHomeNG umgewandelten Code in absolute Item-Referenzen habe ich doch dazu geliefert:
        Genau sowas hilft häuft nicht, weil das auch "interpretierte Daten" sind (da das was Du da schreibst das ist, was Du meinst das da raus gekommen ist oder sein müsste).

        Ich habe zu wenig Zeit um mich in solche von der Faktenlage unsichere Szenarien rein zu denken, nur um dann evtl. festzustellen dass die Ausgangsdaten nicht stimmen.
        Viele Grüße
        Martin

        There is no cloud. It's only someone else's computer.

        Kommentar


          #5
          Zitat von Msinn Beitrag anzeigen
          Ich habe zu wenig Zeit um mich in solche von der Faktenlage unsichere Szenarien rein zu denken, nur um dann evtl. festzustellen dass die Ausgangsdaten nicht stimmen.
          Verstehe ich, aber deshalb sagte ich ja, mache ich einen Test:

          Code:
          EG:
              Buero:
                  Test1:
                      type: bool
                      SubTest:
                          type: num
                          eval: sh...self.property.last_change_age
                          eval_trigger: ..
          
                  Test2:
                      type: bool
                      SubTest:
                          type: num
                          eval: sh...self.property.last_update_age
                          eval_trigger: ..
          
                  Test3:
                      type: bool
                      SubTest:
                          type: num
                          eval: sh...self.property.last_change_age - sh...self.property.last_update_age
                          eval_trigger: ..
          
                  Test4:
                      type: bool
                      SubTest:
                          type: num
                          eval: sh.EG.Buero.Test2.property.last_change_age - sh.EG.Buero.Test2.property.last_update_age
                          eval_trigger: ..
          Wie schon vermutet liegt das Problem bei den Properties an relative Items. Test 3 ist der einzige, der einen Fehler erzeugt. Im Log: invalid syntax (<string>, line 1)

          Kommentar


            #6
            Ich hab mal in den Code geguckt, da wird überall beim Auflösen der relativen Itemdeklarationen nur nach 'sh.' und '(' gesucht. Ich frag mich zwar grad, warum dann das mit den properties überhaupt zumindest 1 Mal funktioniert. Also bei
            sh...self.property.last_change_age - sh...self.property.last_update_age wird ja das erste Item korrekt aufgelöst und ich weiß nicht warum.

            Anyhow - Ich behaupte, es reicht aus, in item/item.py überall wo der entsprechende Code ist, noch eine Zeile hinzuzufügen.. z.B.
            Code:
            value = self.get_stringwithabsolutepathes(value, 'sh.', '(', KEY_EVAL)
            value = self.get_stringwithabsolutepathes(value, 'sh.', '.property', KEY_EVAL)
            Unter modules/admin/api_services.py müsste es heißen:
            Code:
            expanded_code = rel_to_item.get_stringwithabsolutepathes(eval_code , 'sh.', '(')
            expanded_code = rel_to_item.get_stringwithabsolutepathes(expanded_ code, 'sh.', '.property')
            Erste Tests waren hier erfolgreich, Cannon kannst ja mal testen und Msinn im Code checken?

            Kommentar


              #7
              Zitat von Onkelandy Beitrag anzeigen
              Erste Tests waren hier erfolgreich, Cannon kannst ja mal testen und Msinn im Code checken?
              Ich hab das mal probiert. Bei der ersten Änderung meinst du das in lib/item.py ? Muss das an mehreren Stellen geändert werden mit dem entsprechenden anderen Paremetern, die dort an der Stelle dann auch stehen? Also z.B. auch hier:

              Code:
               wrk = self.get_stringwithabsolutepathes(wrk, 'sh.', '(', KEY_CONDITION)
              Wenn ich die Änderung in modules/admin/api_services.py vornehme lässt sich das Admin-Interface nicht mehr laden. Dann kommt eine Meldung im Browser, dass der Pfad /admin/ nicht gefunden wurde.

              Kommentar


                #8
                Ja auch bei wrk. je nach version lib/item.py oder lib/item/item.py

                der Fehler im admin Modul kann nicht von der zusätzlichen Zeile kommen, wenn Hochkommasbund Einrückung korrekt sind.

                Kommentar


                  #9
                  Cannon gibt es da News?

                  Kommentar


                    #10
                    Zitat von Onkelandy Beitrag anzeigen
                    Cannon gibt es da News?
                    Ich muss mich entschuldigen. Ich habe mir das nicht mehr angeschaut seitdem. Ich werde mich die Tage aber mal ransetzen und das testen.

                    Kommentar


                      #11
                      Ich habe da
                      Zitat von Onkelandy Beitrag anzeigen
                      Ja auch bei wrk. je nach version lib/item.py oder lib/item/item.py
                      Ich habe jetzt an 3 Stellen den Code entsprechend eingefügt und dann gehen alle Tests. Man kann also dann mit relativen Items + Properties arbeiten und dann auch noch mehr als ein Property verwenden.

                      Kommentar


                        #12
                        Okido, ich mach mal nen PR. Wenn man's anders auch lösen kann, gerne. Aber so geht's mal nicht verloren.

                        Kommentar

                        Lädt...
                        X