EEPROM Device Configuration

The EEPROM is a memory block in each SHC device which holds configuration information persistently. The configuration can be created and edited with an EEPROM editor and flashed to the device just like the firmware. The firmware reads the EEPROM data and uses it. The layout is defined in a separate file. It is used for different purposes so the layout needs not be hard coded at different places. The layout is automatically used consistently everywhere.

EEPROM Concept Overview

The picture shows how the different files and tools work together. The items are described in detail below.

EEPROM Layout Metamodel

The EEPROM layout cannot have just any arbitrary format. For the different tools to work without problems, an EEPROM layout metamodel (e2p_metamodel.xsd) describes the possible entries. The metamodel should not change over time, whereas the EEPROM layout will change especially when new device types are invented. A change in the metamodel also makes it necessary to change tools, a change in the layout should not.

As you can see, the EEPROM layout consists of a series of named blocks, each containing a series of values of different types. The position of the values in the EEPROM (as well as the binary file) result from the number of used bits of all previous elements. This makes it necessary to have a reserved area at some places, but has the advantage that no position information is needed and no values can overlap.

The Restriction subelement of blocks has a special meaning. It defines that a block may only exist when another value matches. This is used to restrict the use of device type specific configuration blocks to the matching DeviceTypeID only. Other future restrictions should be decided with care -- they make it necessary to change the firmware and EEPROM editor (for source code generation) accordingly.

The Microcontroller Model is used as parameter for the flash utility.

Data Types and Byte Layout

The EEPROM values can be from the same data types as defined for the packets. The only difference is that a BoolValue takes one byte (instead of one bit). This is to minimize writing to the same byte in EEPROM especially when arrays of bits are written.

EEPROM Editor

The SHC EEPROM Editor (SHCEE) is a Java program which can be used to create and modify device configurations stored in binary files, which can be flashed to the ATMega's EEPROM. The program uses SwingSwing is the primary toolkit for creating GUIs in Java since version 1.2. It is well known and supported. for its GUI and was designed to run on different PC operating systems easily. It runs at least on Java 1.6 and up.

The GUI of the EEPROM editor

All EEPROM files have to be in the program directory and are named {device name}.e2p. The device name part of the filename is used to list the device under this name in the device list on the left side. After selecting a device, the values can be entered or changed in the value editor on the right side. Note that the editor presents you exactly the elements as defined in the layout definition file. The GUI elements are created dynamically. The values are checked against the range and length as defined there. If an EEPROM block has a restriction defined in the layout, it will only appear in the editor panel if the restriction is met. The files can directly be flashed by executing a command line programmer (usually AVRDude).

Firmware Source Code

In addition to edit e2p files, the editor can also generate source code header files for the firmware. An update of these files is only needed when the layout changes or devices are added. This function is not intended for the normal user. The editor is called with a command line argument (/gen) in this case. The generated files contain start positions of the values and enum definitions. See the firmware files on GitHub for examples.

The Layout

The layout definition is stored in an XML file (e2p_layout.xml). It describes which blocks and values are actually stored in the EEPROM. The layout file has to conform to the metamodel.

Below you find the current layout per DeviceType (with the corresponding DeviceTypeID in brackets) as defined by the XML file. This tables are generated!

BaseStation (0)

OffsetBlockContentTypeSizeDescription
0Hardware
Values for hardware setup, which have no special meaning to SHC device concepts + the DeviceType, which decides about the existence of further blocks.
DeviceTypeEnumValue1 BytesThe device can check with this value if the EEPROM data is meant for the actual type of device. If not, the device goes into an error mode.
Values: 0 = BaseStation, 20 = EnvSensor, 40 = PowerSwitch, 45 = Controller, 50 = RGBDimmer, 60 = Dimmer, 70 = SoilMoistureMeter, 80 = Thermostat, 90 = TeaMaker
8OsccalModeIntValue1 BytesThis value is used to change the speed of the internal oscillator. 0 = don't use OSCCAL calibration (e.g. external crystal oszillator is used). -128 = OSCCAL measure mode: the LED blinks every 60s, so the user can measure the original speed. -127..+127 = The speed is adjusted by the given amount in per mill (e.g. 10 means to speed up the device by +1%).
MinVal: -128, MaxVal: 127, Default: 0
16Reserved6 Bytesn/a
64Generic
This block contains SHC configuration data which every device has.
DeviceIDUIntValue12 BitsThe DeviceID identifies the specific unit in the SHC network. It is used to address the device and in messages the device sends. Every device has to have a different DeviceID.
MinVal: 0, MaxVal: 4095
76Reserved4 Bitsn/a
80PacketCounterUIntValue3 BytesThe PacketCounter is counted up throughout the whole lifetime of the device and is used to make the encrypted packets differently from each other every time.
MinVal: 0, MaxVal: 16777215
104Reserved19 Bytesn/a
256AesKeyByteArray32 BytesThis key is used to encrypt packets before sending and also used as primary key to decrypt packets. Special devices may have additional keys in their device specific block.
512BaseStation
This block contains the specific configuration data that only Base Station devices need.
AesKeyCountUIntValue1 BytesThis is the number of AES keys to use from the AesKeys block. Limit the number to the needed amount to avoid that the base station tries decoding with every one.
MinVal: 1, MaxVal: 16, Default: 1
520AesKeyByteArray[16]32 Bytes x 16These are all AES keys which can be used to encrypt or decrypt packages at the base station.
4616UartBaudRateEnumValue1 BytesSelect which baud rate to use for communication with the base station. Use 19200 (0,2% baud rate error @20 MHz) for standard speed, which should work with any connected device. Use 115200 (1,4% baud rate error @20 MHz) to speed up communication to the base station.
Values: 19 = 19200, 115 = 115200, Default: 19
4624TransceiverWatchdogTimeoutUIntValue1 BytesReset RFM12B module if no data is received until timeout is reached. Use this function if your specific transceiver hangs sometimes. Value is in deca seconds. Suggested setting is 48 (for 8 minutes). Set 0 to disable.
MinVal: 0, MaxVal: 255, Default: 48
4632Reserved445 Bytesn/a

EnvSensor (20)

OffsetBlockContentTypeSizeDescription
0Hardware
Values for hardware setup, which have no special meaning to SHC device concepts + the DeviceType, which decides about the existence of further blocks.
DeviceTypeEnumValue1 BytesThe device can check with this value if the EEPROM data is meant for the actual type of device. If not, the device goes into an error mode.
Values: 0 = BaseStation, 20 = EnvSensor, 40 = PowerSwitch, 45 = Controller, 50 = RGBDimmer, 60 = Dimmer, 70 = SoilMoistureMeter, 80 = Thermostat, 90 = TeaMaker
8OsccalModeIntValue1 BytesThis value is used to change the speed of the internal oscillator. 0 = don't use OSCCAL calibration (e.g. external crystal oszillator is used). -128 = OSCCAL measure mode: the LED blinks every 60s, so the user can measure the original speed. -127..+127 = The speed is adjusted by the given amount in per mill (e.g. 10 means to speed up the device by +1%).
MinVal: -128, MaxVal: 127, Default: 0
16Reserved6 Bytesn/a
64Generic
This block contains SHC configuration data which every device has.
DeviceIDUIntValue12 BitsThe DeviceID identifies the specific unit in the SHC network. It is used to address the device and in messages the device sends. Every device has to have a different DeviceID.
MinVal: 0, MaxVal: 4095
76Reserved4 Bitsn/a
80PacketCounterUIntValue3 BytesThe PacketCounter is counted up throughout the whole lifetime of the device and is used to make the encrypted packets differently from each other every time.
MinVal: 0, MaxVal: 16777215
104Reserved19 Bytesn/a
256AesKeyByteArray32 BytesThis key is used to encrypt packets before sending and also used as primary key to decrypt packets. Special devices may have additional keys in their device specific block.
512EnvSensor
This block contains the specific configuration data that only Environment Sensor devices need.
TemperatureSensorTypeEnumValue1 BytesYou can choose one of the supported temperature / humidity sensors.
Values: 0 = NoSensor, 1 = SHT15, 2 = DS7505, 3 = BMP085, 4 = DS18x20, 5 = SHT2x_HTU21D
520HumiditySensorTypeEnumValue1 BytesYou can choose one of the supported air humidity sensors.
Values: 0 = NoSensor, 1 = SHT15, 2 = SHT2x_HTU21D
528BarometricSensorTypeEnumValue1 BytesYou can choose one of the supported barometric pressure sensors.
Values: 0 = NoSensor, 1 = BMP085
536BrightnessSensorTypeEnumValue1 BytesYou can choose one of the supported light sensors.
Values: 0 = NoSensor, 1 = Photocell
544DistanceSensorTypeEnumValue1 BytesChoose one of the connected distance sensor types.
Values: 0 = NoSensor, 1 = SRF02
552ParticulateMatterSensorTypeEnumValue1 BytesChoose one of the connected particulate matter sensor types.
Values: 0 = NoSensor, 1 = SPS30
560Reserved57 Bytesn/a
1016PowerPinModeEnumValue1 BytesChoose the behaviour of the power pin (PD5) while measuring. It can be turned on before measuring to switch a voltage converter to produce 5V out of the 3V battery power. This is needed for some sensors which need 5V. 5VSensor_Delay1000 means that the pin is switched on when a sensor is configured which needs 5V power (currently SRF02 and SPS30). There's a delay of 1000ms after switching the pin to stabilize the voltage and to ensure the sensor works correctly. Off means the power pin is always off.
Values: 0 = Off, 1 = 5VSensor_Delay1000
1024WakeupIntervalEnumValue2 BytesDecide after which time the device should be woken up by the RFM12B transceiver to measure or send values.
Values: 1018 = 2s, 1274 = 4s, 1467 = 6s, 1530 = 8s, 1692 = 10s, 1770 = 15s, 1948 = 20s, 2027 = 30s, 2224 = 45s, 2421 = 60s, 2450 = 75s, 2480 = 90s, 2509 = 105s, 2538 = 2m, 2736 = 3m, 2794 = 4m, 2962 = 5m, 3050 = 8m, 3248 = 12m, 3292 = 15m, 3474 = 20m, Default: 2509
1040TemperatureMeasuringIntervalUIntValue1 BytesThe number of times the device wakes up before this value is measured.
MinVal: 1, MaxVal: 255, Default: 1
1048TemperatureAveragingIntervalUIntValue1 BytesThe number of values whose average is calculated before sending.
MinVal: 1, MaxVal: 16, Default: 4
1056HumidityMeasuringIntervalUIntValue1 BytesThe number of times the device wakes up before this value is measured.
MinVal: 1, MaxVal: 255, Default: 1
1064HumidityAveragingIntervalUIntValue1 BytesThe number of values whose average is calculated before sending.
MinVal: 1, MaxVal: 16, Default: 4
1072BarometricMeasuringIntervalUIntValue1 BytesThe number of times the device wakes up before this value is measured.
MinVal: 1, MaxVal: 255, Default: 1
1080BarometricAveragingIntervalUIntValue1 BytesThe number of values whose average is calculated before sending.
MinVal: 1, MaxVal: 16, Default: 4
1088BrightnessMeasuringIntervalUIntValue1 BytesThe number of times the device wakes up before this value is measured.
MinVal: 1, MaxVal: 255, Default: 1
1096BrightnessAveragingIntervalUIntValue1 BytesThe number of values whose average is calculated before sending.
MinVal: 1, MaxVal: 16, Default: 4
1104DistanceMeasuringIntervalUIntValue1 BytesThe number of times the device wakes up before this value is measured.
MinVal: 1, MaxVal: 255, Default: 4
1112DistanceAveragingIntervalUIntValue1 BytesThe number of values whose average is calculated before sending.
MinVal: 1, MaxVal: 16, Default: 1
1120DigitalInputMeasuringIntervalUIntValue1 BytesThe number of times the device wakes up before this value is measured.
MinVal: 1, MaxVal: 255, Default: 1
1128DigitalInputAveragingIntervalUIntValue1 BytesThe number of values whose average is calculated before sending.
MinVal: 1, MaxVal: 16, Default: 6
1136AnalogInputMeasuringIntervalUIntValue1 BytesThe number of times the device wakes up before this value is measured.
MinVal: 1, MaxVal: 255, Default: 1
1144AnalogInputAveragingIntervalUIntValue1 BytesThe number of values whose average is calculated before sending.
MinVal: 1, MaxVal: 16, Default: 6
1152ParticulateMatterMeasuringIntervalUIntValue1 BytesThe number of times the device wakes up before this value is measured.
MinVal: 1, MaxVal: 255, Default: 1
1160ParticulateMatterAveragingIntervalUIntValue1 BytesThe number of values whose average is calculated before sending.
MinVal: 1, MaxVal: 16, Default: 4
1168Reserved46 Bytesn/a
1536DigitalInputPinEnumValue[8]1 Bytes x 8You can choose up to 8 GPIO pins as digital input. The enum values are counting through every pin from port B, C and D, leaving out the pins that are not accessible because otherwise used.
Values: 0 = Unused, 2 = PB1, 3 = PB2, 7 = PB6, 8 = PB7, 10 = PC1, 11 = PC2, 12 = PC3, 13 = PC4, 14 = PC5, 20 = PD3, 21 = PD4, 22 = PD5, 23 = PD6
1600DigitalInputPullUpResistorBoolValue[8]1 Bytes x 8Decide if you want to switch on the pull-up resistor at each input pin you have chosen. (If you connect a simple switch connected to ground, you typically want this.)
1664DigitalInputTriggerModeEnumValue[8]1 Bytes x 8The mode decides how the device detects changes and when a new message is sent. Off means the value is sent after a full cycle time only. In any other case, the device wakes up immediately after a change. A status is then sent either when the level is going up, down or on change.
Values: 0 = Off, 1 = Up, 2 = Down, 3 = Change
1728Reserved40 Bytesn/a
2048AnalogInputPinEnumValue[5]1 Bytes x 5You can choose up to 5 ADC pins as analog input. The enum values are a reduced set of the ones from the digital input.
Values: 0 = Unused, 10 = PC1, 11 = PC2, 12 = PC3, 13 = PC4, 14 = PC5
2088AnalogInputTriggerModeEnumValue[5]1 Bytes x 5The mode decides how the device detects changes and when a new message is sent. The voltage level is measured in the configured interval. When the mode is set to off, the status is only sent after a full averaging cycle. In the other modes, a status is sent when the level is going up, down or changes according to the trigger level.
Values: 0 = Off, 1 = Up, 2 = Down, 3 = Change
2128AnalogInputTriggerThresholdUIntValue[5]2 Bytes x 5The threshold in millivolts is used when the trigger mode is on.
MinVal: 0, MaxVal: 1100
2208AnalogInputTriggerHysteresisUIntValue[5]2 Bytes x 5The hysteresis in millivolts is used when the trigger mode is on. It can avoid the trigger firing too often if you measure a slighty changing voltage. Because of noise and accuracy limits of the ADC, you should set a positive hysteresis in any case.
MinVal: 0, MaxVal: 1100
2288Reserved34 Bytesn/a
2560Reserved704 Bytesn/a

PowerSwitch (40)

OffsetBlockContentTypeSizeDescription
0Hardware
Values for hardware setup, which have no special meaning to SHC device concepts + the DeviceType, which decides about the existence of further blocks.
DeviceTypeEnumValue1 BytesThe device can check with this value if the EEPROM data is meant for the actual type of device. If not, the device goes into an error mode.
Values: 0 = BaseStation, 20 = EnvSensor, 40 = PowerSwitch, 45 = Controller, 50 = RGBDimmer, 60 = Dimmer, 70 = SoilMoistureMeter, 80 = Thermostat, 90 = TeaMaker
8OsccalModeIntValue1 BytesThis value is used to change the speed of the internal oscillator. 0 = don't use OSCCAL calibration (e.g. external crystal oszillator is used). -128 = OSCCAL measure mode: the LED blinks every 60s, so the user can measure the original speed. -127..+127 = The speed is adjusted by the given amount in per mill (e.g. 10 means to speed up the device by +1%).
MinVal: -128, MaxVal: 127, Default: 0
16Reserved6 Bytesn/a
64Generic
This block contains SHC configuration data which every device has.
DeviceIDUIntValue12 BitsThe DeviceID identifies the specific unit in the SHC network. It is used to address the device and in messages the device sends. Every device has to have a different DeviceID.
MinVal: 0, MaxVal: 4095
76Reserved4 Bitsn/a
80PacketCounterUIntValue3 BytesThe PacketCounter is counted up throughout the whole lifetime of the device and is used to make the encrypted packets differently from each other every time.
MinVal: 0, MaxVal: 16777215
104Reserved19 Bytesn/a
256AesKeyByteArray32 BytesThis key is used to encrypt packets before sending and also used as primary key to decrypt packets. Special devices may have additional keys in their device specific block.
512PowerSwitch
This block contains the specific configuration data that only Power Switch devices need.
BaseStationPacketCounterUIntValue3 BytesThis is the last remembered packet counter of a command from the base station. Packets with the same or lower number are ignored.
MinVal: 0, MaxVal: 16777215
536TransceiverWatchdogTimeoutUIntValue1 BytesReset RFM12B module if no data is received until timeout is reached. Use this function if your specific transceiver hangs sometimes. Value is in deca seconds. Suggested setting is 48 (for 8 minutes). Set 0 to disable.
MinVal: 0, MaxVal: 255, Default: 48
544StatusCycleUIntValue1 BytesThis is the number of minutes after which the status should be resent, so in case of a lost message it can be received again. Set 0 to disable.
MinVal: 0, MaxVal: 255, Default: 30
552SupportedSwitchesUIntValue1 BytesThis is the number of connected switches.
MinVal: 1, MaxVal: 3
560CMDStateBoolValue[8]1 Bytes x 8This field stores the switch state(s) which were requested by one of the supported 'set'/'setget' commands for eight switches to allow restoring the same state after power loss. Fill this with zeros when creating a e2p file!
624CMDTimeoutUIntValue[8]2 Bytes x 8This field stores the timeout value(s) which were requested by one of the supported 'set'/'setget' commands for eight switches to allow restoring the same state after power loss. Fill this with zeros when creating a e2p file!
MinVal: 0, MaxVal: 65767
752SwitchModeEnumValue[8]1 Bytes x 8The mode decides how the optional manual switches are used in combination to the digital pin/port commands to set the relais status. In general, the status according digital pin/port command (CMD) and the switch (SW) can be combined by 'and', 'or' or 'xor'. Additionally the switch can be active open or active close and therefore can be inverted ('not'). 'CMD' and '(not) SW' mean that only the command or switch are considered. The default value is to ignore the optional manual switch.
Values: 0 = CMD, 1 = SW, 2 = not SW, 3 = CMD and SW, 4 = CMD and not SW, 5 = CMD or SW, 6 = CMD or not SW, 7 = CMD xor SW, 8 = CMD xor not SW, Default: 0
816SwitchOnDelayUIntValue[8]2 Bytes x 8This field contains for the 8 switches the times in seconds after which the change of a switch to state "ON" is considered to affect the relais state. If the switch changes to "OFF" again within the delay time, it is cleared and no change of the relais state will happen. If the relais state is changed via command within the delay time, the relais state will consider the old switch state until the delay time is over. After restart (power loss), the delay will not be considered, so the switch state is considered immediately.
MinVal: 0, MaxVal: 65535, Default: 0
944SwitchOffDelayUIntValue[8]2 Bytes x 8This field contains for the 8 switches the times in seconds after which the change of a switch to state "OFF" is considered to affect the relais state. The behaviour is equivalent to SwitchOnDelay.
MinVal: 0, MaxVal: 65535, Default: 0
1072Reserved890 Bytesn/a

Controller (45)

OffsetBlockContentTypeSizeDescription
0Hardware
Values for hardware setup, which have no special meaning to SHC device concepts + the DeviceType, which decides about the existence of further blocks.
DeviceTypeEnumValue1 BytesThe device can check with this value if the EEPROM data is meant for the actual type of device. If not, the device goes into an error mode.
Values: 0 = BaseStation, 20 = EnvSensor, 40 = PowerSwitch, 45 = Controller, 50 = RGBDimmer, 60 = Dimmer, 70 = SoilMoistureMeter, 80 = Thermostat, 90 = TeaMaker
8OsccalModeIntValue1 BytesThis value is used to change the speed of the internal oscillator. 0 = don't use OSCCAL calibration (e.g. external crystal oszillator is used). -128 = OSCCAL measure mode: the LED blinks every 60s, so the user can measure the original speed. -127..+127 = The speed is adjusted by the given amount in per mill (e.g. 10 means to speed up the device by +1%).
MinVal: -128, MaxVal: 127, Default: 0
16Reserved6 Bytesn/a
64Generic
This block contains SHC configuration data which every device has.
DeviceIDUIntValue12 BitsThe DeviceID identifies the specific unit in the SHC network. It is used to address the device and in messages the device sends. Every device has to have a different DeviceID.
MinVal: 0, MaxVal: 4095
76Reserved4 Bitsn/a
80PacketCounterUIntValue3 BytesThe PacketCounter is counted up throughout the whole lifetime of the device and is used to make the encrypted packets differently from each other every time.
MinVal: 0, MaxVal: 16777215
104Reserved19 Bytesn/a
256AesKeyByteArray32 BytesThis key is used to encrypt packets before sending and also used as primary key to decrypt packets. Special devices may have additional keys in their device specific block.
512Controller
This block contains the specific configuration data that only Controller devices need.
BaseStationPacketCounterUIntValue3 BytesThis is the last remembered packet counter of a command from the base station. Packets with the same or lower number are ignored.
MinVal: 0, MaxVal: 16777215
536BrightnessFactorUIntValue1 BytesThis value reduces the overall brightness for the RGB LEDs. This is to easily adjust it to your needs without changing the LED series resistors. WARNING: It is recommended to use this only for testing, because it reduces the amount of different brightness levels. Changing the resistors is to be preferred.
MinVal: 1, MaxVal: 100, Default: 100
544TransceiverWatchdogTimeoutUIntValue1 BytesReset RFM12B module if no data is received until timeout is reached. Use this function if your specific transceiver hangs sometimes. Value is in deca seconds. Suggested setting is 48 (for 8 minutes). Set 0 to disable.
MinVal: 0, MaxVal: 255, Default: 48
552MenuSelectionStatusCycleUIntValue1 BytesThis is the number of minutes after which the menu selection should be resent, so in case of a lost message it can be received again. Since MenuSelection updates are sent with a Deliver message, it's usually not necessary to send it often. In case the menu contains relative time values it is even problematic to send it when not explicitly selected by the user. Set 0 to disable.
MinVal: 0, MaxVal: 255, Default: 0
560BacklightStatusCycleUIntValue1 BytesThis is the number of minutes after which the backlight setting should be resent, so in case of a lost message it can be received again. Set 0 to disable.
MinVal: 0, MaxVal: 255, Default: 120
568SoundEnumValue1 BytesDefines if key presses and saving menu entries / cancelling the menu are acknowledged with sounds.
Values: 0 = Silent, 1 = Key, 2 = SaveCancel, 3 = Key_SaveCancel, Default: 3
576LCDTypeEnumValue1 BytesDefine if an LCD is connected and of which type (size) it is. Only HD44780 compatible text displays are currently supported.
Values: 0 = None, 1 = 4x20, 2 = 4x40, Default: 1
584LCDPagesUIntValue1 BytesThis is the number of pages that may be addressed virtually and selected with Up/Down buttons. If you fill less than 8 pages with content and want to avoid that the user can switch to empty pages, reduce the number accordingly.
MinVal: 1, MaxVal: 8, Default: 2
592PageJumpBackSecondsUIntValue1 BytesThis defines after how many seconds the display shows the first page again after the user pressed the button to show the additional virtual lines. Set 0 to disable.
MinVal: 0, MaxVal: 255, Default: 60
600MenuJumpBackSecondsUIntValue1 BytesThis defines after how many seconds the selection of menu options is cancelled if the user doesn't press any button anymore. The menu options are not saved in this case. Set 0 to disable.
MinVal: 0, MaxVal: 255, Default: 60
608BacklightModeEnumValue1 BytesDefines the initial behaviour for the backlight after startup. Can be changed by the Controller-Backlight message. On: Backlight is always on. Off: Backlight is always off. Auto: Backlight is switched on for AutoBacklightTimeSec seconds when a key is pressed or after startup. Otherwise it's off.
Values: 0 = On, 1 = Off, 2 = Auto, Default: 0
616AutoBacklightTimeSecUIntValue1 BytesThis defines after how many seconds the backlight is switched off in mode Auto.
MinVal: 1, MaxVal: 255, Default: 60
624MenuOptionByteArray[16]120 Bytes x 16These are up to 16 strings that define options that the user can select. Each entry is defined with a name and several options to select, which are separated with a pipe character '|'. Leave the string empty when there shall be no more options to select. Currently, only the first 4 entries are supported.
15984MenuOptionIndexUIntValue[16]1 Bytes x 16This is the index of the currently selected value. It's saved to the E2P to be available also after power loss.
MinVal: 0, MaxVal: 255
16112MenuTextSendOptionsByteArray20 BytesThis text is shown when menu options are sent. The default text is 'Sending Options'. You can use 'Sende Optionen' as german translation.
Default: 53 65 6E 64 69 6E 67 20 4F 70 74 69 6F 6E 73 00 00 00 00 00
16272MenuTextSuccessByteArray20 BytesThis text is shown when sending menu options was successful. The default text is 'Success'. You can use 'Erfolgreich' as german translation.
Default: 53 75 63 63 65 73 73 00 00 00 00 00 00 00 00 00 00 00 00 00
16432MenuTextFailedByteArray20 BytesThis text is shown when sending menu options failed. The default text is 'Failed'. You can use 'Fehlgeschlagen' as german translation.
Default: 46 61 69 6C 65 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00
16592MenuTextCancelByteArray20 BytesThis text is shown when sending menu options was cancelled. The default text is 'Cancelled'. You can use 'Abbruch' as german translation.
Default: 43 61 6E 63 65 6C 6C 65 64 00 00 00 00 00 00 00 00 00 00 00
16752Reserved2002 Bytesn/a

RGBDimmer (50)

OffsetBlockContentTypeSizeDescription
0Hardware
Values for hardware setup, which have no special meaning to SHC device concepts + the DeviceType, which decides about the existence of further blocks.
DeviceTypeEnumValue1 BytesThe device can check with this value if the EEPROM data is meant for the actual type of device. If not, the device goes into an error mode.
Values: 0 = BaseStation, 20 = EnvSensor, 40 = PowerSwitch, 45 = Controller, 50 = RGBDimmer, 60 = Dimmer, 70 = SoilMoistureMeter, 80 = Thermostat, 90 = TeaMaker
8OsccalModeIntValue1 BytesThis value is used to change the speed of the internal oscillator. 0 = don't use OSCCAL calibration (e.g. external crystal oszillator is used). -128 = OSCCAL measure mode: the LED blinks every 60s, so the user can measure the original speed. -127..+127 = The speed is adjusted by the given amount in per mill (e.g. 10 means to speed up the device by +1%).
MinVal: -128, MaxVal: 127, Default: 0
16Reserved6 Bytesn/a
64Generic
This block contains SHC configuration data which every device has.
DeviceIDUIntValue12 BitsThe DeviceID identifies the specific unit in the SHC network. It is used to address the device and in messages the device sends. Every device has to have a different DeviceID.
MinVal: 0, MaxVal: 4095
76Reserved4 Bitsn/a
80PacketCounterUIntValue3 BytesThe PacketCounter is counted up throughout the whole lifetime of the device and is used to make the encrypted packets differently from each other every time.
MinVal: 0, MaxVal: 16777215
104Reserved19 Bytesn/a
256AesKeyByteArray32 BytesThis key is used to encrypt packets before sending and also used as primary key to decrypt packets. Special devices may have additional keys in their device specific block.
512RGBDimmer
This block contains the specific configuration data that only RGB Dimmer devices need.
BaseStationPacketCounterUIntValue3 BytesThis is the last remembered packet counter of a command from the base station. Packets with the same or lower number are ignored.
MinVal: 0, MaxVal: 16777215
536BrightnessFactorUIntValue1 BytesThis value reduces the overall brightness. This is to easily adjust it to your needs without changing the LED series resistors. WARNING: It is recommended to use this only for testing, because it reduces the amount of different brightness levels. Changing the resistors is to be preferred.
MinVal: 1, MaxVal: 100, Default: 100
544TransceiverWatchdogTimeoutUIntValue1 BytesReset RFM12B module if no data is received until timeout is reached. Use this function if your specific transceiver hangs sometimes. Value is in deca seconds. Suggested setting is 48 (for 8 minutes). Set 0 to disable.
MinVal: 0, MaxVal: 255, Default: 48
552Reserved955 Bytesn/a

Dimmer (60)

OffsetBlockContentTypeSizeDescription
0Hardware
Values for hardware setup, which have no special meaning to SHC device concepts + the DeviceType, which decides about the existence of further blocks.
DeviceTypeEnumValue1 BytesThe device can check with this value if the EEPROM data is meant for the actual type of device. If not, the device goes into an error mode.
Values: 0 = BaseStation, 20 = EnvSensor, 40 = PowerSwitch, 45 = Controller, 50 = RGBDimmer, 60 = Dimmer, 70 = SoilMoistureMeter, 80 = Thermostat, 90 = TeaMaker
8OsccalModeIntValue1 BytesThis value is used to change the speed of the internal oscillator. 0 = don't use OSCCAL calibration (e.g. external crystal oszillator is used). -128 = OSCCAL measure mode: the LED blinks every 60s, so the user can measure the original speed. -127..+127 = The speed is adjusted by the given amount in per mill (e.g. 10 means to speed up the device by +1%).
MinVal: -128, MaxVal: 127, Default: 0
16Reserved6 Bytesn/a
64Generic
This block contains SHC configuration data which every device has.
DeviceIDUIntValue12 BitsThe DeviceID identifies the specific unit in the SHC network. It is used to address the device and in messages the device sends. Every device has to have a different DeviceID.
MinVal: 0, MaxVal: 4095
76Reserved4 Bitsn/a
80PacketCounterUIntValue3 BytesThe PacketCounter is counted up throughout the whole lifetime of the device and is used to make the encrypted packets differently from each other every time.
MinVal: 0, MaxVal: 16777215
104Reserved19 Bytesn/a
256AesKeyByteArray32 BytesThis key is used to encrypt packets before sending and also used as primary key to decrypt packets. Special devices may have additional keys in their device specific block.
512Dimmer
This block contains the specific configuration data that only Dimmer devices need.
BaseStationPacketCounterUIntValue3 BytesThis is the last remembered packet counter of a command from the base station. Packets with the same or lower number are ignored.
MinVal: 0, MaxVal: 16777215
536BrightnessTranslationTableByteArray101 BytesThese are the target values (one byte each) for the input brightness of 0, 1, ... 100% to adapt the specific brightness curve of your lamps. Set first byte to FF to not use it.
Default: 00 11 15 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2E 2F 30 31 32 33 34 36 37 38 39 3A 3B 3C 3D 3E 40 41 42 43 45 46 47 49 4A 4B 4C 4E 50 51 53 54 56 58 59 5B 5D 5F 61 63 65 67 69 6B 6D 6F 71 73 75 78 7A 7D 80 83 86 89 8B 8F 93 96 9A 9F A3 A7 AB AF B4 BC C2 C9 CF D4 DB E6 F1 FF
1344TransceiverWatchdogTimeoutUIntValue1 BytesReset RFM12B module if no data is received until timeout is reached. Use this function if your specific transceiver hangs sometimes. Value is in deca seconds. Suggested setting is 48 (for 8 minutes). Set 0 to disable (default).
MinVal: 0, MaxVal: 255, Default: 0
1352Reserved855 Bytesn/a

SoilMoistureMeter (70)

OffsetBlockContentTypeSizeDescription
0Hardware
Values for hardware setup, which have no special meaning to SHC device concepts + the DeviceType, which decides about the existence of further blocks.
DeviceTypeEnumValue1 BytesThe device can check with this value if the EEPROM data is meant for the actual type of device. If not, the device goes into an error mode.
Values: 0 = BaseStation, 20 = EnvSensor, 40 = PowerSwitch, 45 = Controller, 50 = RGBDimmer, 60 = Dimmer, 70 = SoilMoistureMeter, 80 = Thermostat, 90 = TeaMaker
8OsccalModeIntValue1 BytesThis value is used to change the speed of the internal oscillator. 0 = don't use OSCCAL calibration (e.g. external crystal oszillator is used). -128 = OSCCAL measure mode: the LED blinks every 60s, so the user can measure the original speed. -127..+127 = The speed is adjusted by the given amount in per mill (e.g. 10 means to speed up the device by +1%).
MinVal: -128, MaxVal: 127, Default: 0
16Reserved6 Bytesn/a
64Generic
This block contains SHC configuration data which every device has.
DeviceIDUIntValue12 BitsThe DeviceID identifies the specific unit in the SHC network. It is used to address the device and in messages the device sends. Every device has to have a different DeviceID.
MinVal: 0, MaxVal: 4095
76Reserved4 Bitsn/a
80PacketCounterUIntValue3 BytesThe PacketCounter is counted up throughout the whole lifetime of the device and is used to make the encrypted packets differently from each other every time.
MinVal: 0, MaxVal: 16777215
104Reserved19 Bytesn/a
256AesKeyByteArray32 BytesThis key is used to encrypt packets before sending and also used as primary key to decrypt packets. Special devices may have additional keys in their device specific block.
512SoilMoistureMeter
This device can measure the humidity of soil to estimate if watering of plants is necessary.
WakeupIntervalInitEnumValue2 BytesDecide about the interval between two measurements when the device is in initialization mode (after button press) to remember the dry threshold value.
Values: 1692 = 10s, 2421 = 1m, 2538 = 2m, 2794 = 4m, 3050 = 8m, 3292 = 15m, 3474 = 20m, 3548 = 30m, 3804 = 1h, 4060 = 2h, 4261 = 3h, 4316 = 4h, 4517 = 6h, 4572 = 8h, 4773 = 12h, 4828 = 16h, Default: 3050
528AveragingIntervalInitUIntValue1 BytesThe number of values whose average is calculated before the dry threshold is remembered.
MinVal: 1, MaxVal: 16, Default: 6
536WakeupIntervalEnumValue2 BytesDecide after which time the device should be woken up by the RFM12B transceiver to measure values in normal operation.
Values: 1692 = 10s, 2421 = 1m, 2538 = 2m, 2794 = 4m, 3050 = 8m, 3292 = 15m, 3474 = 20m, 3548 = 30m, 3804 = 1h, 4060 = 2h, 4261 = 3h, 4316 = 4h, 4517 = 6h, 4572 = 8h, 4773 = 12h, 4828 = 16h, Default: 3548
552AveragingIntervalUIntValue1 BytesThe number of values whose average is calculated before the current humidity is calculated and sent.
MinVal: 1, MaxVal: 16, Default: 6
560DryThresholdUIntValue2 BytesThis is the dry threshold and maximum counter value that should happen.
MinVal: 0, MaxVal: 65535
576MinValUIntValue2 BytesThis is the minimum counter value measured in the current watering cycle when the soil is wet.
MinVal: 0, MaxVal: 65535
592SmoothingPercentageUIntValue1 BytesThis is the size of a moving window in which the absolute humidity (0 to 100 percent) is smoothed. This is necessary because the raw values typically show some short term variation, depending on external circumstances (plant in sunlight or above radiator). The variation also depends on the thickness of isolation above the sensor plates.
MinVal: 0, MaxVal: 30, Default: 8
600Reserved949 Bytesn/a

Thermostat (80)

OffsetBlockContentTypeSizeDescription
0Hardware
Values for hardware setup, which have no special meaning to SHC device concepts + the DeviceType, which decides about the existence of further blocks.
DeviceTypeEnumValue1 BytesThe device can check with this value if the EEPROM data is meant for the actual type of device. If not, the device goes into an error mode.
Values: 0 = BaseStation, 20 = EnvSensor, 40 = PowerSwitch, 45 = Controller, 50 = RGBDimmer, 60 = Dimmer, 70 = SoilMoistureMeter, 80 = Thermostat, 90 = TeaMaker
8OsccalModeIntValue1 BytesThis value is used to change the speed of the internal oscillator. 0 = don't use OSCCAL calibration (e.g. external crystal oszillator is used). -128 = OSCCAL measure mode: the LED blinks every 60s, so the user can measure the original speed. -127..+127 = The speed is adjusted by the given amount in per mill (e.g. 10 means to speed up the device by +1%).
MinVal: -128, MaxVal: 127, Default: 0
16Reserved6 Bytesn/a
64Generic
This block contains SHC configuration data which every device has.
DeviceIDUIntValue12 BitsThe DeviceID identifies the specific unit in the SHC network. It is used to address the device and in messages the device sends. Every device has to have a different DeviceID.
MinVal: 0, MaxVal: 4095
76Reserved4 Bitsn/a
80PacketCounterUIntValue3 BytesThe PacketCounter is counted up throughout the whole lifetime of the device and is used to make the encrypted packets differently from each other every time.
MinVal: 0, MaxVal: 16777215
104Reserved19 Bytesn/a
256AesKeyByteArray32 BytesThis key is used to encrypt packets before sending and also used as primary key to decrypt packets. Special devices may have additional keys in their device specific block.
512Thermostat
This block contains the specific configuration data that only thermostat devices need.
BaseStationPacketCounterUIntValue3 BytesThis is the last remembered packet counter of a command from the base station. Packets with the same or lower number are ignored.
MinVal: 0, MaxVal: 16777215
536Reserved957 Bytesn/a

TeaMaker (90)

OffsetBlockContentTypeSizeDescription
0Hardware
Values for hardware setup, which have no special meaning to SHC device concepts + the DeviceType, which decides about the existence of further blocks.
DeviceTypeEnumValue1 BytesThe device can check with this value if the EEPROM data is meant for the actual type of device. If not, the device goes into an error mode.
Values: 0 = BaseStation, 20 = EnvSensor, 40 = PowerSwitch, 45 = Controller, 50 = RGBDimmer, 60 = Dimmer, 70 = SoilMoistureMeter, 80 = Thermostat, 90 = TeaMaker
8OsccalModeIntValue1 BytesThis value is used to change the speed of the internal oscillator. 0 = don't use OSCCAL calibration (e.g. external crystal oszillator is used). -128 = OSCCAL measure mode: the LED blinks every 60s, so the user can measure the original speed. -127..+127 = The speed is adjusted by the given amount in per mill (e.g. 10 means to speed up the device by +1%).
MinVal: -128, MaxVal: 127, Default: 0
16Reserved6 Bytesn/a
64Generic
This block contains SHC configuration data which every device has.
DeviceIDUIntValue12 BitsThe DeviceID identifies the specific unit in the SHC network. It is used to address the device and in messages the device sends. Every device has to have a different DeviceID.
MinVal: 0, MaxVal: 4095
76Reserved4 Bitsn/a
80PacketCounterUIntValue3 BytesThe PacketCounter is counted up throughout the whole lifetime of the device and is used to make the encrypted packets differently from each other every time.
MinVal: 0, MaxVal: 16777215
104Reserved19 Bytesn/a
256AesKeyByteArray32 BytesThis key is used to encrypt packets before sending and also used as primary key to decrypt packets. Special devices may have additional keys in their device specific block.
512TeaMaker
This block contains the specific configuration data that only tea maker needs.
BaseStationPacketCounterUIntValue3 BytesThis is the last remembered packet counter of a command from the base station. Packets with the same or lower number are ignored.
MinVal: 0, MaxVal: 16777215
536StartupConfirmationMessageByteArray32 BytesText shown on LCD at startup until a button is pressed.
792Reserved160 Bytesn/a
2072PresetCountUIntValue1 BytesThe number of presets to use.
MinVal: 1, MaxVal: 9
2080PresetNameByteArray[9]16 Bytes x 9The name of the brewing preset (most times the type of tea used), shown on the LCD.
3232HeatingTemperatureUIntValue[9]2 Bytes x 9Temperature to which the water is heated up in 1/10 degrees celsius (range is 0 to 100 degree celsius).
MinVal: 0, MaxVal: 1000, Default: 900
3376HeatingTemperatureDropUIntValue[9]1 Bytes x 9The number of degrees that the temperature has to drop after the maximum temperature was reached after powering off the heating plate when HeatingTemperature was reached (in 1/10 degree celsius).
MinVal: 0, MaxVal: 50, Default: 10
3448LastHeatingTimeSecUIntValue[9]2 Bytes x 9This is the time it took the last time to heat up the water. The value is used to show and calculate a countdown. Range is from 0 to 30 minutes, in seconds.
MinVal: 0, MaxVal: 1800
3592BrewingTemperatureUIntValue[9]2 Bytes x 9Temperature (in 1/10 degree celsius) to which the water is cooled off until brewing is started, in 1/10 degree celsius. The water is held at this temperature during the brewing phase.
MinVal: 0, MaxVal: 1000, Default: 900
3736BrewingTimeSecUIntValue[9]2 Bytes x 9This is how long the tea bag is placed inside the water at brewing temperature. Range is from 0 to 30 minutes, in seconds.
MinVal: 0, MaxVal: 1800, Default: 240
3880WarmingTemperatureUIntValue[9]2 Bytes x 9Temperature at which the water is held after brewing is finished.
MinVal: 0, MaxVal: 1000, Default: 500
4024WarmingTimeSecUIntValue[9]2 Bytes x 9This is how long the water is held at the warming temperature after brewing is finished. Range is from 0 to 12 hours, in seconds.
MinVal: 0, MaxVal: 43200, Default: 7200
4168Reserved72 Bytesn/a
4744BrewingRegulationRangeAboveUIntValue1 BytesThis defines at which temperature the heating plate is turned off when heating up in the brewing phase, in 1/10 degree celsius.
MinVal: 0, MaxVal: 50, Default: 20
4752BrewingRegulationRangeBelowUIntValue1 BytesThis defines at which temperature the heating plate is turned on again when the water is cooling off currently in the brewing phase, in 1/10 degree celsius.
MinVal: 0, MaxVal: 50, Default: 20
4760WarmingRegulationRangeAboveUIntValue1 BytesThis defines at which temperature the heating plate is turned off when heating up in the warming phase, in 1/10 degree celsius.
MinVal: 0, MaxVal: 50, Default: 20
4768WarmingRegulationRangeBelowUIntValue1 BytesThis defines at which temperature the heating plate is turned on again when the water is cooling off currently in the warming phase, in 1/10 degree celsius.
MinVal: 0, MaxVal: 50, Default: 20
4776BrewingPWMPercentageUIntValue1 BytesThe percentage of time the heating plate is one in one cycle of several seconds to minutes. The value has to be high enough to actually heat up the water also at the maximum brewing temperature and the maximum amount of water in the kettle.
MinVal: 0, MaxVal: 100, Default: 30
4784BrewingPWMCycleSecUIntValue1 BytesThe length of one heating PWM cycle in seconds in the brewing phase.
MinVal: 0, MaxVal: 255, Default: 30
4792WarmingPWMPercentageUIntValue1 BytesThe percentage of time the heating plate is one in one cycle of several seconds to minutes. The value has to be high enough to actually heat up the water also at the maximum warming temperature and the maximum amount of water in the kettle. The PWM cycle in general should be slower in the warming phase compared to the brewing phase, because usually the temperature to regulate to is not so important.
MinVal: 0, MaxVal: 100, Default: 30
4800WarmingPWMCycleSecUIntValue1 BytesThe length of one heating PWM cycle in seconds in the warming phase.
MinVal: 0, MaxVal: 255, Default: 180