Ankündigung

Einklappen
Keine Ankündigung bisher.

eval = self.return_parent() mit if Bedingung

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

    eval = self.return_parent() mit if Bedingung

    Hallo Kollegen,

    hab ein Verständnisproblem mit "return_parent()"

    Das item
    Code:
    knx_raum.ug.flur_keller.bak_a.test_betrieb
    möchte ich - zyklisch - auf den Wert 0 setzen, KNX setzt alle 5 Min. den Wert 1

    So läuft es ohne Problem:
    Code:
    eval = sh.knx_raum.ug.flur_keller.bak_a.test_betrieb(0) if sh.knx_raum.ug.flur_keller.bak_a.test_betrieb.alter() > 180 else None
    Wenn ich jedoch folgenden Weg versuche läuft es nicht:
    a)
    Code:
    eval = self.return_parent()(self.return_parent()(0)) if sh.knx_raum.ug.flur_keller.bak_a.test_betrieb.alter() > 180 else None
    oder
    b)
    Code:
    eval = self.return_parent()(0) if sh.knx_raum.ug.flur_keller.bak_a.test_betrieb.alter() > 180 else None
    oder
    c) ---> ")" geändert
    Code:
    eval = self.return_parent()(self.return_parent()(0) if sh.knx_raum.ug.flur_keller.bak_a.test_betrieb.alter() > 180 else None)
    Problem: bei a) wird das Item sofort 0 nach der 1, der If-Teil wird nicht ausgewertet....

    Bin für jeden Hinweis dankbar ...
    Zuletzt geändert von Haiphong; 03.10.2019, 17:51.
    Gruß, JG

    #2
    vermutlich war jetzt c) die Lösung ( auch wenn ich mir seeeeeeeeeeeeeehr unsicher bin ..... )
    Gruß, JG

    Kommentar


      #3
      ...und relative Adressierung mit ..self() funktioniert nicht?

      Kommentar


        #4
        Mit den gegebenen Infos kann ich keinen der Ansätze nachvollziehen. Return_parent() liefert ein Ergebnis, dass abhängig von der Position des eval Statements im Tree ist. Du schreibst aber nicht, in welchem Item das eval definiert ist.

        Deine Ansätze sehen für mich erstmal vom Python Syntax her etwas eigenwillig aus.
        Viele Grüße
        Martin

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

        Kommentar


          #5
          Es scheint zu funktionieren, aber bin mir unsicher ob's ein Zufall ist....
          ( wollte nicht zuviel schreiben .... )

          Code:
                          [[[[[test_betrieb]]]]]    # kommt alle 5 min nicht aenderbar
                              type = bool
                              knx_dpt = 1
                              knx_init = 2/3/100
          #                    knx_send = 2/3/100        # abweichend hinzu
          #                    enforce_updates = True    # abweichend hinzu, wieder entfernt da in_Betrieb zu schnell 0
                              [[[[[[alter]]]]]]
                                  type = num
                                  sqlite = yes
                                  eval = self.return_parent().age()        #alt sh.knx_raum.ug.flur_keller.bak_a.test_betrieb.age()
                                  eval_trigger = knx_raum.ug.flur_keller.bak_a.test_betrieb    # erforderlich da ohne aenderung nur lt cycle
                                  cycle = 60 = 5        # cycle = alles sec = wert  neu 5
                                  [[[[[[[max240]]]]]]]
                                      type = num
                                      visu = yes
                                      eval = "sh.knx_raum.ug.flur_keller.bak_a.test_betrieb.alter.db('max', '240h')" 
                                      eval_trigger = knx_raum.ug.flur_keller.bak_a.test_betrieb.alter
                              [[[[[[hi_reset]]]]]]
                                  type = num
                                  eval = self.return_parent()(self.return_parent()(0) if sh.knx_raum.ug.flur_keller.bak_a.test_betrieb.alter() > 180 else None)    # Die doppelten sind uebrigens korrekt so, das erste Paar gehoert zu return_parent das zweite holt den Wert
                                  cycle = 60 = 5    # neu mit Wert 0 voher ohne, da reset alter nicht ausgef und in Betrieb bleibt immer 1 neu 5
                                  enforce_updates = True
                              [[[[[[l_aender]]]]]]
                                  type = foo    # laeuft nur mit foo
                                  eval = self.return_parent().last_change().strftime("%H:%M:%S %d-%m")
                                  eval_trigger = knx_raum.ug.flur_keller.bak_a.test_betrieb    # ohne das laeuft es nicht
                              [[[[[[p_aender]]]]]]
                                  type = foo    # laeuft nur mit foo
                                  eval = self.return_parent().prev_change().strftime("%H:%M:%S %d-%m")
                                  eval_trigger = knx_raum.ug.flur_keller.bak_a.test_betrieb    # ohne das laeuft es nicht
          Gruß, JG

          Kommentar


            #6
            Autsch. Das sind ja noch die uralten conf Dateien. Welche Version SHNG nutzt Du denn? Den Converter von conf in yaml im backend oder admin interface kennst Du? Die ganzen Klammern machen einen ja irre ...

            Kommentar


              #7
              Ja, ja .... hab ich mir fast gedacht...
              ohne Klammern mach ich noch mehr falsch.
              Aber auch das wird ich noch ändern.
              Gruß, JG

              Kommentar


                #8
                Ich würde Dir empfehlen das schnellstens durch den Converter zu jagen und Dir einen Editor zu nehmen, der Yaml syntaktisch korrekt darstellen kann. Also nicht unbedingt Windows notepad sondern eher Notepad++, Atom, Brackets, VSCode etc.
                Dann wird es auch leichter Dir zu helfen.

                Kommentar

                Lädt...
                X