NEWS
Adapter, um nahenden & aktuellen Niederschlag zu erkennen
-
Moin,
ich bin auf der Suche nach einem Adapter, mit dem ich den Mähroboter kurz vor "angesagtem Regen" in seine Station fahren lassen kann.
Im Idealfall funktioniert das mit einer Geo-Korrdinate und warnt dann 5-10 Minuten vor einsetzendem Regen (und auch, falls der Regen gerade aktuell ist) und gibt nach Regenende wieder ein "Kein Regen mehr in Sicht"-Signal.
Auf wetter.com kann man z.B. seinen Ort einstellen und in 5-Minuten-Schritten den "Regen" auf dem Regenradar verschieben, auch als Vorhersage. Die Daten daraus wären theoretisch alles, was man braucht. Natürlich gibt es da auch keine 100%ig Genauigkeit, aber mittlere bis hohe Regenmengen werden da ziemlich akkurat erfasst.
Oder ähnlich, wie z.B. die App "Drops - der Regenalarm".
Gibt es sowas für ioBroker? DWD, DasWetter oder Weatherunderground sind mir da etwas zu grob, weil nur stündlich. Oder übersehe ich da was?
Danke und Gruß
-
Es gibt den Drops Adapter:
https://forum.iobroker.net/topic/58629/test-adapter-drops-weather-0-3-x
EDIT: Leider kann man dort seit einiger Zeit keine GPS-Koordinaten mehr eingeben, sondern nur noch Orte. Das kann bei größeren Städten schon mal einen Unterschied zwischen Sintflut und staubtrocken darstellen.
-
@marc-berg Oh man, ich hab natürlich nicht hier im Forum gesucht, sondern nur in den Adaptern in ioBroker selbst. Danke dir, das trifft meine Anforderung viel besser als die anderen Adapter.
Ist installiert und wird beobachtet. Schade, dass die Geo-Koordinaten nicht (mehr) funktionieren. Zum Glück ist meine Stadt eher überschaubar
-
@sleepwalker sagte in Adapter, um nahenden & aktuellen Niederschlag zu erkennen:
Schade, dass die Geo-Koordinaten nicht (mehr) funktionieren.
Wobei ich gerade bemerkt habe, dass teilweise auch Stadtteile eingebbar sind. Zwar ist ausgerechnet mein Stadtteil nicht dabei, aber ich kann einen in der Nähe nehmen. Der ist nur 1-2km entfernt. Damit ist das Thema für mich deutlich entschärft.
-
@sleepwalker
Das niederländische "Buienalarm" ist (zumindest in relativer Grenznähe) einer der zuverlässigsten Anbieter.Über dieses (undokumentierte) API erhält man Daten für die nächsten 2 Stunden im 5-Minuten-Intervall:
https://cdn-secure.buienalarm.nl/api/3.4/forecast.php?lat=51.5&lon=6.2&unit=mm{"success":true,"start":1713526800,"start_human":"13:40","temp":11,"delta":300,"precip":[116,0,0,0,87,108,0,0,0,0,0,0,0,0,0,0,0,0,0,87,77,77,0,0,0],"levels":{"light":0.25,"moderate":1,"heavy":2.5},"grid":{"x":472,"y":516},"source":"nl","bounds":{"N":55.573602,"E":10.856429,"S":48.495302,"W":0}}
Fragt mich aber jetzt bloß nicht, wie das zu interpretieren ist.
Gefunden habe ich lediglich noch diese Formel:
function precip(value) { return Math.pow(10, (value - 109) / 32); }
Was auch immer da herauskommt
-
@codierknecht Das ist ja mega nice! Scheinbar ist für die nächsten 2 Stunden hier bei mir kein Regen angesagt. Deckt sich mit Drops. Sollte Drops nicht meinen Erwartungen entsprechen (habe noch nicht genug Testdaten gesammelt ;)), werde ich tatsächlich diesem API eine Chance geben. Auch wenn ich sowas zwecks Wartbarkeit / unangekündigten Änderungen oder gar kompletter Einstellung immer sehr vorsichtig betrachte.
Die Niederschlagumrechnung verstehe ich allerdings auch nicht. Wie kann denn da jemals "0" als Ergebnis rauskommen? Hab wohl in Mathe zu wenig aufgepasst, aber Potenzen mit Basis 10 und dem Ergebnis 0 bekomme ich gerade nicht auf die Kette
-
@codierknecht sagte in Adapter, um nahenden & aktuellen Niederschlag zu erkennen:
Das niederländische "Buienalarm" ist (zumindest in relativer Grenznähe) einer der zuverlässigsten Anbieter.
Über dieses (undokumentierte) API erhält man Daten für die nächsten 2 Stunden im 5-Minuten-Intervall:
https://cdn-secure.buienalarm.nl/api/3.4/forecast.php?lat=51.5&lon=6.2&unit=mmDu kannst auch über diesen link an die Daten kommen https://gadgets.buienradar.nl/data/raintext?lat=51.5&lon=6.2
000|22:40 000|22:45 000|22:50 000|22:55 092|23:00 087|23:05 092|23:10 077|23:15 000|23:20 087|23:25 092|23:30 000|23:35 087|23:40 099|23:45 087|23:50 000|23:55 077|00:00 000|00:05 000|00:10 000|00:15 000|00:20 000|00:25 000|00:30 000|00:35
Hatte mir mal ein script zusammen gebastelt
const request = require("request"); function updateData() { const url = 'https://gadgets.buienradar.nl/data/raintext?lat=51.11&lon=6.15'; request(url, function(error, response, body) { if (error) { console.error(error); return; } const data = body.split("\n"); const jsonArray = []; data.forEach(item => { const [value, label] = item.split("|"); jsonArray.push({ label, value }); }); // Save the JSON data to IO-Broker setState("0_userdata.0.JSON.BuienradarRegenin5Minuten", JSON.stringify(jsonArray), true); let filteredData = jsonArray.filter(function(element) { return element.value !== ""; }); let rainSoon = filteredData.find(function(element) { return element.value > 0; }); if (rainSoon) { setState("0_userdata.0.Wetter.Regen.Beginn", rainSoon.label, true); setState("0_userdata.0.Wetter.Regen.Regenmenge", rainSoon.value, true); setState("0_userdata.0.Wetter.Regen.Regenbald", true, true); setState("0_userdata.0.Wetter.Regen.Regenbaldnächst", false, true); let nextRain = filteredData.find(function(element, index) { return index > filteredData.indexOf(rainSoon) && element.value > 0; }); if (nextRain) { setState("0_userdata.0.Wetter.Regen.NächsterBeginn", nextRain.label, true); setState("0_userdata.0.Wetter.Regen.NächsteRegenmenge", nextRain.value, true); setState("0_userdata.0.Wetter.Regen.NächsteEnde", (nextRain.label + nextRain.value * 5 * 60), true); setState("0_userdata.0.Wetter.Regen.NächsteDauer", (nextRain.value * 5), true); setState("0_userdata.0.Wetter.Regen.Regenbaldnächst", true, true); } else { setState("0_userdata.0.Wetter.Regen.NächsterBeginn", null, true); setState("0_userdata.0.Wetter.Regen.NächsteRegenmenge", null, true); setState("0_userdata.0.Wetter.Regen.NächsteEnde", null, true); setState("0_userdata.0.Wetter.Regen.NächsteDauer", null, true); } setState("0_userdata.0.Wetter.Regen.Ende", (rainSoon.label + rainSoon.value * 5 * 60), true); setState("0_userdata.0.Wetter.Regen.Dauer", (rainSoon.value * 5), true); } else { setState("0_userdata.0.Wetter.Regen.Beginn", null, true); setState("0_userdata.0.Wetter.Regen.Regenmenge", null, true); setState("0_userdata.0.Wetter.Regen.Regenbald", false, true); setState("0_userdata.0.Wetter.Regen.Regenbaldnächst", false, true); setState("0_userdata.0.Wetter.Regen.NächsterBeginn", null, true); setState("0_userdata.0.Wetter.Regen.NächsteRegenmenge", null, true); setState("0_userdata.0.Wetter.Regen.NächsteEnde", null, true); setState("0_userdata.0.Wetter.Regen.NächsteDauer", null, true); } }); } schedule("*/1 * * * *", updateData);
-
@sleepwalker sagte in Adapter, um nahenden & aktuellen Niederschlag zu erkennen:
Die Niederschlagumrechnung verstehe ich allerdings auch nicht. Wie kann denn da jemals "0" als Ergebnis rauskommen? Hab wohl in Mathe zu wenig aufgepasst, aber Potenzen mit Basis 10 und dem Ergebnis 0 bekomme ich gerade nicht auf die Kette
Ich vermute mal, das iste deren Umrechnung in ihren "Index".
Wenn man das auf 2 Nachkommastellen rundet, kommt auch wieder 0 rausMein Frau hat die App auf dem Handy. Da kommt dann schon mal die Meldung "lichte neerslag in ...".
Das basiert dann auf dem "Index". -
@chris76e sagte in Adapter, um nahenden & aktuellen Niederschlag zu erkennen:
Du kannst auch über diesen link an die Daten kommen
Der andere Link liefert gleich JSON.
Ist letztlich gehopst wie gesprungen -
@chris76e said in Adapter, um nahenden & aktuellen Niederschlag zu erkennen:
@codierknecht sagte in Adapter, um nahenden & aktuellen Niederschlag zu erkennen:
Das niederländische "Buienalarm" ist (zumindest in relativer Grenznähe) einer der zuverlässigsten Anbieter.
Über dieses (undokumentierte) API erhält man Daten für die nächsten 2 Stunden im 5-Minuten-Intervall:
https://cdn-secure.buienalarm.nl/api/3.4/forecast.php?lat=51.5&lon=6.2&unit=mmDu kannst auch über diesen link an die Daten kommen https://gadgets.buienradar.nl/data/raintext?lat=51.5&lon=6.2
000|22:40 000|22:45 000|22:50 000|22:55 092|23:00 087|23:05 092|23:10 077|23:15 000|23:20 087|23:25 092|23:30 000|23:35 087|23:40 099|23:45 087|23:50 000|23:55 077|00:00 000|00:05 000|00:10 000|00:15 000|00:20 000|00:25 000|00:30 000|00:35
Hatte mir mal ein script zusammen gebastelt
const request = require("request"); function updateData() { const url = 'https://gadgets.buienradar.nl/data/raintext?lat=51.11&lon=6.15'; request(url, function(error, response, body) { if (error) { console.error(error); return; } const data = body.split("\n"); const jsonArray = []; data.forEach(item => { const [value, label] = item.split("|"); jsonArray.push({ label, value }); }); // Save the JSON data to IO-Broker setState("0_userdata.0.JSON.BuienradarRegenin5Minuten", JSON.stringify(jsonArray), true); let filteredData = jsonArray.filter(function(element) { return element.value !== ""; }); let rainSoon = filteredData.find(function(element) { return element.value > 0; }); if (rainSoon) { setState("0_userdata.0.Wetter.Regen.Beginn", rainSoon.label, true); setState("0_userdata.0.Wetter.Regen.Regenmenge", rainSoon.value, true); setState("0_userdata.0.Wetter.Regen.Regenbald", true, true); setState("0_userdata.0.Wetter.Regen.Regenbaldnächst", false, true); let nextRain = filteredData.find(function(element, index) { return index > filteredData.indexOf(rainSoon) && element.value > 0; }); if (nextRain) { setState("0_userdata.0.Wetter.Regen.NächsterBeginn", nextRain.label, true); setState("0_userdata.0.Wetter.Regen.NächsteRegenmenge", nextRain.value, true); setState("0_userdata.0.Wetter.Regen.NächsteEnde", (nextRain.label + nextRain.value * 5 * 60), true); setState("0_userdata.0.Wetter.Regen.NächsteDauer", (nextRain.value * 5), true); setState("0_userdata.0.Wetter.Regen.Regenbaldnächst", true, true); } else { setState("0_userdata.0.Wetter.Regen.NächsterBeginn", null, true); setState("0_userdata.0.Wetter.Regen.NächsteRegenmenge", null, true); setState("0_userdata.0.Wetter.Regen.NächsteEnde", null, true); setState("0_userdata.0.Wetter.Regen.NächsteDauer", null, true); } setState("0_userdata.0.Wetter.Regen.Ende", (rainSoon.label + rainSoon.value * 5 * 60), true); setState("0_userdata.0.Wetter.Regen.Dauer", (rainSoon.value * 5), true); } else { setState("0_userdata.0.Wetter.Regen.Beginn", null, true); setState("0_userdata.0.Wetter.Regen.Regenmenge", null, true); setState("0_userdata.0.Wetter.Regen.Regenbald", false, true); setState("0_userdata.0.Wetter.Regen.Regenbaldnächst", false, true); setState("0_userdata.0.Wetter.Regen.NächsterBeginn", null, true); setState("0_userdata.0.Wetter.Regen.NächsteRegenmenge", null, true); setState("0_userdata.0.Wetter.Regen.NächsteEnde", null, true); setState("0_userdata.0.Wetter.Regen.NächsteDauer", null, true); } }); } schedule("*/1 * * * *", updateData);
Danke, das sieht etwas praktischer zum Verarbeiten aus. Ich bin mit "Drops" tatsächlich noch nicht viel weiter gekommen, weil am Wochenende mehrere Dinge dazwischen kamem. Werde die kommende Woche weiter testen.
Vielen herzlichen Dank an euch!