1609  ACE System and Shared Context Sensing

1609.1 ACE System and Shared Context Sensing

This section provides a stable anchor for cross-references to the ACE system and shared context sensing across the book.

1609.2 Learning Objectives

By the end of this chapter, you will be able to:

  • Understand Context-Aware Systems: Explain how context information (location, activity, environment) can optimize energy consumption
  • Implement Shared Context Sensing: Design systems that share cached context values across multiple applications
  • Apply Association Rule Mining: Use support and confidence metrics to discover reliable context correlations
  • Design ACE System Components: Understand how inference cache, rule miner, and sensing planner work together
  • Evaluate Cache Trade-offs: Balance cache hit rate against context freshness for optimal performance

1609.3 Prerequisites

Before diving into this chapter, you should be familiar with:

1609.4 Cross-Hub Connections

ImportantLearning Hub Resources for Context-Aware Energy

This chapter connects to multiple learning resources:

Interactive Tools: - Simulations Hub - Try the Duty Cycle Calculator and Power Budget Calculator to experiment with energy optimization scenarios - Knowledge Gaps Hub - Common misconceptions about battery life and power management

Assessment Resources: - Quizzes Hub - Test your understanding of ACE system components and energy calculation methods - Videos Hub - Watch demonstrations of context-aware systems in real-world IoT devices

Concept Maps: - Knowledge Map - Explore relationships between sensing, power management, and ML inference

1609.5 The Challenge of Continuous Monitoring

Imagine your smartphone being smart about when to check for new emails. Instead of checking every minute (draining battery), it learns: “My owner usually checks email at 9 AM, lunch, and 5 PM.” So it checks more often during those times and sleeps the rest of the day. That’s context-aware energy management.

For IoT devices, context means understanding the situation: Are you home or away? Is it day or night? Are you moving or sitting still? Using this information, devices can save massive amounts of battery by only sensing and computing when actually needed.

Real-world example: A fitness tracker doesn’t need to check your heart rate every second when you’re sleeping. By detecting “sleeping” context (nighttime, no movement), it can check every 5 minutes instead of every second—using 300 times less energy!

%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#2C3E50', 'primaryTextColor': '#fff', 'primaryBorderColor': '#16A085', 'lineColor': '#16A085', 'secondaryColor': '#E67E22', 'tertiaryColor': '#fff'}}}%%
flowchart TD
    A[Continuous Sensing Problem] --> B[Battery Drain Issue]
    A --> C[Incomplete Context View<br/>with Duty Cycling]

    B --> D[Solution 1:<br/>Share Context Among Apps]
    C --> D
    B --> E[Solution 2:<br/>Cache Context Data]
    C --> E
    B --> F[Solution 3:<br/>Learn Context Correlations]
    C --> F
    B --> G[Solution 4:<br/>Intelligent Offloading]
    C --> G

    D --> H[ACE System]
    E --> H
    F --> H
    G --> H

    style A fill:#E67E22,stroke:#2C3E50,color:#fff
    style H fill:#16A085,stroke:#2C3E50,color:#fff

Figure 1609.1: ACE System Overview: Context-Aware Energy-Saving Solutions

%% fig-alt: "Energy cost ladder showing escalating power consumption from cheapest to most expensive context-sensing methods: inference from cache at 0mW, proxy attribute lookup at 0.1mW, low-power sensor like accelerometer at 10mW, and high-power sensor like GPS at 100mW. ACE system intelligently selects the cheapest sufficient method."
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#2C3E50', 'primaryTextColor': '#fff', 'primaryBorderColor': '#16A085', 'lineColor': '#16A085', 'secondaryColor': '#E67E22', 'tertiaryColor': '#7F8C8D', 'fontSize': '13px'}}}%%
graph TB
    subgraph REQUEST["App Requests Context"]
        REQ["'Is user at home?'"]
    end

    subgraph LADDER["Energy Cost Ladder (Try in Order)"]
        L1["1. Cache Lookup<br/>━━━━━━━━━<br/>0 mW<br/>Check if answer already stored"]
        L2["2. Inference from Proxy<br/>━━━━━━━━━<br/>~0.1 mW<br/>Driving=True → AtHome=False"]
        L3["3. Low-Power Sensor<br/>━━━━━━━━━<br/>~10 mW<br/>Accelerometer: Walking?"]
        L4["4. High-Power Sensor<br/>━━━━━━━━━<br/>~100 mW<br/>GPS: Exact Location"]
    end

    subgraph RESULT["Context Answer"]
        ANS["'User is NOT at home'<br/>Method used: Inference<br/>Energy: 0.1 mW<br/>Saved: 99.9%"]
    end

    REQ --> L1
    L1 -->|"Miss"| L2
    L2 -->|"Found!"| ANS
    L1 -->|"Hit!"| ANS
    L2 -->|"Miss"| L3
    L3 -->|"Hit/Miss"| L4
    L4 --> ANS

    style L1 fill:#16A085,stroke:#2C3E50,stroke-width:2px,color:#fff
    style L2 fill:#27AE60,stroke:#2C3E50,stroke-width:2px,color:#fff
    style L3 fill:#E67E22,stroke:#2C3E50,stroke-width:2px,color:#fff
    style L4 fill:#E74C3C,stroke:#2C3E50,stroke-width:2px,color:#fff
    style ANS fill:#2C3E50,stroke:#16A085,stroke-width:2px,color:#fff

Figure 1609.2: Alternative View: Energy Cost Ladder - This diagram shows ACE’s decision process as an energy “ladder” - always starting with the cheapest method (cache lookup at 0 mW) and only climbing to more expensive methods if needed. Most requests are satisfied at the top two rungs (cache hit or proxy inference), saving 99%+ energy compared to always using GPS. The ladder metaphor helps students understand that ACE’s core insight is preferring cheap answers over accurate-but-expensive ones when context hasn’t changed. {fig-alt=“Vertical ladder diagram showing ACE energy optimization strategy. App requests context ‘Is user at home?’ which flows to Energy Cost Ladder with four rungs tried in order: 1. Cache Lookup at 0 mW (check if answer already stored), 2. Inference from Proxy at ~0.1 mW (Driving=True implies AtHome=False), 3. Low-Power Sensor at ~10 mW (Accelerometer for walking detection), 4. High-Power Sensor at ~100 mW (GPS for exact location). Arrows show progression: Cache miss leads to proxy check, proxy hit leads directly to answer, misses continue down ladder. Result box shows ‘User is NOT at home’ using inference method at 0.1 mW with 99.9% energy saved. Green colors indicate cheap methods, orange and red indicate expensive methods.”}

The Problem: - Apps need continuous sensing to understand and relate the context of the user and trigger actions - Monitoring through sensors continuously is expensive battery-wise - Duty cycling sensors provides incomplete view of user activity

Solutions: 1. Share context sensing among multiple apps 2. Use cached context data 3. Learn cross-app context correlations 4. Make intelligent offloading decisions

1609.6 Shared Context Sensing

%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#2C3E50', 'primaryTextColor': '#fff', 'primaryBorderColor': '#16A085', 'lineColor': '#16A085', 'secondaryColor': '#E67E22', 'tertiaryColor': '#fff'}}}%%
sequenceDiagram
    participant App1
    participant ACE
    participant Cache
    participant Sensor
    participant App3

    Note over App1,App3: 10:00 AM
    App1->>ACE: Request "Driving" status
    ACE->>Cache: Check cache
    Cache-->>ACE: Not found
    ACE->>Sensor: Sense accelerometer
    Sensor-->>ACE: Driving=True
    ACE->>Cache: Store (Driving=True, 10:00)
    ACE-->>App1: Return Driving=True

    Note over App1,App3: 10:05 AM (5 min later)
    App3->>ACE: Request "Driving" status
    ACE->>Cache: Check cache
    Cache-->>ACE: Found (Driving=True, 10:00)
    ACE-->>App3: Return cached Driving=True
    Note over ACE,Sensor: Energy saved: no sensor access!

Figure 1609.3: Shared Context Sensing: Cross-App Cache Reuse Sequence

Key Idea: At 10:00 AM, App1 asks for “Driving” status. System senses and caches it. At 10:05 AM, App3 asks for “Driving” - cache value is returned, avoiding sensor sampling and saving energy.

1609.7 Cross-App Context Correlations

%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#2C3E50', 'primaryTextColor': '#fff', 'primaryBorderColor': '#16A085', 'lineColor': '#16A085', 'secondaryColor': '#E67E22', 'tertiaryColor': '#fff'}}}%%
flowchart LR
    subgraph "Historical Learning"
        H[Context History] --> R[Rule Miner]
        R --> Rule["Driving=True<br/>→ AtHome=False<br/>(confidence: 95%)"]
    end

    subgraph "Current Request"
        App2[App2 requests:<br/>'AtHome' status] --> ACE
        ACE --> Check{Cache has<br/>Driving=True?}
        Check -->|Yes| Infer[Infer: AtHome=False<br/>using learned rule]
        Check -->|No| Sense[Direct sensing:<br/>Use GPS 100mW]
    end

    Infer --> Result[Return AtHome=False<br/>Energy: 0 mW ✓]
    Sense --> Result2[Return AtHome value<br/>Energy: 100 mW ✗]

    style Result fill:#16A085,stroke:#2C3E50,color:#fff
    style Result2 fill:#E67E22,stroke:#2C3E50,color:#fff

Figure 1609.4: Cross-App Context Correlation: Inferring Context from Cached Attributes

Context Inference: Context can be inferred from “other” features. An app can learn one attribute by the attributes learned for other apps.

Example: - App1 monitors accelerometer (walking/driving) - App2 uses location sensors (at home/at work) - Context History: Driving=trueAtHome=false (negative correlation) - When App2 asks for “AtHome” and cache has Driving=true, system returns false without sensing!

Best Attribute Strategy: Always use the cheapest cached attribute to infer the target value.

WarningCommon Misconception: “Higher Cache Hit Rate Is Always Better”

The Misconception: Students often think a 95% cache hit rate is better than 70%, so they increase cache duration to maximize hits.

The Reality: Longer cache duration improves hit rate but reduces accuracy. There’s an optimal balance between energy savings and context freshness.

Quantified Example:

Scenario: Location tracking app requesting “AtHome” status

Short Cache (2 minutes, 70% hit rate): - Fresh data: 95% accuracy - Energy per request: 0.30 × 100mW (GPS) = 30 mW average - User experience: Accurate “arriving home” detection within 2 minutes - Battery savings: 70% compared to always-sensing

Long Cache (15 minutes, 95% hit rate): - Stale data: 75% accuracy (user moved but cache says “still at work”) - Energy per request: 0.05 × 100mW = 5 mW average (better!) - User experience: Smart home doesn’t unlock door for 15 minutes after arriving - Battery savings: 95% compared to always-sensing

The Trade-off: - Energy savings: 95% vs 70% (25% improvement) - Accuracy loss: 75% vs 95% (20% degradation) - User frustration: High vs Low

ACE’s Solution: Dynamic cache duration based on context volatility: - Stationary context (sleeping, at desk): Long cache (10-15 min) → 92% hit rate, 90% accuracy - Mobile context (driving, walking): Short cache (2-5 min) → 65% hit rate, 94% accuracy - Average: 78% energy savings with 92% average accuracy

Key Insight: Optimize cache duration per attribute type, not globally. GPS location changes slowly when stationary (long cache OK), but accelerometer activity changes rapidly (short cache needed).

1609.8 ACE System Architecture

%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#2C3E50', 'primaryTextColor': '#fff', 'primaryBorderColor': '#16A085', 'lineColor': '#16A085', 'secondaryColor': '#E67E22', 'tertiaryColor': '#fff'}}}%%
flowchart TD
    Apps[Multiple Apps] -->|Request context| IC[Inference Cache]

    IC -->|Cache hit| Return1[Return cached value<br/>0 mW energy]
    IC -->|Cache miss| RM[Rule Miner]

    RM -->|Can infer?| Infer[Apply association rules]
    RM -->|Cannot infer| SP[Sensing Planner]

    Infer --> Return2[Return inferred value<br/>~0 mW energy]
    SP --> Best[Find cheapest<br/>sensing plan]
    Best --> Ctx[Contexters]

    Ctx --> Sensors[Physical Sensors]
    Sensors --> Sense[Sense and cache]
    Sense --> Return3[Return sensed value<br/>10-100 mW energy]

    subgraph "ACE Components"
        IC
        RM
        SP
        Ctx
    end

    style Return1 fill:#16A085,stroke:#2C3E50,color:#fff
    style Return2 fill:#16A085,stroke:#2C3E50,color:#fff
    style Return3 fill:#E67E22,stroke:#2C3E50,color:#fff

Figure 1609.5: ACE System Architecture: Inference Cache, Rule Miner, and Sensing Planner

Components:

Contexters: Determine value of context with sensors using inference algorithms. Cache among sensed values can be shared among contexters instead of sensing.

Rule Miner: Maintains user’s context history and automatically learns relationships among various context attributes using association rule mining.

Inference Cache: Returns a value not only if raw sensor cache has a value, but also if it can be inferred using context rules and cached values of other attributes.

Sensing Planner: Finds the sequence of proxy attributes to speculatively sense to determine target attribute value in the cheapest way.

1609.9 Worked Example: Context-Aware Adaptive Duty Cycling

NoteWorked Example: Context-Aware Adaptive Duty Cycling for Smart Building Occupancy Sensor

Scenario: You are deploying 200 occupancy sensors in a commercial office building. The sensors use PIR (passive infrared) motion detection and transmit occupancy status via Zigbee. The goal is to maximize battery life while maintaining accurate occupancy tracking for HVAC optimization.

Given:

  • Sensor: PIR motion detector with digital output
  • MCU: Atmel ATmega328P (0.2 mA/MHz active, 0.1 µA power-down)
  • Radio: Zigbee XBee S2C (45 mA TX, 15 mA RX, 1 µA sleep)
  • Battery: 2x AA lithium primary (3,000 mAh @ 3.0V = 9 Wh)
  • Building hours: 7 AM - 7 PM weekdays (occupied), nights/weekends (unoccupied)
  • Baseline approach: Sample PIR every 5 seconds, transmit on change
  • Target: 5-year battery life with context-aware optimization

Steps:

  1. Analyze baseline (non-context-aware) power consumption:

    PIR sampling (every 5 seconds = 17,280/day):
    - MCU wake + PIR read: 1 mA × 1 ms = 1 µAs per sample
    - Daily: 17,280 × 1 µAs = 17.28 mAs
    
    Zigbee transmission (assume 50 transitions/day on weekdays):
    - TX event: 45 mA × 50 ms + 15 mA × 20 ms = 2.55 mAs per TX
    - Daily (weekday): 50 × 2.55 = 127.5 mAs
    - Daily (weekend): 5 × 2.55 = 12.75 mAs (minimal activity)
    
    Sleep current (MCU + XBee):
    - I_sleep = 0.1 µA + 1 µA = 1.1 µA
    - Daily: 1.1 µA × 86,400 s = 95.04 mAs
    
    Total daily average:
    Weekday: 17.28 + 127.5 + 95.04 = 239.8 mAs = 0.067 mAh
    Weekend: 17.28 + 12.75 + 95.04 = 125.1 mAs = 0.035 mAh
    Weekly: (5 × 0.067) + (2 × 0.035) = 0.405 mAh
    Annual: 0.405 × 52 = 21.06 mAh
    
    Battery life = 3,000 / 21.06 = 142 years (theoretical, ignoring self-discharge)
  2. Apply context-aware optimizations:

    Optimization 1: Time-based duty cycling
    - Occupied hours (7 AM-7 PM weekdays): Sample every 5 seconds
    - Unoccupied hours: Sample every 60 seconds
    
    Unoccupied time: 12 hours/day + 48 hours/weekend = 108 hours/week
    Occupied time: 60 hours/week
    
    Sampling reduction:
    Occupied: 60 h × 720 samples/h = 43,200 samples/week
    Unoccupied: 108 h × 60 samples/h = 6,480 samples/week
    Total: 49,680 samples/week vs baseline 120,960 samples/week
    Reduction: 59% fewer samples
    
    Optimization 2: Event-driven transmission batching
    - Instead of transmitting each change, batch 5 changes
    - Reduces TX events by 80%
    
    Optimization 3: Predictive occupancy caching
    - After 30 days, system learns: "Room 304 empty Mon-Thu after 5 PM"
    - Reduce sampling to every 5 minutes when prediction confidence > 90%
    - Saves additional 90% of sampling during predictable periods
  3. Calculate context-aware power consumption:

    PIR sampling (49,680/week × 0.41 for prediction savings):
    - Weekly samples: 20,369
    - Weekly energy: 20,369 × 1 µAs = 20.4 mAs
    
    Zigbee transmission (80% reduction):
    - Weekly TX events: (50 × 5 + 5 × 2) × 0.2 = 52 TX/week
    - Weekly TX energy: 52 × 2.55 = 132.6 mAs
    
    Sleep current (unchanged):
    - Weekly: 1.1 µA × 604,800 s = 665.3 mAs
    
    Total weekly: 20.4 + 132.6 + 665.3 = 818.3 mAs = 0.227 mAh
    Annual: 0.227 × 52 = 11.8 mAh
    Battery life = 3,000 / 11.8 = 254 years (theoretical)
  4. Apply real-world derating factors:

    Self-discharge: 1-2% per year for lithium primary
    After 5 years: ~90% capacity = 2,700 mAh effective
    
    Temperature derating (office environment 20-25°C): None needed
    
    End-of-life voltage (2.4V cutoff): 80% usable capacity
    Effective capacity: 2,700 × 0.8 = 2,160 mAh
    
    Realistic battery life = 2,160 / 11.8 = 183 years
    
    With 20× safety factor for real-world variations:
    Conservative estimate: 183 / 20 = 9.2 years ✓
  5. Compare baseline vs context-aware:

    | Metric | Baseline | Context-Aware | Improvement |
    |--------|----------|---------------|-------------|
    | Samples/week | 120,960 | 20,369 | 83% reduction |
    | TX events/week | 260 | 52 | 80% reduction |
    | Weekly energy | 1.95 mAs | 0.818 mAs | 58% reduction |
    | Battery life | 6.5 years | 9.2 years | 42% longer |

Result: Context-aware optimization extends battery life from 6.5 years to 9.2 years (42% improvement) by reducing PIR sampling 83% during predictable unoccupied periods and batching Zigbee transmissions. The occupancy prediction model provides the largest savings by learning building usage patterns over the first 30 days of deployment.

Key Insight: Context-aware energy management is most effective when activity patterns are predictable. Office buildings with regular occupancy schedules are ideal candidates - the system learns “Room 304 is always empty after 5 PM on Thursdays” and dramatically reduces sensing during those periods. For unpredictable environments (e.g., retail stores with varying foot traffic), baseline duty cycling may be more appropriate than complex prediction models.

1609.10 Worked Example: Energy-Neutral Solar Harvesting

NoteWorked Example: Energy-Neutral Solar Harvesting Design Verification

Scenario: You have designed a solar-powered LoRaWAN air quality sensor for deployment on streetlight poles. Before deployment, you need to verify the design will achieve “energy neutrality” - harvesting more energy than consumed over a complete year, including worst-case winter conditions.

Given:

  • Location: London, UK (51.5°N latitude)
  • Solar panel: 5 cm × 8 cm monocrystalline (40 cm²)
  • Panel efficiency: 18% at STC (Standard Test Conditions)
  • Panel orientation: Vertical on pole, south-facing
  • MPPT charger: BQ25570 (80% end-to-end efficiency)
  • Battery: 100 mAh LiPo (370 mWh @ 3.7V)
  • Sensor: SPS30 PM2.5 sensor (60 mA active, 38 µA idle)
  • MCU: STM32L0 (3.5 mA active @ 32 MHz, 0.29 µA stop mode)
  • LoRa: SX1276 (120 mA TX, 10.5 mA RX, 0.2 µA sleep)
  • Sampling: Hourly PM2.5 measurement (10 second warmup + 1 second sample)
  • Transmission: Hourly LoRa uplink (SF10, 125 kHz)

Steps:

  1. Calculate daily energy consumption:

    PM2.5 sensor (24 cycles/day):
    - Warmup: 60 mA × 10 s × 24 = 14,400 mAs = 4.0 mAh
    - Sampling: 60 mA × 1 s × 24 = 1,440 mAs = 0.4 mAh
    - Idle: 38 µA × 86,400 s = 3,283 mAs = 0.91 mAh
    Subtotal: 5.31 mAh @ 5V sensor = 26.6 mWh
    
    MCU (24 active cycles/day):
    - Active: 3.5 mA × 2 s × 24 = 168 mAs = 0.047 mAh
    - Sleep: 0.29 µA × 86,352 s = 25.04 mAs = 0.007 mAh
    Subtotal: 0.054 mAh @ 3.3V = 0.18 mWh
    
    LoRa transmission (24 cycles/day):
    - TX: 120 mA × 200 ms × 24 = 576 mAs = 0.16 mAh
    - RX windows: 10.5 mA × 1 s × 24 = 252 mAs = 0.07 mAh
    - Sleep: 0.2 µA × 86,400 s = 17.28 mAs = 0.005 mAh
    Subtotal: 0.235 mAh @ 3.3V = 0.78 mWh
    
    Total daily consumption:
    E_consumed = 26.6 + 0.18 + 0.78 = 27.6 mWh/day
    Average power: 27.6 mWh / 24 h = 1.15 mW
  2. Calculate solar energy harvest by season:

    Solar irradiance data for London (vertical south-facing):
    - Winter (Dec-Feb): 1.2 kWh/m²/day average
    - Spring (Mar-May): 3.5 kWh/m²/day average
    - Summer (Jun-Aug): 4.8 kWh/m²/day average
    - Autumn (Sep-Nov): 2.1 kWh/m²/day average
    
    Panel output calculation:
    Panel area: 40 cm² = 0.004 m²
    Panel efficiency: 18%
    MPPT efficiency: 80%
    Net efficiency: 18% × 80% = 14.4%
    
    Winter harvest:
    E_winter = 1.2 kWh/m²/day × 0.004 m² × 14.4%
    E_winter = 0.69 mWh/day
    
    Spring harvest:
    E_spring = 3.5 × 0.004 × 14.4% = 2.02 mWh/day
    
    Summer harvest:
    E_summer = 4.8 × 0.004 × 14.4% = 2.76 mWh/day
    
    Autumn harvest:
    E_autumn = 2.1 × 0.004 × 14.4% = 1.21 mWh/day
  3. Calculate energy balance by season:

    | Season | Harvested | Consumed | Balance | Status |
    |--------|-----------|----------|---------|--------|
    | Winter | 0.69 mWh | 27.6 mWh | -26.9 mWh | DEFICIT |
    | Spring | 2.02 mWh | 27.6 mWh | -25.6 mWh | DEFICIT |
    | Summer | 2.76 mWh | 27.6 mWh | -24.8 mWh | DEFICIT |
    | Autumn | 1.21 mWh | 27.6 mWh | -26.4 mWh | DEFICIT |
    
    ⚠️ CRITICAL: Design is NOT energy-neutral!
  4. Redesign for energy neutrality:

    Option A: Larger solar panel
    Required harvest = 27.6 mWh/day
    Winter irradiance = 1.2 kWh/m²/day
    Required area = 27.6 / (1.2 × 1000 × 0.144) = 0.16 m² = 1,600 cm²
    Panel size: 40 cm × 40 cm (too large for streetlight)
    
    Option B: Reduce consumption (preferred)
    Target: Achieve harvest/consume ratio > 1.0 in winter
    
    Reduction strategies:
    1. Reduce PM2.5 warmup time:
       - Use 3-second warmup (manufacturer minimum) instead of 10s
       - Savings: 60 mA × 7 s × 24 = 10.08 mAh = 50.4 mWh ❌ (still >3.3V)
       - Recalculate: 60 mA × 7 s × 24 × (5V/3.7V) = 13.6 mAh = 50.5 mWh
    
    2. Reduce sampling frequency:
       - Sample every 4 hours instead of hourly (6 cycles/day)
       - PM2.5 energy: 5.31 mAh × 6/24 = 1.33 mAh = 6.65 mWh
       - LoRa energy: 0.235 mAh × 6/24 = 0.059 mAh = 0.20 mWh
    
    New daily consumption:
    PM2.5: 6.65 mWh (with 6 cycles and 3s warmup)
    MCU: 0.045 mWh (reduced active cycles)
    LoRa: 0.20 mWh (6 transmissions)
    Sleep overhead: 0.10 mWh (continuous)
    Total: 7.00 mWh/day
    
    New winter energy balance:
    Harvest: 0.69 mWh vs Consume: 7.00 mWh = -6.31 mWh (still deficit!)
  5. Final redesign with context-aware sampling:

    Context-aware strategy:
    - Winter (low solar): Sample every 8 hours (3 cycles/day)
    - Summer (high solar): Sample every 1 hour (24 cycles/day)
    - Adaptive: Use battery voltage to trigger mode changes
    
    Winter consumption:
    PM2.5: 1.33 mAh × 3/6 = 0.67 mAh × (5/3.7) = 3.32 mWh
    MCU: 0.02 mWh
    LoRa: 0.10 mWh
    Sleep: 0.10 mWh
    Total: 3.54 mWh/day
    
    Winter energy balance:
    Harvest: 0.69 mWh/day
    Consume: 3.54 mWh/day
    Deficit: -2.85 mWh/day
    
    Battery reserve required for 90 days winter:
    Reserve = 2.85 × 90 = 257 mWh (needs 700 mAh battery!)
    
    FINAL DESIGN: 1000 mAh LiPo + context-aware sampling:
    - Summer surplus builds reserve
    - Winter draws from reserve
    - Battery provides 370 × (1000/100) = 3,700 mWh buffer
    - More than sufficient for 90-day winter deficit

Result: Initial design failed energy neutrality verification (consuming 27.6 mWh/day vs 0.69 mWh/day winter harvest). Redesigned system with context-aware sampling (8-hour intervals in winter, 1-hour in summer) and 1000 mAh battery achieves year-round operation. Summer surplus (2.76 - 1.15 = 1.61 mWh/day × 92 days = 148 mWh) partially offsets winter deficit (2.85 mWh/day × 90 days = 257 mWh).

Key Insight: Energy-neutral design requires analyzing the WORST season, not annual averages. London’s winter solar irradiance is only 25% of summer. Always calculate seasonal energy balance and size battery storage to bridge deficit periods. Context-aware sampling that adapts to available energy is essential for solar-harvesting IoT in high-latitude locations.

1609.11 Knowledge Check

Test your understanding of ACE system concepts.

Question 1: An app needs to determine “InOffice” status. The cache contains “AtHome=True” from 2 minutes ago. ACE has a rule: “AtHome=True → InOffice=False” (confidence 95%). What should the Sensing Planner do?

Explanation: The Sensing Planner finds the cheapest way to determine target attributes. Since “AtHome=True” is cached and the rule has 95% confidence, it infers “InOffice=False” with zero energy cost instead of expensive GPS sensing. This is the core of energy-preserving sensing plans: use cheap proxy attributes (cached values) and correlation rules to infer expensive attributes. The 5% error risk is acceptable for most applications compared to always sensing.

Question 2: A fitness app requests “Walking” status at 10:15 AM and the ACE system senses and caches it. At 10:18 AM, a navigation app requests the same “Walking” status. What does ACE do?

Explanation: ACE uses shared context sensing where cached values are reused across apps within the cache duration (typically 5 minutes). The 3-minute gap is within cache validity, so ACE returns the cached “Walking” value without activating the accelerometer. This saves significant energy (avoiding sensor sampling) while providing recent context. If the cached value was older than the cache duration, ACE would sense again. This cross-app caching can reduce energy consumption by 60-80%.

Question 3: In association rule mining for context inference, you discover a rule: “Driving=True → AtHome=False” with support=15% and confidence=90%. What does this mean?

Explanation: Support=15% means 15% of all context observations contain both Driving=True AND AtHome=False together. Confidence=90% is the conditional probability: P(AtHome=False | Driving=True) = 90%, meaning when the user is driving, they’re NOT at home 90% of the time. ACE can use this rule to infer “AtHome=False” when cache shows “Driving=True”, avoiding expensive GPS sensing. High confidence (>60%) makes rules reliable for energy-saving inference.

1609.13 Summary

The ACE (Adaptive Context-aware Energy-saving) system provides a comprehensive framework for energy optimization:

  1. Shared Context Sensing: Cache context values and share across apps to avoid redundant sensing
  2. Cross-App Correlations: Learn relationships between context attributes to infer values without sensing
  3. Association Rule Mining: Use support and confidence metrics to discover reliable correlations
  4. Inference Cache: Return cached or inferred values with zero energy cost when possible
  5. Sensing Planner: Find the cheapest sequence of proxy attributes when sensing is required

ACE systems typically achieve 60-80% energy savings compared to direct sensing approaches by intelligently combining caching, inference, and selective sensing.

1609.14 What’s Next

The next section covers Code Offloading and Heterogeneous Computing, which addresses intelligent decisions about whether to process data locally on device or offload computation to the cloud, and how to leverage heterogeneous processors (CPU, GPU, DSP, NPU) for energy-efficient local execution.