<?xml version="1.0" encoding="utf-8"?>
<KNX xmlns="http://knx.org/xml/project/20" CreatedBy="KNX MT" ToolVersion="5.1.255.16695">
  <ManufacturerData>
    <Manufacturer RefId="M-00FA">
      <Catalog>
        <CatalogSection Id="M-00FA_CS-1" Name="Geräte" Number="1" DefaultLanguage="de">
          <CatalogItem Id="%CatalogItemId%" Name="SmartHomeDisplay" Number="1" ProductRefId="%ProductId%" Hardware2ProgramRefId="%Hardware2ProgramId%" DefaultLanguage="de" />
        </CatalogSection>
      </Catalog>
      <ApplicationPrograms>
        <ApplicationProgram Id="%AID%" ApplicationNumber="712" ApplicationVersion="1" ReplacesVersions="0" ProgramType="ApplicationProgram" MaskVersion="MV-07B0" Name="SmartHomeDisplay" LoadProcedureStyle="MergedProcedure" PeiType="0" DefaultLanguage="de" DynamicTableManagement="false" Linkable="true" MinEtsVersion="5.0">
          <Static>
            <Code>
              <RelativeSegment Id="%AID%_RS-04-00000" Name="Parameters" Offset="0" Size="%MemorySize%" LoadStateMachine="4" />
            </Code>
            <ParameterTypes>
              <!-- the following ParameterTypes are from a productive example -->
              <!-- simple integer type -->
              <ParameterType Id="%AID%_PT-DelaySeconds" Name="DelaySeconds">
                <TypeNumber SizeInBit="32" Type="signedInt" minInclusive="0" maxInclusive="86400" />
              </ParameterType>
              <!-- enumeration with 16-bit (word) values -->
              <ParameterType Id="%AID%_PT-DelaySelection" Name="DelaySelection">
                <TypeRestriction Base="Value" SizeInBit="16">
                  <Enumeration Text="1 Sekunde" Value="1" Id="%AID%_PT-DelaySelection_EN-0" />
                  <Enumeration Text="2 Sekunden" Value="2" Id="%AID%_PT-DelaySelection_EN-1" />
                  <Enumeration Text="5 Sekunden" Value="5" Id="%AID%_PT-DelaySelection_EN-2" />
                  <Enumeration Text="10 Sekunden" Value="10" Id="%AID%_PT-DelaySelection_EN-3" />
                  <Enumeration Text="30 Sekunden" Value="30" Id="%AID%_PT-DelaySelection_EN-4" />
                  <Enumeration Text="1 Minute" Value="60" Id="%AID%_PT-DelaySelection_EN-5" />
                  <Enumeration Text="2 Minuten" Value="120" Id="%AID%_PT-DelaySelection_EN-6" />
                  <Enumeration Text="5 Minuten" Value="300" Id="%AID%_PT-DelaySelection_EN-7" />
                  <Enumeration Text="10 Minuten" Value="600" Id="%AID%_PT-DelaySelection_EN-8" />
                  <Enumeration Text="30 Minuten" Value="1800" Id="%AID%_PT-DelaySelection_EN-9" />
                  <Enumeration Text="manuelle Eingabe (Sekundengenau)" Value="0" Id="%AID%_PT-DelaySelection_EN-10" />
                </TypeRestriction>
              </ParameterType>
              <!-- Demo ParameterTypes to show available possibilities  -->
              <!-- Parameter type for text parameter, just for descriptions in ETS, is not transferred to device -->
              <ParameterType Id="%AID%_PT-Text40Byte" Name="Text40Byte">
                <TypeText SizeInBit="320" />
              </ParameterType>
              <!-- Parameter type for 1 bit parameter, presented as checkbox -->
              <ParameterType Id="%AID%_PT-CheckBox" Name="CheckBox">
                <TypeNumber SizeInBit="1" Type="unsignedInt" minInclusive="0" maxInclusive="1" UIHint="CheckBox" />
              </ParameterType>
              <!-- Parameter type for 1 bit parameter, presented as radio button -->
              <ParameterType Id="%AID%_PT-YesNo" Name="YesNo">
                <TypeRestriction Base="Value" SizeInBit="1">
                  <Enumeration Text="Nein" Value="0" Id="%AID%_PT-YesNo_EN-0" />
                  <Enumeration Text="Ja" Value="1" Id="%AID%_PT-YesNo_EN-1" />
                </TypeRestriction>
              </ParameterType>
              <!-- Parameter type for an 8 bit percent parameter -->
              <ParameterType Id="%AID%_PT-Percentage" Name="Percentage">
                <TypeNumber SizeInBit="8" Type="signedInt" minInclusive="0" maxInclusive="100" />
              </ParameterType>
              <!-- Parameter type for an 16 bit float value like temperature -->
              <ParameterType Id="%AID%_PT-ValueDpt9" Name="ValueDpt9">
                <TypeFloat Encoding="IEEE-754 Single" minInclusive="-671088" maxInclusive="670760" />
              </ParameterType>
              <!-- Parameter type for an 8 bit enumeration -->
              <ParameterType Id="%AID%_PT-DptSelect" Name="DptSelect">
                <TypeRestriction Base="Value" SizeInBit="8">
                  <Enumeration Text="DPT 5.001 (1 Byte, Prozentwert)" Value="5" Id="%AID%_PT-DptSelect_EN-0" />
                  <Enumeration Text="DPT 9.007 (2 Byte, Fließkommawert)" Value="9" Id="%AID%_PT-DptSelect_EN-1" />
                </TypeRestriction>
              </ParameterType>
            </ParameterTypes>
            <Parameters>
              <!-- the follwoing 3 parameters represent a productive example -->
              <!-- A parameter to enter manually a number of seconds -->
              <Parameter Id="%AID%_P-1" Name="StartupDelay" ParameterType="%AID%_PT-DelaySeconds" Text="        Zeit (Sekundengenau)" SuffixText="Sekunden" Value="10">
                <!-- offset has always to start with 0 -->
                <Memory CodeSegment="%AID%_RS-04-00000" Offset="0" BitOffset="0" />
              </Parameter>
              <!-- A parameter to choose predefined seconds from a dropdown -->
              <Parameter Id="%AID%_P-2" Name="StartupDelaySelection" ParameterType="%AID%_PT-DelaySelection" Text="Zeit bis das Gerät nach einem Neustart aktiv wird" Value="10">
                <!-- you have to calculate the right offset according to size of the used type -->
                <Memory CodeSegment="%AID%_RS-04-00000" Offset="4" BitOffset="0" />
              </Parameter>
              <!-- A parameter to enter manually a number of seconds -->
              <Parameter Id="%AID%_P-3" Name="Heartbeat" ParameterType="%AID%_PT-DelaySeconds" Text="'In Betrieb'-Telegramm senden alle" SuffixText="Sekunden" Value="300">
                <Memory CodeSegment="%AID%_RS-04-00000" Offset="6" BitOffset="0" />
              </Parameter>
              <!-- additional demo parametes to show available possibilities -->
              <!-- 1-Bit parameter usage, to choose, which sensors are attached -->
              <Parameter Id="%AID%_P-4" Name="TemperatureSensor" ParameterType="%AID%_PT-CheckBox" Text="Temperatursensor" Value="0">
                <Memory CodeSegment="%AID%_RS-04-00000" Offset="10" BitOffset="0" />
              </Parameter>
              <!-- Both parameters write into the same parameter byte, but at different BitOffsets!!! -->
              <Parameter Id="%AID%_P-5" Name="HumiditySensor" ParameterType="%AID%_PT-CheckBox" Text="Luftfeuchtesensor" Value="0">
                <Memory CodeSegment="%AID%_RS-04-00000" Offset="10" BitOffset="1" />
              </Parameter>
              <!-- A parameter to enter (informational) text, this parameter is not transferred to the device (no memory block reference) -->
              <Parameter Id="%AID%_P-6" Name="TemperatureText" ParameterType="%AID%_PT-Text40Byte" Text="Bezeichnung des Temperatursensors" Value="Temperatur" />
              <!-- A parameter for a float value -->
              <Parameter Id="%AID%_P-7" Name="TemperatureAlign" ParameterType="%AID%_PT-ValueDpt9" Text="Temperaturwert anpassen" Value="0">
                <Memory CodeSegment="%AID%_RS-04-00000" Offset="11" BitOffset="0" />
              </Parameter>
              <Parameter Id="%AID%_P-8" Name="HumidityText" ParameterType="%AID%_PT-Text40Byte" Text="Bezeichnung des Luftfeuchtesensors" Value="Luftfeuchte" />
              <Parameter Id="%AID%_P-9" Name="HumidityAlign" ParameterType="%AID%_PT-ValueDpt9" Text="Luftfeuchte anpassen" Value="0">
                <Memory CodeSegment="%AID%_RS-04-00000" Offset="13" BitOffset="0" />
              </Parameter>
              <!-- A parameter with a 8 bit dropdown, allows selection of a dpt for output -->
              <Parameter Id="%AID%_P-10" Name="HumiditySend" ParameterType="%AID%_PT-DptSelect" Text="Wert senden als" Value="9">
                <Memory CodeSegment="%AID%_RS-04-00000" Offset="15" BitOffset="0" />
              </Parameter>
            </Parameters>
            <ParameterRefs>
              <!-- ParameterRef have to be defined for each parameter, pay attention, that the ID-part (number) after R- is unique! -->
              <!-- ParameterRef are used in the ETS UI -->
              <ParameterRef Id="%AID%_P-1_R-1" RefId="%AID%_P-1" />
              <ParameterRef Id="%AID%_P-2_R-2" RefId="%AID%_P-2" />
              <ParameterRef Id="%AID%_P-3_R-3" RefId="%AID%_P-3" />
              <ParameterRef Id="%AID%_P-4_R-4" RefId="%AID%_P-4" />
              <ParameterRef Id="%AID%_P-5_R-5" RefId="%AID%_P-5" />
              <ParameterRef Id="%AID%_P-6_R-6" RefId="%AID%_P-6" />
              <ParameterRef Id="%AID%_P-7_R-7" RefId="%AID%_P-7" />
              <ParameterRef Id="%AID%_P-8_R-8" RefId="%AID%_P-8" />
              <ParameterRef Id="%AID%_P-9_R-9" RefId="%AID%_P-9" />
              <ParameterRef Id="%AID%_P-10_R-10" RefId="%AID%_P-10" />
            </ParameterRefs>
            <ComObjectTable>
              <!-- ComObject sending a 'still alive' signal, DPT 1 (1 bit) -->
              <ComObject Id="%AID%_O-1" Name="Heartbeat" Text="In Betieb" Number="1" FunctionText="Ausgang (zyklisch)" ObjectSize="1 Bit" ReadFlag="Enabled" WriteFlag="Disabled" CommunicationFlag="Enabled" TransmitFlag="Enabled" UpdateFlag="Disabled" ReadOnInitFlag="Disabled" DatapointType="DPST-1-2" />
              <!-- ComOject sending a temperature (float) value, DPT 9.001 (2 Bytes) -->
              <ComObject Id="%AID%_O-2" Name="Temperature" Text="Temperaturmesswert" Number="2" FunctionText="Ausgang" ObjectSize="2 Bytes" ReadFlag="Enabled" WriteFlag="Disabled" CommunicationFlag="Enabled" TransmitFlag="Enabled" UpdateFlag="Disabled" ReadOnInitFlag="Disabled" DatapointType="DPST-9-1" />
              <!-- ComObject sending a humidity value, DPT and Size are taken from according ComObjectRef, see comment there -->
              <ComObject Id="%AID%_O-3" Name="Humidity" Text="Luftfeuchtemesswert" Number="3" FunctionText="Ausgang" ReadFlag="Enabled" WriteFlag="Disabled" CommunicationFlag="Enabled" TransmitFlag="Enabled" UpdateFlag="Disabled" ReadOnInitFlag="Disabled" />
              <!-- ComObject as an input example, alows the requert of all measured values at once -->
              <ComObject Id="%AID%_O-4" Name="Request" Text="Alle Messwerte anfordern" Number="4" FunctionText="Eingang" ObjectSize="1 Bit" ReadFlag="Disabled" WriteFlag="Enabled" CommunicationFlag="Enabled" TransmitFlag="Disabled" UpdateFlag="Enabled" ReadOnInitFlag="Disabled" DatapointType="DPST-1-16" />
            </ComObjectTable>
            <ComObjectRefs>
              <!-- A ComObjecdtRef is necessary for each ComObject, ComObjectRef are used in the ETS UI -->
              <ComObjectRef Id="%AID%_O-1_R-1" RefId="%AID%_O-1" />
              <ComObjectRef Id="%AID%_O-2_R-2" RefId="%AID%_O-2" />
              <!-- There mitght be more that one ComObjectRef for a ComObject, like here, the two different ComObjectRef define different Size and DPT for ComObject 3 -->
              <!-- If there is more than one ComObjectRef for a specific ComObject, you have to ensure, that exactly one of them is visible in the UI -->
              <ComObjectRef Id="%AID%_O-3_R-31" RefId="%AID%_O-3" ObjectSize="1 Byte" DatapointType="DPST-5-1" />
              <ComObjectRef Id="%AID%_O-3_R-32" RefId="%AID%_O-3" ObjectSize="2 Bytes" DatapointType="DPST-9-7" />
              <ComObjectRef Id="%AID%_O-4_R-4" RefId="%AID%_O-4" />
            </ComObjectRefs>
            <AddressTable MaxEntries="65535" />
            <AssociationTable MaxEntries="65535" />
            <LoadProcedures>
              <LoadProcedure MergeId="2">
                <LdCtrlRelSegment LsmIdx="4" Size="%MemorySize%" Mode="1" Fill="0" AppliesTo="full" />
                <LdCtrlRelSegment LsmIdx="4" Size="%MemorySize%" Mode="0" Fill="0" AppliesTo="par" />
              </LoadProcedure>
              <LoadProcedure MergeId="4">
                <LdCtrlWriteRelMem ObjIdx="4" Offset="0" Size="%MemorySize%" Verify="true" AppliesTo="full,par" />
              </LoadProcedure>
              <LoadProcedure MergeId="7">
                <LdCtrlLoadImageProp ObjIdx="1" PropId="27" />
                <LdCtrlLoadImageProp ObjIdx="2" PropId="27" />
                <LdCtrlLoadImageProp ObjIdx="3" PropId="27" />
                <LdCtrlLoadImageProp ObjIdx="4" PropId="27" />
              </LoadProcedure>
            </LoadProcedures>
            <Options />
          </Static>
          <!-- Here statrs the UI definition -->
          <Dynamic>
            <!-- The following block is always there -->
            <ChannelIndependentBlock>
              <!-- A parameter block represents a tab on the left side, showing a page full of parameters -->
              <ParameterBlock Id="%AID%_PB-1" Name="Docu" Text="Documentation">
                <!-- In this example the first Tab shows some documentation -->
                <ParameterSeparator Id="%AID%_PS-1" Text="Kurze Einführung:" />
                <!-- A parameter seperator shows just some text -->
                <ParameterSeparator Id="%AID%_PS-2" Text="Das Gerät kann ein 'In Betrieb'-Telegramm in einstellbarer Zeit senden." />
                <ParameterSeparator Id="%AID%_PS-3" Text="Die Zeit, bis das Gerät nach einem Neustart erstmals meldet, ist einstellbar." />
                <ParameterSeparator Id="%AID%_PS-4" Text="Es erlaubt die Auswahl der installierten Sensoren." />
                <ParameterSeparator Id="%AID%_PS-5" Text="Pro Sensor können weitere Einstellugnen auf den dann erscheinenden Tabs gemacht werden." />
              </ParameterBlock>
              <!-- A tab page with general settings -->
              <ParameterBlock Id="%AID%_PB-2" Name="General" Text="Allgemeine Parameter">
                <!-- The first Parameter allows the entry of heartbeat cycle -->
                <ParameterRefRef RefId="%AID%_P-3_R-3" />
                <!-- conditional element referencing the content of above parameter -->
                <choose ParamRefId="%AID%_P-3_R-3">
                  <!-- if the content of the parameter is not equal zero, the following block is shown -->
                  <when test="!=0">
                    <!-- this means: ComObject 'Heartbeat' is just shown, if the user entered a valid cycle time -->
                    <ComObjectRefRef RefId="%AID%_O-1_R-1" />
                  </when>
                </choose>
                <!-- Parameter to choose startup delay -->
                <ParameterRefRef RefId="%AID%_P-2_R-2" />
                <choose ParamRefId="%AID%_P-2_R-2">
                  <when test="0">
                    <!-- This means: If the user cooses manual entry in the dropdown, we display the 'manual entry' parameter -->
                    <ParameterRefRef RefId="%AID%_P-1_R-1" />
                  </when>
                </choose>
                <!-- A ParameterSeparator with an empty text is presented as a line -->
                <ParameterSeparator Id="%AID%_PS-1" Text=" " />
                <ParameterSeparator Id="%AID%_PS-2" Text="Angeschlossene Sensoren:" />
                <!-- Checkboxes for sensor selection -->
                <ParameterRefRef RefId="%AID%_P-4_R-4" />
                <ParameterRefRef RefId="%AID%_P-5_R-5" />
              </ParameterBlock>
            </ChannelIndependentBlock>
            <choose ParamRefId="%AID%_P-4_R-4">
              <when test="1">
                <!-- Channels are used to present group of tabs, here just as an example with one tab -->
                <!-- this channel is within a choose block, it is displayed just in case the temperaturesensor is installed -->
                <Channel Id="%AID%_CH-1" Name="Temperature" Number="1" Text="Temperatursensor">
                  <!-- This is a tab within a channel -->
                  <ParameterBlock Id="%AID%_PB-3" Name="Temp" Text="Einstellungen">
                    <!-- Display temperature settings -->
                    <ParameterRefRef RefId="%AID%_P-6_R-6" />
                    <ParameterRefRef RefId="%AID%_P-7_R-7" />
                    <!-- ...and according ComObjects -->
                    <ComObjectRefRef RefId="%AID%_O-2_R-2" />
                    <ComObjectRefRef RefId="%AID%_O-4_R-4" />
                  </ParameterBlock>
                </Channel>
              </when>
            </choose>
            <!-- same as above for humidity -->
            <choose ParamRefId="%AID%_P-5_R-5">
              <when test="1">
                <Channel Id="%AID%_CH-2" Name="Humidity" Number="2" Text="Luftfeuchtesensor">
                  <ParameterBlock Id="%AID%_PB-4" Name="Hum" Text="Einstellungen">
                    <!-- display humidity settings -->
                    <ParameterRefRef RefId="%AID%_P-8_R-8" />
                    <ParameterRefRef RefId="%AID%_P-9_R-9" />
                    <ParameterRefRef RefId="%AID%_P-10_R-10" />
                    <!-- The output DPT depends on the chosen value in the dropdown -->
                    <choose ParamRefId="%AID%_P-10_R-10">
                      <when test="5">
                        <!-- Use DPT 5 ComOjbect -->
                        <ComObjectRefRef RefId="%AID%_O-3_R-31" />
                      </when>
                      <when test="9">
                        <!-- Use DPT 9 ComObject -->
                        <ComObjectRefRef RefId="%AID%_O-3_R-32" />
                      </when>
                    </choose>
                    <!-- ComObjects might be enabled more than once, they appear of course just once -->
                    <ComObjectRefRef RefId="%AID%_O-4_R-4" />
                  </ParameterBlock>
                </Channel>
              </when>
            </choose>
          </Dynamic>
        </ApplicationProgram>
      </ApplicationPrograms>
      <Hardware>
        <Hardware Id="%HardwareId%" Name="SmartHomeDisplay" SerialNumber="712" VersionNumber="1" BusCurrent="10" HasIndividualAddress="true" HasApplicationProgram="true">
          <Products>
            <Product Id="%ProductId%" Text="SmartHomeDisplay" OrderNumber="712" IsRailMounted="false" DefaultLanguage="de">
              <RegistrationInfo RegistrationStatus="Registered" />
            </Product>
          </Products>
          <Hardware2Programs>
            <Hardware2Program Id="%Hardware2ProgramId%" MediumTypes="MT-0">
              <ApplicationProgramRef RefId="%AID%" />
              <RegistrationInfo RegistrationStatus="Registered" RegistrationNumber="0001/%HardwareVersionEncoded%1" />
            </Hardware2Program>
          </Hardware2Programs>
        </Hardware>
      </Hardware>
    </Manufacturer>
  </ManufacturerData>
</KNX>