Mit Node-RED und Quickchart.io tägliches Corona-Diagramm erhalten

Lange Zeit hatte mein Landratsamt keine grafische Darstellung der Corona-Zahlen, sondern nur eine Liste. Ich dachte mir es wäre doch schön, wenn ich jeden Tag ein Diagramm zu dem aktuellen Zustand per E-Mail erhalten könnte.

Da ich gerade aus einem anderen Grund Node-RED auf einem Raspberry Pi testweise installiert hatte, versuchte ich hiermit mein Glück. Hier also mein Erfahrungsbericht.

Die Installation geht mit der Anleitung recht leicht von der Hand. Wenn man über den Browser die IP des Raspberry Pi mit Port 1880 aufruft kommt man direkt zum NodeRED Editor.

Der Plan ist die Seite https://www.lra-ffb.de/aktuelles/corona-informationen/corona-statistik-infizierte-genesene-verstorbene-und-geimpfte-im-landkreis abzurufen und die Datums- und Wertangaben in ein Liniendiagramm umzuwandeln.

Der Versuch die Seite abzurufen und die Werte zu erhalten lief schon mal ganz gut. Mit dem HTML-Node kann man die Daten über den Selektor .contenttable li scrapen. Dann fingen aber die Probleme an. Man bekommt ein Array, die Werte muss man erstmal durch Split am Doppelpunkt aufteilen und dann zu einer URL für Quickchart zusammenfügen. Mit den vorhandenen Nodes konnte ich die Aufgabe nicht bewerkstelligen. Schlussendlich schrieb ich den Code um das Array, das beim Scrapen entstanden ist, in die URL für Quickchart umzuwandeln, dann mit JavaScript in einem Function Node.

So sieht der fertige Flow dann aus:

Grüne Nodes sind zum Debuggen da. Die blauen Nodes stellen die Trigger zum Starten des Flows da. Hier einmal manuell und einmal über einen Cron-Node immer um 15 Uhr.

Quickchart.io ist übrigens eine tolle kostenlose API, mit der man gemäß der Syntax von Chart.js Diagramme erstellen kann.

Fazit: NodeRED ist toll um den Überblick über Abläufe und regelmäßig laufende Jobs zu bekommen. Wenn man aber Arrays umbauen will oder ähnliches stößt es an seine Grenzen.
Was auch gut ist, man kann die sogenannten Flows, die man erstellt hat einfach als Text mit anderen teilen. Einfach rechts im Hamburgermenü Exportieren bzw. Import wählen.

Hier noch der Code zum Importieren in Node-RED

[{"id":"6642db4d.a294f4","type":"tab","label":"Covid FFB","disabled":false,"info":""},{"id":"b797daa9.797b18","type":"e-mail","z":"6642db4d.a294f4","server":"smtp.gmail.com","port":"465","secure":true,"tls":true,"name":"xxx@xxx.com","dname":"gmail on","x":540,"y":420,"wires":[]},{"id":"f171a80a.34cd78","type":"html","z":"6642db4d.a294f4","name":"Covid Zahlen Scrapen","property":"payload","outproperty":"payload","tag":".contenttable li","ret":"text","as":"single","x":580,"y":180,"wires":[["67276084.a3c5d"]]},{"id":"ca48c919.92e918","type":"http request","z":"6642db4d.a294f4","name":"LRA FFB","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://www.lra-ffb.de/aktuelles/corona-informationen/corona-statistik-infizierte-genesene-verstorbene-und-geimpfte-im-landkreis","tls":"","persist":false,"proxy":"","authType":"","x":380,"y":180,"wires":[["f171a80a.34cd78"]]},{"id":"ef6acda8.b7f75","type":"inject","z":"6642db4d.a294f4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":220,"y":240,"wires":[["ca48c919.92e918"]]},{"id":"67276084.a3c5d","type":"function","z":"6642db4d.a294f4","name":"QuickChart Link erstellen","func":"\nvar dates = new Array();\nvar vals = new Array();\nmsg.payload.forEach (function (element) {\n    d_v = element.split(\": \");\n    if (d_v.length == 2) {\n    dates.push(d_v[0]);\n   \n    vals.push(d_v[1].replace(',','.'));\n    }\n});\n\n\n\n\nvar dates_str = dates.join(\"','\");\nvar vals_str = vals.join(',')\n\nvar newMsg = { payload: \"https://quickchart.io/chart?w=1000&c={type:'bar',data:{labels:['\"+dates_str+\"'], datasets:[{label:'Covid',data:[\"+vals_str+\"]}]}}\" };\nreturn newMsg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":590,"y":240,"wires":[["beb6466e.38a8a8","ab1bb907.924b68"]]},{"id":"beb6466e.38a8a8","type":"http request","z":"6642db4d.a294f4","name":"Quick Chart abrufen","method":"GET","ret":"bin","paytoqs":"ignore","url":"{{{payload}}}","tls":"","persist":false,"proxy":"","authType":"","x":580,"y":300,"wires":[["a7f4bf7f.2098c"]]},{"id":"9633589f.adf1c8","type":"cronplus","z":"6642db4d.a294f4","name":"","outputField":"payload","timeZone":"","persistDynamic":false,"commandResponseMsgOutput":"output1","outputs":1,"options":[{"name":"schedule1","topic":"schedule1","payloadType":"default","payload":"","expressionType":"cron","expression":"0 0 15 * * *","location":"","offset":"0","solarType":"all","solarEvents":"sunrise,sunset"}],"x":220,"y":120,"wires":[["ca48c919.92e918"]]},{"id":"ab1bb907.924b68","type":"debug","z":"6642db4d.a294f4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":830,"y":240,"wires":[]},{"id":"a7f4bf7f.2098c","type":"change","z":"6642db4d.a294f4","name":"Betreff","rules":[{"t":"set","p":"topic","pt":"msg","to":"LRA FFB Covid Zahlen","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":530,"y":360,"wires":[["b797daa9.797b18"]]}]


Als erster einen Kommentar schreiben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.