Ankündigung

Einklappen
Keine Ankündigung bisher.

sh.match_items(regex) und andere Fragen

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

    sh.match_items(regex) und andere Fragen

    Hallo,

    eine paar kurze Zwischenfragen an euch:

    Frage 1:

    Ich bin mir über die Verwendung von sh.match_items() nicht ganz im klaren. In der Doku steht ja folgendes:
    sh.match_items(regex)

    Returns all items matching a regular expression path and optional attribute.for item in sh.match_items('*.lights'): # selects all items ending with 'lights' logger.info(item.id())for item in sh.match_items('*.lights:special'): # selects all items ending with 'lights' and attribute 'special' logger.info(item.id())
    Kann ich damit nur boolsche Attribute selektieren? Also:
    Code:
    [Wohnen]
    [[RTR]]
    automatik = true
    
    [Abstellraum]
    [[RTR]]
    Code:
    for item in sh.match_items('*.RTR:automatik'): #Jetzt sollte nur die Küche gewählt sein(?)
         item.komfort(1)
    Oder kann ich auch Werten von Attributen selektieren?

    Code:
    [Wohnen]
    [[RTR]]
    automode = tagnacht gaeste abwesend
    
    [Abstellraum]
    [[RTR]]
    automode = abwesend
    Code:
    for item in sh.match_items('*.RTR:automode = abwesend')
    Ginge das auch?

    Frage 2:

    Zu sh.item.age(): Wird das Alter bei jedem Schreiben oder nur bei Wertänderung zurückgesetzt? Ist das von enforce_updates abhängig?

    Frage 3:

    Wie lasse ich am einfachsten den aktuellen Wert eines Items zyklisch auf den Bus schreiben? Meine Heizung will regelmäßig ihre Befehle wiederholt bekommen sonst macht sie was SIE für richtig hält. Mit dem Cycle Attribut hatte ich, auch mit enforce_updates, keinen Erfolg.

    Vielen Dank schonmal für eure Antworten!

    Grüße Timo
    Zuletzt geändert von unknownuser; 11.08.2016, 20:03.

    #2
    Hallo Timo

    Frage 1:
    Ob boolsch, sonst etwas oder gar kein Wert spielt kein Rolle.
    Code:
    [Wohnen]
    [[RTR]]
    automatik
    müsste sogar reichen (also Attribut ohne Wert).

    Nach Werten suchen ist in der aktuellen Version nicht möglich. Es gibt aber einen Patch dafür, der in einer der kommenden Versionen wohl integriert wird. Du findest den Patch als Pull request auf Github.

    Frage 2:
    Wenn ich mich nicht irre, wird age nur bei Wertänderung aktualisiert. Von diesen Change-Funktionen wird einzig last_update() auch ohne Wertänderung aktualisiert und zwar nur, wenn enforce_updates gesetzt ist.


    Frage 3:
    Versuch mal folgendes (ungetestet):
    Code:
    [Heizung]
    [[Wert]]
    knx_send = 1/2/3
    enforce_updates = True
    [[[Sender]]]
    cycle = 10 = 0
    enforce_updates = True
    eval = self.return_parent()(self.return_parent()())
    Dieses müsste den aktuellen Wert von Heizung.Wert alle 10 Minuten erneut senden.
    Die doppelten () sind übrigens korrekt so, das erste Paar gehört zu return_parent, das zweite holt den Wert.

    Gruss
    Stefan
    Zuletzt geändert von smai; 08.08.2016, 08:28.

    Kommentar


      #3
      Zitat von smai Beitrag anzeigen
      Code:
      [[[Sender]]]
      cycle = 10 = 0
      enforce_updates = True
      eval = self.return_parent()(self.return_parent()())
      Hi Stefan,

      cooles Pattern, muss ich mir merken!

      Gruß, Waldemar

      OpenKNX www.openknx.de

      Kommentar


        #4
        Moin,

        vielen Dank für eure Antworten! Zu Problem 3: Stefan deine Idee funzt leider nicht. Hier mal die Infos:

        putty.jpg

        Wie ihr sehen könnt kommt die GA nicht (12/1/10) sekündlich. Habe vorher 12/1/10 händisch gesetzt um Probleme zu vermeiden weil der Wert leer ist.

        Hier die Conf
        Code:
        [heizung]
            [[zirkulation]]
            type = bool
            knx_dpt = 1
            knx_send = 12/1/10
            knx_listen = 12/1/10
            enforce_updates = True
            
                [[[laufzeit]]]
                type = num
                knx_dpt = 5
                knx_send = 12/1/17
                knx_listen = 12/1/17
                knx_cache = 12/1/17
                
                [[[auto]]]
                type = bool
                knx_dpt = 1
                knx_send = 12/1/9
                knx_listen = 12/1/9
                
                [[[Sender]]]
                cycle = 1 = 0  # Etwas schneller für den ungedulgigen Tester ;)
                enforce_updates = True
                eval = self.return_parent()(self.return_parent()())
        Die Debug-Ausgabe hält keine Überraschungen bereit:
        Code:
        2016-08-11 07:46:08,834 DEBUG    Main         KNX: heizung.zirkulation.laufzeit listen on 12/1/17 -- __init__.py:parse_item:235
        2016-08-11 07:46:08,839 DEBUG    Main         KNX: heizung.zirkulation.laufzeit listen on and init with cache 12/1/17 -- __init__.py:parse_item:254
        2016-08-11 07:46:08,850 DEBUG    Main         KNX: heizung.zirkulation.auto listen on 12/1/9 -- __init__.py:parse_item:235
        2016-08-11 07:46:08,864 DEBUG    Main         Item heizung.zirkulation.Sender: no type specified. -- item.py:__init__:242
        Hab ich nen Fehler drin? Alternative Ideen?

        Viele Grüße

        Timo

        Kommentar


          #5
          Hmm...
          Vielleicht braucht das Item Sender noch einen type, damit es überhaupt ausgewertet wird.
          Sonst fällt mir auch kein Fehler auf.

          Kommentar


            #6
            Zitat von smai Beitrag anzeigen
            Vielleicht braucht das Item Sender noch einen type, damit es überhaupt ausgewertet wird.
            Ja!
            Viele Grüße
            Martin

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

            Kommentar


              #7
              Jawollek! Der Type war's! Vielen Dank

              Kommentar

              Lädt...
              X