- 实现 MIoT 客户端核心功能(MQTT 连接、设备管理、属性读写) - 支持云端 API 调用与局域网设备发现(mDNS) - 集成国际化(i18n)多语言支持 - 添加 MIoT 设备规约解析器(spec_parser) - 包含单元测试与使用示例
1.8 KiB
1.8 KiB
R2-01 — spec_parser.go: 属性值处理
缺失方法
MIoTSpecProperty.eval_expr — 表达式求值
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 — 值格式转换
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 — 值精度处理
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{}