Added model memory
Before Width: | Height: | Size: 320 KiB |
BIN
data/CG_scale_mechanics.png.gz
Normal file
BIN
data/airplane.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
data/home.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
@ -11,6 +11,8 @@
|
||||
<script>
|
||||
var CG_trans_visible = true;
|
||||
var batVolt_visible = true;
|
||||
var curModelName = "";
|
||||
|
||||
function getHead(){
|
||||
var request = new XMLHttpRequest();
|
||||
request.onreadystatechange = function(){
|
||||
@ -34,6 +36,7 @@
|
||||
if(this.responseText != null){
|
||||
var responseString = this.responseText;
|
||||
var value = responseString.split("&");
|
||||
|
||||
if(value[0] == "2"){
|
||||
CG_trans_visible = false;
|
||||
document.getElementById("cglrContainer").outerHTML = "";
|
||||
@ -42,6 +45,16 @@
|
||||
batVolt_visible = false;
|
||||
document.getElementById("batContainer").outerHTML = "";
|
||||
}
|
||||
curModelName = value[16];
|
||||
if (curModelName != "") {
|
||||
document.getElementById("modelName").innerHTML = curModelName;
|
||||
document.getElementById("saveButton").classList.remove('disabled');
|
||||
document.getElementById("weightTotalSaved").innerHTML = value[17];
|
||||
document.getElementById("CG_lengthSaved").innerHTML = value[18];
|
||||
if(CG_trans_visible == true){
|
||||
document.getElementById("CG_transSaved").innerHTML = value[19];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -56,7 +69,7 @@
|
||||
var responseString = this.responseText;
|
||||
var value = responseString.split("&");
|
||||
document.getElementById("weightTotal").innerHTML = value[0];
|
||||
document.getElementById("CG_length").innerHTML = value[1];
|
||||
document.getElementById("CG_length").innerHTML = value[1];
|
||||
if(CG_trans_visible == true){
|
||||
document.getElementById("CG_trans").innerHTML = value[2];
|
||||
}
|
||||
@ -70,55 +83,98 @@
|
||||
request.send();
|
||||
setTimeout('getValue()', 1000);
|
||||
}
|
||||
function saveModel(){
|
||||
if (curModelName != "") {
|
||||
var request = new XMLHttpRequest();
|
||||
request.onreadystatechange = function(){
|
||||
if(this.readyState == 4 && this.status == 200){
|
||||
alert(curModelName + " saved");
|
||||
location.reload();
|
||||
}else if(this.readyState == 4 && this.status == 404){
|
||||
alert("Model not saved !");
|
||||
}
|
||||
}
|
||||
request.open("GET", "saveModel?modelname=" + curModelName, true);
|
||||
request.send();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body onload=getValue()>
|
||||
<script>
|
||||
getHead();
|
||||
getParameter();
|
||||
</script>
|
||||
<body>
|
||||
<nav class="navbar navbar-dark fixed-top bg-dark">
|
||||
<div class="container-fluid">
|
||||
<div class="navbar-header">
|
||||
<a class="navbar-brand" href="#"><span id="ssid"></span></a>"
|
||||
<a class="navbar-brand" href="#"><span id="ssid"></span></a>
|
||||
</div>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<button type="button" onclick="location.href = '/settings.html'" class="btn btn-danger">
|
||||
<img src="settings.png" alt="" style="width:auto;height:30px">
|
||||
</button>
|
||||
<form class="form-inline">
|
||||
<button type="button" onclick="location.href = '/models.html'" class="btn btn-primary navbar-btn mx-2">
|
||||
<img src="airplane.png" alt="" style="width:auto;height:30px">
|
||||
<span id="modelName"></span>
|
||||
</button>
|
||||
<button type="button" onclick="location.href = '/settings.html'" class="btn btn-danger navbar-btn">
|
||||
<img src="settings.png" alt="" style="width:auto;height:30px">
|
||||
</button>
|
||||
</form>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
<br><br><br>
|
||||
<main role="main" class="container">
|
||||
<main role="main" class="container" style="margin-top:100px">
|
||||
<div class="jumbotron">
|
||||
<div class="container" id="wgContainer">
|
||||
<div class="row mt-3">
|
||||
<div class="col-xs-6"><img src="weight.png" class="pull-left mr-4" alt="Weight" style="width:auto;height:50px"></div>
|
||||
<div class="col-xs-6 d-flex align-items-center"><font size="6"><span id="weightTotal">-</span></font></div>
|
||||
<div class="col-xs-6 d-flex align-items-center">
|
||||
<font size="6">
|
||||
<span class="ml-4 mr-4" id="weightTotal">-</span>
|
||||
</font>
|
||||
<small class="form-text text-muted" id="weightTotalSaved"></small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container" id="cgContainer">
|
||||
<div class="row mt-3">
|
||||
<div class="col-xs-6"><img src="cg.png" class="pull-left mr-4" alt="CG" style="width:auto;height:50px"></div>
|
||||
<div class="col-xs-6 d-flex align-items-center"><font size="6"><span id="CG_length">-</span></font></div>
|
||||
<div class="col-xs-6 d-flex align-items-center">
|
||||
<font size="6">
|
||||
<span class="ml-4 mr-4" id="CG_length">-</span>
|
||||
</font>
|
||||
<small class="form-text text-muted" id="CG_lengthSaved"></small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container" id="cglrContainer">
|
||||
<div class="row mt-3">
|
||||
<div class="col-xs-6"><img src="cglr.png" class="pull-left mr-4" alt="CG left/right" style="width:auto;height:50px"></div>
|
||||
<div class="col-xs-6 d-flex align-items-center"><font size="6"><span id="CG_trans">-</span></font></div>
|
||||
<div class="col-xs-6 d-flex align-items-center">
|
||||
<font size="6">
|
||||
<span class="ml-4 mr-4" id="CG_trans">-</span>
|
||||
</font>
|
||||
<small class="form-text text-muted" id="CG_transSaved"></small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container" id="batContainer">
|
||||
<div class="row mt-3">
|
||||
<div class="col-xs-6"><img src="battery.png" class="pull-left mr-4" alt="Battery" style="width:auto;height:50px"></div>
|
||||
<div class="col-xs-6 d-flex align-items-center"><font size="6"><span id="batVolt">-</span></font></div>
|
||||
<div class="col-xs-6 d-flex align-items-center">
|
||||
<font size="6">
|
||||
<span class="ml-4 mr-4" id="batVolt">-</span>
|
||||
</font>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container"><font size="6"><span id="errMsg"></span></font></div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<button class="btn btn-success btn-lg disabled" onclick="saveModel()" id="saveButton">Save</button>
|
||||
</div>
|
||||
</main>
|
||||
<p><font size="2"><center>(c) 2019 M. Lehmann - Version: <span id="cgscaleVersion">0.0</span></center></font></p>
|
||||
<script>
|
||||
getHead();
|
||||
getParameter();
|
||||
getValue();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
BIN
data/jquery-3.3.1.slim.min.js.gz
Normal file
199
data/models.html
Executable file
@ -0,0 +1,199 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="M. Lehmann">
|
||||
<title>CG scale by M. Lehmann</title>
|
||||
<link href="/bootstrap.min.css" rel="stylesheet">
|
||||
<script src="/bootstrap.min.js"></script>
|
||||
<script src="/jquery-3.3.1.slim.min.js"></script>
|
||||
<script>
|
||||
var CG_trans_visible = true;
|
||||
var curModelName = "";
|
||||
|
||||
function getHead(){
|
||||
var request = new XMLHttpRequest();
|
||||
request.onreadystatechange = function(){
|
||||
if(this.readyState == 4 && this.status == 200){
|
||||
if(this.responseText != null){
|
||||
var responseString = this.responseText;
|
||||
var value = responseString.split("&");
|
||||
document.getElementById("ssid").innerHTML = value[0];
|
||||
document.getElementById("cgscaleVersion").innerHTML = value[2];
|
||||
}
|
||||
}
|
||||
}
|
||||
request.open("GET", "getHead", true);
|
||||
request.send();
|
||||
}
|
||||
function getParameter(){
|
||||
var request = new XMLHttpRequest();
|
||||
request.onreadystatechange = function(){
|
||||
if(this.readyState == 4 && this.status == 200){
|
||||
if(this.responseText != null){
|
||||
var responseString = this.responseText;
|
||||
var value = responseString.split("&");
|
||||
if(value[0] == "2"){
|
||||
CG_trans_visible = false;
|
||||
}
|
||||
curModelName = value[16];
|
||||
}
|
||||
}
|
||||
}
|
||||
request.open("GET", "getParameter", true);
|
||||
request.send();
|
||||
}
|
||||
function getModels(){
|
||||
var request = new XMLHttpRequest();
|
||||
request.onreadystatechange = function(){
|
||||
if(this.readyState == 4 && this.status == 200){
|
||||
var root = JSON.parse(this.responseText);
|
||||
var table = document.getElementById("models");
|
||||
if(CG_trans_visible == false){
|
||||
document.getElementById("cgLRrow").outerHTML = "";
|
||||
|
||||
}
|
||||
for (name in root) {
|
||||
var row = table.insertRow();
|
||||
var cellName = row.insertCell(0);
|
||||
var cellWeight = row.insertCell(1);
|
||||
var cellCG = row.insertCell(2);
|
||||
cellName.innerHTML = name;
|
||||
cellWeight.innerHTML = root[name].wt;
|
||||
cellCG.innerHTML = root[name].cg;
|
||||
if(CG_trans_visible == true){
|
||||
var cellcglr = row.insertCell(3);
|
||||
var cellButton = row.insertCell(4);
|
||||
cellcglr.innerHTML = root[name].cglr;
|
||||
}else{
|
||||
var cellButton = row.insertCell(3);
|
||||
}
|
||||
if(name != curModelName){
|
||||
var htmlbutton = '<div class="btn-group"><button type="button" onclick="openModel(\'';
|
||||
htmlbutton += name;
|
||||
htmlbutton += '\')" class="btn btn-success">Open</button><button type="button" onclick="deleteModel(\'';
|
||||
htmlbutton += name;
|
||||
htmlbutton += '\')" class="btn btn-danger">Delete</button></div>';
|
||||
cellButton.innerHTML = htmlbutton;
|
||||
}else{
|
||||
row.setAttribute("class", "table-active");
|
||||
}
|
||||
}
|
||||
}else if(this.readyState == 4 && this.status == 404){
|
||||
document.getElementById("backup").outerHTML = "";
|
||||
//alert("No models saved !");
|
||||
}
|
||||
}
|
||||
request.open("GET", "models.json", true);
|
||||
request.send();
|
||||
}
|
||||
function saveModel(){
|
||||
var modelname = prompt("Please enter new model name:");
|
||||
if (modelname != "") {
|
||||
var request = new XMLHttpRequest();
|
||||
request.onreadystatechange = function(){
|
||||
if(this.readyState == 4 && this.status == 200){
|
||||
location.reload();
|
||||
}else if(this.readyState == 4 && this.status == 404){
|
||||
alert("Model not saved !");
|
||||
}
|
||||
}
|
||||
request.open("GET", "saveModel?modelname=" + modelname, true);
|
||||
request.send();
|
||||
}
|
||||
}
|
||||
function openModel(modelname){
|
||||
if (modelname != "") {
|
||||
var request = new XMLHttpRequest();
|
||||
request.onreadystatechange = function(){
|
||||
if(this.readyState == 4 && this.status == 200){
|
||||
location.reload();
|
||||
}else if(this.readyState == 4 && this.status == 404){
|
||||
alert("Model not open !");
|
||||
}
|
||||
}
|
||||
request.open("GET", "openModel?modelname=" + modelname, true);
|
||||
request.send();
|
||||
}
|
||||
}
|
||||
function deleteModel(modelname){
|
||||
if (modelname != "" && confirm("Do you want to delete: " + modelname + "?")){
|
||||
var request = new XMLHttpRequest();
|
||||
request.onreadystatechange = function(){
|
||||
if(this.readyState == 4 && this.status == 200){
|
||||
location.reload();
|
||||
}else if(this.readyState == 4 && this.status == 404){
|
||||
alert("Model not deleted !");
|
||||
}
|
||||
}
|
||||
request.open("GET", "deleteModel?modelname=" + modelname, true);
|
||||
request.send();
|
||||
}
|
||||
}
|
||||
function download(file)
|
||||
{
|
||||
window.location=file;
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-dark fixed-top bg-dark">
|
||||
<div class="container-fluid">
|
||||
<div class="navbar-header">
|
||||
<a class="navbar-brand" href="#"><span id="ssid"></span></a>
|
||||
</div>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<form class="form-inline">
|
||||
<button type="button" onclick="location.href = '/'" class="btn btn-danger navbar-btn mx-2">
|
||||
<img src="home.png" alt="" style="width:auto;height:30px">
|
||||
</button>
|
||||
<button type="button" onclick="location.href = '/settings.html'" class="btn btn-danger navbar-btn">
|
||||
<img src="settings.png" alt="" style="width:auto;height:30px">
|
||||
</button>
|
||||
</form>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
<main role="main" class="container" style="margin-top:100px">
|
||||
<table class="table" id="models">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Name</th>
|
||||
<th scope="col">Weight [g]</th>
|
||||
<th scope="col">CG [mm]</th>
|
||||
<th scope="col" id="cgLRrow">CG left-right [mm]</th>
|
||||
<th scope="col"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
<button type="button" onclick="saveModel()" class="btn btn-primary btn-lg">New model</button>
|
||||
<form method="post" enctype="multipart/form-data">
|
||||
<div class="custom-file mt-5">
|
||||
<input type="file" class="custom-file-input" id="customFile" name="filename">
|
||||
<label class="custom-file-label" for="customFile">Restore file...</label>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$('.custom-file-input').on('change', function() {
|
||||
let fileName = $(this).val().split('\\').pop();
|
||||
$(this).next('.custom-file-label').addClass("selected").html(fileName);
|
||||
});
|
||||
</script>
|
||||
|
||||
<div class="mt-4">
|
||||
<a class="btn btn-outline-success btn-lg" id="backup" role="button" href="models.json" download="models.json">Backup</a>
|
||||
<button type="submit" class="btn btn-outline-danger btn-lg">Restore</button>
|
||||
</div>
|
||||
</form>
|
||||
</main>
|
||||
<p><font size="2"><center>(c) 2019 M. Lehmann - Version: <span id="cgscaleVersion">0.0</span></center></font></p>
|
||||
<script>
|
||||
getHead();
|
||||
getParameter();
|
||||
getModels();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
@ -10,6 +10,7 @@
|
||||
<script src="/bootstrap.min.js"></script>
|
||||
<script>
|
||||
var CG_trans_visible = true;
|
||||
|
||||
function getHead(){
|
||||
var request = new XMLHttpRequest();
|
||||
request.onreadystatechange = function(){
|
||||
@ -18,7 +19,6 @@
|
||||
var responseString = this.responseText;
|
||||
var value = responseString.split("&");
|
||||
document.getElementById("ssid").innerHTML = value[0];
|
||||
//document.getElementById("errMsg").innerHTML = value[1];
|
||||
document.getElementById("cgscaleVersion").innerHTML = value[2];
|
||||
}
|
||||
}
|
||||
@ -68,6 +68,7 @@
|
||||
setValue("password_STA", value[13]);
|
||||
setValue("ssid_AP", value[14]);
|
||||
setValue("password_AP", value[15]);
|
||||
document.getElementById("modelName").innerHTML = value[16];
|
||||
if(value[0] == "2"){
|
||||
CG_trans_visible = false;
|
||||
document.getElementById("lc3_div").outerHTML = "";
|
||||
@ -117,52 +118,31 @@
|
||||
data += "&ssid_AP=" + document.getElementById("ssid_AP").value;
|
||||
data += "&password_AP=" + document.getElementById("password_AP").value;
|
||||
var request = new XMLHttpRequest();
|
||||
request.open("GET", "saveParameter" + data, true);
|
||||
request.onreadystatechange = function(){
|
||||
if(this.readyState == 4 && this.status == 200){
|
||||
if(this.responseText == "ok"){
|
||||
alert("Parameters saved");
|
||||
getParameter();
|
||||
}else{
|
||||
alert("Save parameter failed !");
|
||||
}
|
||||
alert("Parameters saved");
|
||||
getParameter();
|
||||
}else if(this.readyState == 4 && this.status == 404){
|
||||
alert("Save parameter failed !");
|
||||
}
|
||||
}
|
||||
request.open("GET", "saveParameter" + data, true);
|
||||
request.send();
|
||||
}
|
||||
function autoCalibrate(){
|
||||
alert("Please put the reference weight on the scale.");
|
||||
var request = new XMLHttpRequest();
|
||||
request.open("GET", "autoCalibrate", true);
|
||||
request.onreadystatechange = function(){
|
||||
if(this.readyState == 4 && this.status == 200){
|
||||
if(this.responseText == "ok"){
|
||||
alert("Calibration successful");
|
||||
getParameter();
|
||||
}else{
|
||||
alert("Calibration failed !");
|
||||
}
|
||||
alert("Calibration successful");
|
||||
getParameter();
|
||||
}else if(this.readyState == 4 && this.status == 404){
|
||||
alert("Calibration failed !");
|
||||
}
|
||||
}
|
||||
request.open("GET", "autoCalibrate", true);
|
||||
request.send();
|
||||
}
|
||||
function resetDefault(){
|
||||
if (confirm("Reset to factory defaults ?")) {
|
||||
var request = new XMLHttpRequest();
|
||||
request.open("GET", "resetDefault", true);
|
||||
request.onreadystatechange = function(){
|
||||
if(this.readyState == 4 && this.status == 200){
|
||||
if(this.responseText == "ok"){
|
||||
alert("Reset to factory defaults successful");
|
||||
getParameter();
|
||||
}else{
|
||||
alert("Reset to factory defaults failed !");
|
||||
}
|
||||
}
|
||||
}
|
||||
request.send();
|
||||
}
|
||||
}
|
||||
function setValue(id, value)
|
||||
{
|
||||
var element = document.getElementById(id);
|
||||
@ -174,24 +154,26 @@
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body onload=getRawValue()>
|
||||
<script>
|
||||
getHead();
|
||||
getWiFiNetworks();
|
||||
getParameter();
|
||||
</script>
|
||||
<body>
|
||||
<nav class="navbar navbar-dark fixed-top bg-dark">
|
||||
<div class="container-fluid">
|
||||
<div class="navbar-header">
|
||||
<a class="navbar-brand" href="#"><span id="ssid"></span></a>"
|
||||
<a class="navbar-brand" href="#"><span id="ssid"></span></a>
|
||||
</div>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<button type="button" onclick="location.href = '/'" class="btn btn-danger">Home</button>
|
||||
<form class="form-inline">
|
||||
<button type="button" onclick="location.href = '/models.html'" class="btn btn-primary navbar-btn mx-2">
|
||||
<img src="airplane.png" alt="" style="width:auto;height:30px">
|
||||
<span id="modelName"></span>
|
||||
</button>
|
||||
<button type="button" onclick="location.href = '/'" class="btn btn-danger navbar-btn">
|
||||
<img src="home.png" alt="" style="width:auto;height:30px">
|
||||
</button>
|
||||
</form>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
<br><br><br>
|
||||
<main role="main" class="container">
|
||||
<main role="main" class="container" style="margin-top:100px">
|
||||
<h3>WiFi settings</h3>
|
||||
<div class="form-group">
|
||||
<label>Home WiFi name (SSID):</label>
|
||||
@ -271,9 +253,8 @@
|
||||
</select>
|
||||
</div>
|
||||
<br><br>
|
||||
<button class="btn btn-success btn-lg" onclick="saveParameter()">save</button>
|
||||
<button class="btn btn-primary btn-lg" onclick="autoCalibrate()">auto calibrate</button>
|
||||
<button class="btn btn-danger btn-lg" onclick="resetDefault()">reset</button>
|
||||
<button class="btn btn-success btn-lg" onclick="saveParameter()">Save</button>
|
||||
<button class="btn btn-primary btn-lg" onclick="autoCalibrate()">Auto calibrate</button>
|
||||
<img src="CG_scale_mechanics.png" class="pull-left mr-4" alt="mechanics" style="width:100%">
|
||||
<font size="4">
|
||||
<div>
|
||||
@ -287,9 +268,13 @@
|
||||
</div>
|
||||
</font>
|
||||
<br><br>
|
||||
<!--<p><font size="4"><center>Lc1: <span id="lc1">-</span> Lc2: <span id="lc2">-</span><div id="lc3_div"> Lc3: <span id="lc3">-</span></div></center></font></p>-->
|
||||
</main>
|
||||
<!--<div class="container"><font size="6"><span id="errMsg">-</span></font></div>-->
|
||||
<p><font size="2"><center>(c) 2019 M. Lehmann - Version: <span id="cgscaleVersion">0.0</span></center></font></p>
|
||||
<script>
|
||||
getHead();
|
||||
getWiFiNetworks();
|
||||
getParameter();
|
||||
getRawValue();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 2.5 KiB |
0
data/weight.png
Normal file → Executable file
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |