对于我们的能源仪表板,我已经制作了一个带有2个仪表的小部件,它们具有我们太阳能逆变器的有功功率值。我们使用数据记录器,它能够通过http请求发送带有所需参数的JSON字符串。在此脚本中,您会看到一个var SolarB(这是以http请求为例的实际JSON字符串)。这是为了检查值是否正确编码并显示在仪表中。 SolarA是现场json请求。这应该是SolarA和B的最终代码,以便建立实时连接。我已经尝试了几种方法来实现这项工作,在互联网和本论坛上搜索答案,但没有成功。我认为这是一个简单的问题,但它令我头疼......任何帮助都表示赞赏。
蒂亚
彼得<!doctype html>
<html>
<head>
<title>Real time Data aquisition Solar inverters</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style>
body {
text-align: center;
}
#g1, #g2 {
width:250px; height:180px;
display: inline-block;
margin: 1em;
}
p {
display: block;
width: 550px;
margin: 2em auto;
text-align: left;
}
</style>
<script src="resources/js/raphael.2.1.0.min.js"></script>
<script src="resources/js/justgage.1.0.1.min.js"></script>
<script src="//code.jquery.com/jquery-1.11.0.js"></script>
<script>
{
var SolarA = ""
$.getJSON("//192.168.16.201/rest/devices/2912280908/values/variables/596355681/instant", function(data)
{ SolarA = data;
});
var SolarB = [{ "time": 1396898708, "value": 11.748850e+00, "unit": "kW" }, ];
var g1, g2;
window.onload = function(){
var g1 = new JustGage({
id: "g1",
value: document.getElementById.innerHTML=SolarA[0].value,
min: 0,
max: 30000,
title: "Production A",
label: document.getElementById.innerHTML=SolarA[0].unit
});
var g2 = new JustGage({
id: "g2",
value: document.getElementById.innerHTML=SolarB[0].value,
min: 0,
max: 13800,
title: "Production B",
label: document.getElementById.innerHTML=SolarB[0].unit
});
};
};
</script>
</head>
<body>
<div id="g1"></div>
<div id="g2"></div>
</p>
</body>
</html>
答案 0 :(得分:0)
我怀疑错误的是你在数据可用之前创建了仪表。
可能在创建仪表后返回您的数据,因此事件的顺序如下:
$.getJSON("//192.168.16.201 ...
被调用,onload
函数已执行,var g1 = new JustGage({ ...
和var g2 = new JustGage({ ...
已创建function(data){ SolarA = data; }
称为请注意,在JS中,回调不会阻止脚本的执行,而是将来某个时候执行,因此在{{1}之后,您不能依赖它们在命令中执行}。
如果是这种情况,解决问题的方法是将量表创建转移到回调函数中,这样:
$.getJSON
请注意,问题也可能是当您从不在<script>
$(function(){
$.getJSON("//192.168.16.201/rest/devices/2912280908/values/variables/596355681/instant",
function(data) {
new JustGage({
id: "g1",
value: document.getElementById.innerHTML = data[0].value,
min: 0,
max: 30000,
title: "Production A",
label: document.getElementById.innerHTML = data[0].unit
});
}
);
});
</script>
中的计算机查看您的网站时,数据根本无法访问 - JavaScript在客户端工作。在这种情况下,您需要编写一个客户端 - 服务器webapp。
您也可能尝试执行cross site HTTP request