Skip to content

Commit 927e4c7

Browse files
Keith BannisterKeith Bannister
authored andcommitted
Add location chart
1 parent d49119b commit 927e4c7

File tree

2 files changed

+92
-8
lines changed

2 files changed

+92
-8
lines changed

ekayak.js

Lines changed: 88 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,27 @@ const temperatureData = {
6363
]
6464
};
6565

66+
const locationData = {
67+
labels: [],
68+
datasets: [
69+
{
70+
label: 'Speed',
71+
data: [],
72+
borderColor: 'rgba(54, 162, 235, 1)',
73+
backgroundColor: 'rgba(54, 162, 235, 0.2)',
74+
yAxisID: 'y',
75+
},
76+
{
77+
label: 'Heading',
78+
data: [],
79+
borderColor: 'rgba(255, 99, 132, 1)',
80+
backgroundColor: 'rgba(255, 99, 132, 0.2)',
81+
yAxisID: 'y1',
82+
}
83+
]
84+
};
85+
86+
6687
const temperatureConfig = {
6788
type: 'line',
6889
data: temperatureData,
@@ -107,7 +128,70 @@ const temperatureConfig = {
107128
},
108129
};
109130

131+
132+
const locationConfig = {
133+
type: 'line',
134+
data: locationData,
135+
options: {
136+
responsive: true,
137+
interaction: {
138+
mode: 'index',
139+
intersect: false,
140+
},
141+
stacked: false,
142+
plugins: {
143+
title: {
144+
display: true,
145+
text: 'Location'
146+
}
147+
},
148+
scales: {
149+
y: {
150+
type: 'linear',
151+
display: true,
152+
position: 'left',
153+
title: {
154+
display:true,
155+
text: 'Speed (m/s)'
156+
}
157+
},
158+
y1: {
159+
type: 'linear',
160+
display: true,
161+
position: 'right',
162+
title: {
163+
display:true,
164+
text: 'Heading (deg)'
165+
},
166+
167+
// grid line settings
168+
grid: {
169+
drawOnChartArea: false, // only want the grid lines for one axis to show up
170+
},
171+
},
172+
}
173+
},
174+
};
175+
110176
const temperatureChart = new Chart('temperatureChart', temperatureConfig);
177+
const locationChart = new Chart('locationChart', locationConfig);
178+
179+
// Chart update functions: https://www.chartjs.org/docs/latest/developers/updates.html
180+
function addData(chart, label, data) {
181+
chart.data.labels.push(label);
182+
chart.data.datasets.forEach((dataset, i) => {
183+
dataset.data.push(data[i]);
184+
});
185+
chart.update();
186+
}
187+
188+
function removeData(chart) {
189+
chart.data.labels.pop();
190+
chart.data.datasets.forEach((dataset) => {
191+
dataset.data.pop();
192+
});
193+
chart.update();
194+
}
111195

112196
function locationSuccess(position) {
113197
const c = position.coords;
@@ -124,6 +208,8 @@ function locationSuccess(position) {
124208
locationCircle.setRadius(c.accuracy);
125209

126210
npositions = npositions + 1;
211+
addData(locationChart, npositions, [c.speed, c.heading])
212+
127213
}
128214

129215
function locationError(error) {
@@ -197,12 +283,8 @@ function onMessageArrived(message) {
197283

198284
let data = JSON.parse(message.payloadString);
199285

200-
temperatureConfig.data.labels.push(nmsg);
201-
temperatureConfig.data.datasets[0].data.push(data.internal_temp);
202-
temperatureConfig.data.datasets[1].data.push(data.external_temp);
203-
temperatureConfig.data.datasets[2].data.push(data.relative_humidity);
204-
temperatureChart.update();
205-
286+
addData(temperatureChart, nmsg, [data.internal_temp, data.external_temp, data.relative_humidity])
287+
206288
nmsg += 1;
207289

208290
}

index.html

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,13 @@ <h1>Login</h1>
2323
<h1>Status:</h1>
2424
<div id="status"></div>
2525
<h1> last MQTT message</h1>
26+
<canvas id="temperatureChart" width="100%" height="30"></canvas>
2627
<div id="lastmessage"></div>
2728
<h1>Location</h1>
28-
<div id="location"></div>
2929
<div id="map"></div>
30-
<canvas id="temperatureChart" width="100%" height="30"></canvas>
30+
<canvas id="locationChart" width="100%" height="30"></canvas>
31+
<div id="location"></div>
32+
3133

3234
</body>
3335

0 commit comments

Comments
 (0)