You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python新手求助:提取API返回中TariffReturn数值用于openHAB

提取TariffReturn数值并对接openHAB的解决方案

核心步骤

  1. 从<p>标签中提取JSON格式的文本内容
  2. 用Python内置的json模块解析JSON字符串
  3. 直接从解析后的字典中获取TariffReturn字段值
  4. 根据数值正负执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:58:15