knxdisplay/displayprodLinux/SmartHomeDisplay.h
2026-02-10 13:57:48 +01:00

387 lines
20 KiB
C

#pragma once
#define paramDelay(time) (uint32_t)( \
(time & 0xC000) == 0xC000 ? (time & 0x3FFF) * 100 : \
(time & 0xC000) == 0x0000 ? (time & 0x3FFF) * 1000 : \
(time & 0xC000) == 0x4000 ? (time & 0x3FFF) * 60000 : \
(time & 0xC000) == 0x8000 ? ((time & 0x3FFF) > 1000 ? 3600000 : \
(time & 0x3FFF) * 3600000 ) : 0 )
#define MAIN_FirmwareName "SmartHomeDisplay"
#define MAIN_OpenKnxId 0xAB
#define MAIN_ApplicationNumber 206
#define MAIN_ApplicationVersion 4
#define MAIN_ApplicationEncoding iso-8859-15
#define MAIN_ParameterSize 4861
#define MAIN_MaxKoNumber 20069
#define MAIN_OrderNumber "IA4313"
// Parameter with single occurrence
#define SC_Section_Count 0 // uint8_t
// Anzahl Bereiche
#define ParamSC_Section_Count (knx.paramByte(SC_Section_Count))
#define SC_ChannelCount 20
// Parameter per channel
#define SC_ParamBlockOffset 1
#define SC_ParamBlockSize 243
#define SC_ParamCalcIndex(index) (index + SC_ParamBlockOffset + _channelIndex * SC_ParamBlockSize)
#define SC_pChkTemperatur 59 // 1 Bit, Bit 7
#define SC_pChkTemperaturMask 0x80
#define SC_pChkTemperaturShift 7
#define SC_pChkLuftfeuchtigkeit 59 // 1 Bit, Bit 6
#define SC_pChkLuftfeuchtigkeitMask 0x40
#define SC_pChkLuftfeuchtigkeitShift 6
#define SC_pChkPraesenz 59 // 1 Bit, Bit 5
#define SC_pChkPraesenzMask 0x20
#define SC_pChkPraesenzShift 5
#define SC_pChkFensterkontakt 59 // 1 Bit, Bit 4
#define SC_pChkFensterkontaktMask 0x10
#define SC_pChkFensterkontaktShift 4
#define SC_pChkSolltemperatur 59 // 1 Bit, Bit 3
#define SC_pChkSolltemperaturMask 0x08
#define SC_pChkSolltemperaturShift 3
#define SC_pChkHeizungsventil 59 // 1 Bit, Bit 2
#define SC_pChkHeizungsventilMask 0x04
#define SC_pChkHeizungsventilShift 2
#define SC_pChkSteckdose1 59 // 1 Bit, Bit 1
#define SC_pChkSteckdose1Mask 0x02
#define SC_pChkSteckdose1Shift 1
#define SC_pChkSteckdose2 59 // 1 Bit, Bit 0
#define SC_pChkSteckdose2Mask 0x01
#define SC_pChkSteckdose2Shift 0
#define SC_pChkLicht1 60 // 1 Bit, Bit 7
#define SC_pChkLicht1Mask 0x80
#define SC_pChkLicht1Shift 7
#define SC_pChkLicht2 60 // 1 Bit, Bit 6
#define SC_pChkLicht2Mask 0x40
#define SC_pChkLicht2Shift 6
#define SC_pChkDimmen1 60 // 1 Bit, Bit 5
#define SC_pChkDimmen1Mask 0x20
#define SC_pChkDimmen1Shift 5
#define SC_pChkDimmen2 60 // 1 Bit, Bit 4
#define SC_pChkDimmen2Mask 0x10
#define SC_pChkDimmen2Shift 4
#define SC_pChkJalousie1 60 // 1 Bit, Bit 3
#define SC_pChkJalousie1Mask 0x08
#define SC_pChkJalousie1Shift 3
#define SC_pChkJalousie2 60 // 1 Bit, Bit 2
#define SC_pChkJalousie2Mask 0x04
#define SC_pChkJalousie2Shift 2
#define SC_pChkCO2 60 // 1 Bit, Bit 1
#define SC_pChkCO2Mask 0x02
#define SC_pChkCO2Shift 1
#define SC_pChkHelligkeit 60 // 1 Bit, Bit 0
#define SC_pChkHelligkeitMask 0x01
#define SC_pChkHelligkeitShift 0
#define SC_pChkSzene 61 // 1 Bit, Bit 7
#define SC_pChkSzeneMask 0x80
#define SC_pChkSzeneShift 7
#define SC_fAFunctionType 62 // 1 Bit, Bit 7
#define SC_fAFunctionTypeMask 0x80
#define SC_fAFunctionTypeShift 7
#define SC_fAOOnKODpt 63 // 8 Bits, Bit 7-0
#define SC_fBFunctionType 82 // 1 Bit, Bit 7
#define SC_fBFunctionTypeMask 0x80
#define SC_fBFunctionTypeShift 7
#define SC_fBOOnKODpt 83 // 8 Bits, Bit 7-0
#define SC_fCFunctionType 102 // 1 Bit, Bit 7
#define SC_fCFunctionTypeMask 0x80
#define SC_fCFunctionTypeShift 7
#define SC_fCOOnKODpt 103 // 8 Bits, Bit 7-0
#define SC_fDFunctionType 122 // 1 Bit, Bit 7
#define SC_fDFunctionTypeMask 0x80
#define SC_fDFunctionTypeShift 7
#define SC_fDOOnKODpt 123 // 8 Bits, Bit 7-0
#define SC_fEFunctionType 142 // 1 Bit, Bit 7
#define SC_fEFunctionTypeMask 0x80
#define SC_fEFunctionTypeShift 7
#define SC_fEOOnKODpt 143 // 8 Bits, Bit 7-0
#define SC_fFFunctionType 162 // 1 Bit, Bit 7
#define SC_fFFunctionTypeMask 0x80
#define SC_fFFunctionTypeShift 7
#define SC_fFOOnKODpt 163 // 8 Bits, Bit 7-0
#define SC_fGFunctionType 182 // 1 Bit, Bit 7
#define SC_fGFunctionTypeMask 0x80
#define SC_fGFunctionTypeShift 7
#define SC_fGOOnKODpt 183 // 8 Bits, Bit 7-0
#define SC_fHFunctionType 202 // 1 Bit, Bit 7
#define SC_fHFunctionTypeMask 0x80
#define SC_fHFunctionTypeShift 7
#define SC_fHOOnKODpt 203 // 8 Bits, Bit 7-0
#define SC_fIFunctionType 222 // 1 Bit, Bit 7
#define SC_fIFunctionTypeMask 0x80
#define SC_fIFunctionTypeShift 7
#define SC_fIOOnKODpt 223 // 8 Bits, Bit 7-0
#define SC_fJFunctionType 242 // 1 Bit, Bit 7
#define SC_fJFunctionTypeMask 0x80
#define SC_fJFunctionTypeShift 7
#define SC_fJOOnKODpt 243 // 8 Bits, Bit 7-0
// Temperatur
#define ParamSC_pChkTemperatur ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_pChkTemperatur)) & SC_pChkTemperaturMask))
// Luftfeuchtigkeit
#define ParamSC_pChkLuftfeuchtigkeit ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_pChkLuftfeuchtigkeit)) & SC_pChkLuftfeuchtigkeitMask))
// Präsenz
#define ParamSC_pChkPraesenz ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_pChkPraesenz)) & SC_pChkPraesenzMask))
// Fensterkontakt
#define ParamSC_pChkFensterkontakt ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_pChkFensterkontakt)) & SC_pChkFensterkontaktMask))
// Solltemperatur
#define ParamSC_pChkSolltemperatur ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_pChkSolltemperatur)) & SC_pChkSolltemperaturMask))
// Heizungsventil
#define ParamSC_pChkHeizungsventil ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_pChkHeizungsventil)) & SC_pChkHeizungsventilMask))
// Steckdose 1
#define ParamSC_pChkSteckdose1 ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_pChkSteckdose1)) & SC_pChkSteckdose1Mask))
// Steckdose 2
#define ParamSC_pChkSteckdose2 ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_pChkSteckdose2)) & SC_pChkSteckdose2Mask))
// Licht 1
#define ParamSC_pChkLicht1 ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_pChkLicht1)) & SC_pChkLicht1Mask))
// Licht 2
#define ParamSC_pChkLicht2 ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_pChkLicht2)) & SC_pChkLicht2Mask))
// Dimmen 1
#define ParamSC_pChkDimmen1 ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_pChkDimmen1)) & SC_pChkDimmen1Mask))
// Dimmen 2
#define ParamSC_pChkDimmen2 ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_pChkDimmen2)) & SC_pChkDimmen2Mask))
// Jalousie 1
#define ParamSC_pChkJalousie1 ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_pChkJalousie1)) & SC_pChkJalousie1Mask))
// Jalousie 2
#define ParamSC_pChkJalousie2 ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_pChkJalousie2)) & SC_pChkJalousie2Mask))
// CO2
#define ParamSC_pChkCO2 ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_pChkCO2)) & SC_pChkCO2Mask))
// Helligkeit
#define ParamSC_pChkHelligkeit ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_pChkHelligkeit)) & SC_pChkHelligkeitMask))
// Szene
#define ParamSC_pChkSzene ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_pChkSzene)) & SC_pChkSzeneMask))
// Funktionstyp
#define ParamSC_fAFunctionType ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_fAFunctionType)) & SC_fAFunctionTypeMask))
// DPT des Kommunikationsobjekts
#define ParamSC_fAOOnKODpt (knx.paramByte(SC_ParamCalcIndex(SC_fAOOnKODpt)))
// Funktionstyp
#define ParamSC_fBFunctionType ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_fBFunctionType)) & SC_fBFunctionTypeMask))
// DPT des Kommunikationsobjekts
#define ParamSC_fBOOnKODpt (knx.paramByte(SC_ParamCalcIndex(SC_fBOOnKODpt)))
// Funktionstyp
#define ParamSC_fCFunctionType ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_fCFunctionType)) & SC_fCFunctionTypeMask))
// DPT des Kommunikationsobjekts
#define ParamSC_fCOOnKODpt (knx.paramByte(SC_ParamCalcIndex(SC_fCOOnKODpt)))
// Funktionstyp
#define ParamSC_fDFunctionType ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_fDFunctionType)) & SC_fDFunctionTypeMask))
// DPT des Kommunikationsobjekts
#define ParamSC_fDOOnKODpt (knx.paramByte(SC_ParamCalcIndex(SC_fDOOnKODpt)))
// Funktionstyp
#define ParamSC_fEFunctionType ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_fEFunctionType)) & SC_fEFunctionTypeMask))
// DPT des Kommunikationsobjekts
#define ParamSC_fEOOnKODpt (knx.paramByte(SC_ParamCalcIndex(SC_fEOOnKODpt)))
// Funktionstyp
#define ParamSC_fFFunctionType ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_fFFunctionType)) & SC_fFFunctionTypeMask))
// DPT des Kommunikationsobjekts
#define ParamSC_fFOOnKODpt (knx.paramByte(SC_ParamCalcIndex(SC_fFOOnKODpt)))
// Funktionstyp
#define ParamSC_fGFunctionType ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_fGFunctionType)) & SC_fGFunctionTypeMask))
// DPT des Kommunikationsobjekts
#define ParamSC_fGOOnKODpt (knx.paramByte(SC_ParamCalcIndex(SC_fGOOnKODpt)))
// Funktionstyp
#define ParamSC_fHFunctionType ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_fHFunctionType)) & SC_fHFunctionTypeMask))
// DPT des Kommunikationsobjekts
#define ParamSC_fHOOnKODpt (knx.paramByte(SC_ParamCalcIndex(SC_fHOOnKODpt)))
// Funktionstyp
#define ParamSC_fIFunctionType ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_fIFunctionType)) & SC_fIFunctionTypeMask))
// DPT des Kommunikationsobjekts
#define ParamSC_fIOOnKODpt (knx.paramByte(SC_ParamCalcIndex(SC_fIOOnKODpt)))
// Funktionstyp
#define ParamSC_fJFunctionType ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_fJFunctionType)) & SC_fJFunctionTypeMask))
// DPT des Kommunikationsobjekts
#define ParamSC_fJOOnKODpt (knx.paramByte(SC_ParamCalcIndex(SC_fJOOnKODpt)))
// deprecated
#define SC_KoOffset 10
// Communication objects per channel (multiple occurrence)
#define SC_KoBlockOffset 10
#define SC_KoBlockSize 49
#define SC_KoCalcNumber(index) (index + SC_KoBlockOffset + _channelIndex * SC_KoBlockSize)
#define SC_KoCalcIndex(number) ((number >= SC_KoCalcNumber(0) && number < SC_KoCalcNumber(SC_KoBlockSize)) ? (number - SC_KoBlockOffset) % SC_KoBlockSize : -1)
#define SC_KoCalcChannel(number) ((number >= SC_KoBlockOffset && number < SC_KoBlockOffset + SC_ChannelCount * SC_KoBlockSize) ? (number - SC_KoBlockOffset) / SC_KoBlockSize : -1)
#define SC_KoKoS%CC%000 %CCC%0
#define SC_KoKoS%CC%001 %CCC%1
#define SC_KoKoS%CC%002 %CCC%2
#define SC_KoKoS%CC%003 %CCC%3
#define SC_KoKoS%CC%004 %CCC%4
#define SC_KoKoS%CC%005 %CCC%5
#define SC_KoKoS%CC%006 %CCC%6
#define SC_KoKoS%CC%007 %CCC%7
#define SC_KoKoS%CC%008 %CCC%8
#define SC_KoKoS%CC%009 %CCC%9
#define SC_KoKoS%CC%010 %CCC%10
#define SC_KoKoS%CC%011 %CCC%11
#define SC_KoKoS%CC%012 %CCC%12
#define SC_KoKoS%CC%013 %CCC%13
#define SC_KoKoS%CC%014 %CCC%14
#define SC_KoKoS%CC%015 %CCC%15
#define SC_KoKoS%CC%016 %CCC%16
#define SC_KoKoS%CC%017 %CCC%17
#define SC_KoKoS%CC%018 %CCC%18
#define SC_KoKoS%CC%019 %CCC%19
#define SC_KoKoS%CC%020 %CCC%20
#define SC_KoKoS%CC%021 %CCC%21
#define SC_KoKoS%CC%022 %CCC%22
#define SC_KoKoS%CC%023 %CCC%23
#define SC_KoKoS%CC%024 %CCC%24
#define SC_KoKoS%CC%025 %CCC%25
#define SC_KoKoS%CC%026 %CCC%26
#define SC_KoKoS%CC%027 %CCC%27
#define SC_KoKoS%CC%028 %CCC%28
#define SC_KoKOf-%TT%%CC%100__ %C%050
#define SC_KoKOf-%TT%%CC%101__ %C%051
#define SC_KoKOf-%TT%%CC%200__ %C%052
#define SC_KoKOf-%TT%%CC%201__ %C%053
#define SC_KoKOf-%TT%%CC%300__ %C%054
#define SC_KoKOf-%TT%%CC%301__ %C%055
#define SC_KoKOf-%TT%%CC%400__ %C%056
#define SC_KoKOf-%TT%%CC%401__ %C%057
#define SC_KoKOf-%TT%%CC%500__ %C%058
#define SC_KoKOf-%TT%%CC%501__ %C%059
#define SC_KoKOf-%TT%%CC%600__ %C%060
#define SC_KoKOf-%TT%%CC%601__ %C%061
#define SC_KoKOf-%TT%%CC%700__ %C%062
#define SC_KoKOf-%TT%%CC%701__ %C%063
#define SC_KoKOf-%TT%%CC%800__ %C%064
#define SC_KoKOf-%TT%%CC%801__ %C%065
#define SC_KoKOf-%TT%%CC%900__ %C%066
#define SC_KoKOf-%TT%%CC%901__ %C%067
#define SC_KoKOf-%TT%%CC%1000__ %C%068
#define SC_KoKOf-%TT%%CC%1001__ %C%069
// Temperatur
#define KoSC_KoS%CC%000 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%000)))
// Luftfeuchtigkeit
#define KoSC_KoS%CC%001 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%001)))
// Präsenz
#define KoSC_KoS%CC%002 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%002)))
// Fensterkontakt
#define KoSC_KoS%CC%003 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%003)))
// Solltemperatur
#define KoSC_KoS%CC%004 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%004)))
// Heizungsventil
#define KoSC_KoS%CC%005 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%005)))
// Steckdose 1 Schalten
#define KoSC_KoS%CC%006 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%006)))
// Steckdose 1 Status
#define KoSC_KoS%CC%007 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%007)))
// Steckdose 2 Schalten
#define KoSC_KoS%CC%008 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%008)))
// Steckdose 2 Status
#define KoSC_KoS%CC%009 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%009)))
// Licht 1 Schalten
#define KoSC_KoS%CC%010 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%010)))
// Licht 1 Status
#define KoSC_KoS%CC%011 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%011)))
// Licht 2 Schalten
#define KoSC_KoS%CC%012 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%012)))
// Licht 2 Status
#define KoSC_KoS%CC%013 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%013)))
// Dimmen 1 Schalten
#define KoSC_KoS%CC%014 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%014)))
// Dimmen 1 Wert
#define KoSC_KoS%CC%015 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%015)))
// Dimmen 1 Status
#define KoSC_KoS%CC%016 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%016)))
// Dimmen 2 Schalten
#define KoSC_KoS%CC%017 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%017)))
// Dimmen 2 Wert
#define KoSC_KoS%CC%018 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%018)))
// Dimmen 2 Status
#define KoSC_KoS%CC%019 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%019)))
// Jalousie 1 Auf/Ab
#define KoSC_KoS%CC%020 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%020)))
// Jalousie 1 Position
#define KoSC_KoS%CC%021 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%021)))
// Jalousie 1 Pos. Status
#define KoSC_KoS%CC%022 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%022)))
// Jalousie 2 Auf/Ab
#define KoSC_KoS%CC%023 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%023)))
// Jalousie 2 Position
#define KoSC_KoS%CC%024 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%024)))
// Jalousie 2 Pos. Status
#define KoSC_KoS%CC%025 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%025)))
// CO2
#define KoSC_KoS%CC%026 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%026)))
// Helligkeit
#define KoSC_KoS%CC%027 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%027)))
// Szene
#define KoSC_KoS%CC%028 (knx.getGroupObject(SC_KoCalcNumber(SC_KoKoS%CC%028)))
// Eingang %CC%050
#define KoSC_KOf-%TT%%CC%100__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%100__)))
// Ausgang %CC%051
#define KoSC_KOf-%TT%%CC%101__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%101__)))
// Eingang %CC%052
#define KoSC_KOf-%TT%%CC%200__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%200__)))
// Ausgang %CC%053
#define KoSC_KOf-%TT%%CC%201__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%201__)))
// Eingang %CC%054
#define KoSC_KOf-%TT%%CC%300__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%300__)))
// Ausgang %CC%055
#define KoSC_KOf-%TT%%CC%301__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%301__)))
// Eingang %CC%056
#define KoSC_KOf-%TT%%CC%400__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%400__)))
// Ausgang %CC%057
#define KoSC_KOf-%TT%%CC%401__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%401__)))
// Eingang %CC%058
#define KoSC_KOf-%TT%%CC%500__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%500__)))
// Ausgang %CC%059
#define KoSC_KOf-%TT%%CC%501__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%501__)))
// Eingang %CC%060
#define KoSC_KOf-%TT%%CC%600__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%600__)))
// Ausgang %CC%061
#define KoSC_KOf-%TT%%CC%601__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%601__)))
// Eingang %CC%062
#define KoSC_KOf-%TT%%CC%700__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%700__)))
// Ausgang %CC%063
#define KoSC_KOf-%TT%%CC%701__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%701__)))
// Eingang %CC%064
#define KoSC_KOf-%TT%%CC%800__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%800__)))
// Ausgang %CC%065
#define KoSC_KOf-%TT%%CC%801__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%801__)))
// Eingang %CC%066
#define KoSC_KOf-%TT%%CC%900__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%900__)))
// Ausgang %CC%067
#define KoSC_KOf-%TT%%CC%901__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%901__)))
// Eingang %CC%068
#define KoSC_KOf-%TT%%CC%1000__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%1000__)))
// Ausgang %CC%069
#define KoSC_KOf-%TT%%CC%1001__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%1001__)))
#define BASE_KoTime 1
#define BASE_KoDate 2
#define BASE_KoDateTime 3
#define BASE_KoNight/Day 4
// Uhrzeit
#define KoBASE_Time (knx.getGroupObject(BASE_KoTime))
// Datum
#define KoBASE_Date (knx.getGroupObject(BASE_KoDate))
// Uhrzeit/Datum
#define KoBASE_DateTime (knx.getGroupObject(BASE_KoDateTime))
// Nacht/Tag
#define KoBASE_Night/Day (knx.getGroupObject(BASE_KoNight/Day))
#ifdef MAIN_FirmwareRevision
#ifndef FIRMWARE_REVISION
#define FIRMWARE_REVISION MAIN_FirmwareRevision
#endif
#endif
#ifdef MAIN_FirmwareName
#ifndef FIRMWARE_NAME
#define FIRMWARE_NAME MAIN_FirmwareName
#endif
#endif