/** * This file defines a doughnut chart used in the live tracking page, representing a speedometer showing * Ublox speeds and smartphone speeds in km/h. * * @authors Timo Volkmann, Frank Herkommer. */ let options1 = { type: 'doughnut', data: { datasets: [ { label: 'speedTCP', data: [0,100], backgroundColor: [ 'rgba(30, 139, 195, 1)', 'rgba(191, 191, 191, 1)' ], borderColor: [ 'rgba(255, 255, 255 ,1)', 'rgba(255, 255, 255 ,1)' ], borderWidth: 0 }, { label: 'speedSERIAl', data: [0, 100], backgroundColor: [ 'rgba(214, 69, 65, 1)', 'rgba(191, 191, 191, 1)' ], borderColor: [ 'rgba(255, 255, 255 ,1)', 'rgba(255, 255, 255 ,1)' ], borderWidth: 0 } ] }, options: { rotation: Math.PI, circumference: Math.PI, legend: { display: false, enabled: false }, tooltips: { enabled: false, display: false }, cutoutPercentage: 40 } } let options2 = { type: 'doughnut', data: { datasets: [ { label: 'speedMarks', data: [50,50,50,50], backgroundColor: [ 'rgba(30, 130, 76, 1)', 'rgba(244, 208, 63, 1)', 'rgba(235, 151, 78, 1)', 'rgba(217, 30, 24, 1)' ], borderColor: [ 'rgba(30, 130, 76, 1)', 'rgba(244, 208, 63, 1)', 'rgba(235, 151, 78, 1)', 'rgba(217, 30, 24, 1)' ], borderWidth: 0 }, { label: 'transparent', data: [100], backgroundColor: [ 'rgba(0, 0, 0, 0)' ], borderColor: [ 'rgba(0, 0, 0, 0)' ], borderWidth: 2 }, { label: 'transparent1', data: [100], backgroundColor: [ 'rgba(0, 0, 0, 0)' ], borderColor: [ 'rgba(0, 0, 0, 0)' ], borderWidth: 2 }, { label: 'transparent2', data: [100], backgroundColor: [ 'rgba(0, 0, 0, 0)' ], borderColor: [ 'rgba(0, 0, 0, 0)' ], borderWidth: 2 }, { label: 'transparent3', data: [100], backgroundColor: [ 'rgba(0, 0, 0, 0)' ], borderColor: [ 'rgba(0, 0, 0, 0)' ], borderWidth: 2 }, { label: 'speedMarks1', data: [50,50,50,50], backgroundColor: [ 'rgba(30, 130, 76, 1)', 'rgba(244, 208, 63, 1)', 'rgba(235, 151, 78, 1)', 'rgba(217, 30, 24, 1)' ], borderColor: [ 'rgba(30, 130, 76, 1)', 'rgba(244, 208, 63, 1)', 'rgba(235, 151, 78, 1)', 'rgba(217, 30, 24, 1)' ], borderWidth: 0 }, ] }, options: { rotation: Math.PI, circumference: Math.PI, legend: { display: false, enabled: false }, tooltips: { enabled: false, display: false }, cutoutPercentage: 65 } } //chart showing the actual speed of the two devices. let ctx1 = document.getElementById('speedometer').getContext('2d'); let mySpeedometer = new Chart(ctx1, options1); //chart adding the different speed areas colored from green to red. let ctx2 = document.getElementById('speedometerSpeeds').getContext('2d'); let mySpeedometer2 = new Chart(ctx2, options2); /** * Function that adds speed data sent by the Ublox, converted to km/h, to the speedometer. * Called every time a message is received over serial connection from the server. * @param speedSERIAL speed of the Ublox in m/s */ function addSpeedSerial(speedSERIAL){ let speedSERIALkmh = (speedSERIAL * 3.6) let speedSERIALpercent = (speedSERIALkmh/250)*100 mySpeedometer.data.datasets[1].data = [speedSERIALpercent, 100-speedSERIALpercent]; document.getElementById("speedSERIAL").innerHTML = `Ublox: ${speedSERIALkmh.toFixed(1)} km/h` mySpeedometer.update(); } /** * Function that adds speed data sent by the Smartphone, converted to km/h, to the speedometer. * Called every time a message is received over tcp connection from the server. * @param speedTCP speed of the Smartphone in m/s */ function addSpeedTcp(speedTCP){ let speedTCPkmh = (speedTCP * 3.6) let speedTCPpercent = (speedTCPkmh/250)*100; mySpeedometer.data.datasets[0].data = [speedTCPpercent, 100-speedTCPpercent]; document.getElementById("speedTCP").innerHTML = `Phone: ${speedTCPkmh.toFixed(1)} km/h` mySpeedometer.update(); }