初级
解析NB-IoT低功耗精简上报格式
未完成
初级参考
完整示例代码供参考,建议自己理解后重新输入
def solve():
from pyodide.http import open_url
from io import StringIO
import pandas as pd, json
devs_csv = open_url("https://data.zuihe.com/dbd/ms-greenfarm/state_00/devices.csv").read()
devs = pd.read_csv(StringIO(devs_csv))
COMPACT_MAP = {'sm':'soil_moisture','st':'soil_temp','ec':'soil_ec','ph':'soil_ph','n':'nitrogen','p':'phosphorus','k':'potassium'}
UNITS = {'soil_moisture':'%','soil_temp':'degC','soil_ec':'mS/cm','soil_ph':'pH','nitrogen':'mg/kg','phosphorus':'mg/kg','potassium':'mg/kg'}
def parse_compact(payload_str):
p = json.loads(payload_str)
result = {'device_id':p.get('id',''),'timestamp':p.get('ts',0),'readings':[]}
for abbrev, full in COMPACT_MAP.items():
if abbrev in p:
result['readings'].append({'metric':full,'value':p[abbrev],'unit':UNITS.get(full,'')})
return result
payloads = [
'{"id":"SOIL-B02","ts":1748736004,"sm":68.2,"st":21.5,"ec":1.9,"ph":6.3}',
'{"id":"SOIL-B03","ts":1748736005,"sm":72.0,"st":20.8,"ec":2.1,"ph":6.2,"n":130,"p":45,"k":210}',
]
for p in payloads:
r = parse_compact(p)
print(r['device_id'] + ": " + str(len(r['readings'])) + " readings")
for reading in r['readings']:
print(" " + reading['metric'] + "=" + str(reading['value']) + reading['unit'])
示例
输入
solve()
期望输出
SOIL-B02: 4 readings soil_moisture=68.2% soil_temp=21.5degC soil_ec=1.9mS/cm soil_ph=6.3pH SOIL-B03: 7 readings soil_moisture=72.0% soil_temp=20.8degC soil_ec=2.1mS/cm soil_ph=6.2pH nitrogen=130mg/kg phosphorus=45mg/kg potassium=210mg/kg
👑
升级 VIP
解锁全部题目,畅通无阻地学习
- ✓ 解锁全部训练包所有题目
- ✓ 查看完整参考代码和提示
- ✓ 浏览器内直接运行 Python 代码
- ✓ 自动批改 + 进度追踪
30天
¥18
1年
¥99
2年
¥158
3年
¥199