Add: windows mvp - transparent bugs not fixed
This commit is contained in:
168
skills/domain-iot/SKILL.md
Normal file
168
skills/domain-iot/SKILL.md
Normal file
@@ -0,0 +1,168 @@
|
||||
---
|
||||
name: domain-iot
|
||||
description: "Use when building IoT apps. Keywords: IoT, Internet of Things, sensor, MQTT, device, edge computing, telemetry, actuator, smart home, gateway, protocol, 物联网, 传感器, 边缘计算, 智能家居"
|
||||
user-invocable: false
|
||||
---
|
||||
|
||||
# IoT Domain
|
||||
|
||||
> **Layer 3: Domain Constraints**
|
||||
|
||||
## Domain Constraints → Design Implications
|
||||
|
||||
| Domain Rule | Design Constraint | Rust Implication |
|
||||
|-------------|-------------------|------------------|
|
||||
| Unreliable network | Offline-first | Local buffering |
|
||||
| Power constraints | Efficient code | Sleep modes, minimal alloc |
|
||||
| Resource limits | Small footprint | no_std where needed |
|
||||
| Security | Encrypted comms | TLS, signed firmware |
|
||||
| Reliability | Self-recovery | Watchdog, error handling |
|
||||
| OTA updates | Safe upgrades | Rollback capability |
|
||||
|
||||
---
|
||||
|
||||
## Critical Constraints
|
||||
|
||||
### Network Unreliability
|
||||
|
||||
```
|
||||
RULE: Network can fail at any time
|
||||
WHY: Wireless, remote locations
|
||||
RUST: Local queue, retry with backoff
|
||||
```
|
||||
|
||||
### Power Management
|
||||
|
||||
```
|
||||
RULE: Minimize power consumption
|
||||
WHY: Battery life, energy costs
|
||||
RUST: Sleep modes, efficient algorithms
|
||||
```
|
||||
|
||||
### Device Security
|
||||
|
||||
```
|
||||
RULE: All communication encrypted
|
||||
WHY: Physical access possible
|
||||
RUST: TLS, signed messages
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Trace Down ↓
|
||||
|
||||
From constraints to design (Layer 2):
|
||||
|
||||
```
|
||||
"Need offline-first design"
|
||||
↓ m12-lifecycle: Local buffer with persistence
|
||||
↓ m13-domain-error: Retry with backoff
|
||||
|
||||
"Need power efficiency"
|
||||
↓ domain-embedded: no_std patterns
|
||||
↓ m10-performance: Minimal allocations
|
||||
|
||||
"Need reliable messaging"
|
||||
↓ m07-concurrency: Async with timeout
|
||||
↓ MQTT: QoS levels
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Environment Comparison
|
||||
|
||||
| Environment | Stack | Crates |
|
||||
|-------------|-------|--------|
|
||||
| Linux gateway | tokio + std | rumqttc, reqwest |
|
||||
| MCU device | embassy + no_std | embedded-hal |
|
||||
| Hybrid | Split workloads | Both |
|
||||
|
||||
## Key Crates
|
||||
|
||||
| Purpose | Crate |
|
||||
|---------|-------|
|
||||
| MQTT (std) | rumqttc, paho-mqtt |
|
||||
| Embedded | embedded-hal, embassy |
|
||||
| Async (std) | tokio |
|
||||
| Async (no_std) | embassy |
|
||||
| Logging (no_std) | defmt |
|
||||
| Logging (std) | tracing |
|
||||
|
||||
## Design Patterns
|
||||
|
||||
| Pattern | Purpose | Implementation |
|
||||
|---------|---------|----------------|
|
||||
| Pub/Sub | Device comms | MQTT topics |
|
||||
| Edge compute | Local processing | Filter before upload |
|
||||
| OTA updates | Firmware upgrade | Signed + rollback |
|
||||
| Power mgmt | Battery life | Sleep + wake events |
|
||||
| Store & forward | Network reliability | Local queue |
|
||||
|
||||
## Code Pattern: MQTT Client
|
||||
|
||||
```rust
|
||||
use rumqttc::{AsyncClient, MqttOptions, QoS};
|
||||
|
||||
async fn run_mqtt() -> anyhow::Result<()> {
|
||||
let mut options = MqttOptions::new("device-1", "broker.example.com", 1883);
|
||||
options.set_keep_alive(Duration::from_secs(30));
|
||||
|
||||
let (client, mut eventloop) = AsyncClient::new(options, 10);
|
||||
|
||||
// Subscribe to commands
|
||||
client.subscribe("devices/device-1/commands", QoS::AtLeastOnce).await?;
|
||||
|
||||
// Publish telemetry
|
||||
tokio::spawn(async move {
|
||||
loop {
|
||||
let data = read_sensor().await;
|
||||
client.publish("devices/device-1/telemetry", QoS::AtLeastOnce, false, data).await.ok();
|
||||
tokio::time::sleep(Duration::from_secs(60)).await;
|
||||
}
|
||||
});
|
||||
|
||||
// Process events
|
||||
loop {
|
||||
match eventloop.poll().await {
|
||||
Ok(event) => handle_event(event).await,
|
||||
Err(e) => {
|
||||
tracing::error!("MQTT error: {}", e);
|
||||
tokio::time::sleep(Duration::from_secs(5)).await;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Common Mistakes
|
||||
|
||||
| Mistake | Domain Violation | Fix |
|
||||
|---------|-----------------|-----|
|
||||
| No retry logic | Lost data | Exponential backoff |
|
||||
| Always-on radio | Battery drain | Sleep between sends |
|
||||
| Unencrypted MQTT | Security risk | TLS |
|
||||
| No local buffer | Network outage = data loss | Persist locally |
|
||||
|
||||
---
|
||||
|
||||
## Trace to Layer 1
|
||||
|
||||
| Constraint | Layer 2 Pattern | Layer 1 Implementation |
|
||||
|------------|-----------------|------------------------|
|
||||
| Offline-first | Store & forward | Local queue + flush |
|
||||
| Power efficiency | Sleep patterns | Timer-based wake |
|
||||
| Network reliability | Retry | tokio-retry, backoff |
|
||||
| Security | TLS | rustls, native-tls |
|
||||
|
||||
---
|
||||
|
||||
## Related Skills
|
||||
|
||||
| When | See |
|
||||
|------|-----|
|
||||
| Embedded patterns | domain-embedded |
|
||||
| Async patterns | m07-concurrency |
|
||||
| Error recovery | m13-domain-error |
|
||||
| Performance | m10-performance |
|
||||
Reference in New Issue
Block a user