41  Sigfox Message Flow

In 60 Seconds

Sigfox uplink messages are broadcast on three random frequencies (frequency diversity) without acknowledgment by default; downlink is only possible within a 20-second window after an uplink that explicitly requests it, limited to 4 downlinks per day at 8 bytes each. Understanding this asymmetric flow is critical for power and application design.

41.1 Introduction

⏱️ ~12 min | ⭐⭐ Intermediate | 📋 P09.C11.U02

Understanding Sigfox’s message flow is crucial for designing efficient IoT applications. This chapter covers the uplink and downlink communication patterns, power consumption implications, and common pitfalls that developers encounter.

Learning Objectives

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

  • Explain the Sigfox uplink and downlink message flow including triple-frequency transmission
  • Calculate power consumption for different uplink and downlink messaging patterns
  • Diagnose common pitfalls in payload design and message budgeting
  • Design applications that work within Sigfox’s asymmetric communication constraints

Key Concepts

  • Uplink Message Flow: Complete path from device firmware → UNB radio transmission → base station reception → Sigfox cloud → callback → application server.
  • Downlink Message Flow: Application server request → Sigfox cloud queuing → base station transmission in post-uplink window → device receive window.
  • Base Station Reception: Multiple Sigfox base stations may receive same uplink transmission; cloud backend selects best copy based on RSSI/SNR quality.
  • Cloud Backend Processing: Sigfox cloud authenticates device, stores message, routes to registered callbacks; provides message history and device statistics via API.
  • Callback Mechanism: Configurable HTTP/HTTPS webhooks triggered for each received message; delivers device ID, payload (hex-encoded), RSSI, and timestamp to application.
  • Downlink Request: Device must set downlink bit in uplink frame to request a downlink; Sigfox base station opens 20-second downlink window; not guaranteed delivery.
  • Message Lifecycle: Timeline from transmission through cloud processing to callback delivery; typical end-to-end latency is 1–5 seconds for uplink messages.

When a Sigfox device sends a message, it broadcasts on a random frequency, and multiple base stations pick it up. The Sigfox cloud then deduplicates the messages and forwards the data to your application. This chapter traces the complete journey of a Sigfox message from sensor to cloud to your dashboard.

“When I send a Sigfox message, it is like throwing three paper airplanes at once,” Sammy the Sensor explained. “Each airplane flies on a different random frequency, and multiple catchers – the base stations – try to grab them. Even if one airplane gets lost or crashes into interference, the other two probably make it through. That triple transmission trick is what makes Sigfox so reliable!”

“But here is the catch with downlinks,” Lila the LED added. “If the cloud needs to send a message back to me, I have to stay awake and listen for 20 to 25 seconds after my uplink. That is like waiting by the mailbox for a letter that might not come. And I can only do that four times a day! Most of the time, I just send my data and go straight back to sleep.”

Max the Microcontroller counted on his fingers. “The power math is dramatic. An uplink costs me about 0.067 milliamp-hours – tiny! But waiting for a downlink costs about 0.35 milliamp-hours – that is over 5 times more energy. A full uplink-plus-downlink cycle costs 0.41 milliamp-hours, roughly 6 times the uplink alone. If I requested a downlink after every single message, my battery would drain much faster. That is why smart Sigfox devices only request downlinks when they absolutely need a configuration update.”

“Think of it like a postcard system,” Bella the Battery summarized. “Sending a postcard is cheap and easy – that is the uplink. But if you want a reply, you have to stand by the mailbox for 25 seconds each time, and you can only check four times a day. Design your application to send postcards without expecting replies, and I will last for a decade!”

41.2 Prerequisites

Before this chapter, ensure you’ve completed:


41.3 Sigfox Message Flow: Uplink and Downlink

The Sigfox communication protocol follows a carefully orchestrated sequence for uplink (device-to-cloud) and optional downlink (cloud-to-device) messaging:

Sigfox message flow sequence diagram illustrating the complete uplink and optional downlink communication protocol with power consumption analysis.
Figure 41.1: Sigfox uplink and downlink message flow with power consumption

41.3.3 Energy Impact Comparison

Operation Duration Current Energy Impact
Sleep 23h 59m 1 uA 0.024 mAh/day Minimal
Uplink only 6 sec 40 mA 0.067 mAh 1x (baseline)
Uplink + Downlink RX 31 sec 40-50 mA 0.414 mAh ~6x more
Daily operations (24 up) 24 msg/day Mixed 1.6 mAh/day 4.1 year battery
With 4 downlinks 24 up + 4 down Mixed 3.0 mAh/day 2.2 year battery

Design recommendation: Use downlink sparingly (monthly configuration updates) rather than frequently (daily commands) to preserve battery life.

41.4 Common Pitfalls and Solutions

41.4.2 Pitfall 2: Message Size Constraint

Common Pitfall: Sigfox Message Size Constraint

The mistake: Designing payload formats without considering Sigfox’s strict 12-byte uplink limit, leading to either data truncation or message fragmentation across multiple transmissions.

Symptoms:

  • Critical sensor data is dropped or rounded excessively to fit payload
  • Multi-message sequences arrive out of order or with gaps (lost messages)
  • Application logic becomes complex trying to reassemble fragmented payloads
  • Message quota exhausted mid-day due to payload fragmentation

Why it happens: Sigfox enforces a hard 12-byte payload limit for uplink messages. Developers accustomed to MQTT (256MB), HTTP (unlimited), or even LoRaWAN (243 bytes) often design payloads that exceed this:

  • GPS coordinates: 8-12 bytes (latitude + longitude as floats)
  • Timestamp: 4-8 bytes (Unix epoch or ISO format)
  • Device ID: 4-8 bytes (UUID or serial number)
  • Sensor readings: 2-8 bytes per sensor

A “simple” GPS tracker with timestamp and battery level easily reaches 16-20 bytes in naive encoding.

The fix:

  1. Compact binary encoding: Replace floats with scaled integers (GPS: 4 bytes for lat/lon combined at 10m resolution)

  2. Eliminate redundant data: Device ID is already in Sigfox frame header; don’t repeat in payload

  3. Relative timestamps: Send seconds-since-last-message (2 bytes) instead of full epoch (4 bytes)

  4. Data prioritization: Send critical values every message, less critical values in rotation

  5. Payload design template:

    Bytes 0-1: Primary sensor (scaled integer)
    Bytes 2-3: Secondary sensor (scaled integer)
    Bytes 4-5: Battery/status flags (packed bits)
    Bytes 6-11: GPS or additional data (compressed)

Prevention: Design payloads on paper before coding. Use bit-packing for boolean flags, scaled integers instead of floats, and delta encoding for slowly-changing values. Validate that typical and worst-case payloads fit in 12 bytes. If 12 bytes is insufficient even with optimization, consider LoRaWAN (243 bytes) or NB-IoT (1600 bytes per message).

41.4.3 Pitfall 3: Exhausting Daily Message Budget

Pitfall: Exhausting Daily Message Budget with Retransmissions

The Mistake: Implementing aggressive retry logic that sends the same message multiple times when no acknowledgment is received, quickly consuming the 140 messages/day quota.

Why It Happens: Developers accustomed to TCP/IP or MQTT expect acknowledgments and implement retry patterns like “send up to 5 times until ACK received.” With Sigfox’s fire-and-forget model (no native ACKs) and 140 message/day limit, this approach exhausts the daily budget by mid-morning:

Scenario: Sensor sends every 15 minutes with 3 retries per reading
- Readings/day: 96 (24 hours × 4/hour)
- With 3 retries: 96 × 3 = 288 messages/day
- Sigfox limit: 140 messages/day
- Result: Device blocked by 10:30 AM, no data for rest of day

The Fix: Accept Sigfox’s inherent ~95-98% delivery rate without retries. Design your application to tolerate occasional missing messages:

  1. No application-level retries: Trust Sigfox’s built-in triple transmission (each message sent 3× on different frequencies)
  2. Backend interpolation: Fill missing readings using adjacent values
  3. Delta encoding: Send only changes from last confirmed value
  4. Critical alerts: Reserve 10-20 messages/day for burst alerts, use remaining 120-130 for scheduled readings
  5. Budget monitoring: Track daily message count in firmware, throttle non-critical messages when approaching 100

41.5 Global Coverage Misconception

Common Misconception: “Sigfox Works Everywhere Like Cellular”

The Misconception: Many companies assume Sigfox offers global coverage similar to cellular networks (190+ countries), leading to deployment failures in 20-40% of target markets.

Reality Check with Real-World Data:

Sigfox Coverage Reality (2024):

  • Strong Coverage: 22 Western European countries (85-95% population coverage)
  • Moderate Coverage: USA, Canada, Australia (60-70% population, concentrated in major cities)
  • Limited Coverage: Latin America (Sao Paulo, Mexico City, Buenos Aires only), Eastern Europe (Poland, Czech Republic)
  • Essentially No Coverage: China, Russia, India (>3 billion people excluded), most of Africa and Middle East

Case Study: Global Fleet Management Failure

  • Company: European logistics firm with 10,000 shipping containers
  • Assumption: “Sigfox operates in 70 countries, we operate in 30 countries, we’re covered”
  • Reality: 8 out of 30 target countries had zero Sigfox coverage (China, Russia, India, Indonesia, Vietnam, Thailand, Kenya, Nigeria)
  • Impact: 2,400 deployed devices (24% of fleet) became non-functional in coverage gaps
  • Financial Loss: $24,000 hardware + $14,400/year subscriptions wasted = $86,400 over 5 years
  • Resolution: Emergency deployment of dual-mode NB-IoT devices in gap countries, additional $72,000 cost

Why This Happens:

  1. Operator-Dependent Model: Sigfox requires local Sigfox Network Operator (SNO) in each country
  2. Business Case Limitations: SNOs only deploy where IoT market size justifies infrastructure investment
  3. Competitive Landscape: In Asia, cellular IoT (NB-IoT/LTE-M) dominates; no business case for Sigfox SNOs
  4. Regulatory Barriers: Some countries restrict unlicensed LPWAN or have national security concerns

Pre-Deployment Verification Protocol:

  • Step 1: Check sigfox.com/coverage for each target country (not just “Sigfox exists”)
  • Step 2: Deploy 10-20 test devices in actual deployment locations for 30-day field trial
  • Step 3: Measure message success rate (accept only if >95% delivery)
  • Step 4: For coverage gaps, design hybrid deployment (Sigfox + NB-IoT fallback) or choose cellular IoT for true global coverage

Bottom Line: Sigfox is excellent for European regional deployments but NOT a global solution like cellular networks. Always verify operator availability AND coverage quality per country before committing to Sigfox.


41.6 Worked Example: Designing a Sigfox Payload for Cold-Chain Monitoring

Scenario: A pharmaceutical distributor needs to monitor temperature inside refrigerated delivery vans. Each van carries vaccines that must remain between 2C and 8C. Regulators require temperature readings every 15 minutes with tamper-evident logging. The company has 50 vans operating 12 hours/day.

Step 1 – Message budget calculation:

Parameter Value Calculation
Readings per day 48 12 hours x 4 readings/hour
Sigfox daily limit 140 messages Protocol hard limit
Headroom for retries 20% 140 x 0.80 = 112 usable messages
Messages needed 48 Well within 112-message budget

Good – 48 messages/day leaves 64 messages as safety margin for retransmissions caused by poor cellular-like coverage in underground parking garages.

Step 2 – Payload design within 12-byte constraint:

A naive approach would send one reading per message: {"temp": 4.2, "time": "2025-01-15T10:30:00"} – but this is 45 bytes, far exceeding the 12-byte limit and wasting JSON overhead.

Optimized binary encoding (packs 4 readings into one 12-byte message):

Byte Field Encoding Range
0 Message type + sequence 4-bit type + 4-bit seq 16 types, 16 sequences
1 Battery voltage uint8, x0.02 + 2.0V 2.0-7.1V, 0.02V resolution
2-3 Reading 1: temperature int16, x0.01C -327.68 to +327.67C
4-5 Reading 2: temperature int16, x0.01C Same
6-7 Reading 3: temperature int16, x0.01C Same
8-9 Reading 4: temperature int16, x0.01C Same
10 Alert flags 8 bits Door open, over-temp, under-temp, battery low, GPS fix, etc.
11 GPS grid cell (coarse) uint8 256 predefined delivery zones

Result: 4 temperature readings per message means only 12 messages/day instead of 48 – a 4x reduction that extends battery life and leaves 128 messages/day as headroom.

Step 3 – Downlink strategy for alerts:

With only 4 downlinks/day, the backend cannot send individual acknowledgments. Instead, use a polling pattern:

  1. Morning check-in (06:00): Device sends first message with downlink_request flag. Backend responds with an 8-byte downlink containing the current alert threshold, reporting interval, and any pending configuration changes.
  2. Remaining 47 messages: Uplink-only (no downlink request), saving ~5x energy per message compared to requesting a downlink.
  3. Emergency downlink: If backend detects three consecutive over-temperature readings, it queues a downlink for the next uplink. The device receives the “critical alert” flag and increases reporting frequency to every 5 minutes (still within daily quota).

Step 4 – Power budget:

Activity Current Duration Daily Count Daily Energy
Transmit (uplink) 45 mA 6 sec 12 0.90 mAh
Receive (downlink window) 12 mA 25 sec 1 0.083 mAh
Sleep 0.003 mA 23.97 hrs 1 0.072 mAh
Sensor reading 5 mA 0.5 sec 48 0.033 mAh
Daily total 1.09 mAh
Annual total 397 mAh
Battery life (2,400 mAh cell) 6.0 years

Key design decisions and why:

  • 4 readings per message instead of 1: Reduces message count by 75%, extending battery life from 4.2 years to 6.0 years.
  • Binary encoding instead of JSON: Fits 4 readings in 12 bytes instead of needing 180 bytes.
  • Coarse GPS (grid cell) instead of full coordinates: 1 byte vs 8 bytes. Vans follow known routes – 256 predefined zones provide adequate location granularity.
  • 1 downlink/day instead of 4: Each downlink RX window costs ~5x more energy than an uplink alone. One morning check-in provides the essential configuration update.

41.7 Summary

In this chapter, you learned about Sigfox’s communication patterns and constraints:

Message Flow:

  • Uplink: 6 seconds at 100 bps, 12-byte payload, 140 messages/day
  • Downlink: 8-byte payload, 4 messages/day maximum, 20-25 second RX window

Power Impact:

  • Uplink-only: 0.067 mAh per message (battery-efficient)
  • With downlink RX window: 0.35 mAh additional (~5x more energy than uplink alone)
  • Always request downlinks sparingly to preserve battery

Common Pitfalls to Avoid:

  1. Designing for bidirectional communication (use uplink-only patterns)
  2. Exceeding 12-byte payload limit (use compact binary encoding)
  3. Aggressive retries exhausting daily quota (trust triple transmission)
  4. Missing downlink RX window timing (wait full 25 seconds)
  5. Assuming global coverage like cellular (verify per-country)

41.8 What’s Next

Continue learning about Sigfox deployment:

Order Chapter Focus
Next Sigfox Deployment Coverage verification and deployment best practices
Then Sigfox Hands-On Interactive lab with ESP32 simulation
Then Sigfox Assessment Comprehensive quizzes and review