/* Magic Mirror * Module: MMM-covid19 * * Author: Sebastian Mark * CC-BY-SA (https://creativecommons.org/licenses/by-sa/4.0/deed.de) * for civil use only */ Module.register("MMM-covid19", { defaults: { region: "Bonn", updateInterval: 3 * 60 * 60 * 1000, // 4h fadeSpeed: 0, showHeader: true, appendLocationNameToHeader: true, data_url: "https://rp-online.de/app/interaktiv_server/data/rki_nrw_mapped.json.php", }, cases: { new7: "N/A", active: "N/A", total: "N/A", death: "N/A", cured: "N/A", trend: "N/A", ts: "N/A", }, start: function() { // init module and set update intervall var self = this; Log.log(this.name + ' is started!'); setInterval(function() { self.updateDom(this.config.fadeSpeed); }, this.config.updateInterval); }, getStyles: function () { // load custom css for module return ["MMM-covid19.css"]; }, getHeader: function() { // set module header if (this.config.showHeader) { this.data.header = "COVID-19 Daten"; if (this.config.appendLocationNameToHeader) { this.data.header += " für " + this.config.region; } } return this.data.header; }, getDom: function() { // get/update covid data this.update_data(); // create layout and output var wrapper = document.createElement("div"); var new7_wrapper = document.createElement("span"); var active_wrapper = document.createElement("span"); var total_wrapper = document.createElement("span"); var death_wrapper = document.createElement("span"); var cured_wrapper = document.createElement("span"); var ts_wrapper = document.createElement("div"); wrapper.className = "covid19"; new7_wrapper.className = "new7"; new7_wrapper.innerHTML = "Neu: " + this.cases.new7 + " " + this.cases.trend + "
"; wrapper.appendChild(new7_wrapper); active_wrapper.className = "active"; active_wrapper.innerHTML = "Aktiv: " + this.cases.active + "
"; wrapper.appendChild(active_wrapper); total_wrapper.className = "total"; total_wrapper.innerHTML = "Gesamt: " + this.cases.total + "
"; wrapper.appendChild(total_wrapper); death_wrapper.className = "death"; death_wrapper.innerHTML = "Tote: " + this.cases.death + "
"; wrapper.appendChild(death_wrapper); cured_wrapper.className = "cured"; cured_wrapper.innerHTML = "Genesen: " + this.cases.cured + "
"; wrapper.appendChild(cured_wrapper); ts_wrapper.className = "ts"; ts_wrapper.innerHTML = this.cases.ts; wrapper.appendChild(ts_wrapper); return wrapper; }, update_data: function() { // get and parse json data from source var xmlHttp = new XMLHttpRequest(); xmlHttp.open( "GET", this.config.data_url, false ); // false for synchronous request xmlHttp.send( null ); data = JSON.parse(xmlHttp.responseText); // extract data this.cases.new7 = data[this.config.region]["last_7"]; this.cases.active = data[this.config.region]["active"]; this.cases.total = data[this.config.region]["cases"]; this.cases.death = data[this.config.region]["tot"]; this.cases.cured = data[this.config.region]["gesund"]; this.cases.ts = data[this.config.region]["date"]; // determine trend: // calc this and last weeks cases and substract // result is the difference of new cases between this and last week // +10: red (arrow up) // +0: orange (arrow up) // 0: normal (arrow right) // -0: green (arrow down) currentToLastWeekDiff = (data[this.config.region]["last_7"] * 2) - data[this.config.region]["last_14"] if (currentToLastWeekDiff < 0) { this.cases.trend = ""; } else if (currentToLastWeekDiff == 0) { this.cases.trend = "&#rarr;"; } else if (currentToLastWeekDiff > 10) { this.cases.trend = ""; } else if (currentToLastWeekDiff > 0) { this.cases.trend = ""; } }, });