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:

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.

%%{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

Figure 172.1: ITU-T, IoT-A, and WSN Reference Architecture Comparison

{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 aggregation

Benefits 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 life

Energy 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% change

WSN 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

Figure 172.2: This multi-lens view demonstrates that reference architectures are not competing standards but complementary perspectives. ITU-T emphasizes network connectivity layers, IoT-A emphasizes business and information modeling, and WSN emphasizes energy-efficient communication. A complete IoT design often references all three perspectives depending on which aspect is being discussed.

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

Figure 172.3: This selection flowchart guides architects toward the most appropriate reference architecture. Key insight: most real-world IoT projects combine elements from multiple architectures. Start with the one that addresses your primary constraint (network integration, business services, or energy efficiency), then borrow patterns from others as needed.

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: