Information about KnxProd - OpenKNX/OpenKNX GitHub Wiki

Table of Contents

Scope

Hier gibt es Informationen über den Inhalt und die Struktur von knxprod xml Produktdatenbanken.

OpenKNX Festlegungen

Application-ID (AppID)

Bitte lesen: How to create an OpenKNX device

Wir haben uns auf die Nutzung des Bereiches 0xA000 to 0xAFFF geeinigt:

AppId HEX AppId DEC Manufacturer
0xA000 to 0xA0FF 40960 to 41215 mumpf
0xA100 to 0xA1FF 41216 to 41471 Ing-Dom
0xA200 to 0xA2FF 41472 to 41727 Masifi
0xA300 to 0xA3FF 41728 to 41983 traxanos
0xA400 to 0xA4FF 41984 to 42239 thewhobox
0xA500 to 0xA5FF 42240 to 42495 damic
0xA600 to 0xA60F 42496 to 42512 ab-tools
0xAC00 to 0xACFF 44032 to 44287 cornelius-koepp
0xAE00 to 0xAE28 44544 to 44584 ginkel
0xAE29 to 0xAE69 44585 to 44649 mgeramb
0xAEA0 to 0xAEAF 44704 to 44719 Marco Langhans
0xAF00 to 0xAFFF 44800 to 45055 No public usage

Hier ist eine Übersicht der OpenKNX Applikationen: Application-Overview

Werte

Tag Attribut Wert Kommentar
ApplicationProgram Name Freitext default OpenKNX-<ApplicationName>-<Suffix>, oder z.B. OpenKNX-Logic-Presence
Hardware Name ???
Hardware SerialNumber $AppID
Hardware Version 1
Product Text OpenKNX: <ApplicationName> (<Suffix>) wird im Katalog in der Spalte "Name" angezeigt
Product OrderNumber Freitext default: $AppID, oder z.B. Referenz aufs Device SOM-UP, ...
CatalogSection Name OpenKNX Gliederung im Katalog
CatalogSection Number OpenKNX Gliederung im Katalog
CatalogItem Name OpenKNX: <ApplicationName> (<Suffix>)
CatalogItem Number 1

$ApplicationName = Name der Application, z.B. "Logikmodul"

$AppID = ID der Application in hexadezimaler Darstellung ohne 0x, z.B. "AF01" (oder mit 0x ??)

$Suffix = z.B: Beta, Big, ...

Ergebnis der Diskussion am 09.11.2023

Id Schema und Ersetzung (nur OpenKNXproducer)

Um Kollisionen von IDs beim Zusammenführen von Modulen und beim Vervielfachen von Kanälen zu vermeiden verwenden wir ein bestimmten Nummernschema.

  • %TT%: Der ModuleType der spezifischen Firmware (Logikmodul muss immer den gleichen ModuleType wie Common haben, Standardmäßig wird 10 verwendet), wird vom OpenKNXproducer ersetzt. Mit %TT% können 90 Module in einer Applikation verwendet werden.
  • %CC%: Kanalnummer (mit führenden Nullen). Kanal 0 ("00") wird für kanalunabhängige Definitionen verwendet. Wird vom OpenKNXproducer ersetzt. Mit %CC% können 99 Kanäle in einem Modul verwendet werden.
  • nnn: Nummer des Objektes, wird vom Benutzer vergeben. Mit nnn können 999 Parameter bzw. Kommunikationsobjekte für einen Kanal verwendet werden.
  • rr: Nummer einer RefId, wird vom Benutzer vergeben. Mit rr können bis zu 99 RefId pro Parameter bzw. Kommunikationsobjekt definiere werden.
Beispiele:
  • Parameter Id: %TT%%CC%nnn
  • ParameterRef Id: %TT%%CC%nnn_R-%TT%%CC%nnnrr
  • ComObject Id: %TT%%CC%nnn
  • ComObjectRef Id: %TT%%CC%nnn_R-%TT%%CC%nnnrr
Der OpenKNXproducer unterstützt noch weitere Nummerierungsschemata, das obige Schema ist nur das Präferierte. Folgende Schemata sind noch verfügbar:
  • %T%%CCC%nnnrr: %T% - 9 Module, %CCC% - 999 Kanäle, nnn - 999 Params/Kommunikaitonsobjekte, rr - 99 RefIds
  • %T%%CCCC%nnrr: %T% - 9 Module, %CCCC% - 9999 Kanäle, nn - 99 Params/Kommunikationsobjekte, rr - 99 RefIds
Diese beiden Schemata sollten nur verwendet werden, wenn wirklich so viele Kanäle gebraucht werden. Die ETS wird bei so vielen Kanälen extrem langsam, hier kann also leicht die Grenze des Machbaren erreicht werden.

Pro Modul muss das Nummerierungsschema einheitlich sein, verschiedene Module können unterschiedliche Schemata haben. Werden in einer Applikation Modultypen %T% und %TT% gemischt, nimmt ein einstelliger Modultyp %T% jeweils den Platz von 10 zweisteligen Modulen ein, ein Modultyp 2 kann wie die Module 20-29 betrachtet werden. Auf diese Weise können also die Modultypen 2 und 34 kombiniert werden, aber nicht 2 und 23.

Der OpenKNXproducer überprüft verschiedene Kombinationen von Modultypen und lässt nur erlaubte zu.

Information

Projektversionen

ApplicationVersion

ApplicationVersion (im XML -> angezeigt in der ETS):

  • 1->0.1
  • 10 -> 0.10
  • 15 -> 0.15
  • 16 -> 1.0
  • 31 -> 1.15
  • 32 -> 2.0
usw. Die machen HighNibble.LowNibble in dezimal...

Loadprocedures

Es gibt 3 Mögliche Ladeprozeduren:

  • DefaultProcedure: Die Loadprocedure vom knx_master wird benutzt
  • ProductProcedure: Die Loadprocedure aus der KnxProd wird benutzt
  • MergeProcedure: Eine Kombination aus den oberen beiden wird benutzt.
MergeProcedure in knx_master:
  <Procedure ProcedureType="Load" ProcedureSubType="ap1" Access="remote local2">
    <LdCtrlConnect />
    <LdCtrlMerge MergeId="1" />
    <LdCtrlUnload LsmIdx="4" />
    <LdCtrlUnload LsmIdx="3" />
    <LdCtrlUnload LsmIdx="2" />
    <LdCtrlUnload LsmIdx="1" />
    <LdCtrlLoad LsmIdx="4" />
    <LdCtrlMerge MergeId="4" />
    <LdCtrlMerge MergeId="5" />
  </procedure>

Procedure in KnxProd:

  <LoadProcedures>
    <LoadProcedure MergeId="5">
      <LdCtrlWriteRelMem ObjIdx="4" Offset="0" Size="256" Verify="false" />
    </loadprocedure>
    <LoadProcedure MergeId="4">
      <LdCtrlRelSegment LsmIdx="4" Size="256" Mode="0" Fill="0" />
    </loadprocedure>
    <LoadProcedure MergeId="1">
      <LdCtrlCompareProp InlineData="00FA020723" ObjIdx="4" PropId="13">
        <OnError Cause="CompareMismatch" MessageRef="M-00FA_A-0207-23-E298_M-1" />
      </ldctrlcompareprop>
    </loadprocedure>
  </loadprocedures>

This is merged, where LoadProcedure MergeId="x" is inserted at the place of LdCtrlMerge MergeId="x"
That is the result:

  <Procedure ProcedureType="Load" ProcedureSubType="ap1" Access="remote local2">
    <LdCtrlConnect />
    <LdCtrlCompareProp InlineData="00FA020723" ObjIdx="4" PropId="13">
      <OnError Cause="CompareMismatch" MessageRef="M-00FA_A-0207-23-E298_M-1" />
    </ldctrlcompareprop>
    <LdCtrlUnload LsmIdx="4" />
    <LdCtrlUnload LsmIdx="3" />
    <LdCtrlUnload LsmIdx="2" />
    <LdCtrlUnload LsmIdx="1" />
    <LdCtrlLoad LsmIdx="4" />
    <LdCtrlRelSegment LsmIdx="4" Size="256" Mode="0" Fill="0" />
    <LdCtrlWriteRelMem ObjIdx="4" Offset="0" Size="256" Verify="false" />
  </procedure>

OrderNumber

Welcher Wert in der xml entspricht der Bestellnummer im Katalog der ETS ?

Product-Ordernumber. Die ist aber auch ein Teil der Product-Id. Deswegen: Sonderzeichen und Minus "-" und Unterstrich "_" müssen in der Product-Id excaped werden, durch Punkt ".", gefolgt vom ASCII-Wert des Zeichen in Hex. OrderNumber="15-15", in der Product-Id muss dann "....15.2D15..." stehen.

Icons - Baggages

Damit die UI weitestgehend ähnlich aussieht nutzen wir standardmäßig das MDI Iconset (https://pictogrammers.com/library/mdi/). Diese werden zur Verwendung unter dem original Namen in Common abgelegt. Es wurden aber nicht pauschal alle Icons heruntergeladen.

Sollte dir ein Icons fehlen, kannst auf der o.g. Webseite nach weiteren Icons suchen. Bitte lade das Icons direkt als 16x16 über den Advanced PNG Export herunter. Im Anschluss entferne bitte den Suffix "-custom" aus dem Dateinamen und lege ihn im Common ab. Möchtest du das Icons erstmal nur Testen oder glaubst das es für andere irrelavant ist, so kann diese natürlich auch im Module-Bagagges abgelegt werden.

Design-Richtlinien

für ein einheitliches Look & Feel zwischen den verschiedenen OpenKNX Modulen gibt es folgende Richtlinien:

  • Kanalunabhängige, "allgmeine" Einstellungen im Modul werden unter dem ersten Menüpunkt "Allgemein" mit dem Zahnrad-Symbol "cog-outline"
  • Dokumentation / Beschreibung / Hilfe erfolgt optional im zweiten Menüpunkt mit dem Namen "Dokumentation" mit dem "i" Symbol "information-outline"
  • Die Gliederung auf einer Parameterseite erfolgt ....

Tools

Es gibt Tools, um knxprod-Dateien zu Editieren oder zu Erstellen. Man findet sie hier.

Misc

  • Manchmal kann es helfen, den kompletten ETS Product Store zu löschen: C:\ProgramData\KNX\ETS5\ProductStore
  • In der ETS-Einstellungen kann man erweitertes Logging aktivieren. Das Log befindet sich dann unter C:\Users\<username></username>\AppData\Local\KNX\ETS5\Log
⚠️ **GitHub.com Fallback** ⚠️