mirror of
https://github.com/UtilitechAS/amsreader-firmware.git
synced 2026-01-20 01:55:03 +00:00
202 lines
9.2 KiB
HTML
202 lines
9.2 KiB
HTML
<html>
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>AMS reader</title>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
|
|
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
|
|
<script src="gaugemeter.js"></script>
|
|
<style>
|
|
.GaugeMeter {
|
|
position: Relative;
|
|
text-align: Center;
|
|
overflow: Hidden;
|
|
cursor: Default;
|
|
display: inline-block;
|
|
}
|
|
|
|
.GaugeMeter SPAN, .GaugeMeter B {
|
|
width: 54%;
|
|
position: Absolute;
|
|
text-align: Center;
|
|
display: Inline-Block;
|
|
color: RGBa(0,0,0,.8);
|
|
font-weight: 100;
|
|
font-family: "Open Sans", Arial;
|
|
overflow: Hidden;
|
|
white-space: NoWrap;
|
|
text-overflow: Ellipsis;
|
|
margin: 0 23%;
|
|
}
|
|
|
|
.GaugeMeter[data-style="Semi"] B {
|
|
width: 80%;
|
|
margin: 0 10%;
|
|
}
|
|
|
|
.GaugeMeter S, .GaugeMeter U {
|
|
text-decoration: None;
|
|
font-size: .60em;
|
|
font-weight: 200;
|
|
opacity: .6;
|
|
}
|
|
|
|
.GaugeMeter B {
|
|
color: #000;
|
|
font-weight: 200;
|
|
opacity: .8;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body class="bg-light">
|
|
<main role="main" class="container">
|
|
<header class="navbar navbar-expand navbar-dark flex-column flex-md-row rounded mt-2 mb-4" style="background-color: var(--purple);">
|
|
<a href="/" class=""><h6 class="navbar-brand">AMS reader <small>${version}</small></h6></a>
|
|
<div class="navbar-nav-scroll">
|
|
<ul class="navbar-nav bd-navbar-nav flex-row">
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="/config-meter">Meter</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="/config-wifi">WiFi</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="/config-mqtt">MQTT</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="/config-web">Web</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="/config-system">System</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="flex-row ml-md-auto d-md-flex">
|
|
<div id="esp" class="d-none m-2">ESP</div>
|
|
<div id="han" class="d-none m-2">HAN</div>
|
|
<div id="wifi" class="d-none m-2">WiFi</div>
|
|
<div id="mqtt" class="d-none m-2">MQTT</div>
|
|
</div>
|
|
<ul class="navbar-nav flex-row ml-md-auto d-none d-md-flex">
|
|
<li class="nav-item">
|
|
<a class="nav-link p-2" href="https://github.com/gskjold/AmsToMqttBridge" target="_blank" rel="noopener" aria-label="GitHub">
|
|
<img class="d-inline-block align-text-top" style="width: 2rem; height: 2rem;" src="github.svg"/>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</header>
|
|
<div class="my-3 p-3 bg-white rounded shadow">
|
|
<div class="row">
|
|
<div class="col-md-3">
|
|
<div class="text-center">
|
|
<div id="P" class="SimpleMeter" style="display: inline;">
|
|
${data.P} W
|
|
</div>
|
|
<div id="importMeter" class="GaugeMeter rounded"
|
|
style="display: none;"
|
|
data-size="200px"
|
|
data-text_size="0.11"
|
|
data-width="25"
|
|
data-style="Arch"
|
|
data-theme="Green-Gold-Red"
|
|
data-animationstep="0"
|
|
data-label="${text.import}"
|
|
></div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<div id="U1-row" class="row" style="display: ${display.P1};">
|
|
<div class="col-2">L1</div>
|
|
<div class="col-5 text-right"><span id="U1">${data.U1}</span> V</div>
|
|
<div class="col-5 text-right"><span id="I1">${data.I1}</span> A</div>
|
|
</div>
|
|
<div id="U2-row" class="row" style="display: ${display.P2};">
|
|
<div class="col-2">L2</div>
|
|
<div class="col-5 text-right"><span id="U2">${data.U2}</span> V</div>
|
|
<div class="col-5 text-right"><span id="I2">${data.I2}</span> A</div>
|
|
</div>
|
|
<div id="U3-row" class="row" style="display: ${display.P3};">
|
|
<div class="col-2">L3</div>
|
|
<div class="col-5 text-right"><span id="U3">${data.U3}</span> V</div>
|
|
<div class="col-5 text-right"><span id="I3">${data.I3}</span> A</div>
|
|
</div>
|
|
<hr/>
|
|
<div id="tPI-row" class="row" style="display: ${display.accumulative};">
|
|
<div class="col-6">Active in</div>
|
|
<div class="col-6 text-right"><span id="tPI">${data.tPI}</span> kWh</div>
|
|
</div>
|
|
<div id="tPO-row" class="row" style="display: ${display.accumulative};">
|
|
<div class="col-6">Active out</div>
|
|
<div class="col-6 text-right"><span id="tPO">${data.tPO}</span> kWh</div>
|
|
</div>
|
|
<div id="tQI-row" class="row" style="display: ${display.accumulative};">
|
|
<div class="col-6">Reactive in</div>
|
|
<div class="col-6 text-right"><span id="tQI">${data.tQI}</span> kvarh</div>
|
|
</div>
|
|
<div id="tQO-row" class="row" style="display: ${display.accumulative};">
|
|
<div class="col-6">Reactive out</div>
|
|
<div class="col-6 text-right"><span id="tQO">${data.tQO}</span> kvarh</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<div class="text-center" style="display: ${display.export};">
|
|
<div id="P" class="SimpleMeter" style="display: inline;">
|
|
${data.PO} W
|
|
</div>
|
|
<div id="exportMeter" class="GaugeMeter rounded"
|
|
style="display: none;"
|
|
data-size="200px"
|
|
data-text_size="0.11"
|
|
data-width="25"
|
|
data-style="Arch"
|
|
data-theme="DarkGreen-LightGreen"
|
|
data-animationstep="0"
|
|
data-label="Export"
|
|
></div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<hr class="d-md-inline"/>
|
|
<div class="row">
|
|
<div class="col-6">Vcc</div>
|
|
<div class="col-6 text-right"><span id="vcc">${vcc}</span> V</div>
|
|
</div>
|
|
<div class="row" style="display: ${display.temp};">
|
|
<div class="col-6">Temperature</div>
|
|
<div class="col-6 text-right"><span id="temp">${temp}</span> °C</div>
|
|
</div>
|
|
<div class="row" style="display: none;">
|
|
<div class="col-6">Uptime</div>
|
|
<div class="col-6 text-right"><span id="currentMillis">${currentMillis}</span></div>
|
|
</div>
|
|
<hr/>
|
|
<div class="row">
|
|
<div class="col-6">SSID</div>
|
|
<div class="col-6 text-right"><span id="ssid">${wifi.ssid}</span></div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-6">Channel</div>
|
|
<div class="col-6 text-right"><span id="channel">${wifi.channel}</span></div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-6">RSSI</div>
|
|
<div class="col-6 text-right"><span id="rssi">${wifi.rssi}</span> dBm</div>
|
|
</div>
|
|
<hr class="d-none mqtt-error mqtt-error-1 mqtt-error-2 mqtt-error-3 mqtt-error-4 mqtt-error-5 mqtt-error-6 mqtt-error-7 mqtt-error-8 mqtt-error-9 mqtt-error-10 mqtt-error-11 mqtt-error-12 mqtt-error-13"/>
|
|
<div class="d-none badge badge-danger mqtt-error mqtt-error-1 mqtt-error-2 mqtt-error-5 mqtt-error-6 mqtt-error-7 mqtt-error-8 mqtt-error-9 mqtt-error-12">MQTT communication error (<span id="mqtt-lastError">-</span>)</div>
|
|
<div class="d-none badge badge-danger mqtt-error mqtt-error-3">MQTT failed to connect</div>
|
|
<div class="d-none badge badge-danger mqtt-error mqtt-error-4">MQTT network timeout</div>
|
|
<div class="d-none badge badge-danger mqtt-error mqtt-error-10">MQTT connection denied</div>
|
|
<div class="d-none badge badge-danger mqtt-error mqtt-error-11">MQTT failed to subscribe</div>
|
|
<div class="d-none badge badge-danger mqtt-error mqtt-error-13">MQTT lost connection</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</main>
|
|
<script src="index.js"></script>
|
|
</body>
|
|
</html>
|