FHEM > Codeschnipsel

Ein virtueller Regensensor mit wetter.com und HTTPMOD

(1/15) > >>

Tri:
Hier soll eine Möglichkeit eines Regensensors vorgestellt werden, der warnt, bevor es regnet.

Wenn eine Markise montiert ist, soll unbedingt vermieden werden, das diese nass wird. Wird ein konventioneller Regensensor montiert, um diese Aufgabe zu übernehmen, hat die Markise schon Regen abbekommen, bevor sie eingefahren wird. Das kann Stockflecken verursachen.

Die Idee ist es, den „Regenradar“ eines Wetterdienstes zu nutzen und das graphische Regenbild auszuwerten. Diese Aufgabe ist aber schon auf wetter.com erledigt. Dort gibt es schon die Rubrik „Niederschläge der nächsten 2 Stunden“ auf der Wettervorhersage. Es muss also nur noch diese Vorhersage abgefragt werden. Dazu ist das Modul „HTTPMOD“ bestens geeignet. Die Daten werden alle 5 Minuten aufgefrischt. Also sollte auch maximal alle 5 Minuten abgefragt werden, das sind 300 Sekunden.

Die Farben der Felder haben folgende Bedeutung:

RegenRegenSchneefallSchneefall theoretischrealtheoretischrealText wetter.comAnzeigetext#a6caf0#bfd4ff#fce4ec1)bis 0.4 l/m² pro Stunde kein oder nur geringer Regen bzw. Schneefall< 0.4 l/m²/h#6699ffpasst#f9bad01)bis 1.9 l/m² pro Stunde leichter bis mäßiger Regen bzw. Schneefall< 1.9 l/m²/h#004ce5passt#f68db11)bis 8.1 l/m² pro Stunde mäßiger Regen bzw. mäßiger bis starker Schneefall< 8.1 l/m²/h#002673passt#f25f911)bis 35 l/m² pro Stunde mäßiger bis starker Regen (Gewitter möglich) bzw. sehr starker Schneefall< 35 l/m²/h#ffa800passt 2)#ee3c791)bis 150 l/m² pro Stunde starker Regen (Graupel, Hagel oder Gewitter wahrscheinlich)< 150 l/m²/h#e600001)#eb15611)> 150 l/m² pro Stunde heftiger Regen (Hagel und Gewitter wahrscheinlich)> 150 l/m²/h1) noch nicht ermittelt. Bei einem weißen unbesetztem Feld steht „#fff“, 2) am 18.08.2021 nachgetragen

Es sind drei Anzeigefelder mit „jetzt“ beschriftet. Die Uhrzeit für das vierte Feld wird in dem Reading „time_04“ abgelegt. Die restlichen Uhrzeiten ergeben sich, da jedes Feld für eine Zeitspanne von 5 Minuten steht. Bei zwei Stunden sind das 24 Felder. Die Anzeigefenster werden in den Readings „feld-01“ bis „feld-24“ abgelegt. Übersetzt von den Farbcodes zu der Regenmenge wird es mit „reading08OMap ...“.

Damit die Anzeige schöner ist, habe ich die Namen der Felder 1 bis 9 wie „feld-1“ in „feld-01“ mit „attr wetter_com_gifhorn reading08-1Name feld-01“ usw. umbenannt. Damit werden sie bei der Anzeige in der richtigen Reihenfolge dargestellt.

Das Hauptergebnis steht in dem Reading „Status“ und enthält die Auswertung für die ersten sieben Felder. Das kann individuell nach Bedarf angepasst werden.

Das Reading „Status2h“ enthält die Auswertung über die zwei Stunden.

Der Beschreibungstext steht in dem Reading „regen“ drin.

„Status2h_old“ und „Status_old“ sind Flankenmerker für die Auswertung über notify. Damit wird sichergestellt, dass die Meldungen und das Einfahren der Markise nur bei einer positiven Flanke getriggert wird.

Hier das Beispiel für Gifhorn mit „Raw definition“ kopiert: (Das Beispiel sollte bei Bedarf also auch in „Raw FHEM-code input“ kopiert werden.)

--- Code: ---defmod wetter_com_gifhorn HTTPMOD https://www.wetter.com/deutschland/gifhorn/DE0003428.html 300
attr wetter_com_gifhorn DbLogExclude .*
attr wetter_com_gifhorn DbLogInclude Status,Status2h,regen,date,time_04,feld-\d*
attr wetter_com_gifhorn reading01Name regen
attr wetter_com_gifhorn reading01Regex <span.id=\"nowcast-text\".class=\"portable-mb--\">\W*(.*)\W*</span>
attr wetter_com_gifhorn reading02Name date
attr wetter_com_gifhorn reading02Regex <div class=\"\[.forecast-navigation-grid.\]\">\W*<a.data-label=\"VHSTabTag_1\"\W*class=\"\[.is-active.\]\"\W*.*\W*.*\W*.*\W*.*\W*.*\W*<div>\W*(.*)\W*<\>
attr wetter_com_gifhorn reading08-1Name feld-01
attr wetter_com_gifhorn reading08-25Name time_04
attr wetter_com_gifhorn reading08-2Name feld-02
attr wetter_com_gifhorn reading08-3Name feld-03
attr wetter_com_gifhorn reading08-4Name feld-04
attr wetter_com_gifhorn reading08-5Name feld-05
attr wetter_com_gifhorn reading08-6Name feld-06
attr wetter_com_gifhorn reading08-7Name feld-07
attr wetter_com_gifhorn reading08-8Name feld-08
attr wetter_com_gifhorn reading08-9Name feld-09
attr wetter_com_gifhorn reading08Name feld
attr wetter_com_gifhorn reading08OMap #fff:0, #a6caf0:< 0.4 l/m²/h, #bfd4ff:< 0.4 l/m²/h, #fce4ec:< 0.4 l/m²/h(*), #6699ff:< 1.9 l/m²/h, #f9bad0:< 1.9 l/m²/h(*), #004ce5:< 8.1 l/m²/h, #f68db1:< 8.1 l/m²/h(*), #002673:< 35 l/m²/h, #f25f91:< 35 l/m²/h(*), #ffa800:< 150 l/m²/h, #ee3c79:< 150 l/m²/h(*), #e60000:> 150 l/m²/h #eb1561:> 150 l/m²/h(*)
attr wetter_com_gifhorn reading08Regex <table.class=\"\[.rainnowcast-timeline.\].*\">\W*<tbody>\W*<tr>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*<td class=\".*style=\"background-color:(.*);;.*</td>\W*</tr>\W*<tr>\W*<td.colspan=\"2\".*Jetzt\W*</td>\W*<td colspan="2".*>(.*)</td>
attr wetter_com_gifhorn room KLF200Node
attr wetter_com_gifhorn stateFormat date time_04 Regen aktuell: Status Regen 2h: Status2h Text: regen <html>website: <a target= "_blank" href="https://www.wetter.com/deutschland/gifhorn/DE0003428.html">wetter.com</a></html>
attr wetter_com_gifhorn userReadings Status:feld-01.* {\
  0 + \
  (ReadingsVal("wetter_com_gifhorn","feld-01",0) ne 0 || \
  ReadingsVal("wetter_com_gifhorn","feld-02",0) ne 0 || \
  ReadingsVal("wetter_com_gifhorn","feld-03",0) ne 0 || \
  ReadingsVal("wetter_com_gifhorn","feld-04",0) ne 0 || \
  ReadingsVal("wetter_com_gifhorn","feld-05",0) ne 0 || \
  ReadingsVal("wetter_com_gifhorn","feld-06",0) ne 0 || \
  ReadingsVal("wetter_com_gifhorn","feld-07",0) ne 0 );;;; },\
Status2h:regen.* {\
  0 + ( ReadingsVal("wetter_com_gifhorn","regen",0) ne "Kein Niederschlag in Sicht" );;;; },\
Status_old,\
Status2h_old\

--- Ende Code ---

Das dazu passende notify, um Meldungen auszugeben und die Markise einzufahren:
Anmerkung: „somfy_0“ ist die Markise. „pct“ ist die Position. Position „100“ ist eingefahren. Der Befehl und die Meldung wird also nur ausgegeben, wenn die Markise ausgefahren ist und der Zustand der Regenmeldung neu rein kommt. Wird die Markise bei angekündigtem Regen raus gefahren, bleibt sie gewollt draußen. Die Meldung wird in diesem Beispiel über Telegram ausgegeben, da WhatsApp nicht funktioniert. Wenn kein Telegram-Bot definiert ist, müssen diese Zeilen gelöscht werden. Wenn ein Telegram-Bot vorhanden ist, muss der Name des Bot und die Nummer angepasst werden. Der Fahrbefehl für die Markise muss natürlich auch angepasst werden. Der zweite Block mit "Regen jetzt: ..." ist hauptsächlich für die Inbetriebnahme und kann entweder deaktiviert oder gelöscht werden. Genauso könnte jede Änderung des Readings von „regen“ gesendet werden.

--- Code: ---defmod wetter_com_gifhorn_notify_1 notify wetter_com_gifhorn:Status:.* { \
if( ReadingsVal("somfy_0","pct","---") ne 100 && ReadingsVal("wetter_com_gifhorn","Status","---") eq 1 && ReadingsVal("wetter_com_gifhorn","Status_old","---") eq 0) {\
   fhem("set Bot message \@123456789 Markise wird aufgrund einer Regenwarnung eingefahren.\n".\
   "Alte Position: ".ReadingsVal("somfy_0","pct","---"));;\
   fhem("set somfy_0 pct 100");;\
};;\
if( (ReadingsVal("wetter_com_gifhorn","Status","---") eq 1 && ReadingsVal("wetter_com_gifhorn","Status_old","---") eq 0) ||\
    (ReadingsVal("wetter_com_gifhorn","Status2h","---") eq 1 && ReadingsVal("wetter_com_gifhorn","Status2h_old","---") eq 0) ) {\
fhem("set Bot message \@123456789 Regenwarnung wetter.com:\n".\
ReadingsVal("wetter_com_gifhorn","date","---")."\n".\
ReadingsVal("wetter_com_gifhorn","regen","---")."\n".\
"Regen jetzt: ".ReadingsVal("wetter_com_gifhorn","Status","---")."\n".\
"Regen innerhalb 2h: ".ReadingsVal("wetter_com_gifhorn","Status2h","---")."\n".\
"-15 min. ".ReadingsVal("wetter_com_gifhorn","feld-01","---")."\n".\
"-10 min. ".ReadingsVal("wetter_com_gifhorn","feld-02","---")."\n".\
"-5 min. ".ReadingsVal("wetter_com_gifhorn","feld-03","---")."\n".\
ReadingsVal("wetter_com_gifhorn","time_04","---")." ".ReadingsVal("wetter_com_gifhorn","feld-04","---")."\n".\
"+5 min. ".ReadingsVal("wetter_com_gifhorn","feld-05","---")."\n".\
"+10 min. ".ReadingsVal("wetter_com_gifhorn","feld-06","---")."\n".\
"+15 min. ".ReadingsVal("wetter_com_gifhorn","feld-07","---")."\n".\
"+20 min. ".ReadingsVal("wetter_com_gifhorn","feld-08","---")."\n".\
"+25 min. ".ReadingsVal("wetter_com_gifhorn","feld-09","---")."\n".\
"+30 min. ".ReadingsVal("wetter_com_gifhorn","feld-10","---")."\n".\
"+35 min. ".ReadingsVal("wetter_com_gifhorn","feld-11","---")."\n".\
"+40 min. ".ReadingsVal("wetter_com_gifhorn","feld-12","---")."\n".\
"+45 min. ".ReadingsVal("wetter_com_gifhorn","feld-13","---")."\n".\
"+50 min. ".ReadingsVal("wetter_com_gifhorn","feld-14","---")."\n".\
"+55 min. ".ReadingsVal("wetter_com_gifhorn","feld-15","---")."\n".\
"+60 min. ".ReadingsVal("wetter_com_gifhorn","feld-16","---")."\n".\
"+65 min. ".ReadingsVal("wetter_com_gifhorn","feld-17","---")."\n".\
"+70 min. ".ReadingsVal("wetter_com_gifhorn","feld-18","---")."\n".\
"+75 min. ".ReadingsVal("wetter_com_gifhorn","feld-19","---")."\n".\
"+80 min. ".ReadingsVal("wetter_com_gifhorn","feld-20","---")."\n".\
"+85 min. ".ReadingsVal("wetter_com_gifhorn","feld-21","---")."\n".\
"+90 min. ".ReadingsVal("wetter_com_gifhorn","feld-22","---")."\n".\
"+95 min. ".ReadingsVal("wetter_com_gifhorn","feld-23","---")."\n".\
"+100 min. ".ReadingsVal("wetter_com_gifhorn","feld-24","---"));;\
};;\
fhem("setreading wetter_com_gifhorn Status_old ".ReadingsVal("wetter_com_gifhorn","Status","---"));;\
fhem("setreading wetter_com_gifhorn Status2h_old ".ReadingsVal("wetter_com_gifhorn","Status2h","---"));;\
}
attr wetter_com_gifhorn_notify_1 DbLogExclude .*
attr wetter_com_gifhorn_notify_1 room KLF200Node

--- Ende Code ---

Um die Inbetriebnahme zu erleichtern, werden alle Readings in die Datenbank geschrieben. Wenn alles läuft, könnte dies auch deaktiviert werden um Platz in der Datenbank zu sparen. Für eine geordnete Ausgabe über SQL für den aktuellen Tag kann folgende Abfrage genutzt werden:

--- Code: ---SELECT t1.`TIMESTAMP` AS Zeit, t1.VALUE AS 'Status', t2.VALUE AS 'Status2h', t3.VALUE AS 'date', t4.VALUE AS 'regen',
t5.VALUE AS 'feld-01', t6.VALUE AS 'feld-02', t7.VALUE AS 'feld-03', t8.VALUE AS 'time_04', t9.VALUE AS 'feld-04', t10.VALUE AS 'feld-05', t11.VALUE AS 'feld-06',
t12.VALUE AS 'feld-07', t13.VALUE AS 'feld-08', t14.VALUE AS 'feld-09', t15.VALUE AS 'feld-10', t16.VALUE AS 'feld-11', t17.VALUE AS 'feld-12', t18.VALUE AS 'feld-13',
t19.VALUE AS 'feld-14', t20.VALUE AS 'feld-15', t21.VALUE AS 'feld-16', t22.VALUE AS 'feld-17', t23.VALUE AS 'feld-18', t24.VALUE AS 'feld-19', t25.VALUE AS 'feld-20',
t26.VALUE AS 'feld-21', t27.VALUE AS 'feld-22', t28.VALUE AS 'feld-23', t29.VALUE AS 'feld-24'
FROM history AS t1
LEFT JOIN history AS t2 ON t1.`TIMESTAMP` = t2.`TIMESTAMP` AND t1.DEVICE = t2.DEVICE AND t1.TYPE = t2.TYPE AND t2.DEVICE = 'wetter_com_gifhorn' AND t2.READING = 'Status2h'
LEFT JOIN history AS t3 ON t1.`TIMESTAMP` = t3.`TIMESTAMP` AND t1.DEVICE = t3.DEVICE AND t1.TYPE = t3.TYPE AND t3.DEVICE = 'wetter_com_gifhorn' AND t3.READING = 'date'
LEFT JOIN history AS t4 ON t1.`TIMESTAMP` = t4.`TIMESTAMP` AND t1.DEVICE = t4.DEVICE AND t1.TYPE = t4.TYPE AND t4.DEVICE = 'wetter_com_gifhorn' AND t4.READING = 'regen'
LEFT JOIN history AS t5 ON t1.`TIMESTAMP` = t5.`TIMESTAMP` AND t1.DEVICE = t5.DEVICE AND t1.TYPE = t5.TYPE AND t5.DEVICE = 'wetter_com_gifhorn' AND t5.READING = 'feld-01'
LEFT JOIN history AS t6 ON t1.`TIMESTAMP` = t6.`TIMESTAMP` AND t1.DEVICE = t6.DEVICE AND t1.TYPE = t6.TYPE AND t6.DEVICE = 'wetter_com_gifhorn' AND t6.READING = 'feld-02'
LEFT JOIN history AS t7 ON t1.`TIMESTAMP` = t7.`TIMESTAMP` AND t1.DEVICE = t7.DEVICE AND t1.TYPE = t7.TYPE AND t7.DEVICE = 'wetter_com_gifhorn' AND t7.READING = 'feld-03'
LEFT JOIN history AS t8 ON t1.`TIMESTAMP` = t8.`TIMESTAMP` AND t1.DEVICE = t8.DEVICE AND t1.TYPE = t8.TYPE AND t8.DEVICE = 'wetter_com_gifhorn' AND t8.READING = 'time_04'
LEFT JOIN history AS t9 ON t1.`TIMESTAMP` = t9.`TIMESTAMP` AND t1.DEVICE = t9.DEVICE AND t1.TYPE = t9.TYPE AND t9.DEVICE = 'wetter_com_gifhorn' AND t9.READING = 'feld-04'
LEFT JOIN history AS t10 ON t1.`TIMESTAMP` = t10.`TIMESTAMP` AND t1.DEVICE = t10.DEVICE AND t1.TYPE = t10.TYPE AND t10.DEVICE = 'wetter_com_gifhorn' AND t10.READING = 'feld-05'
LEFT JOIN history AS t11 ON t1.`TIMESTAMP` = t11.`TIMESTAMP` AND t1.DEVICE = t11.DEVICE AND t1.TYPE = t11.TYPE AND t11.DEVICE = 'wetter_com_gifhorn' AND t11.READING = 'feld-06'
LEFT JOIN history AS t12 ON t1.`TIMESTAMP` = t12.`TIMESTAMP` AND t1.DEVICE = t12.DEVICE AND t1.TYPE = t12.TYPE AND t12.DEVICE = 'wetter_com_gifhorn' AND t12.READING = 'feld-07'
LEFT JOIN history AS t13 ON t1.`TIMESTAMP` = t13.`TIMESTAMP` AND t1.DEVICE = t13.DEVICE AND t1.TYPE = t13.TYPE AND t13.DEVICE = 'wetter_com_gifhorn' AND t13.READING = 'feld-08'
LEFT JOIN history AS t14 ON t1.`TIMESTAMP` = t14.`TIMESTAMP` AND t1.DEVICE = t14.DEVICE AND t1.TYPE = t14.TYPE AND t14.DEVICE = 'wetter_com_gifhorn' AND t14.READING = 'feld-09'
LEFT JOIN history AS t15 ON t1.`TIMESTAMP` = t15.`TIMESTAMP` AND t1.DEVICE = t15.DEVICE AND t1.TYPE = t15.TYPE AND t15.DEVICE = 'wetter_com_gifhorn' AND t15.READING = 'feld-10'
LEFT JOIN history AS t16 ON t1.`TIMESTAMP` = t16.`TIMESTAMP` AND t1.DEVICE = t16.DEVICE AND t1.TYPE = t16.TYPE AND t16.DEVICE = 'wetter_com_gifhorn' AND t16.READING = 'feld-11'
LEFT JOIN history AS t17 ON t1.`TIMESTAMP` = t17.`TIMESTAMP` AND t1.DEVICE = t17.DEVICE AND t1.TYPE = t17.TYPE AND t17.DEVICE = 'wetter_com_gifhorn' AND t17.READING = 'feld-12'
LEFT JOIN history AS t18 ON t1.`TIMESTAMP` = t18.`TIMESTAMP` AND t1.DEVICE = t18.DEVICE AND t1.TYPE = t18.TYPE AND t18.DEVICE = 'wetter_com_gifhorn' AND t18.READING = 'feld-13'
LEFT JOIN history AS t19 ON t1.`TIMESTAMP` = t19.`TIMESTAMP` AND t1.DEVICE = t19.DEVICE AND t1.TYPE = t19.TYPE AND t19.DEVICE = 'wetter_com_gifhorn' AND t19.READING = 'feld-14'
LEFT JOIN history AS t20 ON t1.`TIMESTAMP` = t20.`TIMESTAMP` AND t1.DEVICE = t20.DEVICE AND t1.TYPE = t20.TYPE AND t20.DEVICE = 'wetter_com_gifhorn' AND t20.READING = 'feld-15'
LEFT JOIN history AS t21 ON t1.`TIMESTAMP` = t21.`TIMESTAMP` AND t1.DEVICE = t21.DEVICE AND t1.TYPE = t21.TYPE AND t21.DEVICE = 'wetter_com_gifhorn' AND t21.READING = 'feld-16'
LEFT JOIN history AS t22 ON t1.`TIMESTAMP` = t22.`TIMESTAMP` AND t1.DEVICE = t22.DEVICE AND t1.TYPE = t22.TYPE AND t22.DEVICE = 'wetter_com_gifhorn' AND t22.READING = 'feld-17'
LEFT JOIN history AS t23 ON t1.`TIMESTAMP` = t23.`TIMESTAMP` AND t1.DEVICE = t23.DEVICE AND t1.TYPE = t23.TYPE AND t23.DEVICE = 'wetter_com_gifhorn' AND t23.READING = 'feld-18'
LEFT JOIN history AS t24 ON t1.`TIMESTAMP` = t24.`TIMESTAMP` AND t1.DEVICE = t24.DEVICE AND t1.TYPE = t24.TYPE AND t24.DEVICE = 'wetter_com_gifhorn' AND t24.READING = 'feld-19'
LEFT JOIN history AS t25 ON t1.`TIMESTAMP` = t25.`TIMESTAMP` AND t1.DEVICE = t25.DEVICE AND t1.TYPE = t25.TYPE AND t25.DEVICE = 'wetter_com_gifhorn' AND t25.READING = 'feld-20'
LEFT JOIN history AS t26 ON t1.`TIMESTAMP` = t26.`TIMESTAMP` AND t1.DEVICE = t26.DEVICE AND t1.TYPE = t26.TYPE AND t26.DEVICE = 'wetter_com_gifhorn' AND t26.READING = 'feld-21'
LEFT JOIN history AS t27 ON t1.`TIMESTAMP` = t27.`TIMESTAMP` AND t1.DEVICE = t27.DEVICE AND t1.TYPE = t27.TYPE AND t27.DEVICE = 'wetter_com_gifhorn' AND t27.READING = 'feld-22'
LEFT JOIN history AS t28 ON t1.`TIMESTAMP` = t28.`TIMESTAMP` AND t1.DEVICE = t28.DEVICE AND t1.TYPE = t28.TYPE AND t28.DEVICE = 'wetter_com_gifhorn' AND t28.READING = 'feld-23'
LEFT JOIN history AS t29 ON t1.`TIMESTAMP` = t29.`TIMESTAMP` AND t1.DEVICE = t29.DEVICE AND t1.TYPE = t29.TYPE AND t29.DEVICE = 'wetter_com_gifhorn' AND t29.READING = 'feld-24'
WHERE t1.DEVICE = 'wetter_com_gifhorn' AND t1.READING = 'Status' AND t1.`TIMESTAMP` >= CURRENT_DATE() AND t1.`TIMESTAMP` < CURRENT_DATE() + 1
ORDER BY t1.`TIMESTAMP`

--- Ende Code ---

Hier als Beispiel eine Zeile des Ergebnises:
ZeitStatusStatus2hdateregenfeld-01feld-02feld-03time_04feld-04feld-05feld-06feld-07feld-08feld-09feld-10feld-11feld-12feld-13feld-14feld-15feld-16feld-17feld-18feld-19feld-20feld-21feld-22feld-23feld-2417.08.21 06:14:521117.08.21Mäßiger Niederschlag beginnt gegen 06:30 Uhr00006:250< 0.4 l/m²/h0< 0.4 l/m²/h< 1.9 l/m²/h< 8.1 l/m²/h< 8.1 l/m²/h< 8.1 l/m²/h< 8.1 l/m²/h< 8.1 l/m²/h< 1.9 l/m²/h< 1.9 l/m²/h000< 0.4 l/m²/h< 0.4 l/m²/h0000
Vielleicht hilft das ja jemandem.  :D
Gruß
Tri

Jamo:
Hallo Tri,
danke, wirklich hilfreich. Weisst Du evtl, ob man anstatt der Stadt, evtl auch geokordinaten angeben kann?
Also anstelle https://www.wetter.com/deutschland/gifhorn/DE0003428.html eben so was wie (das hier funktioniert nicht): https://www.wetter.com/#geo:48.1374,11.5755,7

Ich moechte das Regenradar für meine jeweilige position ausgeben, und der link lässt sich so wie angegeben nicht generisch aendern, weil sich sowohl die Stadt als auch der String "DE000XXX.html" dahinter ändert.

Danke!

ch.eick:

--- Zitat von: Jamo am 19 August 2021, 00:10:26 ---Hallo Tri,
danke, wirklich hilfreich. Weisst Du evtl, ob man anstatt der Stadt, evtl auch geokordinaten angeben kann?
Also anstelle https://www.wetter.com/deutschland/gifhorn/DE0003428.html eben so was wie (das hier funktioniert nicht): https://www.wetter.com/#geo:48.1374,11.5755,7

Ich moechte das Regenradar für meine jeweilige position ausgeben, und der link lässt sich so wie angegeben nicht generisch aendern, weil sich sowohl die Stadt als auch der String "DE000XXX.html" dahinter ändert.

--- Ende Zitat ---
Da müsstest Du mal die Web Seite durchforsten und eventuell in der Hilfe nachschauen.

Tri:
Hallo Jamo,

ursprünglich wollte ich über die Koordinaten gehen, habe das aber so nicht hin bekommen. Vielleicht hilft da der erste Ansatz mit der Grafik der Regenwolken. Ursprünglich dachte ich daran, einen Kreis um die Position zu definieren und dort die Farbe der Pixel auszuwerten. Das Bild ist unter einem Link wie diesem zu finden:

https://overlays.w3dapi.de/radar/nearcast/wx_classified_filled_corrected_snow/20210819/202108190625/wx_classified_filled_corrected_snow_nearcast_202108190710.png

Eine Auswertung hatte ich über "Bitmaps – PNG und JPEG – in Canvas" vor. Damit können die Pixel abgefragt werden. Daraus ergibt sich dann die Aufgabe, die genaue Position in dem Bitmap zu bestimmen.

Da bei wetter.com diese Aufgabe schon für bestimmte Positionen mit Berücksichtigung der Windrichtung erledigt ist, habe ich diesen Ansatz verworfen.

Gruß
Tri

Jamo:
Hallo Tri,
danke, ich glaube das ist mir zu kompliziert. Ich möchte fuer meine aktuelle Position die visualisierte Regenradar Vorhersage haben, deswegen die Frage.

Basierend auf deiner Lösung, habe ich, anstatt die Farben der Felder zu konvertieren (hast Du mit reading08OMap gemacht, z.B. #a6caf0:< 0.4 l/m²/h), direkt die Farben in meinen color-01 ... color-24 readings generiert.
Diese Readings habe ich dann über eine sub "color2html" in eine kleine HTML tabelle mit 24 einzelnen Feldern convertiert, also ähnlich der kleinen Graphik, die auf der Wetter.com Webseite zu sehen ist.
Das kann man sich dann über das Weblink modul anzeigen lassen, -> "defmod WetterCom_bar weblink htmlCode {color2html('WetterCom','color')}"
Startzeit und folgende Zeitabstände sind im 20 minuten Abstand über der Tabelle als Zeit mit eingetragen.
Damit erhält man eine graphische Visualisierung des Regenradars für den Standort für die nächsten 2 Stunden, wie im Bild (die Farben sind fake, bei mir gibts im moment kein Regen). Ist sehr übersichtlich.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln