leung 发表于 2024-3-8 02:26:54

Node-RED正确传递中文字符串

本帖最后由 leung 于 2024-3-8 15:33 编辑

我的空气净化器fan_level是select实体,可选一档至五档,开发者工具查过确实是中文字符(应该是被xiaomi-miot翻译过)
select.bj352_y106m_58c8_fan_level
options:
- 一档
- 二档
- 三档
- 四档
- 五档为加入homekit使用,利用function节点,将homekit的1-17级映射为一档至五档(下为代码)
//风速档位映射
var value = parseInt(msg.payload.RotationSpeed);

// 使用 if...else if...else 语句将数值映射到档位
if (value >= 1 && value <= 4) {
    msg.payload = "一档";
} else if (value <= 7) {
    msg.payload = "二档";
} else if (value <= 10) {
    msg.payload = "三档";
} else if (value <= 14) {
    msg.payload = "四档";
} else if (value > 14) {
    msg.payload = "五档";
} else {
    msg.payload = "无效的数值";
}

// 将处理后的结果传递给下一个节点
return msg;
问题出在最后call service上,一至五档传递到msg.payload时,由于是中文字符,必须用双引号引住(如“一档”),而select option下数据填充需要中文字符没有双引号(如一档)才能正常操作,否则报错error

{"option":"msg.payload"} 相当于以下写法可以执行操作{"option":"三档"}以下写法不能执行
{"option":""三档""}怎么才能将传递到msg.payload时中文字符不带双引号?或者有什么写法规定?###########################################################################
二楼大哥提点,数据一栏语法错误,修改为以下代码,完美执行
{"option": msg.payload}版主看到可以帮我移动到『HomeAssistant』求助&解答专区 【已解决】

alei643 发表于 2024-3-8 07:48:36

{"option":"msg.payload"}中的msg.payload为什么要加双引号?如果你要引用msg.payload中的值,正确写法应该是{"option": msg.payload}

leung 发表于 2024-3-8 15:30:11

alei643 发表于 2024-3-8 07:48
{"option":"msg.payload"}中的msg.payload为什么要加双引号?如果你要引用msg.payload中的值,正确写法应 ...

原来如此,我不太懂node red里面的语法,直接引用例子改写的。
测试了一下,完美实现了,谢谢~

fung1006 发表于 2024-3-11 13:18:12

另一写法就是左面改json格式然后
{"option": {{msg.payload}}}
页: [1]
查看完整版本: Node-RED正确传递中文字符串