feat: 初始化小米 IoT (MIoT) 智能家居 Go 库

- 实现 MIoT 客户端核心功能(MQTT 连接、设备管理、属性读写)
- 支持云端 API 调用与局域网设备发现(mDNS)
- 集成国际化(i18n)多语言支持
- 添加 MIoT 设备规约解析器(spec_parser)
- 包含单元测试与使用示例
This commit is contained in:
2026-06-28 22:05:49 +08:00
parent ac442812b4
commit 3a44cb9e6a
118 changed files with 31630 additions and 0 deletions
+56
View File
@@ -0,0 +1,56 @@
# R2-01 — spec_parser.go: 属性值处理
## 缺失方法
### MIoTSpecProperty.eval_expr — 表达式求值
```python
def eval_expr(self, src_value: Any) -> Any:
if not self.expr:
return src_value
try:
return eval(self.expr, {'src_value': src_value})
except Exception as err:
return src_value
```
**Go 实现**:不推荐 `eval`,使用简单的数值表达式库或手动解析常见模式。若 `expr` 字段为空则返回原值。
### MIoTSpecProperty.value_format — 值格式转换
```python
def value_format(self, value: Any) -> Any:
if value is None: return None
if isinstance(value, str):
if self.format_ == int: value = int(float(value))
elif self.format_ == float: value = float(value)
if self.format_ == bool:
return bool(value in [True, 1, 'True', 'true', '1'])
return value
```
**Go 实现**:根据 `Format` 字段将字符串转为对应类型。
### MIoTSpecProperty.value_precision — 值精度处理
```python
def value_precision(self, value: Any) -> Any:
if value is None: return None
if self.format_ == float:
return round(value, self.precision)
if self.format_ == int:
if self.value_range is None: return int(round(value))
return int(round(value / self.value_range.step) * self.value_range.step)
return value
```
**Go 实现**:使用 `math.Round` 或自定义 round。int 类型需要按 step 对齐。
## 目标文件
`D:\miot\go-miot\spec_parser.go`
在 `MIoTSpecProperty` 结构体上添加 3 个方法:
- `func (p *MIoTSpecProperty) EvalExpr(srcValue interface{}) interface{}`
- `func (p *MIoTSpecProperty) ValueFormat(value interface{}) interface{}`
- `func (p *MIoTSpecProperty) ValuePrecision(value interface{}) interface{}`