feat: 初始化小米 IoT (MIoT) 智能家居 Go 库
- 实现 MIoT 客户端核心功能(MQTT 连接、设备管理、属性读写) - 支持云端 API 调用与局域网设备发现(mDNS) - 集成国际化(i18n)多语言支持 - 添加 MIoT 设备规约解析器(spec_parser) - 包含单元测试与使用示例
This commit is contained in:
@@ -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{}`
|
||||
Reference in New Issue
Block a user