格式化节点红色的图表数据

时间:2018-04-28 19:35:48

标签: node-red

这是第一次尝试获取node-red以获取历史信息,并且显示在折线图中。 我得到的信息如下所示,是一系列时间和值的值。

以下信息是我从HTTP GET命令获得的原始数据。然后,我将此信息传递给我的功能块,尝试格式化数据以在图表中查看。

[{" X":" 1525158700957"" Y":" 4.77"},{" X&# 34;:" 1525158701981"," y":" 5.90"},{" x":" 1525158702985" " Y":" 7.03"},{" X":" 1525158704017"" Y":& #34; 8.18"},{" x":" 1525158705041"," y":" 9.31"},{ " X":" 1525158706062"" Y":" 10.45"},{" X":&# 34; 1525158707089"" Y":" 11.58"},{" X":" 1525158708095"" ý":" 12.71"},{" X":" 1525158709121"" Y":" 13.84& #34;},{" X":" 1525158710143"" Y":" 14.98"},{" X& #34;:" 1525158711171"" Y":" 16.11"},{" X":" 1525158712178&#34 ;," Y":" 17.24"},{" X":" 1525158713203"" Y&#34 ;: " 18.37"},{" X":" 1525158714206"" Y":" 19.50"}, {" X":" 1525158715230"" Y":" 20.63"},{&# 34; X":" 1525158716251"" Y":" 21.77"},{" X":" 1525158717270"" Y":" 22.90"},{" X":" 1525158718291"" Y&# 34;:" 24.03"},{" X":" 1525158719315"" Y":" 25.17&#34 ;},{" X":" 1525158720345"" Y":" 26.32"},{"#34 X& ;:" 1525158721370"" Y":" 27.45"},{" X":" 1525158722392&#34 ;, " Y":" 28.59"},{" X":" 1525158723424"" Y":&# 34; 29.74"},{" X":" 1525158724445"" Y":" 30.87"},{& #34; X":" 1525158725468"" Y":" 32.00"},{" X":&#34 ; 1525158726474"" Y":" 33.13"},{" X":" 1525158727501"" Y& #34;:" 34.27"},{" X":" 1525158728528"" Y":" 35.40&# 34;},{" X":" 1525158729532"" Y":" 36.53"},{" X&# 34;:" 1525158730572"" Y":" 37.66"},{" X&#34 ;: " 1525158731569"" Y":" 38.78"},{" X":" 1525158732592"&# 34; Y":" 39.91"},{" X":" 1525158733599"" Y":" 41.04"},{" X":" 1525158734624"" Y":" 42.17"},{&#34 ; X":" 1525158735644"" Y":" 43.32"},{" X":" 1525158736670& #34;" Y":" 44.44"},{" X":" 1525158737673"" Y&#34 ;:" 45.57"},{" X":" 1525158738706"" Y":" 46.70" },{" X":" 1525158739714"" Y":" 47.83"},{" X" :" 1525158740737"" Y":" 48.98"},{" X":" 1525158741763",& #34; Y":" 50.10"},{" X":" 1525158742782"" Y":&#34 ; 51.25"},{" X":" 1525158743803"" Y":" 52.38"},{&# 34; X":" 1525158744826"" Y":" 53.51"},{" X":" 1525158745830"" Y":" 54.64"},{" X":" 15251 58746854"" Y":" 55.76"},{" X":" 1525158747876"" Y&# 34;:" 56.91"},{" X":" 1525158748897"" Y":" 58.04&#34 ;},{" X":" 1525158749921"" Y":" 59.17"},{"#34 X& ;:" 1525158750924"" Y":" 60.30"},{" X":" 1525158751946&#34 ;, " Y":" 61.42"},{" X":" 1525158752973"" Y":&# 34; 62.57"},{" X":" 1525158753993"" Y":" 63.70"},{& #34; X":" 1525158755016"" Y":" 64.84"},{" X":&#34 ; 1525158756039"" Y":" 65.97"},{" X":" 1525158757064"" Y& #34;:" 67.12"},{" X":" 1525158758091"" Y":" 68.25&# 34;},{" X":" 1525158759103"" Y":" 69.38"},{" X&# 34;:" 1525158760127"" Y":" 70.52"},{" X":" 1525158761151" " Y":" 71.65"},{" X":" 1525158762173&# 34;," Y":" 72.80"},{" X":" 1525158763198"" Y" :" 73.92"},{" X":" 1525158764204"" Y":" 75.05"} ,{" X":" 1525158765228"" Y":" 76.18"},{" X&#34 ;: " 1525158766251"" Y":" 77.33"},{" X":" 1525158767276"&# 34; Y":" 78.45"},{" X":" 1525158768300"" Y":" 79.60"},{" X":" 1525158769324"" Y":" 80.73"},{&#34 ; X":" 1525158770356"" Y":" 81.86"}]

我一直在尝试获取此信息,大约100条记录,并在图表上显示。文档表明数据需要采用格式;

[{
"series": ["A", "B", "C"],
"data": [
[{ "x": 1504029632890, "y": 5 },
{ "x": 1504029636001, "y": 4 },
{ "x": 1504029638656, "y": 2 }
],
[{ "x": 1504029633514, "y": 6 },
{ "x": 1504029636622, "y": 7 },
{ "x": 1504029639539, "y": 6 }
],
[{ "x": 1504029634400, "y": 7 },
{ "x": 1504029637959, "y": 7 },
{ "x": 1504029640317, "y": 7 }
]
],
"labels": [""]  
}]

我试图添加'系列'和'数据'带有功能块的元素,像这样;

m = msg.payload;
var output = {labels: ["Temperature"], series: ["B"], data:[m]};
return {payload:[output]};

当我的功能块处理的信息时,我在Pi控制台中没有收到任何错误。在仪表板上,图表轴仅使用当前时间戳绘制,而不绘制其他数据。

这就是结果。

[{"labels":["Temperature"],"series":["B"],"data":["   [{\"x\":\"1525160264800\",\"y\":\"42.38\"},{\"x\":\"1525160265824\",\"y\":\"43.51\"},{\"x\":\"1525160266829\",\"y\":\"44.64\"},{\"x\":\"1525160267852\",\"y\":\"45.76\"},{\"x\":\"1525160268872\",\"y\":\"46.89\"},{\"x\":\"1525160269892\",\"y\":\"48.04\"},{\"x\":\"1525160270913\",\"y\":\"49.17\"},{\"x\":\"1525160271936\",\"y\":\"50.30\"},{\"x\":\"1525160272941\",\"y\":\"51.42\"},{\"x\":\"1525160273962\",\"y\":\"52.55\"},{\"x\":\"1525160274969\",\"y\":\"53.68\"},{\"x\":\"1525160275995\",\"y\":\"54.81\"},{\"x\":\"1525160277003\",\"y\":\"55.94\"},{\"x\":\"1525160278024\",\"y\":\"57.07\"},{\"x\":\"1525160279037\",\"y\":\"58.19\"},{\"x\":\"1525160280063\",\"y\":\"59.34\"},{\"x\":\"1525160281085\",\"y\":\"60.47\"},{\"x\":\"1525160282104\",\"y\":\"61.60\"},{\"x\":\"1525160283129\",\"y\":\"62.74\"},{\"x\":\"1525160284157\",\"y\":\"63.89\"},{\"x\":\"1525160285179\",\"y\":\"65.02\"},{\"x\":\"1525160286206\",\"y\":\"66.16\"},{\"x\":\"1525160287243\",\"y\":\"67.29\"},{\"x\":\"1525160288250\",\"y\":\"68.44\"},{\"x\":\"1525160289270\",\"y\":\"69.57\"},{\"x\":\"1525160290295\",\"y\":\"70.69\"},{\"x\":\"1525160291301\",\"y\":\"71.82\"},{\"x\":\"1525160292329\",\"y\":\"72.97\"},{\"x\":\"1525160293350\",\"y\":\"74.10\"},{\"x\":\"1525160..."]}]

您可以告诉我,我不了解JavaScript并寻找有关如何将原始来源显示在图表中的一些提示。

非常感谢你的帮助。

理查德

1 个答案:

答案 0 :(得分:1)

好的,我看到你现在遇到的问题......感谢你用原始输出更新问题。

您的函数看起来正在完成它需要做的事情,即使用(基本上)这个javascript表达式将整个结果集嵌入到有效负载中:

var output = {labels: ["Temperature"], series: ["B"], data:[msg.payload]};

由于您的查询已经返回具有x / y数据点的对象数组,因此将数据包装在数组中,这是将所有数据加载到图表中所必需的。 但是,正如您所看到的,您正在构建的有效负载中存在大量转义引号 - 这意味着传入的msg.payload不是对象数组,而是JSON字符串。您应该能够在原始查询输出调试节点中看到数据类型(即"字符串",而不是" object")。那么您是否将查询结果连接到JSON节点?如果是这样,它可能会将您的查询对象数组更改为JSON字符串 - 如果不是,只需添加一个JSON节点即可将生成的字符串转换为Javascript对象数组。无论哪种方式,在传递给函数之前验证msg.payload是一个对象数组。

现在,如果您有冒险精神,可以用change节点替换您的函数节点 - 使用下拉选择J:选项(对于JSONata模式)和"设定"此表达式的msg.有效负载:

[
    {
        "series": ["B"],
        "labels": ["Temperature"],
        "data": [
            [payload.{
                "x": $number(x),
                "y": $number(y)
            }]
        ]
    }
]

这种JSONata表达式是我通常用于将javascript数据重构为图表和图形所需的任何格式的表达式。它还会将您的字符串数据强制转换为数字(可能需要也可能不需要)。

你可能想要learn more about the JSONata语法,因为它非常强大,虽然与Javascript完全不同(实际上,它类似于使用XPath进行XML操作,但适用于JSON数据) 。该网站还有一个练习器,您可以使用该练习器根据您自己的数据构建表达式 - 事实上,这是我以前用于format your result data的页面。一个类似的"测试员"也包含在更改节点属性面板中:

change node jsonata tester

在任一工具中,您可以在键入表达式时看到输出数据发生变化 - 非常方便!