Abfrage ePIN (elektronisches PollenInformationsNetzwerk)

Node-RED als CCU3/RaspberryMatic Addon, WebApp, HomeKit, ...

Moderator: Co-Administratoren

Antworten
Mirko77
Beiträge: 2
Registriert: 03.10.2018, 20:52
Danksagung erhalten: 1 Mal

Abfrage ePIN (elektronisches PollenInformationsNetzwerk)

Beitrag von Mirko77 » 29.02.2020, 17:16

Hallo Zusammen,
da gerade wieder die Pollensaison begonnen hat, habe ich für meine Frau eine Abfrage für das elektronische Polleninfromationsnetzwerk erstellt und eine Visualisierung in Node-Red integriert. Informationen zum Polleninformationsnetzwerk finden sich unter epin.lgl.bayern.de/
Eine Abfrage der Verfügbaren Standorte und Pollenarten ist im Flow enthalten. Die Standorte können aber auch über https://epin.lgl.bayern.de/api/locations abgerufen werden. Die meisten Standorte sind in Bayern, aber nicht alle.

In meinem Beispiel werden alle Standorte und Pollenmessungen der letzten 7 Tage abgerufen. Anschließend werden Hasel-, Erlen- und Birkenpollen vom Standort München extrahiert und grafisch angezeigt.

Eine Anpassung an andere Standorte oder Pollen sollte einfach möglich sein.

Code: Alles auswählen

[{"id":"c37ace86.4c778","type":"comment","z":"3c45d81a.118ac8","name":"verfügbare Standorte abfragen","info":"","x":190,"y":40,"wires":[]},{"id":"790aac2.bc07e54","type":"inject","z":"3c45d81a.118ac8","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":140,"y":120,"wires":[["484367d4.55ab08"]]},{"id":"484367d4.55ab08","type":"http request","z":"3c45d81a.118ac8","name":"","method":"GET","ret":"obj","paytoqs":false,"url":"https://epin.lgl.bayern.de/api/locations","tls":"","persist":false,"proxy":"","authType":"","x":350,"y":120,"wires":[["e6edc02f.ef477"]]},{"id":"a85c4e08.9e015","type":"inject","z":"3c45d81a.118ac8","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":140,"y":240,"wires":[["af97171b.58e0d8"]]},{"id":"8a4f73c2.4fb87","type":"debug","z":"3c45d81a.118ac8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":750,"y":240,"wires":[]},{"id":"af97171b.58e0d8","type":"http request","z":"3c45d81a.118ac8","name":"","method":"GET","ret":"obj","paytoqs":false,"url":"https://epin.lgl.bayern.de/api/pollen","tls":"","persist":false,"proxy":"","authType":"","x":350,"y":240,"wires":[["3c0f27c1.6972a8"]]},{"id":"581dbb12.f8d074","type":"debug","z":"3c45d81a.118ac8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":830,"y":340,"wires":[]},{"id":"38f85138.ae565e","type":"http request","z":"3c45d81a.118ac8","name":"","method":"GET","ret":"obj","paytoqs":false,"url":"https://epin.lgl.bayern.de/api/measurements{{{payload}}}","tls":"","persist":false,"proxy":"","authType":"","x":590,"y":500,"wires":[["581dbb12.f8d074","43204005.34a3f","70ced831.ba4888","869b3777.8d1bd8","81897737.c5c9c8"]]},{"id":"e6edc02f.ef477","type":"split","z":"3c45d81a.118ac8","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":560,"y":120,"wires":[["ece220ba.d2f9c"]]},{"id":"ece220ba.d2f9c","type":"debug","z":"3c45d81a.118ac8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":750,"y":120,"wires":[]},{"id":"174a3918.30c1a7","type":"ui_gauge","z":"3c45d81a.118ac8","name":"","group":"39074d43.5a3b5a","order":1,"width":3,"height":3,"gtype":"gage","title":"Hasel","label":"Pollen/m³","format":"{{value | number:0}} ","min":0,"max":"1000","colors":["#00b500","#e6e600","#ca3838"],"seg1":"20","seg2":"200","x":1150,"y":440,"wires":[]},{"id":"97925c2b.d496f","type":"ui_gauge","z":"3c45d81a.118ac8","name":"","group":"39074d43.5a3b5a","order":2,"width":3,"height":3,"gtype":"gage","title":"Erle","label":"Pollen/m³","format":"{{value | number:0}} ","min":0,"max":"1000","colors":["#00b500","#e6e600","#ca3838"],"seg1":"20","seg2":"200","x":1150,"y":520,"wires":[]},{"id":"ab21414b.79918","type":"ui_gauge","z":"3c45d81a.118ac8","name":"","group":"39074d43.5a3b5a","order":3,"width":3,"height":3,"gtype":"gage","title":"Birke","label":"Pollen/m³","format":"{{value | number:0}} ","min":0,"max":"1000","colors":["#00b500","#e6e600","#ca3838"],"seg1":"20","seg2":"2000","x":1150,"y":600,"wires":[]},{"id":"f94439fb.1cd6b8","type":"ui_text","z":"3c45d81a.118ac8","group":"39074d43.5a3b5a","order":5,"width":0,"height":0,"name":"","label":"Aktualisierung:","format":"{{msg.payload}}","layout":"row-spread","x":1180,"y":400,"wires":[]},{"id":"869b3777.8d1bd8","type":"function","z":"3c45d81a.118ac8","name":"Zeitstempel formatieren","func":"const ts = new Date((msg.payload.from+msg.payload.to)*1000/2);\n\nconst payload = ts.getFullYear() + '-' +\n  ('0' + (ts.getMonth() + 1)).slice(-2) + '-' +\n  ('0' + ts.getDate()).slice(-2) + ' ' +\n  ('0' + ts.getHours()).slice(-2) + ':' +\n  ('0' + ts.getMinutes()).slice(-2) + ':' +\n  ('0' + ts.getSeconds()).slice(-2);\n node.status({fill:\"green\",shape:\"dot\",text:payload});\n\nreturn {payload};","outputs":1,"noerr":0,"x":870,"y":400,"wires":[["f94439fb.1cd6b8"]]},{"id":"ff76de90.52911","type":"ui_chart","z":"3c45d81a.118ac8","name":"","group":"39074d43.5a3b5a","order":4,"width":0,"height":0,"label":"Verlauf","chartType":"line","legend":"false","xformat":"dd HH:mm","interpolate":"linear","nodata":"waiting for data...","dot":false,"ymin":"0","ymax":"","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"604800","cutout":0,"useOneColor":false,"colors":["#1f77b4","#008000","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"outputs":1,"x":1360,"y":560,"wires":[[]]},{"id":"d54d34d0.811068","type":"delay","z":"3c45d81a.118ac8","name":"5sek","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1150,"y":480,"wires":[["ff76de90.52911"]]},{"id":"65375680.9d8f48","type":"delay","z":"3c45d81a.118ac8","name":"10sek","pauseType":"delay","timeout":"10","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1150,"y":560,"wires":[["ff76de90.52911"]]},{"id":"ed0794d1.3e6a48","type":"delay","z":"3c45d81a.118ac8","name":"15sek","pauseType":"delay","timeout":"15","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1150,"y":640,"wires":[["ff76de90.52911"]]},{"id":"43204005.34a3f","type":"function","z":"3c45d81a.118ac8","name":"MUC_Erle","func":"const Polle =\"Alnus\";\nconst topic =\"Erle\";\nconst Location =\"DEBIED\";\n\nvar TextToDisplay = \"N/A\";\nvar DateFrom = msg.payload.from;\nvar DateTo = msg.payload.to;\nvar newMsg=[];\nvar curMsg;\nvar curData={};\n\nnode.status({fill:\"red\",shape:\"dot\",text:TextToDisplay});\n\n\nfor (var i = 0; i < msg.payload.measurements.length; i++) {\n  if (msg.payload.measurements[i].polle == Polle &&\n  msg.payload.measurements[i].location == Location){\n      for(var j = 0; j < msg.payload.measurements[i].data.length; j++){\n          curMsg = newMsg.length;\n          curData = msg.payload.measurements[i].data[j];\n          newMsg[curMsg]={payload: Math.round(curData.value), timestamp: curData.from*1000, topic: topic};\n          newMsg[curMsg+1]={payload: Math.round(curData.value), timestamp: curData.to*1000, topic: topic};\n      }\n      TextToDisplay = Math.round(msg.payload.measurements[i].data[0].value);\n      // DateFrom = new Date(msg.payload.measurements[i].data[0].from*1000);\n      // DateTo = new Date(msg.payload.measurements[i].data[0].to*1000);\n      \n      \n      node.status({fill:\"green\",shape:\"dot\",text:TextToDisplay+\" \"+DateFrom});\n      break;\n  }\n}\n\n\nreturn [newMsg];\n\n","outputs":1,"noerr":0,"x":830,"y":560,"wires":[["97925c2b.d496f","65375680.9d8f48"]]},{"id":"70ced831.ba4888","type":"function","z":"3c45d81a.118ac8","name":"MUC_Birke","func":"const Polle =\"Betula\";\nconst topic =\"Birke\"\nconst Location =\"DEBIED\";\n\nvar TextToDisplay = \"N/A\";\nvar DateFrom = msg.payload.from;\nvar DateTo = msg.payload.to;\nvar newMsg=[];\nvar curMsg;\nvar curData={};\n\nnode.status({fill:\"red\",shape:\"dot\",text:TextToDisplay});\n\n\nfor (var i = 0; i < msg.payload.measurements.length; i++) {\n  if (msg.payload.measurements[i].polle == Polle &&\n  msg.payload.measurements[i].location == Location){\n      for(var j = 0; j < msg.payload.measurements[i].data.length; j++){\n          curMsg = newMsg.length;\n          curData = msg.payload.measurements[i].data[j];\n          newMsg[curMsg]={payload: Math.round(curData.value), timestamp: curData.from*1000, topic: topic};\n          newMsg[curMsg+1]={payload: Math.round(curData.value), timestamp: curData.to*1000, topic: topic};\n      }\n      TextToDisplay = Math.round(msg.payload.measurements[i].data[0].value);\n      // DateFrom = new Date(msg.payload.measurements[i].data[0].from*1000);\n      // DateTo = new Date(msg.payload.measurements[i].data[0].to*1000);\n      \n      \n      node.status({fill:\"green\",shape:\"dot\",text:TextToDisplay+\" \"+DateFrom});\n      break;\n  }\n}\n\n\nreturn [newMsg];\n\n","outputs":1,"noerr":0,"x":830,"y":640,"wires":[["ab21414b.79918","ed0794d1.3e6a48"]]},{"id":"eb65d0fe.1af5c","type":"ui_button","z":"3c45d81a.118ac8","name":"","group":"39074d43.5a3b5a","order":6,"width":0,"height":0,"passthru":false,"label":"Aktualisierung","tooltip":"","color":"","bgcolor":"","icon":"","payload":"","payloadType":"str","topic":"","x":140,"y":460,"wires":[["e38b029f.6eea1"]]},{"id":"81897737.c5c9c8","type":"function","z":"3c45d81a.118ac8","name":"MUC_Hasel","func":"const Polle =\"Corylus\";\nconst topic =\"Hasel\"\nconst Location =\"DEBIED\";\n\nvar TextToDisplay = \"N/A\";\nvar DateFrom = msg.payload.from;\nvar DateTo = msg.payload.to;\nvar newMsg=[];\nvar curMsg;\nvar curData={};\n\nnode.status({fill:\"red\",shape:\"dot\",text:TextToDisplay});\n\n\nfor (var i = 0; i < msg.payload.measurements.length; i++) {\n  if (msg.payload.measurements[i].polle == Polle &&\n  msg.payload.measurements[i].location == Location){\n      for(var j = 0; j < msg.payload.measurements[i].data.length; j++){\n          curMsg = newMsg.length;\n          curData = msg.payload.measurements[i].data[j];\n          newMsg[curMsg]={payload: Math.round(curData.value), timestamp: curData.from*1000, topic: topic};\n          newMsg[curMsg+1]={payload: Math.round(curData.value), timestamp: curData.to*1000, topic: topic};\n      }\n      TextToDisplay = Math.round(msg.payload.measurements[i].data[0].value);\n      // DateFrom = new Date(msg.payload.measurements[i].data[0].from*1000);\n      // DateTo = new Date(msg.payload.measurements[i].data[0].to*1000);\n      \n      \n      node.status({fill:\"green\",shape:\"dot\",text:TextToDisplay+\" \"+DateFrom});\n      break;\n  }\n}\n\n\nreturn [newMsg];\n","outputs":1,"noerr":0,"x":830,"y":480,"wires":[["174a3918.30c1a7","d54d34d0.811068"]]},{"id":"f0c2288a.a56968","type":"inject","z":"3c45d81a.118ac8","name":"","topic":"","payload":"","payloadType":"date","repeat":"3600","crontab":"","once":true,"onceDelay":0.1,"x":150,"y":540,"wires":[["e38b029f.6eea1"]]},{"id":"e38b029f.6eea1","type":"change","z":"3c45d81a.118ac8","name":"Zeitraum (heute - 7Tage)","rules":[{"t":"set","p":"payload","pt":"msg","to":"'?from='&$floor(msg.payload/1000-(86400*7))&'&to='&$floor(msg.payload/1000)","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":370,"y":500,"wires":[["38f85138.ae565e"]]},{"id":"3c0f27c1.6972a8","type":"split","z":"3c45d81a.118ac8","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":560,"y":240,"wires":[["8a4f73c2.4fb87"]]},{"id":"4e23f7c5.6e8be8","type":"comment","z":"3c45d81a.118ac8","name":"verfügbare Pollen abfragen","info":"","x":170,"y":180,"wires":[]},{"id":"69d353d3.9df7cc","type":"comment","z":"3c45d81a.118ac8","name":"Pollen für München (Hasel/Erle/Birke) abfragen","info":"","x":240,"y":360,"wires":[]},{"id":"39074d43.5a3b5a","type":"ui_group","z":"","name":"München","tab":"e3349328.55add","order":1,"disp":true,"width":9,"collapse":false},{"id":"e3349328.55add","type":"ui_tab","z":"","name":"Pollenflug","icon":"dashboard","order":10,"disabled":false,"hidden":false}]
So sieht der Flow aus:
200229_Pollenflug_Flow.png
Und so sieht die Visualisierung aus:
200229_Pollenflug_Visualisierung.png
Vielleicht findet es jemand nützlich. LG, Mirko

Antworten

Zurück zu „RedMatic“