
1) 【一句话结论】我参与过智慧城市“城市环境监测”项目,通过LoRaWAN连接分布在城区的空气质量、噪音传感器,采用MQTT协议传输数据,数据清洗后存储至时序数据库,用于实时环境态势分析。
2) 【原理/概念讲解】老师会解释关键概念:
3) 【对比与适用场景】
| 设备连接方式 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 5G/4G | 蜂窝网络无线通信技术 | 高带宽、低延迟、高密度连接 | 交通信号灯监控、智能摄像头、应急设备 | 成本较高,功耗较大 |
| LoRaWAN | 低功耗广域网技术 | 低功耗、远距离(数公里)、低速率 | 环境传感器、路灯状态监测、燃气泄漏报警 | 传输速率较低,不适合高带宽需求 |
| 数据传输协议 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| MQTT | 轻量级发布-订阅协议 | 资源受限设备友好、支持QoS、低开销 | 物联网设备(传感器、智能设备) | 需Broker(消息代理)支持,消息可靠性依赖QoS |
| HTTP/HTTPS | 标准Web协议 | 高交互性、支持RESTful API | Web端设备、复杂交互场景 | 开销较大,不适合低功耗设备 |
4) 【示例】
假设项目中的环境传感器(如PM2.5监测设备)通过LoRaWAN连接,设备上报数据格式为JSON,包含设备ID、时间戳、PM2.5浓度值。数据清洗预处理流程伪代码如下:
# 设备上报数据示例
raw_data = {
"device_id": "Lora_001",
"timestamp": "2023-10-27T10:30:00Z",
"value": 45 # 单位:μg/m³
}
def preprocess_data(raw_data):
# 1. 数据校验:检查设备ID是否合法
if not validate_device_id(raw_data["device_id"]):
return None
# 2. 时间戳处理:转换为统一格式(如Unix时间戳)
processed_data = {
"device_id": raw_data["device_id"],
"timestamp": convert_to_timestamp(raw_data["timestamp"])
}
# 3. 数据类型转换:确保数值类型正确
try:
processed_data["value"] = float(raw_data["value"])
except ValueError:
return None
# 4. 缺失值处理:用历史均值填充
if processed_data["value"] is None:
processed_data["value"] = get_mean_value(raw_data["device_id"])
# 5. 异常值检测:Z-score方法
z_score = calculate_z_score(processed_data["value"], raw_data["device_id"])
if abs(z_score) > 3:
return None
return processed_data
cleaned_data = preprocess_data(raw_data)
if cleaned_data:
store_to_database(cleaned_data) # 存储到InfluxDB
5) 【面试口播版答案】
我参与过智慧城市“城市环境监测”项目,通过LoRaWAN连接分布在城区的空气质量、噪音传感器,采用MQTT协议传输数据,数据清洗后存储至时序数据库,用于实时环境态势分析。具体来说,设备连接方式选择LoRaWAN是因为环境传感器属于低功耗、广域覆盖场景,而数据传输协议选MQTT是因为其轻量级特性适合资源受限的传感器设备。数据清洗流程包括数据校验(检查设备ID和数值有效性)、缺失值处理(用历史均值填充)、异常值检测(Z-score方法识别离群值),确保数据质量后存储到InfluxDB用于分析。
6) 【追问清单】
7) 【常见坑/雷区】