Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehler in Properties?

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

    Fehler in Properties?

    Ich möchte mittels Items ermitteln, wann es das letzte Mal wie lange geregent hat. Hier hatte ich schon andere Ansätze im Forum mittels Datenbank, aber irgendwie ging das nicht. Nun möchte ich das mit Items probieren. Gleich dabei habe ich mich auch über die neuen Properties gefreut. Vor allem, weil die Property-Namen wesentlich besser passen (siehe Funktion: last_change und prev_value). Das ist bei den Properties besser.

    So sieht das mit den Funktionen aus:

    Code:
                Regen:
                    type: bool
                    knx_dpt: 1
                    knx_cache: 4/3/0
                    visu_acl: rw
                    database: yes
                    Regen_Dauer:
                        type: num
                        eval: (sh...Regen_Ende() - sh...Regen_Beginn()).total_seconds() if sh...Regen_Ende() is not None and sh...Regen_Beginn() is not None else None
                        eval_trigger: ..Regen_Ende
                    Regen_Beginn:
                        type: foo
                        cache: yes
                        eval: sh....Regen.last_change() if sh....Regen() and not sh....Regen.prev_value() else None
                        eval_trigger: ...Regen
                    Regen_Ende:
                        type: foo
                        cache: yes
                        eval: sh....Regen.last_change() if not sh....Regen() and sh....Regen.prev_value() else None
                        eval_trigger: ...Regen

    Mit den Properties sähe das denn so aus:

    Code:
                    Regen_Beginn:
                        type: foo
                        cache: yes
                        eval: sh....Regen.property.last_change if sh....Regen() and not sh....Regen.property.last_value else None
                        eval_trigger: ...Regen

    Leider wird der relative Item-Pfad nicht so recht aufgelöst. Oder, was mache ich falsch?

    Code:
    2019-07-22  18:14:54 WARNING  lib.item          Item Zentral.Wetter.Wetterstation.Regen.Regen_Beginn: problem evaluating sh.Zentral.Wetter.Wetterstation.Regen.property.last_change if sh....Regen() and not sh.Zentral.Wetter.Wetterstation.Regen.property.last_value else None: invalid syntax (<string>, line 1)

    #2
    Ja, mit relativen Pfaden geht das aktuell im Master branch wohl tatsächlich noch nicht.
    Im Prinzip sollte es reichen in der Datei lib/item.py nach Zeile 897 folgende Zeile einzufügen:
    Code:
    value = self.get_stringwithabsolutepathes(value, 'sh.', '.property', KEY_EVAL)
    Ein schneller Test meinerseits war erfolgreich. Aber ich weiß nicht, ob das wirklich alle möglichen Fälle abdeckt. Da sollte Msinn mal rein gucken.

    Kommentar


      #3
      Okay, um das Ganze auch in Mischform zu realisieren, müsste der Code für die absolutepathes noch angepasst werden. Den Endtag könnte man als Liste zB ['(', '.property') angeben..
      Code:
      endtags = [endtags] if isinstance(endtags, str) else endtags
      
              while (rest.find(begintag+'.') != -1):
                  endtag = ''
                  previousposition = 1000
                  for end in endtags:
                      position = rest.find(end)
                      if position < previousposition and not position == -1:
                          endtag = end
                          previousposition = position
      So wird immer der nächste passende Endtag gefunden und die Pfade sollten sauber aufgelöst werden.

      Kommentar

      Lädt...
      X