/****************************************************************************** * Web based vehicle tracker based on Freematics Hub * Developed by Stanley Huang https://www.facebook.com/stanleyhuangyc * Distributed under BSD license * Visit http://freematics.com/hub/api for Freematics Hub API reference * To obtain your Freematics Hub server key, contact support@freematics.com.au * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. ******************************************************************************/ onResize(); $(function () { $(document).ready(function () { USER.load("DASH.load()"); self.setInterval(function () { if (DASH.curLocation && OSMAP.map) OSMAP.setCenter(DASH.curLocation); }, MAP_CENTERING_INTERVAL); }); }); if (window.require) { const shell = require('electron').shell; function openLink(url) { shell.openExternal(url); } } function onResize() { var height = window.innerHeight; var width = window.innerWidth; //if (mapHeight < 300) mapHeight = 300; if (width > height) { document.getElementById("container").style.height = height + "px"; document.getElementById("map").style.height = height / 2 + "px"; document.getElementById("info").style.height = height / 2 + "px"; } else { document.getElementById("container").style.height = height + "px"; document.getElementById("map").style.height = height * 3 / 4 + "px"; document.getElementById("info").style.height = height / 4 + "px"; } } var DASH = { xhr: new XMLHttpRequest(), deviceID: null, curLocation: null, data: null, updateUserInfo: function (info, devid) { if (!USER.info) { document.getElementById("userinfo").innerHTML = ""; return; } var s = ""; document.getElementById("userinfo").innerHTML = s; }, setText: function(name, text) { document.getElementById(name).innerText = text; }, setClass: function (name, className) { document.getElementById(name).className = className; }, setHTML: function(name, html) { document.getElementById(name).innerHTML = html; }, getPIDValue: function (pid) { for (var i = 0; i < this.data.length; i++) { if (this.data[i][0] == pid) { return PID.normalize(pid, this.data[i][1]); } } return null; }, update: function (ch) { var parked = ch.parked || ch.age.data > TRIP_END_TIMEOUT; if (parked) { this.setText("elapsed", getHHMM(Math.floor(ch.age.data / 1000))); this.setText("state", "PARKED"); this.setClass("state", "state_parked"); } else { this.setText("elapsed", getHHMMSS(ch.elapsed)); this.setText("state", "RUNNING"); this.setClass("state", "state_running"); } this.data = ch.data; // update map var lat = this.getPIDValue(PID.GPS.LATITUDE); var lng = this.getPIDValue(PID.GPS.LONGITUDE); if (lat != null && lng != null && lat != 0 && lng != 0) { if (!OSMAP.map) OSMAP.init("map", lat, lng, 20); //if (devid) OSMAP.setTooltip(0, devid); if (!this.curLocation || this.curLocation[0] != lat || this.curLocation[1] != lng) { this.curLocation = [lat, lng]; OSMAP.setMarker(0, this.curLocation); OSMAP.setCenter(this.curLocation); } } }, load: function() { this.updateUserInfo(USER.info, USER.devid); this.reload(); }, reload: function() { // load channel data this.xhr.onreadystatechange = function() { if (this.readyState != 4) return; if (this.status != 200) { if (this.status) { alert("Server under maintenance (status: " + this.status + ")"); } return; } var chdata = JSON.parse(this.responseText); if (chdata && chdata.id) { DASH.deviceID = chdata.devid; DASH.update(chdata); self.setTimeout("DASH.reload()", chdata.parked ? DATA_FETCH_INTERVAL_PARKED : DATA_FETCH_INTERVAL); } else { alert("Not an active device. Please check if your device is working and the device ID is correct."); } }; var url = serverURL + "channels/" + USER.devid + "?data=1"; this.xhr.open('GET', url, true); this.xhr.send(null); } };