Ankündigung

Einklappen
Keine Ankündigung bisher.

structs: relative Adressen für knx_send/listen und andere

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

    structs: relative Adressen für knx_send/listen und andere

    Hallo ihr Lieben,

    ich setze mich gerade mit structs auseinander. Mein Plan: repetitive Strukturen möglichst einfach erstellen, also RTRs, Rollos, .... Mein Plan: Im Parent Item gibt es eine Property mit dem GA-Stamm:
    Code:
    testraum:
        name: Testing Hall
        knx_base: 3/3/
    
        heizung:
            struct: my.standard_rtr.standard_rtr
    im struct soll dann die GA komplettiert werden. Und genau da klemmt's. Erster Versuch war ganz plump:
    Code:
    standard_rtr:
      temperatur:
        ist:
          name: Ist-Temperatur
          type: num
          visu_acl: r
          knx_dpt: 9
          knx_listen: ....knx_base + '64'
    Das funktioniert schonmal nicht. Nächster Versuch war über eval mit:
    Code:
    eval knx_listen = (sh.....knx_base() + str('64'))
    Das scheitert aber schon in der Syntax Prüfung:
    Code:
    eval sh.wohnen.ug.mitte.heizung.temperatur.ist.knx_listen =(sh.wohnen.ug.mitte.knx_base() + str('64'))
    Ergebnis der Berechnung des Ausdrucks: Problem evaluating eval sh.wohnen.ug.mitte.heizung.temperatur.ist.knx_list en =(sh.wohnen.ug.mitte.knx_base() + str('64')): invalid syntax (<string>, line 1)
    Datentyp des berechneten Ausdrucks: str

    Update:
    Ich bin einen Schritt weiter gekommen: Im eval Syntaxprüfer bekomme ich nun zumindest die zusammengesetzte Adresse hin:
    Code:
    sh.....property.knx_base + str(64)
    Die Ausgabe liefert wie gewünscht:
    Code:
    sh.wohnen.ug.mitte.property.knx_base + str(64)
    Ergebnis der Berechnung des Ausdrucks: 3/2/64
    Datentyp des berechneten Ausdrucks: str
    Jetzt muss ich das Ergebnis "nurnoch" knx_listen zuordnen....

    Meine Frage ist ganz einfach: Wie geht's richtig? und geht das überhaupt?

    Beste Grüße

    Timo
    Zuletzt geändert von unknownuser; 16.05.2024, 09:37.

    #2
    Ungetestet, Unterstriche und relative Item-Attribut-Referenzen beachten:

    Item-Definition:
    Code:
    item:
        _knx_base: 2/5
    Struct-Definition:
    Code:
    my_struct:
        knx_listen_: "{..:_knx_base}/4"

    Kommentar


      #3
      Hallo Morg,

      Es hat funktioniert! Musste die relative Item-Attribut-Referenz noch anpassen (....:_knx_base) um weit genug nach oben zu kommen, aber es geht! 🤩

      Bleibt nur ein (persönliches) Problem: Ich habe keine Ahnung wieso deine Syntax die Richtige ist. Kannst du mir ein paar Schlagworte geben, damit ich das nachlesen kann?

      Auf jeden Fall: Vielen Dank!

      Beste Grüße Timo

      Kommentar


        #4
        https://smarthomeng.github.io/smarth...ibutwerten-neu

        Kommentar


          #5
          Oh man! Da habe ich voll dran vorbei gelesen... War die ganze bei den relativen Item-Referenzen unterwegs...

          Nun tut sich aber schon das nächste Problem auf: ich will ein sv_widget_ anlegen. Zuerst hatte ich das Problem, dass die Widget-Definition mit "{{" beginnt. Also habe ich versucht die geschweiften Klammern in ein eigenes Attribut zu packen:
          Code:
          standard:
              name: Raumtemperatur-Regler
              _begin: "{{"
              _end: "}}"
              sv_blocksize: 1
              sv_widget_: "{.:_begin} device.rtr('rtr', 'Heizung', '{.modus.enable:property.path}', 'bath_rtr_set', 'bath_rtr_comfort', 'bath_rtr_night', 'bath_rtr_frost', 'bath_rtr_state', 'bath_rtr_text') {.:_end}"
          Ich habe noch keine Ahnung, ob er das {.modus.enableroperty.path} überhaupt akzeptiert, denn aktuell komme ich nur bis zu den geschweiften Klammern:

          Inhalt von 'sv_widget' im Item Tree zur Laufzeit
          Code:
          {{ device.rtr(&#x27;rtr&#x27;, &#x27;Heizung&#x27;, &#x27;{.modus.enable:property.path}&#x27;, &#x27;bath_rtr_set&#x27;, &#x27;bath_rtr_comfort&#x27;, &#x27;bath_rtr_night&#x27;, &#x27;bath_rtr_frost&#x27;, &#x27;bath_rtr_state&#x27;, &#x27;bath_rtr_text&#x27;) {.:_end}
          Logfile:
          2024-05-17 22:27:20 WARNING lib.item.item Item ug_mitte.heizung, attribute sv_widget_: Invalid var definition - '}' is missing
          Will ich an dieser Stelle zu viel, oder gibt es einen Weg?

          Edit:
          Ich habe gerade gesehen, dass sich mein Problem nicht lösen lässt. Die Dolu sagt nämlich ganz klar:
          Es ist hierbei (wie bei der Vererbung) ist nur ein Zugriff auf Items oberhalb in der Item Hirarchie möglich.
          Beste Grüße Timo
          Zuletzt geändert von unknownuser; 17.05.2024, 22:30.

          Kommentar


            #6
            Bei widgets bin ich raus

            Kommentar


              #7
              Anstelle des item-Namens kannst Du im Widget-Code auch das Schlüsselwort „item“ angeben. Beispiel aus der Doku:
              Code:
              light:
                  name: Light
                  type: bool
                  visu_acl: rw
                  sv_widget: "{{ device.dimmer('item', 'item.name', 'item', 'item.level') }}"
                  knx_dpt: 1​
                  knx_listen: 3/2/12
                  knx_send: 3/2/12
              
                  level:
                      type: num
                      visu_acl: rw
                      knx_dpt: 5
                      knx_listen: 3/2/14
                      knx_send: 3/2/14​
              Bei der Seitengenerierung wird das Schüsselwort „item“ durch das item ersetzt, in dem die Definition gefunden wurde.
              Code:
              {{ device.dimmer('light', 'Light', 'light', 'light.level') }}
              Das sollte eigentlich für das struct passen. Hast Du das mal versucht?

              Gruß
              Wolfram

              Kommentar

              Lädt...
              X