Genesis
This commit is contained in:
commit
22e7bd89dd
4 changed files with 183 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.import
|
14
MMM-covid19.css
Normal file
14
MMM-covid19.css
Normal file
|
@ -0,0 +1,14 @@
|
|||
.covid19 {
|
||||
text-align: left;
|
||||
font-size: smaller;
|
||||
line-height: 1.255em;
|
||||
}
|
||||
|
||||
.covid19 .ts {
|
||||
font-size: small;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.covid19 .new7 .good { color: darkgreen; }
|
||||
.covid19 .new7 .warn { color: darkorange; }
|
||||
.covid19 .new7 .bad { color: darkred; }
|
129
MMM-covid19.js
Normal file
129
MMM-covid19.js
Normal file
|
@ -0,0 +1,129 @@
|
|||
/* 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 + "<br>";
|
||||
wrapper.appendChild(new7_wrapper);
|
||||
|
||||
active_wrapper.className = "active";
|
||||
active_wrapper.innerHTML = "Aktiv: " + this.cases.active + "<br>";
|
||||
wrapper.appendChild(active_wrapper);
|
||||
|
||||
total_wrapper.className = "total";
|
||||
total_wrapper.innerHTML = "Gesamt: " + this.cases.total + "<br>";
|
||||
wrapper.appendChild(total_wrapper);
|
||||
|
||||
death_wrapper.className = "death";
|
||||
death_wrapper.innerHTML = "Tote: " + this.cases.death + "<br>";
|
||||
wrapper.appendChild(death_wrapper);
|
||||
|
||||
cured_wrapper.className = "cured";
|
||||
cured_wrapper.innerHTML = "Genesen: " + this.cases.cured + "<br>";
|
||||
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
|
||||
// results the different 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 = "<span class=good>↘</span>";
|
||||
} else if (currentToLastWeekDiff == 0) {
|
||||
this.cases.trend = "&#rarr;";
|
||||
} else if (currentToLastWeekDiff > 10) {
|
||||
this.cases.trend = "<span class=bad>↗</span>";
|
||||
} else if (currentToLastWeekDiff > 0) {
|
||||
this.cases.trend = "<span class=warn>↗</span>";
|
||||
}
|
||||
},
|
||||
});
|
39
README.md
Normal file
39
README.md
Normal file
|
@ -0,0 +1,39 @@
|
|||
# Module: MMM-covid19
|
||||
|
||||
This module displays COVID-19 data aggregated by [rp-online](https://rp-online.de).
|
||||
|
||||
## Installation
|
||||
|
||||
1. Navigate to the `MagicMirror/modules` directory.
|
||||
1. Clone the module
|
||||
1. Configure the module as per below
|
||||
1. Restart MagicMirror
|
||||
|
||||
|
||||
## Using the module
|
||||
```javascript
|
||||
modules: [
|
||||
{
|
||||
module: "MMM-covid19",
|
||||
position: "top_left",
|
||||
config: {
|
||||
// The config property is optional.
|
||||
// If no config is set, an example calendar is shown.
|
||||
// See 'Configuration options' for more information.
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
## Configuration options
|
||||
|
||||
| Option | Description |
|
||||
| ------ | ----------- |
|
||||
| `region` | Choose region to be fetched <br> **Default:** `Bonn` |
|
||||
| `updateInterval` | How often does the content needs to be fetched? (Milliseconds) <br> **Default:** 10800000 (4 hours) |
|
||||
| `showHeader` | Show `COVID-19 Daten` as module header? <br> **Values:** `true` or `/false` <br> **Default:** `true` |
|
||||
| `appendLocationNameToHeader` | Append region name to header? <br> **Values:** `true` or `/false` <br> **Default:** `true` |
|
||||
|
||||
### List available regions
|
||||
|
||||
`curl https://rp-online.de/app/interaktiv_server/data/rki_nrw_mapped.json.php | jq | awk '/^ "/ {print}'`
|
Loading…
Reference in a new issue