Ein virtueller Regensensor mit wetter.com und HTTPMOD

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

Vorheriges Thema - Nächstes Thema

Tri

Hallo jkriegl,

guter Hinweis mit $name, hier die geänderte einfache Version (Zeile mit DbLogExclude löschen):


defmod wetter_com_gifhorn HTTPMOD https://www.wetter.com/deutschland/gifhorn/DE0003428.html 290
attr wetter_com_gifhorn DbLogExclude .*
attr wetter_com_gifhorn reading08Name feld
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:(.*);;
attr wetter_com_gifhorn stateFormat Status
attr wetter_com_gifhorn userReadings Status:feld-1.* { \
0 + \
(ReadingsVal($name,"feld-1",0) ne "#fff" || \
ReadingsVal($name,"feld-2",0) ne "#fff" || \
ReadingsVal($name,"feld-3",0) ne "#fff" || \
ReadingsVal($name,"feld-4",0) ne "#fff" || \
ReadingsVal($name,"feld-5",0) ne "#fff" || \
ReadingsVal($name,"feld-6",0) ne "#fff" || \
ReadingsVal($name,"feld-7",0) ne "#fff" );;;; }



Gruß
Tri

Damian

Falls jemand Klartextmeldung braucht:

attr <device> reading01Name Ansage
attr <device> reading01Regex <span id="nowcast-text" class="portable-mb--">\W*(.*)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

MadMax-FHEM

#32
Hallo und vielen Dank für diese Idee! :)

Ich hab (für mich) ein wenig "rumgespielt" und folgendes bei mir laufen:

ich habe das userReadings-Zeugs in myUtils "ausgelagert" und erweitert

sub my_userReadingsWetterCom($$$$)
{
  my ($Device, $Start, $End, $Mode) = @_;
  my $LoopStart = $Start;
  my $ReturnTxt = "kein Niederschlag";
  my $ReturnNum = 0;
  my $RainVolume = 0;
  my $RainVolumeAvg = 0;
  my $FieldNum = "01";
  my $NoRainLimit = AttrVal($Device, "my_NoRainLimit", 0);
  my $LowRainLimit = AttrVal($Device, "my_LowRainLimit", 2);
  my $MediumRainLimit = AttrVal($Device, "my_MediumRainLimit", 5);
  my $HighRainLimit = AttrVal($Device, "my_HighRainLimit", 10);
 
#  Log3(undef, 1, "my_userReadingsWetterCom    Start: $Start      End: $End");

  while($LoopStart <= $End)
  {
    $FieldNum = sprintf("%02u", $LoopStart);
    $RainVolume += ReadingsNum($Device,"feld-$FieldNum",0);
    $LoopStart++;
  }
  $RainVolumeAvg = $RainVolume / ($End - $Start);
#  Log3(undef, 1, "my_userReadingsWetterCom    RainVolume: $RainVolume      RainVolumeAvg: $RainVolumeAvg     NoRainLimit: $NoRainLimit     LowRainLimit: $LowRainLimit    MediumRainLimit: $MediumRainLimit    HighRainLimit: $HighRainLimit");
 
  if($RainVolumeAvg > $HighRainLimit)
  {
    $ReturnTxt = "sehr starker Niederschlag";
    $ReturnNum = 4;
  }
  elsif($RainVolumeAvg > $MediumRainLimit)
  {
    $ReturnTxt = "starker Niederschlag";
    $ReturnNum = 3;
  }
  elsif($RainVolumeAvg > $LowRainLimit)
  {
    $ReturnTxt = "Niederschlag";
    $ReturnNum = 2;
  }
  elsif($RainVolumeAvg > $NoRainLimit)
  {
    $ReturnTxt = "leichter Niederschlag";
    $ReturnNum = 1;
  }

  if($Mode eq "txt")
  {
    return $ReturnTxt;
  }
  else
  {
    return $ReturnNum;
  }
}

(jaja, ich weiß: Prototypen / will jetzt aber hier gar nicht diskutieren, ich mach das so basta, wer ohne will: feel free ;)  )

EDIT: einige Fehler korrigiert! SORRY! ;) 

Die Logeinträge kann man nat. auch rausnehmen, waren nur für mich zum "Debuggen"...

Dann nat. die userReadings anpassen.
Ich habe hier mal die Möglichkeit mit Nummer (besser für programmatische Reaktionen) und Text (habe ich als "Anzeige"):

Status:feld-01.* {my_userReadingsWetterCom("$name", 1, 7, "txt")},
Status1h:feld-01.* {my_userReadingsWetterCom("$name", 8, 15, "txt")},
Status2h:feld-01.* {my_userReadingsWetterCom("$name", 16, 21, "txt")},
Status_num:feld-01.* {my_userReadingsWetterCom("$name", 1, 7, "num")},
Status1h_num:feld-01.* {my_userReadingsWetterCom("$name", 8, 15, "num")},
Status2h_num:feld-01.* {my_userReadingsWetterCom("$name", 16, 21, "num")}


Man kann nun leicht anpassen, wenn man andere "field-Nummern" haben will oder weitere Unterteilungen der Zeit bzw. wenn jemand andere Nummern-Zeit-Zuordnungen will, einfach entsprechend Start/Stopp anpassen... ;)

EDIT: entsprechend habe ich auch mein stateFormat angepasst

date time_04
</br>Aktuell: Status
</br>In 1h: Status1h
</br>In 2h: Status2h
</br>regen


Und dann habe ich noch eigene Attribute beigefügt, wo ich eben "einstellen" kann, was für mich "kein Regen", "wenig Regen", "Regen" und "(sehr) viel Regen" bedeutet...
Zum Vergleich wird immer der Durchschnittswert des angegebenen "Zeitraums" (bzw. Start-Field -> End-Field) genommen...

userattr my_NoRainLimit my_LowRainLimit my_MediumRainLimit my_HighRainLimit

Dann halt noch die Attribute entsprechend mit den Limit-Werten versehen, meine aktuelle Einstellung (mag sich noch ändern ;)  ):

my_HighRainLimit 10
my_LowRainLimit 3
my_MediumRainLimit 6
my_NoRainLimit 0.5


Ich hoffe ich hab jetzt (hier beim Posten) keinen "Murks" reingebracht...
...viel testen konnte ich noch nicht, da es (nat.) gerade NICHT regnet und auch nichts angekündigt ist...
...vielleicht kann das ja noch wer brauchen (oder verbessern).

Achja: ich hab das mal parallel mit meinem Regensensor laufen lassen...
...naja die Markise würde ich danach nicht steuern...
...aber so als "Forecast" ist es echt toll! :)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Helmi55

Hallo und Danke (für den Hinweis bezüglich DB)
Leider funktioniert es in Österreich tatsächlich nicht.
Hier schüttet es und die Anzeige sagt kein Niederschlag in Sicht (naj vielleicht nachher :'()

Hier mein list:
Internals:
   BUSY       0
   DEF        https://at.wetter.com/oesterreich/st-andrae-woerdern/ATAT10573.html 290
   FUUID      612c9ac5-f33f-c23a-cbce-75d1f33fe193c9e6
   Interval   290
   MainURL    https://at.wetter.com/oesterreich/st-andrae-woerdern/ATAT10573.html
   ModuleVersion 4.1.10 - 6.7.2021
   NAME       wetter_com_woerdern
   NOTIFYDEV  global
   NR         44
   NTFY_ORDER 50-wetter_com_woerdern
   STATE      Status
   TYPE       HTTPMOD
   value     
   CompiledRegexes:
   HttpUtils:
     NAME       
     addr       https://at.wetter.com:443
     auth       0
     code       200
     compress   1
     conn       
     data       
     displayurl https://at.wetter.com/oesterreich/st-andrae-woerdern/ATAT10573.html
     header     
     host       at.wetter.com
     httpheader HTTP/1.1 200 OK
Accept-Ranges: bytes
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Age: 0
Cache-Control: public
Content-Encoding: gzip
Content-Type: text/html; charset=UTF-8
Date: Tue, 31 Aug 2021 10:42:41 GMT
Expires: Tue, 31 Aug 2021 10:47:41 GMT
grace: none
Vary: X-MOBILE-POC, X-PROGRAMMATIC, X-OASIS-VERSION, X-CMP-GROUP, X-PWA-GROUP, X-IE-USER, X-CMP-RELOAD, User-Agent, Accept-Encoding
X-Backend: green
X-Cache: MISS
X-Cache-Hits: 0
X-Content-Type-Options: nosniff
X-Forwarded-Proto: https
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Connection: Close
     httpversion 1.0
     hu_blocking 0
     hu_filecount 1
     hu_port    443
     hu_portSfx
     ignoreredirects 1
     loglevel   4
     path       /oesterreich/st-andrae-woerdern/ATAT10573.html
     protocol   https
     redirects  0
     timeout    2
     url        https://at.wetter.com/oesterreich/st-andrae-woerdern/ATAT10573.html
     sslargs:
   QUEUE:
   READINGS:
     2021-08-31 12:42:42   date            Di 31.08.
     2021-08-31 11:25:22   feld-01         0
     2021-08-31 11:25:22   feld-02         0
     2021-08-31 11:25:22   feld-03         0
     2021-08-31 11:25:22   feld-04         0
     2021-08-31 11:25:22   feld-05         0
     2021-08-31 11:25:22   feld-06         0
     2021-08-31 11:25:22   feld-07         0
     2021-08-29 12:55:26   feld-08         0
     2021-08-29 12:55:26   feld-09         0
     2021-08-29 12:55:26   feld-10         0
     2021-08-29 12:55:26   feld-11         0
     2021-08-29 12:55:26   feld-12         0
     2021-08-29 12:55:26   feld-13         0
     2021-08-29 12:55:26   feld-14         0
     2021-08-29 12:55:26   feld-15         0
     2021-08-29 12:55:26   feld-16         0
     2021-08-29 12:55:26   feld-17         0
     2021-08-29 12:55:26   feld-18         0
     2021-08-29 12:55:26   feld-19         0
     2021-08-29 12:55:26   feld-20         < 0.4 l/m²/h
     2021-08-29 12:55:26   feld-21         < 0.4 l/m²/h
     2021-08-29 12:55:26   feld-22         < 0.4 l/m²/h
     2021-08-29 12:55:26   feld-23         < 0.4 l/m²/h
     2021-08-29 12:55:26   feld-24         < 0.4 l/m²/h
     2021-08-31 11:25:22   regen           Kein Niederschlag in Sicht
     2021-08-29 12:55:26   time_04         12:55
     2021-08-31 12:42:42   wolken          m\u00e4\u00dfiger Regen
   REQUEST:
     context    reading
     data       
     header     
     ignoreredirects 0
     num        unknown
     retryCount 0
     type       update
     url        https://at.wetter.com/oesterreich/st-andrae-woerdern/ATAT10573.html
   defptr:
     readingBase:
       date       reading
       wolken     reading
     readingNum:
       date       02
       wolken     03
     readingOutdated:
     requestReadings:
       update:
         date       reading 02
         wolken     reading 03
Attributes:
   reading01Name regen
   reading01Regex <span.id=\"nowcast-text\".class=\"portable-mb--\">\W*(.*)\W*</span>
   reading02Name date
   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*<\/div>
   reading03Name wolken
   reading03OMap wolkenlos:0/8 wolkenlos,sonnig:1/8 sonnig,heiter:2/8 heiter,leicht bew\u00f6lkt:3/8 leicht bewölkt,wolkig:4/8 wolkig,bew\u00f6lkt:5/8 bewölkt,stark bew\u00f6lkt:6/8 stark bewölkt,fast bedeckt:7/8 fast bedeckt,bedeckt:8/8 bedeckt
   reading03Regex <div.id..rtw_cnt..data-rtw..*..quot.*shortText.quot...quot.(.*).quot...quot.*longText.*quot
   reading08-1Name feld-01
   reading08-25Name time_04
   reading08-2Name feld-02
   reading08-3Name feld-03
   reading08-4Name feld-04
   reading08-5Name feld-05
   reading08-6Name feld-06
   reading08-7Name feld-07
   reading08-8Name feld-08
   reading08-9Name feld-09
   reading08Name feld
   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(*)
   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:(.*);
   room       KLF200Node
   stateFormat Status
   userReadings Status:feld-1.* {
0 +
(ReadingsVal($name,"feld-1",0) ne "#fff" ||
ReadingsVal($name,"feld-2",0) ne "#fff" ||
ReadingsVal($name,"feld-3",0) ne "#fff" ||
ReadingsVal($name,"feld-4",0) ne "#fff" ||
ReadingsVal($name,"feld-5",0) ne "#fff" ||
ReadingsVal($name,"feld-6",0) ne "#fff" ||
ReadingsVal($name,"feld-7",0) ne "#fff" );; }


grüß
Helmut
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

MadMax-FHEM

#34
Zitat von: Helmi55 am 31 August 2021, 12:45:52
Hallo und Danke (für den Hinweis bezüglich DB)
Leider funktioniert es in Österreich tatsächlich nicht.
Hier schüttet es und die Anzeige sagt kein Niederschlag in Sicht (naj vielleicht nachher :'()

...

grüß
Helmut

EDIT: drum ja auch meine Anmerkung, dass ich das jetzt zur Markisensteuerung nicht nehmen würde. Wetter.com lag schon (oft) (ganz arg) daneben ;)

Naja, deine "Regenauswertung" (userReadings) geht ja nur von field-01 bis field-07:
Zitat
   userReadings Status:feld-1.* {
0 +
(ReadingsVal($name,"feld-1",0) ne "#fff" ||
ReadingsVal($name,"feld-2",0) ne "#fff" ||
ReadingsVal($name,"feld-3",0) ne "#fff" ||
ReadingsVal($name,"feld-4",0) ne "#fff" ||
ReadingsVal($name,"feld-5",0) ne "#fff" ||
ReadingsVal($name,"feld-6",0) ne "#fff" ||
ReadingsVal($name,"feld-7",0) ne "#fff" );; }

EDIT: wobei ich das ja bei mir über die Regenmenge (ReadingsNum) gelöst habe bzw. über die Durchschnittsmenge im "Zeitraum". Weil ja die Werte schon als Regenmenge in den Readings field-01 bis field-24 stehen...

-> da ist eben kein Regen angekündigt -> Regenmenge 0:

Zitat
     2021-08-31 11:25:22   feld-01         0
     2021-08-31 11:25:22   feld-02         0
     2021-08-31 11:25:22   feld-03         0
     2021-08-31 11:25:22   feld-04         0
     2021-08-31 11:25:22   feld-05         0
     2021-08-31 11:25:22   feld-06         0
     2021-08-31 11:25:22   feld-07         0

Regen gibt's erst später, so in (knapp) 2h ;)

Zitat
     2021-08-29 12:55:26   feld-20         < 0.4 l/m²/h
     2021-08-29 12:55:26   feld-21         < 0.4 l/m²/h
     2021-08-29 12:55:26   feld-22         < 0.4 l/m²/h
     2021-08-29 12:55:26   feld-23         < 0.4 l/m²/h
     2021-08-29 12:55:26   feld-24         < 0.4 l/m²/h

EDIT: und kam dann noch die Regenankündigung? Oder hat es sich Wetter.com wieder anders überlegt? ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Helmi55

Hallo Joachim,

geregnet hat es - aber nicht auf der "Anzeige"
Feld 20-24 das sind alte Werte (anscheinend vom Kopiervorgang!) 29.8.12:55
Daran sieht man mMn genau das es keine Auswertung für AT gibt.
Tja wir sind wieder benachteiligt.... ;D ;D

Zum Glück hab ich keine Markise die ich steuern muss

Wäre ein nice to have gewesen - aber man(n) braucht nicht alles.

Jetzt muss ich schauen das ich mein HTTPMOD mit dem Ofen hinbekomme

schönen Tag

Helmut
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

jkriegl

Läuft dieser Regensensor noch? - scheinbar muss man Regex anpassen
Rpi 3, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly

MadMax-FHEM

Bei mir läuft das noch.

Ob es allerdings in genau dieser Definition mit genau diesen userReadings/subs tut müsste ich prüfen...

Beachte es aber nur so lala.

Für Markise ist es dann doch zu ungenau bzw. stimmt es nicht immer.
Habe dazu einen ZigBee Wassersensor umgebaut...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MadMax-FHEM

Zitat von: jkriegl am 07 August 2022, 16:57:40
Läuft dieser Regensensor noch? - scheinbar muss man Regex anpassen

Muss revidieren: scheinen tatsächlich nicht mehr alle RegEx zu passen (Seite umgebaut? Die Daten gibt es [so] nicht mehr?)

Einige Readings werden aktialisiert (vornehmlich Datum/Uhrzeit des "Vorcasts", daher ist mir das auch nicht gleich aufgefallen)...
Die wichtigen aber wohl eben nicht :-\

Evtl. kann ich mir das mal anschauen, bin aber nicht sicher, ob ich was finde (RegEx-Legastheniker ;)  )...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

ch.eick

Moin,
könnte mir jemand mal eine aktuelle komplette RAW Definition schicken? Auch gerne mit myUltils Funktionen und gerne auch uiTable.
Ich würde mich für die Regenprognose auch interessieren.

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

MadMax-FHEM

Zitat von: ch.eick am 15 August 2022, 09:00:14
Moin,
könnte mir jemand mal eine aktuelle komplette RAW Definition schicken? Auch gerne mit myUltils Funktionen und gerne auch uiTable.
Ich würde mich für die Regenprognose auch interessieren.

VG
   Christian

Kann ich heute Abend machen.
Allerdings noch mit ohne Anpassung ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

ch.eick

#41
Zitat von: MadMax-FHEM am 15 August 2022, 09:06:08
Kann ich heute Abend machen.
Allerdings noch mit ohne Anpassung ;)

Gruß, Joachim
Hallo Joachim,
danke für die Rückmeldung, dann mach doch einfach mit mit Anpassung und ich warte halt noch etwas. Zu tun gibt es ja noch genug ;-)
Ich habe ja keine Markiese und würde das aber gerne in meine PV Leistungsprognose mit rein nehmen.

Für Rollos habe ich über wunderground auch schon einen virtuellen Brightness Sensor erstellt. Das läuft echt super und
bedient sich dreier umliegenden Messstationen für die aktuelle Radiation und UV Index Werte.

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

Jamo

Bei mir läuft das hier seit über einem Jahr reibungslos:defmod WetterCom HTTPMOD https://www.wetter.com/deutschland/berlin/prenzlauer-berg/DE0001020372.html
attr WetterCom alignTime 00:01:30
attr WetterCom event-on-change-reading rainData
attr WetterCom reading01Name AnsageKurz
attr WetterCom reading01Regex <span id="nowcast-text" class="portable-mb--">\W*(.*)
attr WetterCom reading02Name date
attr WetterCom reading02Regex <div.class=\"\[.forecast-navigation-grid.\]\"\X*?\"Wettervorhersage.für.den.(.*?).\"
attr WetterCom reading03Name rainData
attr WetterCom reading03Regex <span.id=\"nowcast-text\".class=\"portable-mb--\">\W*(.*)\W*</span>
attr WetterCom reading07-1Name color-01
attr WetterCom reading07-2Name color-02
attr WetterCom reading07-3Name color-03
attr WetterCom reading07-4Name color-04
attr WetterCom reading07-5Name color-05
attr WetterCom reading07-6Name color-06
attr WetterCom reading07-7Name color-07
attr WetterCom reading07-8Name color-08
attr WetterCom reading07-9Name color-09
attr WetterCom reading07Name color
attr WetterCom reading07RegOpt g
attr WetterCom reading07Regex <td.class=\"\[.colorcell.top.border..grey.bottom.border..grey.*\]\".style=\"background.color.(.*?)\;;\"><\/td>
attr WetterCom reading08Name time
attr WetterCom reading08Regex <td.class=\"\[.colorcell.top.border..grey.bottom.border..grey.left.border..grey.\]\".style=\"background.color.\X*?data-nowcastKey=\"3\">(.*?)<
attr WetterCom room Weather
attr WetterCom stateFormat date time Regen aktuell: Status Regen 2h: Status2h Text: rainData
attr WetterCom timeout 5
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

MadMax-FHEM

#43
@Jamo: vielen Dank! :)

Mit deinen RegExen habe ich mein Zeugs auch wieder hinbekommen :)

Naja fast: Bewölkung fehlt noch... :-\

Zitat
UNMATCHED_READINGS wolken

EDIT: das sollte sowas rauskommen "0/8 wolkenlos" usw.

Aber dazu habe ich heute keine Lust mehr...

Hier mal meine RawDef inkl. der Sub für userReadings: zusätzliche Readings für Regenvorhersage ausgehend von den "Farben" umgesetzt in Regenmenge / als Text und als Nummer -> autom. Auswertung)...


defmod wetter_com_NiederschlagFuerthInnenstadt HTTPMOD https://www.wetter.com/deutschland/fuerth-innenstadt/DE0002804012.html 600
attr wetter_com_NiederschlagFuerthInnenstadt userattr my_HighRainLimit my_LowRainLimit my_MediumRainLimit my_NoRainLimit
attr wetter_com_NiederschlagFuerthInnenstadt alias Niederschlag-Prognose Wetter.com
attr wetter_com_NiederschlagFuerthInnenstadt group Wetter
attr wetter_com_NiederschlagFuerthInnenstadt icon weather_rain_snow_heavy
attr wetter_com_NiederschlagFuerthInnenstadt my_HighRainLimit 10
attr wetter_com_NiederschlagFuerthInnenstadt my_LowRainLimit 3
attr wetter_com_NiederschlagFuerthInnenstadt my_MediumRainLimit 6
attr wetter_com_NiederschlagFuerthInnenstadt my_NoRainLimit 0.5
attr wetter_com_NiederschlagFuerthInnenstadt reading01Name regen
attr wetter_com_NiederschlagFuerthInnenstadt reading01Regex <span.id=\"nowcast-text\".class=\"portable-mb--\">\W*(.*)\W*</span>
attr wetter_com_NiederschlagFuerthInnenstadt reading02Name date
attr wetter_com_NiederschlagFuerthInnenstadt 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*<\/div>
attr wetter_com_NiederschlagFuerthInnenstadt reading03Name wolken
attr wetter_com_NiederschlagFuerthInnenstadt reading03OMap wolkenlos:0/8 wolkenlos,sonnig:1/8 sonnig,heiter:2/8 heiter,leicht bew\u00f6lkt:3/8 leicht bewölkt,wolkig:4/8 wolkig,bew\u00f6lkt:5/8 bewölkt,stark bew\u00f6lkt:6/8 stark bewölkt,fast bedeckt:7/8 fast bedeckt,bedeckt:8/8 bedeckt
attr wetter_com_NiederschlagFuerthInnenstadt reading03Regex <div.id..rtw_cnt..data-rtw..*..quot.*shortText.quot...quot.(.*).quot...quot.*longText.*quot
attr wetter_com_NiederschlagFuerthInnenstadt reading07Name time
attr wetter_com_NiederschlagFuerthInnenstadt reading07Regex <td.class=\"\[.colorcell.top.border..grey.bottom.border..grey.left.border..grey.\]\".style=\"background.color.\X*?data-nowcastKey=\"3\">(.*?)<
attr wetter_com_NiederschlagFuerthInnenstadt reading08-1Name feld-01
attr wetter_com_NiederschlagFuerthInnenstadt reading08-2Name feld-02
attr wetter_com_NiederschlagFuerthInnenstadt reading08-3Name feld-03
attr wetter_com_NiederschlagFuerthInnenstadt reading08-4Name feld-04
attr wetter_com_NiederschlagFuerthInnenstadt reading08-5Name feld-05
attr wetter_com_NiederschlagFuerthInnenstadt reading08-6Name feld-06
attr wetter_com_NiederschlagFuerthInnenstadt reading08-7Name feld-07
attr wetter_com_NiederschlagFuerthInnenstadt reading08-8Name feld-08
attr wetter_com_NiederschlagFuerthInnenstadt reading08-9Name feld-09
attr wetter_com_NiederschlagFuerthInnenstadt reading08Name feld
attr wetter_com_NiederschlagFuerthInnenstadt 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_NiederschlagFuerthInnenstadt reading08RegOpt g
attr wetter_com_NiederschlagFuerthInnenstadt reading08Regex <td.class=\"\[.colorcell.top.border..grey.bottom.border..grey.*\]\".style=\"background.color.(.*?)\;;\"><\/td>
attr wetter_com_NiederschlagFuerthInnenstadt room Balkon,Overview,Overview Ambient,Overview Weather
attr wetter_com_NiederschlagFuerthInnenstadt showBody 0
attr wetter_com_NiederschlagFuerthInnenstadt showError 1
attr wetter_com_NiederschlagFuerthInnenstadt showMatched 1
attr wetter_com_NiederschlagFuerthInnenstadt sortby 02
attr wetter_com_NiederschlagFuerthInnenstadt stateFormat date time\
</br>Bewölkung: wolken\
</br>Aktuell: Status\
</br>In 1h: Status1h\
</br>In 2h: Status2h\
</br>regen
attr wetter_com_NiederschlagFuerthInnenstadt userReadings Status:feld-01.* {my_userReadingsWetterCom("$name", 1, 7, "txt")},\
Status1h:feld-01.* {my_userReadingsWetterCom("$name", 8, 15, "txt")},\
Status2h:feld-01.* {my_userReadingsWetterCom("$name", 16, 21, "txt")},\
Status_num:feld-01.* {my_userReadingsWetterCom("$name", 1, 7, "num")},\
Status1h_num:feld-01.* {my_userReadingsWetterCom("$name", 8, 15, "num")},\
Status2h_num:feld-01.* {my_userReadingsWetterCom("$name", 16, 21, "num")}
attr wetter_com_NiederschlagFuerthInnenstadt verbose 0



sub my_userReadingsWetterCom($$$$)
{
  my ($Device, $Start, $End, $Mode) = @_;
  my $LoopStart = $Start;
  my $ReturnTxt = "kein Niederschlag";
  my $ReturnNum = 0;
  my $RainVolume = 0;
  my $RainVolumeAvg = 0;
  my $FieldNum = "01";
  my $NoRainLimit = AttrVal($Device, "my_NoRainLimit", 0);
  my $LowRainLimit = AttrVal($Device, "my_LowRainLimit", 2);
  my $MediumRainLimit = AttrVal($Device, "my_MediumRainLimit", 5);
  my $HighRainLimit = AttrVal($Device, "my_HighRainLimit", 10);
 
#  Log3(undef, 1, "my_userReadingsWetterCom    Start: $Start      End: $End");

  while($LoopStart <= $End)
  {
    $FieldNum = sprintf("%02u", $LoopStart);
#    Log3(undef, 1, "my_userReadingsWetterCom    Start: $LoopStart      FieldNum: $FieldNum");
    $RainVolume += ReadingsNum($Device,"feld-$FieldNum",0);
    $LoopStart++;
  }
  $RainVolumeAvg = $RainVolume / ($End - $Start);
#  Log3(undef, 1, "my_userReadingsWetterCom    RainVolume: $RainVolume      RainVolumeAvg: $RainVolumeAvg     NoRainLimit: $NoRainLimit     LowRainLimit: $LowRainLimit    MediumRainLimit: $MediumRainLimit    HighRainLimit: $HighRainLimit");
 
  if($RainVolumeAvg > $HighRainLimit)
  {
    $ReturnTxt = "sehr starker Niederschlag";
    $ReturnNum = 5;
#    Log3(undef, 1, "my_userReadingsWetterCom    Sehr starker Niederschlag     ReturnTxt: $ReturnTxt");
  }
  elsif($RainVolumeAvg > $MediumRainLimit)
  {
    $ReturnTxt = "starker Niederschlag";
    $ReturnNum = 4;
#    Log3(undef, 1, "my_userReadingsWetterCom    Starker Niederschlag     ReturnTxt: $ReturnTxt");
  }
  elsif($RainVolumeAvg > $LowRainLimit)
  {
    $ReturnTxt = "Niederschlag";
    $ReturnNum = 3;
#    Log3(undef, 1, "my_userReadingsWetterCom    Niederschlag      ReturnTxt: $ReturnTxt");
  }
  elsif($RainVolumeAvg > $NoRainLimit)
  {
    $ReturnTxt = "leichter Niederschlag";
    $ReturnNum = 2;
#    Log3(undef, 1, "my_userReadingsWetterCom    Leichter Niederschlag      ReturnTxt: $ReturnTxt");
  }
  elsif($RainVolumeAvg > 0)
  {
    $ReturnTxt = "Nieseln";
    $ReturnNum = 1;
  }

  if($Mode eq "txt")
  {
    return $ReturnTxt;
  }
  else
  {
    return $ReturnNum;
  }
}


EDIT: über userReadings umgesetzte "Vorhersage" kann entweder im Code angepasst werden (also ab wann nieseln, leichter Regen, Regen, starker Regen usw.) oder über folgende Attribute
Zitat
  my $NoRainLimit = AttrVal($Device, "my_NoRainLimit", 0);
  my $LowRainLimit = AttrVal($Device, "my_LowRainLimit", 2);
  my $MediumRainLimit = AttrVal($Device, "my_MediumRainLimit", 5);
  my $HighRainLimit = AttrVal($Device, "my_HighRainLimit", 10);
Diese müssen nat. vorher als userattr angelegt worden sein...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

ch.eick

Als aller erstes mal vielen Dank für die tolle Vorarbeit.

Zitat von: MadMax-FHEM am 15 August 2022, 20:51:43
Mit deinen RegExen habe ich mein Zeugs auch wieder hinbekommen :)

Naja fast: Bewölkung fehlt noch... :-\

EDIT: das sollte sowas rauskommen "0/8 wolkenlos" usw.

Aber dazu habe ich heute keine Lust mehr...

Hier mal meine RawDef inkl. der Sub für userReadings: zusätzliche Readings für Regenvorhersage ausgehend von den "Farben" umgesetzt in Regenmenge / als Text und als Nummer -> autom. Auswertung)...

EDIT: über userReadings umgesetzte "Vorhersage" kann entweder im Code angepasst werden (also ab wann nieseln, leichter Regen, Regen, starker Regen usw.) oder über folgende AttributeDiese müssen nat. vorher als userattr angelegt worden sein...

Gruß, Joachim

Hallo Joachim,
vielen Dank für das Update, ich bin dann jetzt auch eingestiegen :-)

In den myUtils verwende ich für das Logging gerne folgendes, was dann auf den verbose Level des Devices reagiert.

     my $verbose = AttrVal($Device,"verbose",0) ;

     if ($verbose >= 3) { Log 3, "SpeicherMidday_Inverter_Max_Power manuell gesetzt" } ;

Dadurch kannst Du auch auf verschiedene Level mit unterschiedlich vielen Messages reagieren.

Kann ich bei der Bewölkung noch irgendwie helfen?

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