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, 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
4624Reserved446 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, 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
552Reserved59 Bytesn/a
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
1152Reserved48 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, 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.
SupportedSwitchesUIntValue1 BytesThis is a bit field about the connected switches.
MinVal: 1, MaxVal: 6
520BaseStationPacketCounterUIntValue3 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
544SwitchStateBoolValue[8]1 Bytes x 8This field stores the last known switch state(s) for eight switches to allow restoring the same state after power loss. It contains also the remaining timeout value. Fill this with zeros when creating a e2p file!
608SwitchTimeoutUIntValue[8]2 Bytes x 8This field stores the last known switch state(s) for eight switches to allow restoring the same state after power loss. It contains also the remaining timeout value. Fill this with zeros when creating a e2p file!
MinVal: 0, MaxVal: 65767
736TransceiverWatchdogTimeoutUIntValue1 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
744Reserved931 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, 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 (default).
MinVal: 0, MaxVal: 255, Default: 0
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, 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, 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
600Reserved947 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, 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, 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