Python新手求助:提取API返回中TariffReturn数值用于openHAB
提取TariffReturn数值并对接openHAB的解决方案
核心步骤
- 从
<p>标签中提取JSON格式的文本内容 - 用Python内置的
json模块解析JSON字符串 - 直接从解析后的字典中获取
TariffReturn字段值 - 根据数值正负执行openHAB设备控制逻辑
完整代码实现
from bs4 import BeautifulSoup import requests import datetime import json # 生成UTC时间戳(API要求的格式) current_utc = datetime.datetime.now(datetime.timezone.utc) start_time = current_utc.strftime('%Y-%m-%dT%H:00:00.000Z') end_time = current_utc.strftime('%Y-%m-%dT%H:59:00.000Z') # 用f-string简化URL拼接 api_url = f'https://mijn.easyenergy.com/nl/api/tariff/getapxtariffs?startTimestamp={start_time}&endTimestamp={end_time}' # 请求API(生产环境建议移除verify=False,配置合法证书) response = requests.get(api_url, verify=False) soup = BeautifulSoup(response.text, 'lxml') # 提取<p>标签内的JSON文本 json_str = soup.find('p').get_text(strip=True) # 解析JSON为Python列表 tariff_list = json.loads(json_str) # 获取TariffReturn数值(返回的是单元素数组,取第一个元素) tariff_return_value = tariff_list[0]['TariffReturn'] print(f"当前回售电价:{tariff_return_value}") # 对接openHAB:电价为负时关闭太阳能板 if tariff_return_value < 0: # 替换为你的openHAB地址和设备Item名称 openhab_item_url = "http://your-openhab-ip:8080/rest/items/SolarPanelSwitch" headers = {"Content-Type": "text/plain"} # 发送关闭指令 requests.post(openhab_item_url, headers=headers, data="OFF") print("太阳能板已关闭") else: print("电价非负,太阳能板正常运行")
关键细节说明
- 时区问题:API使用UTC时间,所以代码中用
datetime.timezone.utc获取当前UTC时间,避免时区偏差导致请求错误时段的数据。 - JSON解析:
json.loads()能直接把<p>内的字符串转换成Python可操作的列表/字典,无需手动处理转义字符。 - openHAB对接:依赖openHAB的REST API,确保你的脚本所在设备能访问openHAB服务,且Item名称正确。
- 证书验证:
verify=False仅用于测试,生产环境请移除该参数,确保系统信任API的SSL证书。
内容的提问来源于stack exchange,提问作者stehof
相关产品推荐
相关产品推荐

