修复代码问题并更新版本到 v1.0.3
- 修复 config_flow.py 中的 KeyError 风险 - 添加 MQTT broker 地址和端口验证 - 完善翻译文件,添加所有配置字段的中文翻译 - 修复 sensor.py 中的弃用 API 使用 - 改进错误处理,转换失败时设置 available 为 False - 添加 device_info 中的 sw_version 字段 - 清理 manifest.json 中不必要的 paho-mqtt 依赖 - 修正 README.md 中的路径错误 - 更新版本号到 1.0.3
This commit is contained in:
@@ -18,7 +18,7 @@
|
|||||||
本项目包含两个主要部分:
|
本项目包含两个主要部分:
|
||||||
|
|
||||||
1. **MQTT 模拟器** (`main.py`) - 模拟发送能源监控数据到 MQTT broker
|
1. **MQTT 模拟器** (`main.py`) - 模拟发送能源监控数据到 MQTT broker
|
||||||
2. **Home Assistant 自定义集成** (`custom_components/energy_monitor/`) - 接收 MQTT 数据并创建传感器实体
|
2. **Home Assistant 自定义集成** (`custom_components/JackeryHome/`) - 接收 MQTT 数据并创建传感器实体
|
||||||
|
|
||||||
## 传感器列表
|
## 传感器列表
|
||||||
|
|
||||||
@@ -161,7 +161,7 @@ entities:
|
|||||||
|
|
||||||
### 核心文件
|
### 核心文件
|
||||||
- `main.py`: MQTT 传感器模拟器主程序
|
- `main.py`: MQTT 传感器模拟器主程序
|
||||||
- `custom_components/energy_monitor/`: Home Assistant 自定义集成
|
- `custom_components/JackeryHome/`: Home Assistant 自定义集成
|
||||||
- `__init__.py`: 集成入口
|
- `__init__.py`: 集成入口
|
||||||
- `manifest.json`: 集成元数据
|
- `manifest.json`: 集成元数据
|
||||||
- `sensor.py`: 传感器平台实现
|
- `sensor.py`: 传感器平台实现
|
||||||
|
|||||||
@@ -43,16 +43,30 @@ class JackeryHomeConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
|||||||
errors = {}
|
errors = {}
|
||||||
|
|
||||||
if user_input is not None:
|
if user_input is not None:
|
||||||
# 检查是否已经配置
|
# 验证 MQTT broker 地址
|
||||||
await self.async_set_unique_id(DOMAIN)
|
mqtt_broker = user_input.get("mqtt_broker", "").strip()
|
||||||
self._abort_if_unique_id_configured()
|
if not mqtt_broker:
|
||||||
|
errors["base"] = "mqtt_broker_required"
|
||||||
|
|
||||||
_LOGGER.info(f"Creating JackeryHome config entry with topic_prefix: {user_input['topic_prefix']}")
|
# 验证端口范围
|
||||||
|
try:
|
||||||
|
mqtt_port = int(user_input.get("mqtt_port", 1883))
|
||||||
|
if mqtt_port < 1 or mqtt_port > 65535:
|
||||||
|
errors["base"] = "invalid_port"
|
||||||
|
except (ValueError, TypeError):
|
||||||
|
errors["base"] = "invalid_port"
|
||||||
|
|
||||||
return self.async_create_entry(
|
if not errors:
|
||||||
title="JackeryHome",
|
# 检查是否已经配置
|
||||||
data=user_input,
|
await self.async_set_unique_id(DOMAIN)
|
||||||
)
|
self._abort_if_unique_id_configured()
|
||||||
|
|
||||||
|
_LOGGER.info(f"Creating JackeryHome config entry with topic_prefix: {user_input.get('topic_prefix', 'homeassistant/sensor')}")
|
||||||
|
|
||||||
|
return self.async_create_entry(
|
||||||
|
title="JackeryHome",
|
||||||
|
data=user_input,
|
||||||
|
)
|
||||||
|
|
||||||
return self.async_show_form(
|
return self.async_show_form(
|
||||||
step_id="user",
|
step_id="user",
|
||||||
|
|||||||
@@ -11,8 +11,5 @@
|
|||||||
"documentation": "https://github.com/suyulin/jackery_home",
|
"documentation": "https://github.com/suyulin/jackery_home",
|
||||||
"issue_tracker": "https://github.com/suyulin/jackery_home/issues",
|
"issue_tracker": "https://github.com/suyulin/jackery_home/issues",
|
||||||
"iot_class": "local_push",
|
"iot_class": "local_push",
|
||||||
"requirements": [
|
"version": "1.0.3"
|
||||||
"paho-mqtt>=1.6.0"
|
|
||||||
],
|
|
||||||
"version": "1.0.2"
|
|
||||||
}
|
}
|
||||||
@@ -101,7 +101,7 @@ async def async_setup_entry(
|
|||||||
)
|
)
|
||||||
entities.append(entity)
|
entities.append(entity)
|
||||||
|
|
||||||
async_add_entities(entities, True)
|
async_add_entities(entities)
|
||||||
_LOGGER.info(f"Added {len(entities)} JackeryHome sensors")
|
_LOGGER.info(f"Added {len(entities)} JackeryHome sensors")
|
||||||
|
|
||||||
|
|
||||||
@@ -132,6 +132,7 @@ class JackeryHomeSensor(SensorEntity):
|
|||||||
"name": "JackeryHome",
|
"name": "JackeryHome",
|
||||||
"manufacturer": "Jackery",
|
"manufacturer": "Jackery",
|
||||||
"model": "Energy Monitor",
|
"model": "Energy Monitor",
|
||||||
|
"sw_version": "1.0.3",
|
||||||
}
|
}
|
||||||
self._topic = f"{topic_prefix}/{sensor_id}/state"
|
self._topic = f"{topic_prefix}/{sensor_id}/state"
|
||||||
self._attr_native_value = None
|
self._attr_native_value = None
|
||||||
@@ -169,7 +170,11 @@ class JackeryHomeSensor(SensorEntity):
|
|||||||
try:
|
try:
|
||||||
value = float(payload)
|
value = float(payload)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
|
# 如果无法转换为数字,保持原值但设置不可用
|
||||||
value = payload
|
value = payload
|
||||||
|
self._attr_available = False
|
||||||
|
self.async_write_ha_state()
|
||||||
|
return
|
||||||
|
|
||||||
# 更新传感器状态
|
# 更新传感器状态
|
||||||
self._attr_native_value = value
|
self._attr_native_value = value
|
||||||
|
|||||||
@@ -3,14 +3,18 @@
|
|||||||
"step": {
|
"step": {
|
||||||
"user": {
|
"user": {
|
||||||
"title": "配置 JackeryHome",
|
"title": "配置 JackeryHome",
|
||||||
"description": "设置 MQTT 主题前缀以接收能源监控数据",
|
"description": "设置 MQTT 连接参数以接收能源监控数据",
|
||||||
"data": {
|
"data": {
|
||||||
"topic_prefix": "MQTT 主题前缀"
|
"topic_prefix": "MQTT 主题前缀",
|
||||||
|
"mqtt_broker": "MQTT Broker 地址",
|
||||||
|
"mqtt_port": "MQTT 端口"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"already_configured": "该集成已配置"
|
"already_configured": "该集成已配置",
|
||||||
|
"mqtt_broker_required": "MQTT Broker 地址不能为空",
|
||||||
|
"invalid_port": "端口号必须在 1-65535 范围内"
|
||||||
},
|
},
|
||||||
"abort": {
|
"abort": {
|
||||||
"already_configured": "该集成已配置"
|
"already_configured": "该集成已配置"
|
||||||
|
|||||||
@@ -3,14 +3,18 @@
|
|||||||
"step": {
|
"step": {
|
||||||
"user": {
|
"user": {
|
||||||
"title": "配置 JackeryHome",
|
"title": "配置 JackeryHome",
|
||||||
"description": "设置 MQTT 主题前缀以接收能源监控数据",
|
"description": "设置 MQTT 连接参数以接收能源监控数据",
|
||||||
"data": {
|
"data": {
|
||||||
"topic_prefix": "MQTT 主题前缀"
|
"topic_prefix": "MQTT 主题前缀",
|
||||||
|
"mqtt_broker": "MQTT Broker 地址",
|
||||||
|
"mqtt_port": "MQTT 端口"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"already_configured": "该集成已配置"
|
"already_configured": "该集成已配置",
|
||||||
|
"mqtt_broker_required": "MQTT Broker 地址不能为空",
|
||||||
|
"invalid_port": "端口号必须在 1-65535 范围内"
|
||||||
},
|
},
|
||||||
"abort": {
|
"abort": {
|
||||||
"already_configured": "该集成已配置"
|
"already_configured": "该集成已配置"
|
||||||
|
|||||||
Reference in New Issue
Block a user