Ankündigung

Einklappen
Keine Ankündigung bisher.

Applikation (XML) mit Modulen / Submodulen

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

    ETS Applikation (XML) mit Modulen / Submodulen

    Hi 👋!

    Ich würde gern wissen was Modules und Submodules in den Applikations-XML genau sind und wie sie funktionieren. Leider hab ich dazu keinerlei Dokumentation gefunden. Kann mir da vielleicht jemand auf die Sprünge helfen der/die sich damit auskennt?

    Mein Ziel wäre es die ComObjectInstanceRef RefId korrekt bis zum ComObject aufzulösen. Aber sobald "MD-*_M-*_MI-*" bei den RefIds vorangestellt ist bin ich nicht mehr sicher wie man das zuverlässig macht.

    Kann mir vielleicht auch jemand ein Gerät nennen das Submodules verwendet? Für Tests. Eines mit Modules hätt ich schon mal gefunden.

    #2
    Das klingt doch ganz nach einer Frage für diese beiden Herren: mumpf und thewhobox.
    ----------------------------------------------------------------------------------
    "Der Hauptgrund für Stress ist der tägliche Kontakt mit Idioten."
    Albert Einstein

    Kommentar


      #3
      Module sind vereinfacht gesagt Templates.

      Als Beispiel hast du ein Module für einen Binäreingang (also einen Kanal davon).
      Im Dynamic Teil kannst du diesen dann beliebig oft vervielfachen. Bei änderungen musst du das dann nur ein mal anpassen und nicht für jeden Kanal einzeln.

      Submodule sind das gleiche nur eine ebene tiefer.
      Du kannst also Submodule beliebig oft im Dynamic des Moduls vervielfachen.
      Ich habe noch kein Szenario gefunden, wo solche Submodule wirklich hilfreich wären.

      Um das dann später allerdings auch an die richtige Stelle im Speicher zu schreiben bzw die richtige KO Nummer zu haben gibt es auch Argumente für die Module.


      Submodule habe ich auch noch keine gesehen.
      Diese sollten aber den Präfix "_SM-[ID]" mit sich bringen.
      OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

      Kommentar


        #4
        Hi meti,

        ich weiß leider nicht mehr welches, aber mindestens eines der KNX Virtual Geräte enthält modules, das kann man sich als Beispiel anschauen. Ich hab leider einen neuen Laptop, deswegen hab ich meine damaligen Experimente nicht mehr.

        Ich selbst habe noch nicht mit modules gearbeitet, da ich einen eigenen Präprozessor entwickelt habe, der zum gleichen Ergebnis führt (und noch mehr macht), deswegen war es nicht nötig.

        Zitat von thewhobox Beitrag anzeigen
        Ich habe noch kein Szenario gefunden, wo solche Submodule wirklich hilfreich wären.
        Ich hätte schon einen:
        Ich habe einen PM geschrieben mit 20 Kanälen (das wären dann Modules). Jeder Kanal hat nicht nur Tag/Nacht, sondern 4 Tagesphasen Tag/Nacht/Morgen/Abend. Jede Tagesphase ist identisch, somit könnte man daraus ein Submodule machen und vervierfachen.

        thewhobox Kann an Submodules schachteln?

        Gruß, Waldemar
        OpenKNX www.openknx.de

        Kommentar


          #5
          Ok danke schon mal 👍

          Weißt du zufällig auch ob diese "MD-*_M-*_MI-*_O-2_R-9" Präfixe in der Reihenfolge garantiert sind? Bzw. wo man Dokumentation dazu findet?
          Im Project Schema steht nur
          Reference to a ComObjectRef RELIDREF means, the Id is stripped of the parent part, e.g. “O-2_R-9”
          aber da ist nirgends ausgeführt was genau der "parent part" ist.

          Ich bin davon ausgegangen dass das diese Ref mit dem ApplicationProgramRef vom hardware.xml (Hardware2Programs/Hardware2Program/ApplicationProgramRef - RefId) prepended werden muss um auf die ID der ComObjectRef (Application) zu kommen. Aber das funktioniert nur ohne Module.

          Mit Modulen müsste ich noch das `MD-1_M-2_MI-1` auf `MD-1_M-2` auflösen über <ModuleInstance Id="MD-1_M-2_MI-1" RefId="MD-1_M-2" RepeatIndex="502x1"> aber dann steh ich an 🫤
          Zuletzt geändert von meti; 22.08.2022, 08:21.

          Kommentar


            #6
            Zitat von meti Beitrag anzeigen
            der "parent part" ist.
            Der Parent Part ist die ID des Elements über dem.

            Code:
            <Module Id="M-0000_A-0000-00-0000_MD-1">
              <SubModule Id="M-0000_A-0000-00-0000_MD-1_SM-1>
                 <ComObject Id="M-0000_A-0000-00-0000_MD-1_SM-1_O-1 />
                   <ComObjectRef Id="M-0000_A-0000-00-0000_MD-1_SM-1_O-1_R-1 />
            Im Dynamic rufst du dann wie folgt auf:
            <Module Id="M-0000_A-0000-00-0000_MD-1_M-1" RefId="M-0000_A-0000-00-0000_MD-1">

            Module sind in der KNX Virtual Raumsensor und Schaltaktor enthalten.
            Produktdatenbanken mit Submodulen kenne ich aber nicht.

            mumpf dass du ein Anwendungsfall dafür hast überrascht mich nicht. Bei deinen riesigen Applikationen muss ja was passen.
            Code:
            <xs:complexType name="ModuleDef_t">
                <xs:sequence>
                  <xs:element name="SubModuleDefs" minOccurs="0" maxOccurs="1">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="ModuleDef" type="knx:ModuleDef_t" minOccurs="1" maxOccurs="unbounded">
            Da SubModule im xsd auch einfach nur ModuleDefines sind, sollten sich diese auch schachteln lassen.
            OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

            Kommentar


              #7
              Eine Applikation mit Modulen hab ich eh gefunden - irgendein MDT Schalter benutzt das anscheinend. Nur Submodule hab ich noch nicht gesehen.

              Zitat von thewhobox Beitrag anzeigen
              Der Parent Part ist die ID des Elements über dem.
              Ich geh ja von den ComObjectInstanceRef der 0.xml des Projekts aus. Da sieht das in etwa so aus:

              Code:
              <DeviceInstance Id="P-0710-0_DI-24" ProductRefId="M-0083_H-154-1_P-BE.2DTAS55T4.2E01" Hardware2ProgramRefId="M-0083_H-154-1_HP-0098-11-29A3" ...>
                <ParameterInstanceRefs>
                  ...
                </ParameterInstanceRefs>
                <ComObjectInstanceRefs>
                 <ComObjectInstanceRef RefId="O-72_R-10" Links="GA-209" />
                 <ComObjectInstanceRef RefId="MD-1_M-2_MI-1_O-2-0_R-99" Text="T3/4: Rollladen" Links="GA-23" />
                 <ComObjectInstanceRef RefId="MD-1_M-2_MI-1_O-2-3_R-152" Text="T3/4: Rollladen" Links="GA-26" />
                 <ComObjectInstanceRef RefId="MD-1_M-2_MI-1_O-2-0_R-1" Text="T3/4: Rollladen" />
                 <ComObjectInstanceRef RefId="MD-1_M-2_MI-1_O-2-3_R-124" Text="T3/4: Rollladen" />
                 <ComObjectInstanceRef RefId="O-80_R-146" ChannelId="CH-4" Links="GA-27" />
                 <ComObjectInstanceRef RefId="MD-1_M-2_MI-1_O-2-1_R-100" Text="T3/4: Rollladen" Links="GA-24" />
                </ComObjectInstanceRefs>
                <ModuleInstances>
                 <ModuleInstance Id="MD-1_M-2_MI-1" RefId="MD-1_M-2" RepeatIndex="502x1">
                   <Arguments>
                    ...
                   </Arguments>
                 </ModuleInstance>
                </ModuleInstances>
                <GroupObjectTree GroupObjectInstances="O-74_R-1 O-77_R-2 O-78_R-3 O-79_R-4 O-72_R-10 O-73_R-12 O-65_R-15 O-66_R-16 O-67_R-17 MD-1_M-2_MI-1_O-2-3_R-152 MD-1_M-2_MI-1_O-2-0_R-99 MD-1_M-2_MI-1_O-2-1_R-100">
                 <Nodes>
                   ...
                 </Nodes>
                </GroupObjectTree>
                <Security .../>
              </DeviceInstance>
              Ausgehend von dem letzten ComObjectInstanceRef
              Code:
              <ComObjectInstanceRef RefId="MD-1_M-2_MI-1_O-2-1_R-100" Text="T3/4: Rollladen" Links="GA-24" />
              würde ich in der Applikation dann vermutlich
              Code:
              <ComObjectRef Id="M-0083_A-0098-11-29A3_MD-1_O-2-1_R-100" RefId="M-0083_A-0098-11-29A3_MD-1_O-2-1" DatapointType="DPST-1-9" ... />
              auflösen wollen.

              Aber ob ich aus der RefId einfach das "M-*_MI-*_" raus-regexen kann wage ich zu bezweifeln - bzw. denke ich dass mir das früher oder später auf den Kopf fallen wird 😐
              Das "MI-" würde ja über die ModuleInstance RefId gehen, für das "M-" finde ich aber nix.

              Kommentar


                #8
                Ich habe noch nicht genau verstanden, was genau du vor hast.
                Du willst aus dem Projekt Rückschlüsse auf die Produktdatenbank machen?

                Das MI in der ID kannst du weg lassen.
                Diese ModuleInstance ist das Module im Dynamic.
                Das "MD-1_M-2" gehört zusammen. Das ist die ID aus dem Dynamic
                OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

                Kommentar


                  #9
                  Ja genau, ich möchte aus dem Projekt die KOs mit DPT und Flags rausparsen.
                  In der 0.xml (ComObjectInstanceRef) sind aber nur Änderungen an den Standardeinstellungen eingetragen. Die Standardeinstellungen selber muss man aus der Applikation suchen (über ComObjectRef und ComObject).

                  Dh. ich suche die passende ComObjectRef (Applikation) für alle ComObjectInstanceRef (0.xml).

                  Siehe https://github.com/XKNX/xknxproject bzw. https://github.com/XKNX/xknxproject/issues/67
                  Zuletzt geändert von meti; 22.08.2022, 09:43.

                  Kommentar


                    #10
                    Achso okay.

                    Habs grad mal mit den KNX Virtual Geräten nachgeschaut.
                    Also eigentlich kannst du bei
                    Code:
                    <ComObjectInstanceRef RefId="MD-2_M-1_MI-1_O-2-0_R-4" Links="GA-1" />
                    das "M-1_MI-1_" entfernen und dann bei den ComObjectRefs mit EndsWith("MD-2_O-2-0_R-4") suchen:
                    Code:
                    <ComObjectRef Id="M-00FA_A-0221-23-21AF_MD-2_O-2-0_R-4" RefId="M-00FA_A-0221-23-21AF_MD-2_O-2-0" />
                    OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

                    Kommentar


                      #11
                      Danke sehr!

                      So hab ich das befürchtet 🤣 ist halt doof dass sowas nirgends dokumentiert ist. Eben um sich zu vergewissern dass die Reihenfolge immer gleich sein muss etc.

                      Wo hast du eigentlich die Infos her wie du die Applikationen bauen musst damit die auch funktionieren? Hab ich da irgendwas übersehen in den Specs die es auf my.knx.org gibt?

                      Kommentar


                        #12
                        Ich hab mir das alles beigebracht indem ich mir einfach genügend viele Produktdatenbanken angeschaut habe und dann den gegen Vergleich mit selbst erstellten Produktdatenbanken gemacht habe.

                        Was auch oft hilft ist das XSD.
                        OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

                        Kommentar


                          #13
                          Zitat von meti Beitrag anzeigen
                          Kann mir vielleicht auch jemand ein Gerät nennen das Submodules verwendet?
                          Bin jetzt doch auf eines gestoßen: Zennio Z100
                          für den Fall, dass noch jemand Anderes mal so ein Beispiel sucht.

                          Mal sehen wie das so funktioniert 🙃

                          Kommentar

                          Lädt...
                          X