-
Notifications
You must be signed in to change notification settings - Fork 31
Diagnostic Protocol Reverse Engineering
The MyHOME diagnostic protocol contains structures and operations that are not fully described by the publicly available OpenWebNet documentation.
Understanding these mechanisms therefore requires reverse engineering from observed behavior.
The analysis combines:
- OpenWebNet packet captures;
- controlled MyHOME Suite operations;
- known Device configurations;
- comparison between multiple Devices and firmware versions;
- the MHCatalogue database;
- controlled configuration changes followed by new captures.
The objective is to reconstruct the relationship between:
MyHOME Suite
│
▼
Diagnostic OpenWebNet
│
▼
Physical Device
│
▼
Modules
│
▼
Objects
│
▼
Configuration
Packet captures provide the primary evidence for protocol structure.
Useful captures include operations such as:
- discovery of all Devices;
- discovery of configured or unconfigured Devices;
- Device interview by hardware ID;
- Device interview by address;
- configuration reading;
- configuration programming;
- scans of different diagnostic WHO domains.
A single capture can reveal frame structure and sequencing, but comparison across captures is usually necessary before assigning semantics to individual fields.
MyHOME Suite provides the user-visible interpretation of Device configuration.
The GUI is useful for correlating protocol values with concepts such as:
- Device identity;
- Modules;
- Function type;
- A/PL addressing;
- operating modes;
- configuration properties;
- allowed values;
- enabled or disabled Modules.
A particularly useful technique is to change one GUI property at a time and compare the resulting protocol traffic.
The MH Catalogue provides the structural model required to interpret many protocol values.
Important tables include:
| Concept | Main tables |
|---|---|
| Device |
EN_ITEM, EN_DEVICE
|
| System |
EN_SYSTEM, AS_ITEM_SYSTEM
|
| Firmware |
EN_FIRMWARE, EN_BUILDS
|
| Module | EN_SLOTS |
| Object | EN_KEY_OBJECT |
| Virgin Object | EN_VIRGIN_OBJECT |
| Object selection |
AS_OBJECT_VIRGIN_OBJECT, AS_OBJECT_FIRMWARE
|
| Configuration |
EN_CONF, EN_CONF_RANGE
|
| Filtering |
EN_FILTER, EN_FILTER_RANGE
|
The database should not be treated as a direct specification of the wire protocol. Instead, protocol values are correlated with catalogue entities through repeated observations.
The first step is to determine the stable structure of a diagnostic frame.
For example, repeated observations establish the DIM30 structure as:
*#1001*WHERE*30*INTERNAL_SLOT*OBJECT_ID*DISABLED##
At this stage, field positions can be identified before their semantics are fully understood.
Values should then be compared across Devices with different known configurations.
For example, DIM32 reports:
*#1001*WHERE*32#INTERNAL_SLOT*1*CONFIGURED_WHERE##
Comparison with known actuator and sensor configurations showed that CONFIGURED_WHERE corresponds to the Module/Object's intrinsic A/PL address where such an address exists.
This conclusion is stronger than interpreting a single frame in isolation.
Known MyHOME Suite configuration provides another independent reference.
For example:
Device 004FBEC8
GUI: A=1, PL=1
DIM32:
CONFIGURED_WHERE = 11
and:
Device 00C16454
GUI: A=2, PL=3
DIM32:
CONFIGURED_WHERE = 23
Repeated agreement between GUI state and protocol values provides evidence for the field interpretation.
Protocol values can then be matched against the MH Catalogue.
For example:
DIM30 OBJECT_ID
│
▼
EN_KEY_OBJECT
│
▼
Object definition
Similarly:
DIM35 CONF_IDX
│
▼
EN_CONF.idx
│
▼
Configuration property
The combination of capture evidence and database structure is substantially more useful than either source alone.
One of the strongest reverse-engineering techniques is to modify a known configuration and observe exactly which protocol fields change.
The preferred experiment is:
Capture initial state
│
▼
Change one property
│
▼
Capture again
│
▼
Compare frames
│
▼
Identify changed value
│
▼
Repeat with another value
Changing only one variable reduces ambiguity.
Device 08CF44BF was changed from Object 164, Scenarios daylight sensor, to Object 128, Scenarios daylight and presence sensor.
The corresponding DIM30 Object ID changed while Device-level dimensions such as DIM3 and DIM6 remained unchanged.
This separates Device-level metadata from Module/Object-level state.
For Object 128, known GUI values could be correlated with DIM35:
idx 10 → Hours
idx 11 → Minutes
idx 12 → Seconds
idx 20 → PIR sensitivity
idx 22 → Detection scheme
Changing these properties provides a direct method for testing their protocol encoding.
A proposed interpretation should be tested against as many captures as possible.
This is particularly important when a field initially admits several plausible explanations.
The final DIM30 field was tested by correlating each internal slot with subsequent DIM32 and DIM35 activity.
Across multiple captures, the pattern was consistent:
DISABLED |
Observed behavior |
|---|---|
0 |
Module participates in configuration reporting |
1 |
Module does not participate in corresponding configuration reporting |
This also matches MyHOME Suite's enabled/disabled Module state.
The field is therefore documented as DISABLED:
0 → enabled
1 → disabled
DISABLED is a reverse-engineered field name; it is not known to be the official OpenWebNet terminology.
Protocol values must be correlated at the correct scope.
Possible scopes include:
Diagnostic domain
│
▼
Device
│
▼
Firmware
│
▼
Internal Module slot
│
▼
Object
│
▼
Configuration property
Using the wrong scope can produce false correlations.
For example, an internal slot is often a better correlation key than WHERE during a Device operation because the diagnostic WHERE used during different phases can change.
Likewise, a DIM35 configuration index is meaningful only after resolving the Object associated with that internal slot.
Reverse engineering should distinguish what appears directly on the wire from the meaning assigned to it.
For example:
Observed:
*#1001*0015*32#1*1*0015##
Interpretation:
internal slot 1 has intrinsic address A=0, PL=15
The frame itself is an observation.
The interpretation results from correlation with multiple Devices, GUI configuration, and catalogue structure.
This distinction is particularly important for fields whose semantics remain unresolved.
Unknown values should remain unknown until sufficient evidence exists.
A good example is DIM1 VALUE2:
*#1001*WHERE*1*VALUE1*VALUE2*VALUE3*VALUE4##
Current mappings are:
| Field | Interpretation |
|---|---|
VALUE1 |
AS_ITEM_SYSTEM.modobj |
VALUE2 |
Unknown |
VALUE3 |
EN_BRAND.brand_modobj |
VALUE4 |
EN_LINE.line_modobj |
Several classifications could potentially correlate with VALUE2, but correlation alone is insufficient to establish its meaning.
It should therefore remain documented simply as unknown until new evidence establishes its semantics.
The same principle applies to commands or dimensions whose behavioral position is known but whose exact internal operation is not.
Some protocol elements can be characterized by their observed behavior even when their exact internal meaning remains unknown.
For example:
| Element | Observed role |
|---|---|
WHAT4 |
Phase/Object completion or application boundary |
WHAT14 |
Preparation/opening of programming phase |
WHAT52 |
Post-Object programming operation |
DIM3 |
Device-level metadata |
DIM6 |
Device-level metadata |
DIM310 |
Object-specific/configuration information in limited observations |
These descriptions intentionally avoid assigning more precise semantics than the captures currently support.
Another useful technique is identifying symmetry between read and write frames.
For example:
READ
DIM30
DIM35
WRITE
#DIM30
#DIM35
Observed structures include:
READ
*#1001*WHERE*30*INTERNAL_SLOT*OBJECT_ID*DISABLED##
*#1001*WHERE*35#CONF_IDX#INTERNAL_SLOT*VALUE##
WRITE
*#1001*WHERE*#30*INTERNAL_SLOT*OBJECT_ID##
*#1001*WHERE*#35#CONF_IDX#INTERNAL_SLOT*VALUE##
This symmetry helps identify the role of fields and demonstrates that parts of the diagnostic protocol form a bidirectional configuration serialization mechanism.
Individual frames should also be interpreted within their surrounding protocol sequence.
For Device selection, for example, both WHAT10 and WHAT9 cause an automatic Device-description response:
WHAT10 → select for interview
WHAT9 → select for programming
│
▼
Automatic Device description
│
▼
WHAT4
The subsequent operation distinguishes the two modes:
WHAT10
│
▼
Automatic description
│
▼
WHAT4
│
▼
DIM38
│
▼
Configuration reading
versus:
WHAT9
│
▼
Automatic description
│
▼
WHAT4
│
▼
WHAT14
│
▼
Configuration programming
This illustrates why command semantics should be inferred from complete transactions rather than isolated frames.
Not every Device implements every dimension or configuration property.
Differences can result from:
- Device hardware;
- Object type;
- firmware version;
- available Modules;
- enabled Modules;
- firmware-specific catalogue filtering.
For example, the absence of DIM32 does not imply that a Module is disabled. Some Objects, such as command functions whose addresses represent destinations rather than their own intrinsic BUS address, may not expose DIM32.
Similarly, the generic configuration schema in EN_CONF can contain properties or values that are unavailable on a particular firmware.
Reverse engineering must therefore preserve Device, firmware, Module, and Object context.
The resulting protocol documentation follows several rules:
- Document directly observed frame structures separately from their interpretation.
- Validate field meanings across multiple Devices or controlled configuration changes where possible.
- Use the MH Catalogue as a decoding model, not as proof of wire-protocol semantics by itself.
- Keep unresolved fields explicitly unknown.
- Avoid transferring semantics between diagnostic WHO domains without capture evidence.
- Preserve the distinction between Device, Module, Object, and Configuration.
- Record behavioral roles when exact internal semantics cannot yet be established.
- Revisit earlier interpretations when new captures produce contradictory evidence.
The goal is not merely to assign names to unknown fields, but to construct a model that continues to explain new Devices and captures without contradiction.
A practical investigation workflow is:
Capture operation
│
▼
Extract diagnostic frames
│
▼
Group by Device and transaction
│
▼
Identify stable frame structure
│
▼
Compare Devices / configurations
│
▼
Correlate with MyHOME Suite
│
▼
Correlate with MH Catalogue
│
▼
Form interpretation
│
▼
Test against other captures
│
▼
Controlled configuration change
│
▼
Confirm, refine, or reject
This iterative process is the basis of the protocol model documented throughout this wiki.
- OpenWebNet Diagnostic Protocol
- Diagnostic Architecture
- Diagnostic WHO Domains
- Diagnostic Device Discovery
- Diagnostic Device Interview
- Device Modules and DIM30
- Module Addressing and DIM32
- Diagnostic Configuration Reading
- Module Configuration and DIM35
- Diagnostic Device Programming
- Diagnostic DIM Reference
- Diagnostic WHAT Reference
- MHCatalogue Database
- MHCatalogue Configuration Schema