%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#2C3E50', 'primaryTextColor': '#fff', 'primaryBorderColor': '#16A085', 'lineColor': '#16A085', 'secondaryColor': '#E67E22', 'tertiaryColor': '#7F8C8D'}}}%%
graph TB
subgraph ITU["ITU-T Y.2060"]
ITU_APP["Application Layer<br/>(Business Apps)"]
ITU_SVC["Service Support<br/>(Generic Capabilities)"]
ITU_NET["Network Layer<br/>(Transport)"]
ITU_DEV["Device Layer<br/>(Sensors, Gateways)"]
end
subgraph IOT_A["IoT-A Architecture"]
IOTA_FUNC["Functional View<br/>(Service Organization)"]
IOTA_INFO["Information View<br/>(Entity Models)"]
IOTA_DEPLOY["Deployment View<br/>(Device Organization)"]
end
subgraph WSN["WSN Architecture"]
WSN_APP["Application<br/>(Aggregation, Queries)"]
WSN_NET["Network<br/>(Routing, Topology)"]
WSN_LINK["Data Link<br/>(MAC, Error Control)"]
WSN_PHY["Physical<br/>(Radio, Energy)"]
end
ITU_DEV --> ITU_NET --> ITU_SVC --> ITU_APP
WSN_PHY --> WSN_LINK --> WSN_NET --> WSN_APP
style ITU fill:#2C3E50,stroke:#16A085,color:#fff
style IOT_A fill:#E67E22,stroke:#2C3E50,color:#fff
style WSN fill:#16A085,stroke:#2C3E50,color:#fff
style ITU_APP fill:#7F8C8D,stroke:#2C3E50,color:#fff
style IOTA_FUNC fill:#7F8C8D,stroke:#2C3E50,color:#fff
style WSN_APP fill:#7F8C8D,stroke:#2C3E50,color:#fff
172 Key IoT Reference Models
172.1 Learning Objectives
By the end of this chapter, you will be able to:
- Describe the four layers of ITU-T Y.2060 and when to use this architecture
- Explain IoT-Aβs three architectural views and Virtual Entity concept
- Understand WSN architectureβs focus on energy efficiency and routing
- Compare reference architectures and select appropriate ones for different scenarios
172.2 Prerequisites
Before diving into this chapter, you should be familiar with:
- Introduction to Reference Architectures: Basic understanding of what reference architectures are and why they matter
- Networking Basics for IoT: Understanding network layers, protocols, and connectivity patterns
172.3 Introduction
Multiple organizations have proposed reference architectures, each emphasizing different aspects:
- ITU-T Y.2060: International telecommunication standards
- IoT-A (IoT Architecture): European research initiative
- WSN (Wireless Sensor Network): Sensor-centric architectures
- Industrial IoT Reference Architecture: Industry 4.0 focus
Understanding these frameworks helps you select appropriate patterns for your specific IoT deployment.
{fig-alt=βComparison of three major IoT reference architectures: ITU-T Y.2060 shows 4-layer stack (device, network, service support, application); IoT-A shows 3 architectural views (functional, information, deployment); WSN shows 4-layer protocol stack (physical layer for radio/energy, data link for MAC/error control, network for routing/topology, application for aggregation/queries)β}
172.4 ITU-T Y.2060
The International Telecommunication Unionβs IoT reference model defines four layers:
Application Layer:
- Business applications
- IoT application support
- Application service support
Service Support and Application Support Layer:
- Generic support capabilities
- Application support capabilities
Network Layer:
- Transport capabilities
- Network capabilities
- Access network
Device Layer:
- Sensors and actuators
- Gateways
- Direct connectivity
172.5 IoT-A Reference Model
The IoT Architecture (IoT-A) project provides a comprehensive framework:
Functional View:
- IoT service organization
- Virtual entity organization
- IoT process management
- Service choreography
Information View:
- Entity information models
- Virtual entity models
- Service information models
Deployment and Operational View:
- Device organization
- Network organization
- Communication models
The Virtual Entity concept in IoT-A enables powerful abstractions. Hereβs how to implement them practically.
Virtual Entity Architecture:
class VirtualEntity:
"""
Abstracts physical devices into logical entities.
Aggregates data from multiple sensors, provides unified interface.
"""
def __init__(self, entity_id: str, entity_type: str):
self.entity_id = entity_id
self.entity_type = entity_type
self.attributes = {}
self.physical_bindings = [] # List of (device_id, attribute_map)
self.last_update = {}
def bind_device(self, device_id: str, attribute_map: dict):
"""
Bind physical device to virtual entity.
attribute_map: {"virtual_attr": "device_attr", ...}
Example: {"temperature": "temp_c", "humidity": "rh_percent"}
"""
self.physical_bindings.append((device_id, attribute_map))
def update_from_device(self, device_id: str, device_data: dict):
"""Process incoming device data, update virtual entity state."""
for dev_id, attr_map in self.physical_bindings:
if dev_id == device_id:
for virtual_attr, device_attr in attr_map.items():
if device_attr in device_data:
self.attributes[virtual_attr] = device_data[device_attr]
self.last_update[virtual_attr] = time.time()
def aggregate(self, virtual_attr: str, method: str = "average"):
"""
Aggregate attribute from multiple devices.
Methods: average, min, max, count, any (boolean OR), all (boolean AND)
"""
values = []
for dev_id, attr_map in self.physical_bindings:
if virtual_attr in attr_map:
# Collect values from all bound devices
values.append(self.attributes.get(virtual_attr))
return self._apply_aggregation(values, method)Multi-view consistency example:
# Information View: What applications see
virtual_entity:
id: "conference_room_a"
type: "Room"
attributes:
temperature: 22.5 # Aggregated from 4 sensors
occupancy: true # Any motion sensor triggered
lighting: 750 # Lux from light sensor
hvac_mode: "cooling"
# Deployment View: Physical reality
physical_devices:
- id: "temp_sensor_1"
location: "corner_nw"
bindings: {temperature: "temp_c"}
- id: "temp_sensor_2"
location: "corner_se"
bindings: {temperature: "temp_c"}
- id: "motion_pir_1"
location: "ceiling"
bindings: {occupancy: "motion_detected"}
- id: "light_sensor_1"
location: "desk_level"
bindings: {lighting: "lux"}
# Mapping rules
aggregation_rules:
temperature: "average" # 4 sensors β 1 value
occupancy: "any" # TRUE if any motion detected
lighting: "direct" # Single sensor, no aggregationBenefits of Virtual Entity pattern:
| Scenario | Without VE | With VE |
|---|---|---|
| Sensor failure | App breaks | Graceful degradation |
| Add new sensor | Update app code | Just bind to VE |
| Change hardware | Rewrite integrations | Update bindings only |
| Query room temp | Query 4 sensors, average | Query 1 VE attribute |
172.6 WSN Architecture
Wireless Sensor Network architectures emphasize:
Physical Layer:
- Radio communication
- Energy efficiency
- Hardware constraints
Data Link Layer:
- MAC protocols
- Error control
- Multiple access
Network Layer:
- Routing protocols
- Topology management
- Address allocation
Application Layer:
- Data aggregation
- Query processing
- Event detection
WSN architectures must balance data collection requirements against severe energy constraints. Understanding duty cycling is essential for battery-powered deployments.
Duty Cycle Calculation:
def calculate_battery_life(battery_mah: float, duty_cycle_config: dict) -> float:
"""
Calculate expected battery life for WSN node.
duty_cycle_config = {
"active_current_ma": 50, # Current during sensing + TX
"sleep_current_ua": 10, # Current during sleep (microamps)
"active_duration_ms": 500, # Time active per cycle
"cycle_interval_s": 3600 # Seconds between wake-ups
}
"""
active_ma = duty_cycle_config["active_current_ma"]
sleep_ua = duty_cycle_config["sleep_current_ua"]
active_ms = duty_cycle_config["active_duration_ms"]
interval_s = duty_cycle_config["cycle_interval_s"]
# Active time per cycle
active_hours = (active_ms / 1000) / 3600
# Sleep time per cycle
sleep_hours = (interval_s - active_ms/1000) / 3600
# Average current (weighted)
avg_current_ma = (
(active_ma * active_hours + (sleep_ua/1000) * sleep_hours) /
(active_hours + sleep_hours)
)
# Battery life in hours
life_hours = battery_mah / avg_current_ma
life_years = life_hours / 8760
return life_years
# Example: Soil moisture sensor
config = {
"active_current_ma": 30,
"sleep_current_ua": 5,
"active_duration_ms": 200,
"cycle_interval_s": 3600 # Once per hour
}
# With 2xAA (3000 mAh): ~7.5 years battery lifeEnergy budget breakdown:
| Component | Active Current | Typical Duration | Energy/Cycle |
|---|---|---|---|
| Wake from sleep | 5 mA | 10 ms | 0.014 mAh |
| Sensor warm-up | 10 mA | 50 ms | 0.014 mAh |
| ADC sampling | 5 mA | 10 ms | 0.0014 mAh |
| Processing | 10 mA | 20 ms | 0.0056 mAh |
| Radio TX | 50 mA | 50 ms | 0.069 mAh |
| Radio RX (ACK) | 30 mA | 20 ms | 0.017 mAh |
| Total active | - | 160 ms | 0.12 mAh |
| Sleep (1 hour) | 5 uA | 3599.84 s | 0.005 mAh |
| Cycle total | - | 3600 s | 0.125 mAh |
3000 mAh / 0.125 mAh per cycle = 24,000 cycles = 2.7 years at hourly reporting.
Energy harvesting integration:
class SolarHarvestingNode:
"""
Adaptive duty cycling based on available energy.
"""
def __init__(self):
self.battery_capacity_mah = 500 # Smaller battery with harvesting
self.solar_panel_ma = 20 # Average output in sun
self.min_voltage = 2.8 # Cutoff voltage
self.max_voltage = 4.2 # Full charge
def adaptive_interval(self, battery_voltage: float, solar_current: float) -> int:
"""
Adjust reporting interval based on energy state.
Returns interval in seconds.
"""
energy_ratio = (battery_voltage - self.min_voltage) / (self.max_voltage - self.min_voltage)
if solar_current > 10: # Good sunlight
return 60 # Report every minute (aggressive)
elif energy_ratio > 0.7: # Battery healthy
return 300 # Report every 5 minutes
elif energy_ratio > 0.3: # Battery moderate
return 900 # Report every 15 minutes
else: # Battery low
return 3600 # Report hourly (conservation mode)
def should_skip_transmission(self, reading: float, last_reading: float) -> bool:
"""
Event-driven transmission: only send if value changed significantly.
"""
if last_reading is None:
return False
change_percent = abs(reading - last_reading) / last_reading * 100
return change_percent < 5 # Skip if <5% changeWSN topology impact on energy:
| Topology | Per-node TX | Relay burden | Battery life |
|---|---|---|---|
| Star | 1 hop | None | Best (edge nodes) |
| Tree | 1-3 hops | Parent relays | Moderate |
| Mesh | 1-5 hops | All nodes relay | Shortest |
Design recommendation: Use tree topology for most WSN deployments. Mesh provides reliability but dramatically shortens battery life for relay nodes.
172.7 Comparing Reference Architectures
This variant shows how the exact same IoT system (a smart greenhouse) would be described differently using each reference architecture, helping students understand that architectures are different perspectives on the same reality.
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#2C3E50', 'primaryTextColor': '#fff', 'primaryBorderColor': '#16A085', 'lineColor': '#16A085', 'secondaryColor': '#E67E22', 'tertiaryColor': '#7F8C8D', 'fontSize': '12px'}}}%%
flowchart TB
subgraph Reality["Smart Greenhouse Reality"]
R1["100 soil sensors, 20 climate sensors<br/>LoRa gateway, Cloud analytics<br/>Mobile app for farmer"]
end
subgraph ITU["ITU-T Y.2060 View"]
direction TB
I4["Application Layer<br/>Mobile app, alerts, reports"]
I3["Service Support Layer<br/>Data storage, analytics API"]
I2["Network Layer<br/>LoRa, Wi-Fi, MQTT"]
I1["Device Layer<br/>120 sensors + gateway"]
I1 --> I2 --> I3 --> I4
end
subgraph IOTA["IoT-A View"]
direction TB
A1["Functional View<br/>Services: Irrigation, Climate, Alerts"]
A2["Information View<br/>Entities: Plant, Sensor, Zone"]
A3["Deployment View<br/>Edge: Gateway, Cloud: Analytics"]
end
subgraph WSNView["WSN View"]
direction TB
W4["Application Layer<br/>Query: Avg moisture Zone-A"]
W3["Network Layer<br/>Multi-hop routing to gateway"]
W2["Data Link Layer<br/>LoRa MAC, collision avoidance"]
W1["Physical Layer<br/>Sub-GHz radio, solar power"]
W1 --> W2 --> W3 --> W4
end
Reality --> ITU
Reality --> IOTA
Reality --> WSNView
style Reality fill:#7F8C8D,stroke:#2C3E50,color:#fff
style ITU fill:#2C3E50,stroke:#16A085,color:#fff
style IOTA fill:#E67E22,stroke:#2C3E50,color:#fff
style WSNView fill:#16A085,stroke:#2C3E50,color:#fff
This variant helps students select the most appropriate reference architecture based on their project characteristics.
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#2C3E50', 'primaryTextColor': '#fff', 'primaryBorderColor': '#16A085', 'lineColor': '#16A085', 'secondaryColor': '#E67E22', 'tertiaryColor': '#7F8C8D', 'fontSize': '14px'}}}%%
flowchart TB
Start([What is your<br/>primary concern?]) --> Q1{Network &<br/>Telecom<br/>Integration?}
Q1 -->|Yes| ITUT["ITU-T Y.2060<br/>βββββββββββ<br/>Best for:<br/>β’ Smart city infrastructure<br/>β’ Carrier networks<br/>β’ 5G/LTE IoT<br/>β’ Cross-vendor interop"]
Q1 -->|No| Q2{Enterprise<br/>Service<br/>Integration?}
Q2 -->|Yes| IOTA2["IoT-A<br/>βββββββββββ<br/>Best for:<br/>β’ Complex business logic<br/>β’ Virtual entity modeling<br/>β’ Service composition<br/>β’ Multi-stakeholder systems"]
Q2 -->|No| Q3{Energy-<br/>Constrained<br/>Sensors?}
Q3 -->|Yes| WSN2["WSN Architecture<br/>βββββββββββ<br/>Best for:<br/>β’ Battery-powered nodes<br/>β’ Multi-hop routing<br/>β’ Environmental monitoring<br/>β’ Remote deployments"]
Q3 -->|No| Q4{Industrial<br/>Manufacturing?}
Q4 -->|Yes| IND["ISA-95 / RAMI 4.0<br/>βββββββββββ<br/>Best for:<br/>β’ Factory automation<br/>β’ OT/IT integration<br/>β’ Safety-critical systems<br/>β’ Legacy equipment"]
Q4 -->|No| Hybrid["Hybrid Approach<br/>βββββββββββ<br/>Combine elements from<br/>multiple architectures<br/>based on specific needs"]
style ITUT fill:#2C3E50,stroke:#16A085,color:#fff
style IOTA2 fill:#E67E22,stroke:#2C3E50,color:#fff
style WSN2 fill:#16A085,stroke:#2C3E50,color:#fff
style IND fill:#7F8C8D,stroke:#2C3E50,color:#fff
style Hybrid fill:#2C3E50,stroke:#E67E22,color:#fff
172.8 Summary
The three major IoT reference architectures serve different primary purposes:
| Architecture | Primary Focus | Best For |
|---|---|---|
| ITU-T Y.2060 | Telecom integration | Smart cities, 5G/LTE-M, carrier networks |
| IoT-A | Enterprise modeling | Multi-stakeholder systems, complex business logic |
| WSN | Energy efficiency | Battery-powered sensors, remote deployments |
Key insights:
- Reference architectures are complementary perspectives, not competing standards
- Most real-world projects combine elements from multiple architectures
- Virtual Entities in IoT-A provide powerful abstraction over physical devices
- WSNβs focus on duty cycling is essential for battery-powered deployments
172.9 Whatβs Next
Now that you understand the major reference models:
- To go deeper: Architecture Selection Framework - Learn systematic criteria for choosing architectures
- To apply it: Real-World Applications - See how these architectures work in practice
- Related concept: Edge-Fog Computing - Multi-tier processing architectures