/* 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", new7_100k: "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!'); self.update_data(); setInterval(function() { self.update_data(); self.updateDom(this.config.fadeSpeed); }, this.config.updateInterval); }, 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; }, getStyles: function () { // load custom css for module return ["MMM-covid19.css"]; }, getTemplate: function () { // load template for layout return 'MMM-covid19.njk'; }, getTemplateData: function () { // pass variables to template return { cases: this.cases } }, 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.new7_100k = data[this.config.region]["last_7_100000"]; 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 currentToLastWeekDiff = (data[this.config.region]["last_7"] * 2) - data[this.config.region]["last_14"] if (currentToLastWeekDiff > 10) { this.cases.trend = "bad"; } else if (currentToLastWeekDiff > 0) { this.cases.trend = "warn"; } else if (currentToLastWeekDiff == 0) { this.cases.trend = "even"; } else if (currentToLastWeekDiff < 0) { this.cases.trend = "good"; } }, });