Autor Thema: Ein virtueller Regensensor mit wetter.com und HTTPMOD  (Gelesen 3823 mal)

Offline Tri

  • New Member
  • *
  • Beiträge: 14
Antw:Ein virtueller Regensensor mit wetter.com und HTTPMOD
« Antwort #30 am: 29 August 2021, 11:53:48 »
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

Offline Damian

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8676
Antw:Ein virtueller Regensensor mit wetter.com und HTTPMOD
« Antwort #31 am: 29 August 2021, 17:40:23 »
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

Offline MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 10971
  • NIVEAu ist keine Creme...
Antw:Ein virtueller Regensensor mit wetter.com und HTTPMOD
« Antwort #32 am: 31 August 2021, 12:29:08 »
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
« Letzte Änderung: 09 September 2021, 19:11:12 von MadMax-FHEM »
FHEM PI3B+ Buster: 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)
FHEM PI3 RaspiOS (Test)
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Helmi55

  • Hero Member
  • *****
  • Beiträge: 1414
    • Helmi's Fotoseite
Antw:Ein virtueller Regensensor mit wetter.com und HTTPMOD
« Antwort #33 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 :'()

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.0 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.0 auf RPi 4B mit 4GB mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

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

Offline MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 10971
  • NIVEAu ist keine Creme...
Antw:Ein virtueller Regensensor mit wetter.com und HTTPMOD
« Antwort #34 am: 31 August 2021, 13:28:55 »
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
« Letzte Änderung: 31 August 2021, 15:33:28 von MadMax-FHEM »
FHEM PI3B+ Buster: 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)
FHEM PI3 RaspiOS (Test)

Offline Helmi55

  • Hero Member
  • *****
  • Beiträge: 1414
    • Helmi's Fotoseite
Antw:Ein virtueller Regensensor mit wetter.com und HTTPMOD
« Antwort #35 am: 01 September 2021, 11:57:25 »
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.0 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.0 auf RPi 4B mit 4GB mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

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