Ein virtueller Regensensor mit wetter.com und HTTPMOD

Begonnen von Tri, 17 August 2021, 15:54:09

Vorheriges Thema - Nächstes Thema

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²/h
1) 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.)

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\


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.

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


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:

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`


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-24
17.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!
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

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.
Da müsstest Du mal die Web Seite durchforsten und eventuell in der Hilfe nachschauen.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

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

#4
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.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

Tri

#5
Hallo Jamo,

vielen Dank für Deinen Hinweis. Das macht als Anzeige auf alle Fälle Sinn.


Mir sind gerade eben ein oder zwei Probleme mit dem virtuellem Regensensor aufgefallen:

Aufgrund dessen, dass es gerade ganz leicht und kurz genieselt hat, und leider keine Warnung gekommen ist, habe ich die Daten aus der Datenbank abgerufen:


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-24
19.08.2021 13:59:5800Do 19.08.Kein Niederschlag in Sicht00014:05000000000000000000000
19.08.2021 14:04:5800Do 19.08.Kein Niederschlag in Sicht00014:15000000000000000000000
19.08.2021 14:09:5800Do 19.08.Kein Niederschlag in Sicht00014:20000000000000000000000
Kommentar: Leichter Nieselregen um 14.13 Uhr ohne Warnung. War aber nur sehr kurz und sehr wenig, ist schnell wieder verdunstet. Ein normaler Regensensor hätte vielleicht auch nicht ausgelöst. Auffällig sind aber die Zeiten von ,,time_04".
19.08.2021 14:14:5800Do 19.08.Kein Niederschlag in Sicht00014:20000000000000000000000
19.08.2021 14:19:5800Do 19.08.Kein Niederschlag in Sicht00014:30000000000000000000000
19.08.2021 14:24:5800Do 19.08.Kein Niederschlag in Sicht00014:35000000000000000000000
19.08.2021 14:29:5800Do 19.08.Kein Niederschlag in Sicht00014:35000000000000000000000

Das zeigt, dass die Abfrage nicht 300 sec. haben darf oder syncronisiert werden muss. Vorschlag ist, die Zeit auf 290 sec. zu stellen. Dadurch, das die Auswertungen mit time_04 für 14.10, 14.25 fehlen, könnte die Erkennung gelitten haben. Vieleicht hat wetter.com aber auch nichts gemeldet. Das werde ich nicht mehr heraus bekommen.

Gruß
Tri

Tri

... das Ändern der Intervalle hat keine Lösung gebracht:

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-24
20.08.2021 09:17:4200Fr 20.08.Kein Niederschlag in Sicht00009:25000000000000000000000
20.08.2021 09:22:3200Fr 20.08.Kein Niederschlag in Sicht00009:30000000000000000000000
20.08.2021 09:27:2200Fr 20.08.Kein Niederschlag in Sicht00009:35000000000000000000000
20.08.2021 09:32:1200Fr 20.08.Kein Niederschlag in Sicht00009:40000000000000000000000
20.08.2021 09:37:0200Fr 20.08.Kein Niederschlag in Sicht00009:35000000000000000000000
20.08.2021 09:41:5200Fr 20.08.Kein Niederschlag in Sicht00009:50000000000000000000000
20.08.2021 09:46:4300Fr 20.08.Kein Niederschlag in Sicht00009:50000000000000000000000
20.08.2021 09:51:3200Fr 20.08.Kein Niederschlag in Sicht00009:55000000000000000000000
20.08.2021 09:56:2200Fr 20.08.Kein Niederschlag in Sicht00010:05000000000000000000000
20.08.2021 10:01:1200Fr 20.08.Kein Niederschlag in Sicht00010:10000000000000000000000
20.08.2021 10:06:0200Fr 20.08.Kein Niederschlag in Sicht00010:15000000000000000000000
20.08.2021 10:10:5200Fr 20.08.Kein Niederschlag in Sicht00010:20000000000000000000000
20.08.2021 10:15:4200Fr 20.08.Kein Niederschlag in Sicht00010:20000000000000000000000

Meistens funktioniert der virtuelle Regensensor - woher das oben beschriebene Problem herrührt, darüber kann ich nur spekulieren. Zum Teil geht die Zeit auch 5 min. zurück. Eventuell steht die Seite - obwohl explizit ausgeschlossen - auf irgend welchen Internet-Servern im Cache.

Tri

Heute kam ein leichter Regen ca. 1 Minute eher als die Meldung um 07:51:31. Es muss also ein Feld mehr, feld-08, ausgewertet werden um die Markise effektiv zu schützen. Dann wäre ein Befehl bzw. in diesem Fall eine Meldung um 07:41:50 gekommen.


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-24
22.08.2021 06:58:2000So 22.08.Kein Niederschlag in Sicht00007:00000000000000000000000
22.08.2021 07:03:1000So 22.08.Kein Niederschlag in Sicht00007:00000000000000000000000
22.08.2021 07:08:0001So 22.08.Zumeist mäßiger Niederschlag in wechselnder Intensität beginnt gegen 08:30 Uhr00007:100000000000000000< 0.4 l/m²/h< 0.4 l/m²/h< 1.9 l/m²/h< 8.1 l/m²/h< 8.1 l/m²/h
22.08.2021 07:12:5001So 22.08.Zumeist mäßiger Niederschlag in wechselnder Intensität beginnt gegen 08:30 Uhr00007:100000000000000000< 0.4 l/m²/h< 0.4 l/m²/h< 1.9 l/m²/h< 8.1 l/m²/h< 8.1 l/m²/h
22.08.2021 07:17:4001So 22.08.Zumeist mäßiger Niederschlag in wechselnder Intensität beginnt gegen 08:30 Uhr00007:2000000000000000< 0.4 l/m²/h< 0.4 l/m²/h< 1.9 l/m²/h< 1.9 l/m²/h< 8.1 l/m²/h< 8.1 l/m²/h< 8.1 l/m²/h
22.08.2021 07:22:3101So 22.08.Zumeist mäßiger Niederschlag in wechselnder Intensität beginnt gegen 08:25 Uhr00007:3000000000000< 0.4 l/m²/h< 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< 8.1 l/m²/h< 8.1 l/m²/h
22.08.2021 07:27:2101So 22.08.Zumeist mäßiger Niederschlag in wechselnder Intensität beginnt gegen 08:10 Uhr00007:350000000< 0.4 l/m²/h< 1.9 l/m²/h< 1.9 l/m²/h< 1.9 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< 8.1 l/m²/h< 8.1 l/m²/h< 8.1 l/m²/h< 8.1 l/m²/h
22.08.2021 07:32:1001So 22.08.Zumeist mäßiger Niederschlag in wechselnder Intensität beginnt gegen 08:25 Uhr00007:3000000000000< 0.4 l/m²/h< 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< 8.1 l/m²/h< 8.1 l/m²/h
22.08.2021 07:37:0101So 22.08.Zumeist mäßiger Niederschlag in wechselnder Intensität beginnt gegen 08:10 Uhr00007:350000000< 0.4 l/m²/h< 1.9 l/m²/h< 1.9 l/m²/h< 1.9 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< 8.1 l/m²/h< 8.1 l/m²/h< 8.1 l/m²/h< 8.1 l/m²/h
22.08.2021 07:41:5001So 22.08.Zumeist mäßiger Niederschlag in wechselnder Intensität beginnt gegen 08:00 Uhr00007:400000< 0.4 l/m²/h< 1.9 l/m²/h< 1.9 l/m²/h< 1.9 l/m²/h< 1.9 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< 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< 8.1 l/m²/h
22.08.2021 07:46:4001So 22.08.Zumeist mäßiger Niederschlag in wechselnder Intensität beginnt gegen 08:05 Uhr00007:450000< 0.4 l/m²/h< 1.9 l/m²/h< 1.9 l/m²/h< 1.9 l/m²/h< 1.9 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< 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< 8.1 l/m²/h
22.08.2021 07:51:3111So 22.08.Zumeist mäßiger Niederschlag in wechselnder Intensität beginnt gegen 08:00 Uhr00008:00< 0.4 l/m²/h< 0.4 l/m²/h< 0.4 l/m²/h< 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< 1.9 l/m²/h< 1.9 l/m²/h< 1.9 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< 8.1 l/m²/h< 1.9 l/m²/h< 0.4 l/m²/h
22.08.2021 07:56:2001So 22.08.Zumeist mäßiger Niederschlag in wechselnder Intensität beginnt gegen 08:15 Uhr00007:550000< 0.4 l/m²/h< 1.9 l/m²/h< 1.9 l/m²/h< 1.9 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²/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< 8.1 l/m²/h< 8.1 l/m²/h
22.08.2021 08:01:1211So 22.08.Mäßiger Niederschlag beginnt gegen 08:05 Uhr00< 0.4 l/m²/h08:100< 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²/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< 8.1 l/m²/h< 8.1 l/m²/h< 8.1 l/m²/h< 1.9 l/m²/h< 1.9 l/m²/h< 1.9 l/m²/h
22.08.2021 08:06:0111So 22.08.Zumeist mäßiger Niederschlag in wechselnder Intensität beginnt gegen 08:20 Uhr00008:150< 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< 8.1 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< 8.1 l/m²/h< 8.1 l/m²/h< 8.1 l/m²/h< 1.9 l/m²/h< 8.1 l/m²/h< 1.9 l/m²/h< 1.9 l/m²/h

gestein

Hallo,

ich wollte das gerade ausprobieren und habe das HTTPMOD entsprechend angepasst.
Zuerst musste ich aber noch das Attribut "bodyDecode" auf "auto" setzen:
defmod wetter_com_1200 HTTPMOD https://at.wetter.com/oesterreich/brigittenau/ATAT10678010.html 300
attr wetter_com_1200 bodyDecode auto
attr wetter_com_1200 comment https://forum.fhem.de/index.php/topic,122508.msg1170713.html#msg1170713
attr wetter_com_1200 reading01Name regen
attr wetter_com_1200 reading01Regex <span.id=\"nowcast-text\".class=\"portable-mb--\">\W*(.*)\W*</span>
attr wetter_com_1200 reading02Name date
attr wetter_com_1200 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_1200 reading08-1Name feld-01
attr wetter_com_1200 reading08-25Name time_04
attr wetter_com_1200 reading08-2Name feld-02
attr wetter_com_1200 reading08-3Name feld-03
attr wetter_com_1200 reading08-4Name feld-04
attr wetter_com_1200 reading08-5Name feld-05
attr wetter_com_1200 reading08-6Name feld-06
attr wetter_com_1200 reading08-7Name feld-07
attr wetter_com_1200 reading08-8Name feld-08
attr wetter_com_1200 reading08-9Name feld-09
attr wetter_com_1200 reading08Name feld
attr wetter_com_1200 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_1200 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_1200 room KLF200Node
attr wetter_com_1200 stateFormat date time_04 Regen aktuell: Status Regen 2h: Status2h Text: regen <html>website: <a target= "_blank" href="https://at.wetter.com/oesterreich/brigittenau/ATAT10678010.html">wetter.com</a></html>
attr wetter_com_1200 userReadings Status:feld-01.* {\
  0 + \
  (ReadingsVal("wetter_com_1200","feld-01",0) ne 0 || \
  ReadingsVal("wetter_com_1200","feld-02",0) ne 0 || \
  ReadingsVal("wetter_com_1200","feld-03",0) ne 0 || \
  ReadingsVal("wetter_com_1200","feld-04",0) ne 0 || \
  ReadingsVal("wetter_com_1200","feld-05",0) ne 0 || \
  ReadingsVal("wetter_com_1200","feld-06",0) ne 0 || \
  ReadingsVal("wetter_com_1200","feld-07",0) ne 0 );;;; },\
Status2h:regen.* {\
  0 + ( ReadingsVal("wetter_com_1200","regen",0) ne "Kein Niederschlag in Sicht" );;;; },\
Status_old,\
Status2h_old\


Allerdings hängt sich fhem auf, sobald das Device auf die wetter.com-Seite zugreift.
Die letzten log-Einträge sind:
2021.08.25 12:31:32.896 4: wetter_com_1200: BodyDecode is decoding the response body as UTF-8 (charset header UTF-8, bodyDecode set to auto)
2021.08.25 12:31:32.925 5: wetter_com_1200: GetCookies is looking for Cookies
2021.08.25 12:31:32.926 5: wetter_com_1200: ExtractSid called, context reading, num unknown
2021.08.25 12:31:32.926 4: wetter_com_1200: checking for redirects, code=200, ignore=0
2021.08.25 12:31:32.926 4: wetter_com_1200: no redirects to handle
2021.08.25 12:31:32.927 5: wetter_com_1200: Read callback sets LAST_REQUEST to update
2021.08.25 12:31:32.927 5: wetter_com_1200: CheckAuth decided no authentication required
2021.08.25 12:31:32.927 5: wetter_com_1200: UpdateReadingList created list of reading.* nums to parse during getUpdate as 01 02 08
2021.08.25 12:31:32.928 5: wetter_com_1200: Read starts parsing response to update with defined readings: 01,02,08
2021.08.25 12:31:32.929 5: wetter_com_1200: ExtractReading regen with regex /(?^:<span.id=\"nowcast-text\".class=\"portable-mb--\">\W*(.*)\W*</span>)/...
2021.08.25 12:31:32.930 5: wetter_com_1200: ExtractReading regen did not match
2021.08.25 12:31:32.930 5: wetter_com_1200: ExtractReading date with regex /(?^:<div class=\"\[.forecast-navigation-grid.\]\">\W*<a.data-label=\"VHSTabTag_1\"\W*class=\"\[.is-active.\]\"\W*.*\W*.*\W*.*\W*.*\W*.*\W*<div>\W*(.*)\W*<\>)/...


Das war es dann. Mehr kommt nicht.
Weiß jemand, woran das liegen kann?

Danke im Voraus
liebe Grüße
Gerhard

Tri

#9
Hallo Gerhard,

ich habe mal die Seite https://at.wetter.com/oesterreich/brigittenau/ATAT10678010.html aufgerufen. Ich vermisse da die Regenvorhersage. Unter https://www.wetter.com/deutschland/gifhorn/DE0003428.html sieht das anders aus. Die Bilder sind im Anhang. Das dürft aber nicht der Grund für einen Absturz sein. Vielleicht liegt es aber auch an den Berechtigungen der Seite, die ich (nicht?) gegeben habe. Wie sehen den die Readings aus?

Gruß
Tri

ch.eick

#10
Hallo zusammen,
auch ich muss leider von einem FHEM Absturz berichten, wenn HTTPMOD auf meine wetter.com Stadt zugreift.

Generell finde ich aber eine tolle Idee, die ich in meine PV-Leistungsprognose einbinden möchte. Dort verarbeite ich momentan nur die Regenwahrscheinlichkeit vom DWD mit 3h Update.
Da Regen einen starken Einfluss auf die PV-Leistung hat wäre eine exaktere Prognose über das Regenradar von größtem Interesse.

VG
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

enno

Moin Tri,

wenn ich dein defmod aus dem ersten Post bei mir eingebe, hängt sich FHEM mit 100% Auslastung weg und ich muss es neu starten.

Wenn ich die Attribute einzeln anlege, passiert es bei folgender Zeile:
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>

Eine Idee, was das Problem sein könnte?

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC

Jamo

Hallo Enno,
ja das hatte ich auch, liegt am Regexp, kann man unter https://regex101.com/ auch reproduzieren, das liefert eine 'undefinite loop' oder so was.
Ich hatte dann folgendes Regex, damit sollte das funktionieren:
reading08Regex <td.class=\"\[.colorcell.top.border..grey.bottom.border..grey.left.border..grey.\]\".style=\"background.color.(.*?)\;;\"\X*?\"
background.color.(.*?)\;;\"\X*?\"background.color.(.*?)\;;\"\X*?\"background.color.(.*?)\;;\"\X*?\"background.color.(.*?)\;;\"\X*?\"
background.color.(.*?)\;;\"\X*?\"background.color.(.*?)\;;\"\X*?\"background.color.(.*?)\;;\"\X*?\"background.color.(.*?)\;;\"\X*?\"
background.color.(.*?)\;;\"\X*?\"background.color.(.*?)\;;\"\X*?\"background.color:(.*?)\;;\"\X*?\"background.color.(.*?)\;;\"\X*?\"
background.color.(.*?)\;;\"\X*?\"background.color.(.*?)\;;\"\X*?\"background.color.(.*?)\;;\"\X*?\"background.color.(.*?)\;;\"\X*?\"
background.color.(.*?)\;;\"\X*?\"background.color.(.*?)\;;\"\X*?\"background.color.(.*?)\;;\"\X*?\"background.color.(.*?)\;;\"\X*?\"
background.color.(.*?)\;;\"\X*?\"background.color.(.*?)\;;\"\X*?\"background.color.(.*?)\;;\"\X*?data-nowcastKey=\"3\">(.*?)<

Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

Tri

Hallo zusammen,

das Problem kommt eventuell von der Eingabe in FHEM. Oben habe ich ja geschrieben, dass ich das über "RAW" gemacht habe.

Getestet habe ich jetzt nochmal mit https://regex101.com/ und https://www.wetter.com/deutschland/gifhorn/DE0003428.html

Ich habe dann den regex-String über die FHEM-Webseite (attr) wieder raus kopiert, da es zum Testen sonst nicht funktioniert: (durch z.B. doppelte Semikolon)
<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>

Dann hatte ich das Ergebnis wie im Anhang.

Gruß
Tri

ch.eick

Gibt es denn dann jetzt eine saubere, komplette Definition?
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick