mirror of https://github.com/lumapu/ahoy.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
6.1 KiB
148 lines
6.1 KiB
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<title>Live</title>
|
|
<link rel="stylesheet" type="text/css" href="style.css"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
<script type="text/javascript" src="api.js"></script>
|
|
</head>
|
|
<body>
|
|
<div class="topnav">
|
|
<a href="/" class="title">AhoyDTU</a>
|
|
<a href="javascript:void(0);" class="icon" onclick="topnav()">
|
|
<span></span>
|
|
<span></span>
|
|
<span></span>
|
|
</a>
|
|
<div id="topnav" class="hide"></div>
|
|
</div>
|
|
<div id="wrapper">
|
|
<div id="content">
|
|
<div id="live"></div>
|
|
<p>Every <span id="refresh"></span> seconds the values are updated</p>
|
|
</div>
|
|
</div>
|
|
<div id="footer">
|
|
<div class="left">
|
|
AhoyDTU © 2022
|
|
<ul>
|
|
<li><a href="https://discord.gg/WzhxEY62mB" target="_blank">Discord</a></li>
|
|
<li><a href="https://github.com/lumapu/ahoy" target="_blank">Github</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="right">
|
|
<span id="version"></span><br/><br/>
|
|
<a href="https://creativecommons.org/licenses/by-nc-sa/3.0/de" target="_blank" >CC BY-NC-SA 3.0</a>
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">
|
|
var exeOnce = true;
|
|
|
|
function parseSys(obj) {
|
|
if(true == exeOnce)
|
|
parseVersion(obj);
|
|
}
|
|
|
|
function parseIv(obj, root) {
|
|
var ivHtml = [];
|
|
|
|
var tDiv = div(["ch-all", "iv"]);
|
|
tDiv.appendChild(span("Total", ["head"]));
|
|
var total = new Array(root.ch0_fld_names.length).fill(0);
|
|
if(obj.length > 1)
|
|
ivHtml.push(tDiv);
|
|
|
|
for(var iv of obj) {
|
|
main = div(["iv"]);
|
|
var ch0 = div(["ch-iv"]);
|
|
var limit = iv["power_limit_read"] + "%";
|
|
if(limit == "65535%")
|
|
limit = "n/a";
|
|
ch0.appendChild(span(iv["name"] + " Limit " + limit + " | last Alarm: " + iv["last_alarm"], ["head"]));
|
|
|
|
for(var j = 0; j < root.ch0_fld_names.length; j++) {
|
|
var val = Math.round(iv["ch"][0][j] * 100) / 100;
|
|
if(val > 0) {
|
|
var sub = div(["subgrp"]);
|
|
sub.appendChild(span(val + " " + span(root["ch0_fld_units"][j], ["unit"]).innerHTML, ["value"]));
|
|
sub.appendChild(span(root["ch0_fld_names"][j], ["info"]));
|
|
ch0.appendChild(sub);
|
|
|
|
switch(j) {
|
|
case 2: total[j] += val; break; // P_AC
|
|
case 6: total[j] += val; break; // YieldTotal
|
|
case 7: total[j] += val; break; // YieldDay
|
|
case 8: total[j] += val; break; // P_DC
|
|
case 10: total[j] += val; break; // Q_AC
|
|
}
|
|
}
|
|
}
|
|
main.appendChild(ch0);
|
|
|
|
|
|
for(var i = 1; i < (iv["channels"] + 1); i++) {
|
|
var ch = div(["ch"]);
|
|
ch.appendChild(span(("" == iv["ch_names"][i]) ? ("CHANNEL " + i) : iv["ch_names"][i], ["head"]));
|
|
|
|
for(var j = 0; j < root.fld_names.length; j++) {
|
|
var val = Math.round(iv["ch"][i][j] * 100) / 100;
|
|
if(val > 0) {
|
|
ch.appendChild(span(val + " " + span(root["fld_units"][j], ["unit"]).innerHTML, ["value"]));
|
|
ch.appendChild(span(root["fld_names"][j], ["info"]));
|
|
}
|
|
}
|
|
main.appendChild(ch);
|
|
}
|
|
|
|
var ts = div(["ts"]);
|
|
var ageInfo = "Last received data requested at: ";
|
|
if(iv["ts_last_success"] > 0) {
|
|
var date = new Date(iv["ts_last_success"] * 1000);
|
|
ageInfo += date.toLocaleString('de-DE');
|
|
}
|
|
else
|
|
ageInfo += "nothing received";
|
|
|
|
ts.innerHTML = ageInfo;
|
|
|
|
main.appendChild(ts);
|
|
ivHtml.push(main);
|
|
}
|
|
|
|
// total
|
|
if(obj.length > 1) {
|
|
for(var j = 0; j < root.ch0_fld_names.length; j++) {
|
|
var val = total[j];
|
|
if(val > 0) {
|
|
var sub = div(["subgrp"]);
|
|
sub.appendChild(span(val + " " + span(root["ch0_fld_units"][j], ["unit"]).innerHTML, ["value"]));
|
|
sub.appendChild(span(root["ch0_fld_names"][j], ["info"]));
|
|
tDiv.appendChild(sub);
|
|
}
|
|
}
|
|
}
|
|
|
|
document.getElementById("live").replaceChildren(...ivHtml);
|
|
}
|
|
|
|
function parse(obj) {
|
|
if(null != obj) {
|
|
if(true == exeOnce)
|
|
parseMenu(obj["menu"]);
|
|
parseSys(obj["system"]);
|
|
parseIv(obj["inverter"], obj);
|
|
document.getElementById("refresh").innerHTML = obj["refresh_interval"];
|
|
if(true == exeOnce) {
|
|
window.setInterval("getAjax('/api/live', parse)", obj["refresh_interval"] * 1000);
|
|
exeOnce = false;
|
|
}
|
|
}
|
|
else
|
|
document.getElementById("refresh").innerHTML = "n/a";
|
|
}
|
|
|
|
getAjax("/api/live", parse);
|
|
</script>
|
|
</body>
|
|
</html>
|
|
|