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.
For Beginners: Sigfox Message Flow
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.
Sensor Squad: Following a Sigfox Message!
“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!”
The Sigfox communication protocol follows a carefully orchestrated sequence for uplink (device-to-cloud) and optional downlink (cloud-to-device) messaging:
Figure 41.1: Sigfox uplink and downlink message flow with power consumption
41.3.1 Uplink Characteristics (Device to Cloud)
Transmission: 6 seconds at 40 mA current
Energy cost: ~0.067 mAh per message
Frequency: Up to 140 messages per day
Payload: 12 bytes maximum
Reliability: Fire-and-forget (no acknowledgment by default)
Reception: Multiple base stations receive simultaneously
Processing: Backend performs deduplication and geolocation
41.3.2 Downlink Characteristics (Cloud to Device)
Frequency: Maximum 4 messages per day
Payload: 8 bytes maximum
Timing: Only sent immediately after uplink with downlink request flag
RX window: Device must listen for 20-25 seconds at 40-50 mA
Energy cost: ~0.35 mAh for RX window alone (5x more than uplink TX)
Use cases: Configuration updates, firmware triggers, critical alerts
Limitation: Not suitable for frequent bidirectional communication
Putting Numbers to It
Context: Sigfox downlink RX window consumes significantly more energy than uplink-only operation.
Common Pitfall: Designing for Bidirectional Communication
The mistake: Designing IoT applications that require frequent bidirectional communication, assuming Sigfox supports downlink messaging comparable to uplink capacity.
Symptoms:
Configuration updates to devices take days instead of hours
Remote firmware updates are practically impossible (64KB firmware / 8 bytes per downlink / 4 downlinks per day = 2,048 days!)
Devices cannot receive acknowledgments for critical alerts
Actuator control commands fail or arrive too late to be useful
Why it happens: Sigfox is fundamentally asymmetric by design:
Uplink: 140 messages/day, 12 bytes each (1,680 bytes/day capacity)
Downlink: Only 4 messages/day, 8 bytes each (32 bytes/day capacity)
Downlink is 52x more constrained than uplink
This asymmetry exists because downlink requires the device to stay awake in receive mode for 20-25 seconds after requesting a downlink window, consuming approximately 5-6x more energy than uplink-only operation.
The fix:
Design for uplink-only: Treat Sigfox as a sensor reporting network, not a command-and-control system
Batch configuration changes: Accumulate settings and send in monthly firmware updates via physical access or alternative channel
Use downlink sparingly: Reserve 4 daily downlinks for critical alerts (alarm acknowledgments, emergency shutoff)
Hybrid architecture: Pair Sigfox with cellular fallback (NB-IoT) for devices requiring frequent commands
Prevention: Before choosing Sigfox, count your downlink requirements. If devices need more than 4 commands/day or firmware updates more than annually, consider LoRaWAN (unlimited downlinks after each uplink) or NB-IoT (full bidirectional TCP/UDP). Sigfox excels at “sensors that report” but struggles with “actuators that receive commands.”
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:
Compact binary encoding: Replace floats with scaled integers (GPS: 4 bytes for lat/lon combined at 10m resolution)
Eliminate redundant data: Device ID is already in Sigfox frame header; don’t repeat in payload
Relative timestamps: Send seconds-since-last-message (2 bytes) instead of full epoch (4 bytes)
Data prioritization: Send critical values every message, less critical values in rotation
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:
No application-level retries: Trust Sigfox’s built-in triple transmission (each message sent 3× on different frequencies)
Backend interpolation: Fill missing readings using adjacent values
Delta encoding: Send only changes from last confirmed value
Critical alerts: Reserve 10-20 messages/day for burst alerts, use remaining 120-130 for scheduled readings
Budget monitoring: Track daily message count in firmware, throttle non-critical messages when approaching 100
41.4.4 Pitfall 4: Missing the Downlink RX Window
Pitfall: Missing the Downlink RX Window Timing
The Mistake: Requesting a downlink but putting the device to sleep before the receive window opens, resulting in missed configuration updates or commands.
Why It Happens: The downlink window has strict timing requirements that developers often misunderstand:
Sigfox Downlink Timing:
1. Device sends uplink with downlink request flag = TRUE
2. Device MUST stay awake for 20-25 seconds in RX mode
3. Base station transmits 8-byte downlink during this window
4. If device sleeps early → downlink lost forever
Common mistake:
- Uplink sent at T=0
- Device enters sleep at T=5 seconds (too early!)
- Downlink arrives at T=20 seconds → device asleep → lost
The downlink arrives 20 seconds after uplink, but many implementations only wait 5-10 seconds before sleeping.
The Fix: Implement proper downlink handling with conservative timing:
Wait full 25 seconds: After uplink with downlink flag, keep radio in RX mode for 25 seconds minimum
Power budget: Each downlink RX window costs ~0.35 mAh (vs 0.067 mAh uplink-only), making the full cycle ~0.41 mAh – factor this into battery calculations
Downlink scheduling: Only request downlinks when essential (firmware triggers, config changes)
Timeout handling: If no downlink received after 25 seconds, log the miss and continue
Daily limit awareness: Only 4 downlinks/day—request sparingly, not on every uplink
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:
Operator-Dependent Model: Sigfox requires local Sigfox Network Operator (SNO) in each country
Business Case Limitations: SNOs only deploy where IoT market size justifies infrastructure investment
Competitive Landscape: In Asia, cellular IoT (NB-IoT/LTE-M) dominates; no business case for Sigfox SNOs
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:
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.
Remaining 47 messages: Uplink-only (no downlink request), saving ~5x energy per message compared to requesting a downlink.
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.
Interactive Quiz: Match Concepts
Interactive Quiz: Sequence the Steps
🏷️ Label the Diagram
💻 Code Challenge
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:
Designing for bidirectional communication (use uplink-only patterns)