kopia lustrzana https://github.com/DL7AD/pecanpico10
Added more charts
rodzic
644d466197
commit
5c461e9968
|
@ -143,6 +143,88 @@ var lightOptions = {
|
||||||
chartArea: area
|
chartArea: area
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Chart 7
|
||||||
|
var ioChart;
|
||||||
|
var dataIO;
|
||||||
|
var ioOptions = {
|
||||||
|
//explorer: scroll,
|
||||||
|
height: 250,
|
||||||
|
series: {
|
||||||
|
0: {targetAxisIndex: 0},
|
||||||
|
1: {targetAxisIndex: 0},
|
||||||
|
2: {targetAxisIndex: 0},
|
||||||
|
3: {targetAxisIndex: 0},
|
||||||
|
4: {targetAxisIndex: 0}
|
||||||
|
},
|
||||||
|
vAxes: {
|
||||||
|
0: {
|
||||||
|
viewWindow: {min: 0, max: 9},
|
||||||
|
ticks: [
|
||||||
|
{v: 0, f: 'Fail | N/A'},
|
||||||
|
{v: 1, f: 'BMEe1 OK'},
|
||||||
|
{v: 2, f: 'Fail | N/A'},
|
||||||
|
{v: 3, f: 'BMEe1 OK'},
|
||||||
|
{v: 4, f: 'Fail | N/A'},
|
||||||
|
{v: 5, f: 'BMEi1 OK'},
|
||||||
|
{v: 6, f: 'Fail'},
|
||||||
|
{v: 7, f: 'OV5640 OK'},
|
||||||
|
{v: 8, f: 'Fail|unused'},
|
||||||
|
{v: 9, f: 'GPS OK'}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
position: 'top'
|
||||||
|
},
|
||||||
|
hAxis: xAxis,
|
||||||
|
chartArea: area
|
||||||
|
};
|
||||||
|
|
||||||
|
// Chart 8
|
||||||
|
var io2Chart;
|
||||||
|
var dataIO2;
|
||||||
|
var io2Options = {
|
||||||
|
//explorer: scroll,
|
||||||
|
height: 250,
|
||||||
|
series: {
|
||||||
|
0: {targetAxisIndex: 0},
|
||||||
|
1: {targetAxisIndex: 0}
|
||||||
|
},
|
||||||
|
vAxes: {
|
||||||
|
0: {
|
||||||
|
viewWindow: {min: 0, max: 9},
|
||||||
|
ticks: [
|
||||||
|
{v: 0, f: 'Fail'},
|
||||||
|
{v: 1, f: 'I2Ce OK'},
|
||||||
|
{v: 2, f: 'Fail'},
|
||||||
|
{v: 3, f: 'I2Ci OK'}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
position: 'top'
|
||||||
|
},
|
||||||
|
hAxis: xAxis,
|
||||||
|
chartArea: area
|
||||||
|
};
|
||||||
|
|
||||||
|
// Chart 9
|
||||||
|
var idChart;
|
||||||
|
var dataID;
|
||||||
|
var idOptions = {
|
||||||
|
//explorer: scroll,
|
||||||
|
height: 250,
|
||||||
|
series: {
|
||||||
|
0: {targetAxisIndex: 0},
|
||||||
|
1: {targetAxisIndex: 1}
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
position: 'top'
|
||||||
|
},
|
||||||
|
hAxis: xAxis,
|
||||||
|
chartArea: area
|
||||||
|
};
|
||||||
|
|
||||||
function number_format(number, decimals, decPoint, thousandsSep) { // eslint-disable-line camelcase
|
function number_format(number, decimals, decPoint, thousandsSep) { // eslint-disable-line camelcase
|
||||||
// discuss at: http://locutus.io/php/number_format/
|
// discuss at: http://locutus.io/php/number_format/
|
||||||
// original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
|
// original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
|
||||||
|
@ -267,6 +349,30 @@ function updateData() {
|
||||||
dataLight.addColumn('number', "LIGHT");
|
dataLight.addColumn('number', "LIGHT");
|
||||||
lightChart = new google.visualization.LineChart(document.getElementById('lightDiv'));
|
lightChart = new google.visualization.LineChart(document.getElementById('lightDiv'));
|
||||||
|
|
||||||
|
// Chart 7
|
||||||
|
dataIO = new google.visualization.DataTable();
|
||||||
|
dataIO.addColumn('date', 'Time');
|
||||||
|
dataIO.addColumn('number', "GPS");
|
||||||
|
dataIO.addColumn('number', "PAC1720");
|
||||||
|
dataIO.addColumn('number', "BME280i1");
|
||||||
|
dataIO.addColumn('number', "BME280e1");
|
||||||
|
dataIO.addColumn('number', "BME280e2");
|
||||||
|
ioChart = new google.visualization.LineChart(document.getElementById('ioDiv'));
|
||||||
|
|
||||||
|
// Chart 8
|
||||||
|
dataIO2 = new google.visualization.DataTable();
|
||||||
|
dataIO2.addColumn('date', 'Time');
|
||||||
|
dataIO2.addColumn('number', "I2C int");
|
||||||
|
dataIO2.addColumn('number', "I2C ext");
|
||||||
|
io2Chart = new google.visualization.LineChart(document.getElementById('io2Div'));
|
||||||
|
|
||||||
|
// Chart 9
|
||||||
|
dataID = new google.visualization.DataTable();
|
||||||
|
dataID.addColumn('date', 'Time');
|
||||||
|
dataID.addColumn('number', "RESET");
|
||||||
|
dataID.addColumn('number', "ID");
|
||||||
|
idChart = new google.visualization.LineChart(document.getElementById('idDiv'));
|
||||||
|
|
||||||
init = true;
|
init = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -409,9 +515,20 @@ function updateData() {
|
||||||
$('#' + key).text(year + '-' + month + '-' + date + ' ' + hour + ':' + min + ':' + sec);
|
$('#' + key).text(year + '-' + month + '-' + date + ' ' + hour + ':' + min + ':' + sec);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'pac_pbat':
|
|
||||||
case 'pac_psol':
|
case 'pac_psol':
|
||||||
$('#' + key).text(number_format(d/10, 1) + 'mW');
|
$('#pac_psol').text(number_format(d/10, 1) + 'mW');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'pac_pbat':
|
||||||
|
$('#pac_pbat').text(number_format(d/10, 1) + 'mW');
|
||||||
|
if(d == 0) {
|
||||||
|
$('#pwrdiv').css('background', 'url(power.png) no-repeat #ccdaec');
|
||||||
|
} else if(d < 0) {
|
||||||
|
$('#pwrdiv').css('background', 'url(power_charging.png) no-repeat #ccdaec');
|
||||||
|
} else {
|
||||||
|
$('#pwrdiv').css('background', 'url(power_discharging.png) no-repeat #ccdaec');
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'sys_time':
|
case 'sys_time':
|
||||||
|
@ -477,6 +594,9 @@ function updateData() {
|
||||||
if(dataGPS) dataGPS.addRow([null,null,null,null]);
|
if(dataGPS) dataGPS.addRow([null,null,null,null]);
|
||||||
if(dataLight) dataLight.addRow([null,null]);
|
if(dataLight) dataLight.addRow([null,null]);
|
||||||
if(dataAlt) dataAlt.addRow([null,null,null,null,null]);
|
if(dataAlt) dataAlt.addRow([null,null,null,null,null]);
|
||||||
|
if(dataIO) dataIO.addRow([null,null,null,null,null,null]);
|
||||||
|
if(dataIO2) dataIO2.addRow([null,null,null]);
|
||||||
|
if(dataID) dataID.addRow([null,null,null]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(dataBattery)
|
if(dataBattery)
|
||||||
|
@ -507,6 +627,24 @@ function updateData() {
|
||||||
]);
|
]);
|
||||||
if(data['gps_lock'] < 2) lastValidGPSalt = data['gps_alt'];
|
if(data['gps_lock'] < 2) lastValidGPSalt = data['gps_alt'];
|
||||||
}
|
}
|
||||||
|
if(dataIO) {
|
||||||
|
dataIO.addRow([
|
||||||
|
time,
|
||||||
|
data['gps_lock'] < 2 ? 9 : 8,
|
||||||
|
data['err_pac1720'] ? 6 : 7,
|
||||||
|
data['err_bme280_i1'] ? 4 : 5,
|
||||||
|
data['err_bme280_e1'] ? 2 : 3,
|
||||||
|
data['err_bme280_e2'] ? 0 : 1
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
if(dataIO2) {
|
||||||
|
dataIO2.addRow([
|
||||||
|
time,
|
||||||
|
data['err_i2c1'] ? 2 : 3,
|
||||||
|
data['err_i2c2'] ? 0 : 1
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
if(dataID) dataID.addRow([time, data['reset'], data['id']]);
|
||||||
|
|
||||||
last = time;
|
last = time;
|
||||||
});
|
});
|
||||||
|
@ -522,6 +660,9 @@ function updateData() {
|
||||||
if(dataGPS) dataGPS.removeRow(c);
|
if(dataGPS) dataGPS.removeRow(c);
|
||||||
if(dataLight) dataLight.removeRow(c);
|
if(dataLight) dataLight.removeRow(c);
|
||||||
if(dataAlt) dataAlt.removeRow(c);
|
if(dataAlt) dataAlt.removeRow(c);
|
||||||
|
if(dataIO) dataIO.removeRow(c);
|
||||||
|
if(dataIO2) dataIO2.removeRow(c);
|
||||||
|
if(dataID) dataID.removeRow(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -533,6 +674,9 @@ function updateData() {
|
||||||
if(gpsChart) gpsChart.draw(dataGPS, gpsOptions);
|
if(gpsChart) gpsChart.draw(dataGPS, gpsOptions);
|
||||||
if(lightChart) lightChart.draw(dataLight, lightOptions);
|
if(lightChart) lightChart.draw(dataLight, lightOptions);
|
||||||
if(altChart) altChart.draw(dataAlt, altOptions);
|
if(altChart) altChart.draw(dataAlt, altOptions);
|
||||||
|
if(ioChart) ioChart.draw(dataIO, ioOptions);
|
||||||
|
if(io2Chart) io2Chart.draw(dataIO2, io2Options);
|
||||||
|
if(idChart) idChart.draw(dataID, idOptions);
|
||||||
|
|
||||||
lastChartUpdate = json['time'];
|
lastChartUpdate = json['time'];
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,13 @@ telemetry div img {
|
||||||
.wrapper {
|
.wrapper {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-flow: row wrap;
|
flex-flow: row wrap;
|
||||||
text-align: center;
|
}
|
||||||
|
.subheader {
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 16px;
|
||||||
|
padding: 3px;
|
||||||
|
margin: 3px;
|
||||||
|
background-color: #ccdaec;
|
||||||
}
|
}
|
||||||
|
|
||||||
.wrapper > * {
|
.wrapper > * {
|
||||||
|
|
|
@ -33,13 +33,13 @@ include "sidebar.inc.php";
|
||||||
|
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
<telemetry class="inner telemetry">
|
<telemetry class="inner telemetry">
|
||||||
<div style="width:168px;height:42px;">Callsign<br><span id="call" class="fat"><?=$_GET['call']?></span></div>
|
<div style="width:168px;height:42px;" title="APRS Callsign">Callsign<br><span id="call" class="fat"><?=$_GET['call']?></span></div>
|
||||||
<div style="width:120px;height:42px;">Reset<br><span id="reset" class="fat"></span></div>
|
<div style="width:120px;height:42px;" title="Reset counter (incremented on each new start/reset of tracker)">Reset<br><span id="reset" class="fat"></span></div>
|
||||||
<div style="width:120px;height:42px;">ID<br><span id="id" class="fat"></span></div>
|
<div style="width:120px;height:42px;" title="Incremental counter (imcremented on each new dataset)">ID<br><span id="id" class="fat"></span></div>
|
||||||
<div style="width:250px;height:42px;">Time (RX)<br><span id="rxtime" class="fat"></span></div>
|
<div style="width:250px;height:42px;" title="Time at which the packet arrived at the server">Time (RX)<br><span id="rxtime" class="fat"></span></div>
|
||||||
<div style="width:174px;height:42px;">Time (SYS)<br><span id="sys_time" class="fat"></span></div>
|
<div style="width:174px;height:42px;" title="System time of the tracker">Time (SYS)<br><span id="sys_time" class="fat"></span></div>
|
||||||
|
|
||||||
<div style="width:440px;height:135px;">
|
<div style="width:440px;height:135px;" title="Packet counter">
|
||||||
Packets<br>
|
Packets<br>
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -69,8 +69,7 @@ include "sidebar.inc.php";
|
||||||
|
|
||||||
<telemetry class="inner telemetry">
|
<telemetry class="inner telemetry">
|
||||||
|
|
||||||
|
<div style="width:440px;height:110px;background:url(power.png) no-repeat #ccdaec;" id="pwrdiv" title="Power scheme">
|
||||||
<div style="width:440px;height:110px;background:url(power.png) no-repeat #ccdaec;">
|
|
||||||
<div style="position:relative;left:0px;top:0px;width:85px;">
|
<div style="position:relative;left:0px;top:0px;width:85px;">
|
||||||
<span id="adc_vsol"></span>mV<sub>STM</sub><br>
|
<span id="adc_vsol"></span>mV<sub>STM</sub><br>
|
||||||
<span id="pac_vsol"></span>mV<sub>PAC</sub><br><br>
|
<span id="pac_vsol"></span>mV<sub>PAC</sub><br><br>
|
||||||
|
@ -83,7 +82,7 @@ include "sidebar.inc.php";
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div style="width:440px;height:125px;background:url(gnss.png) no-repeat #ccdaec;">
|
<div style="width:440px;height:125px;background:url(gnss.png) no-repeat #ccdaec;" title="GNSS (GPS, GLONASS, Galileo, ...) information">
|
||||||
<div style="margin-left:75px;">
|
<div style="margin-left:75px;">
|
||||||
<b><span id="gps_lock" class="fat"></span></b>
|
<b><span id="gps_lock" class="fat"></span></b>
|
||||||
<p><span id="gps_lat" class="fat"></span> <span id="gps_lon" class="fat"></span> <img src="arrow_up.png"><span id="gps_alt" class="fat"></span></p>
|
<p><span id="gps_lat" class="fat"></span> <span id="gps_lon" class="fat"></span> <img src="arrow_up.png"><span id="gps_alt" class="fat"></span></p>
|
||||||
|
@ -180,12 +179,33 @@ include "sidebar.inc.php";
|
||||||
<a href="?call=<?=$_GET['call']?>&range=2592000">30d</a>
|
<a href="?call=<?=$_GET['call']?>&range=2592000">30d</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="batteryDiv" class="inner chart"></div>
|
<div class="inner chart">
|
||||||
<div id="solarDiv" class="inner chart"></div>
|
<div class="subheader">Power</div>
|
||||||
<div id="tempDiv" class="inner chart"></div>
|
<div id="batteryDiv"></div>
|
||||||
<div id="gpsDiv" class="inner chart"></div>
|
<div id="solarDiv"></div>
|
||||||
<div id="altDiv" class="inner chart"></div>
|
</div>
|
||||||
<div id="lightDiv" class="inner chart"></div>
|
<div class="inner chart">
|
||||||
|
<div class="subheader">GNSS / Altitude</div>
|
||||||
|
<div id="gpsDiv"></div>
|
||||||
|
<div id="altDiv"></div>
|
||||||
|
</div>
|
||||||
|
<div class="inner chart">
|
||||||
|
<div class="subheader">Temperature</div>
|
||||||
|
<div id="tempDiv"></div>
|
||||||
|
</div>
|
||||||
|
<div class="inner chart">
|
||||||
|
<div class="subheader">Camera</div>
|
||||||
|
<div id="lightDiv"></div>
|
||||||
|
</div>
|
||||||
|
<div class="inner chart">
|
||||||
|
<div class="subheader">Subsystem states</div>
|
||||||
|
<div id="ioDiv"></div>
|
||||||
|
<div id="io2Div"></div>
|
||||||
|
</div>
|
||||||
|
<div class="inner chart">
|
||||||
|
<div class="subheader">Reset / ID counter</div>
|
||||||
|
<div id="idDiv"></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
Ładowanie…
Reference in New Issue