Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehler bei eval: max (bzw. min)

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

    Fehler bei eval: max (bzw. min)

    Hi,

    bin auf einen kleinen Bug gestoßen... Ich bekomme folgende Fehlermeldung:
    Item KG.Fenster: problem evaluating max(sh.KG.WK.Fenster.Nord()): 'int' object is not iterable
    Python scheint als Argument eine Liste zu erwarten, wenn ich max(5) mache, kommt genau die gleiche Fehlermeldung. Andererseits ist max(5) nun mal 5...

    Das Problem entsteht bei mir, weil ich folgendes Konstrukt verwende:
    Code:
    eval: max
    eval_trigger: *.*.Fenster.*:einzelfenster
    Jetzt haben einige Räume mehrere Fenster, dann wird der eval folgendermaßen aufgebaut:
    Code:
    max(sh.EG.WZ.Fenster.Ost(), sh.EG.WZ.Fenster.Sued())
    Hier läuft der max() durch. In Fällen, wo es nur ein Fenster gibt, gibt es den o.a. Fehler.

    Ich wollte hiermit bitten, dass bei Gelegenheit in die Routine _init_prerun in lib.item folgendes ergänzt wird:
    Code:
                if self._eval:
                    # Build eval statement from trigger items (joined by given function)
                    items = ['sh.' + x.id() + '()' for x in _items]
                    if self._eval == 'and':
                        self._eval = ' and '.join(items)
                    elif self._eval == 'or':
                        self._eval = ' or '.join(items)
                    elif self._eval == 'sum':
                        self._eval = ' + '.join(items)
                    elif self._eval == 'avg':
                        self._eval = '({0})/{1}'.format(' + '.join(items), len(items))
                    elif self._eval == 'max':
                        self._eval = 'max([COLOR=#FF0000][[/COLOR]{0}[COLOR=#FF0000]][/COLOR])'.format(','.join(items))
                    elif self._eval == 'min':
                        self._eval = 'min([COLOR=#FF0000][[/COLOR]{0}[COLOR=#FF0000]][/COLOR])'.format(','.join(items))
    Dann klappt es auch mit einzelnen Werten. Wobei ich natürlich kein Python-Spezi bin und womöglich Fälle übersehe...

    Gruß, Waldemar
    OpenKNX www.openknx.de

    #2
    Zitat von mumpf Beitrag anzeigen
    Andererseits ist max(5) nun mal 5
    Stimmt, andererseits wusste ich das auch schon ohne max() Funktion .

    Der Fehler hatte sich ja gut versteckt, da er schon seit Anbeginn der Zeit dort schlummert.

    Den Spezialfall, dass max() nur ein Wert übergeben wird fange ich ab. Allerdings nicht da, wo Du meinst, das führt dann evtl. zu Problemen, wenn Du wirklich mehrere Werte angibst, Weil Du dann zwei ineinander geschachtelte Listen erhalten müsstest.

    Viele Grüße
    Martin

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

    Kommentar

    Lädt...
    X