Ankündigung

Einklappen
Keine Ankündigung bisher.

Item Property Wert aus anderem Property übernehmen

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

    Item Property Wert aus anderem Property übernehmen

    Hallo zusammen,

    ich bin neu hier und das ist auch mein erster Beitrag hier im Forum.
    Ich möchte mich in das Thema SmartHomeNG einarbeiten und sobald alles funktioniert von meiner Loxone umsteigen.
    Allerdings ergibt sich bei mir noch die ein oder andere Verständnisfrage.
    Ich komme aus der Computerprogrammierung und möchte daher Werte möglichst nicht mehrfach im Programmcode stehen haben sondern nur an einer Stelle.
    Dieses Vorgehen versuche ich gerade mit meinen Gruppenadressen in SmartHomeNG umzusetzen. Allerdings gelingt mir das nicht so recht.

    Ich benötige eine KNX Gruppenadresse an mehreren Stellen und möchte sie nur ein Mal schreiben und dann an allen anderen Stellen darauf referenzieren. Nur leider bekomme ich das nicht hin.
    Bitte lasst mal die Sinnhaftigkeit folgenden Stücks Konfiguration unberührt.
    Code:
    # haus.yaml
      
      OG:
        Buero:
          name: "Büro"
    ​      schalten:
            name: "Licht"
            type: bool
            knx_dpt: 1
            knx_init: 1/2/19
            knx_send: 1/2/18
    ​
          status:
            name: "Licht Status"
            type: bool
            knx_dpt: 1
            knx_init: [I][B]Hier soll der Wert von ..schalten.knx_init stehen[/B][/I]
    ​      
    ​
    Leider erhalte ich im Log immer die Meldung
    Item 'OG.Buero.Beleuchtung.Licht1.status', attribute 'knx_init': value 'sh..schalten.property.knx_init' can not be converted to type 'knx_ga' (defined in haus.yaml)
    Später soll dieser Block ein einer Struktur ausgelagert werden, sodass ich für alle Items dieselbe Struktur verwenden kann und nur noch die KNX-Gruppenadressen setzen muss.

    Wäre super, wenn mir jemand dabei helfen könnte.

    Grüße Marco

    #2
    Herzlich willkommen im Forum.

    Dein Problem rührt daher, dass die von Dir verwendete relative Adressierung nur für Items, nicht jedoch für Attribute von Items, funktioniert.

    Für Attribute von Items gibt es nur eine hierarchische Möglichkeit Attribut-Werte vom Parent-Item oder Grandparent-Item zu übernehmen, wie es hier beschrieben ist.
    Um diese Vererbung zu verwenden, müsstest Du knx_init (und der Einheitlichkeit halber auch knx_sent) im übergeordneten Item (Büro) definieren und in den schalten und status Items das Attribut mit knx_init: ..:. erben.

    Ich stelle mir aber die Frage, wozu Du das status Item überhaupt brauchst. Die Information ist eine Dopplung der Information, die Du bereits im schalten Item hast.
    Wenn Du die Status Information aus dem schalten item jedoch nicht verwenden willst, brauchst Du dort knx_init auch nicht anzugeben und kannst es stattdessen im status Item definieren.

    Die ein- und ausgehende Information auf zwei Items zu verteilen, ist im allgemeinen aber keine gute Idee. Du bekommst spätestens Probleme, wenn Du dieses Informationen in der smartVISU visualisieren möchtest.
    Viele Grüße
    Martin

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

    Kommentar


      #3
      Hallo Martin,

      danke für die schnelle Antwort. Das mit dem Vererben der Attribute war ein guter Hinweis. So funktioniert es.
      Wie gesagt, das Beispiel war vielleicht auch nicht realitätsnah. Mir ging es eher darum, ob es prinzipiell machbar ist.

      Eine konkrete Aufgabenstellung habe ich aber. Ich habe einen Schaltaktor der mir einen Status zurückgibt. In Abhängigkeit vom aktuellen Status soll immer das negierte Signal zum Schalten des Aktors als Gruppenadresse geschickt werden.
      Und das ganze soll noch über ein anderes KNX Signal getigert werden.
      Also in etwa so:
      Schaltaktor Status: 1/2/3
      Schaltaktor Schalten: 4/5/6
      Triggersignal: 7/8/9

      Wenn Triggersignal (7/8/9) kommt dann soll das Schaltsignal (4/5/6) den negierten Wert vom Status (1/2/3) schicken.

      Vielleicht kannst du mir da auch noch weiterhelfen

      Kommentar


        #4
        Da gibt es diverse Möglichkeiten. Die erste die mir einfällt, ist die Verwendung von on_change:
        (Der folgende Code ist nicht getestet)
        Code:
        test:
            schaltaktor:
                type: bool
                knx_listen: 1/2/3
                knx_send: 4/5/6
            triggersignal:
                type: bool
                knx_listen: 7/8/9
        ​        on_change: test.schaltaktor = not sh.test.schaltaktor()
        Hierbei wird bei jedem Wechsel des Zustandes von triggersignal ausgelöst (beim Wechsel 0 auf 1 und beim Wechsel von 1 auf 0)

        Wenn Nur beim Wechsel von 0 auf 1 ausgelöst werden soll, müsste triggersignal folgendermaßen definiert werden:
        Code:
        test:
            triggersignal:
                type: bool
                knx_listen: 7/8/9
        ​        on_change: test.schaltaktor = not sh.test.schaltaktor() if value == 1 else None

        Einen Nachtrag noch zu meinem vorherigen Beitrag:
        Du solltest gut überlegen, ob Du die Stati beim Start von SmartHomeNG wirklich direkt mit knx_init vom KNX Device lesen willst. Das kann bei vielen Items zu einer Auslastung des KNX Busses führen. Besser ist es stattdessen knx_cache zu verwenden. Hierbei wird der KNXD einen gecachten Wert zurück melden und nur, wenn im Cache von KNXD kein Wert vorhanden ist, wirklich beim Device anfragen.
        Viele Grüße
        Martin

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

        Kommentar

        Lädt...
        X