- 实现 MIoT 客户端核心功能(MQTT 连接、设备管理、属性读写) - 支持云端 API 调用与局域网设备发现(mDNS) - 集成国际化(i18n)多语言支持 - 添加 MIoT 设备规约解析器(spec_parser) - 包含单元测试与使用示例
57 lines
1.8 KiB
Markdown
57 lines
1.8 KiB
Markdown
# 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{}`
|