
SHC Tea Maker
Tea Maker
(In early implementation phase!)

Purpose
The tea maker consists of a control unit, a heating plate to heat water in a tea pot, a winch to put a tea bag or other tea container into the water, a sensor measuring the water temperature, a display and some navigation buttons for user input.
The device doesn't depend very much on smarthomatic. It could be used without a smarthomatic network at all. But it will receive the current time to be used by a timer function and it sends the curent device status, so it can be monitored by your home automation system.
Requirements & Development Process
After writing down things I wanted to implement for the tea maker, I thought about it and started writing a thorough and complete list of requirements which I'm now very happy about. After thinking about what to implement first, I created a small feature list. Then I thought about the development approach in general and decided to write down a system development process now used for the development of the tea maker. Please read it to better understand the lists below.

Functions, Behavior
Here's the WBS of the tea maker to track development progress. Only bugs are entered in GitHub and visible at the Kanban board.
Status Model
- Not Started: Todo, open, initial state, implementation wasn't started yet.
- Implementing: Implementation was started, but tesing of the feature is not possible yet.
- Testing: Implemented / built up (in SW / HW / ME), feature can be tested.
- Done: Testing done (for now), feature available to end user, but may contain bugs.
- Verified: Feature covers all requirements, no known bugs, 100% ready for productive use.

E2P Device Configuration
Offset | Block | Content | Type | Size | Description |
---|---|---|---|---|---|
0 | Hardware Values for hardware setup, which have no special meaning to SHC device concepts + the DeviceType, which decides about the existence of further blocks. | DeviceType | EnumValue | 1 Bytes | The 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 |
8 | OsccalMode | IntValue | 1 Bytes | This 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 | |
16 | Reserved | 6 Bytes | n/a | ||
64 | Generic This block contains SHC configuration data which every device has. | DeviceID | UIntValue | 12 Bits | The 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 |
76 | Reserved | 4 Bits | n/a | ||
80 | PacketCounter | UIntValue | 3 Bytes | The 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 | |
104 | Reserved | 19 Bytes | n/a | ||
256 | AesKey | ByteArray | 32 Bytes | This 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. | |
512 | TeaMaker This block contains the specific configuration data that only tea maker needs. | BaseStationPacketCounter | UIntValue | 3 Bytes | This 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 |
536 | StartupConfirmationMessage | ByteArray | 32 Bytes | Text shown on LCD at startup until a button is pressed. | |
792 | Reserved | 160 Bytes | n/a | ||
2072 | PresetCount | UIntValue | 1 Bytes | The number of presets to use. MinVal: 1, MaxVal: 9 | |
2080 | PresetName | ByteArray[9] | 16 Bytes x 9 | The name of the brewing preset (most times the type of tea used), shown on the LCD. | |
3232 | HeatingTemperature | UIntValue[9] | 2 Bytes x 9 | Temperature 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 | |
3376 | HeatingTemperatureDrop | UIntValue[9] | 1 Bytes x 9 | The 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 | |
3448 | LastHeatingTimeSec | UIntValue[9] | 2 Bytes x 9 | This 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 | |
3592 | BrewingTemperature | UIntValue[9] | 2 Bytes x 9 | Temperature (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 | |
3736 | BrewingTimeSec | UIntValue[9] | 2 Bytes x 9 | This 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 | |
3880 | WarmingTemperature | UIntValue[9] | 2 Bytes x 9 | Temperature at which the water is held after brewing is finished. MinVal: 0, MaxVal: 1000, Default: 500 | |
4024 | WarmingTimeSec | UIntValue[9] | 2 Bytes x 9 | This 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 | |
4168 | Reserved | 72 Bytes | n/a | ||
4744 | BrewingRegulationRangeAbove | UIntValue | 1 Bytes | This 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 | |
4752 | BrewingRegulationRangeBelow | UIntValue | 1 Bytes | This 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 | |
4760 | WarmingRegulationRangeAbove | UIntValue | 1 Bytes | This 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 | |
4768 | WarmingRegulationRangeBelow | UIntValue | 1 Bytes | This 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 | |
4776 | BrewingPWMPercentage | UIntValue | 1 Bytes | The 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 | |
4784 | BrewingPWMCycleSec | UIntValue | 1 Bytes | The length of one heating PWM cycle in seconds in the brewing phase. MinVal: 0, MaxVal: 255, Default: 30 | |
4792 | WarmingPWMPercentage | UIntValue | 1 Bytes | The 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 | |
4800 | WarmingPWMCycleSec | UIntValue | 1 Bytes | The length of one heating PWM cycle in seconds in the warming phase. MinVal: 0, MaxVal: 255, Default: 180 |
Hardware Overview
PCB | Tea Maker PCB (THTThrough hole technology This is the conventional technique to stick pins of components through the PCB and solder them. This is easy to build up, unlinke using SMD components.) 100 x 50 mm |
---|---|
Microcontroller | ATMega 324PA (40-pin TQFP) |
Clock Source | 10,24 MHz external quartz |
RFM Transceiver Mode | RX + TX |
UART | only debug TX |
Power | 5V power supply |