Tägliche Regenmenge aus DWD-Radolan Daten einlesen

Begonnen von alkazaa, 12 August 2023, 21:12:09

Vorheriges Thema - Nächstes Thema

JoWiemann

Hallo,

anbei eine neue Version. _day_rain und _since_midnight hat jetzt keinen Timestamp merh im Reading Namen.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

romakrau

#121
Ich mal wieder. Ich erhalte folgenden Fehler bei dem Versuch die neue Version von CDCOpenData zu definieren:

[Regenmenge | Define.176] - EMERGENCY: ERROR: Cannot define a CDCOpenData device. Perl modul FHEM::Scheduler::Cron: update Fhem  is missing.
2023.11.03 19:57:49 1: define Regenmenge CDCOpenData: ERROR: Cannot define a CDCOpenData device. Perl modul FHEM::Scheduler::Cron: update Fhem  is missing.

Gruß Roman

FHEM UPDATE all hatte ich gemacht.

EDIT: Mit der Version aus Post #27 geht es. Allerdings fehelen dann die neuen Funktionen.

JoWiemann

Zitat von: romakrau am 03 November 2023, 20:02:18FHEM UPDATE all hatte ich gemacht.

Hast Du Fhem neu gestartet? Schau bitte einmal ob diese Datei:
/opt/fhem/lib/FHEM/Scheduler/Cron.pm
vorhanden ist.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

romakrau

#123
Hallo Jörg,
Ich habe das Verzeichnis /opt/fhem/lib/FHEM/Scheduler
nicht. Welche Option muss ich nachinstallieren?
Gruss Roman

EDIT: werde ich aus dem svn nachistallieren müssen?!

JoWiemann

Zitat von: romakrau am 05 November 2023, 21:55:52Hallo Jörg,
Ich habe das Verzeichnis /opt/fhem/lib/FHEM/Scheduler
nicht. Welche Option muss ich nachinstallieren?
Gruss Roman

EDIT: werde ich aus dem svn nachistallieren müssen?!

Hallo Roman,

sollte durch ein update von Fhem erledigt werden.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

romakrau

Hatte ich auch gehofft. Habe ich manuell installiert, jetzt läufts. Danke für das tolle Tool.
Gruss Romman

alkazaa

Hallo Jörg,
ich hatte heute den (bisher von mir nicht abgefangenen) Fall, dass vom DWD ein Regenradar-Wert von 25.0 geliefert wird (2500 vor der Skalierung mit 0.01 ltr/m²/h), wenn 'not-valid' Daten vorliegen (Radar-Ausfall oder was auch immer).

Ich schlage folgenden patch vor: die Zeile
$rain_forecast = 0.01*(unpack( 'v*', $rain_forecast ) & 0xFFF);ersetzen durch
$rain_forecast = unpack( 'v*', $rain_forecast ) & 0xFFF;
    # A value of 2500 in the file marks invalid data.
    # It is reset to -1 in order to keep the y-axis scale small when plotting.
$rain_forecast = -1 if ($rain_forecast == 2500);

$rain_forecast *= 0.01;
# und gern noch ne log-Meldung an dieser Stelle

Beste Grüße
Franz

JoWiemann

Hallo Franz,

danke für den Hinweis. Den Patch werde ich einbauen.

Grüße

Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

alkazaa

Oops, mir fällt gerade ein, dass die gleiche '2500' Markierung auch für die daily und hourly Radolan gilt. Müsste da genauso gepatcht werden.
Gruß
Franz

JoWiemann

#129
Zitat von: alkazaa am 08 November 2023, 18:13:35Oops, mir fällt gerade ein, dass die gleiche '2500' Markierung auch für die daily und hourly Radolan gilt. Müsste da genauso gepatcht werden.
Gruß
Franz

Hallo,

habe die Änderungen eingebaut. Anbei eine neue Version.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

alkazaa

#130
Moin Jörg,
Zitat von: JoWiemann am 08 November 2023, 19:48:59habe die Änderungen eingebaut. Anbei eine neue Version.
Da ist noch ein copy&paste Fehler in Zeile 1494: bei'day rain' muss der Skalierungsfaktor 0.1 sein (wie korrekterweise bei 'since midnight rain'). Nur bei 'rain radar' ist er 0.01.

(Eigentlich müsste man den Faktor aus dem header-Teil der Datei parsen, falls DWD den irgendwann mal zu ändern beschließt. Bin aber im Moment zu faul dazu. Irgendwann vielleicht mal...)

Gruß
Franz

JoWiemann

Zitat von: alkazaa am 09 November 2023, 07:19:03Da ist noch ein copy&paste Fehler in Zeile 1494: bei'day rain' muss der Skalierungsfaktor 0.1 sein (wie korrekterweise bei 'since midnight rain'). Nur bei 'rain radar' ist er 0.01.
Gruß
Franz

Hallo Franz,

danke für den Hinweis und habe ich korrigiert.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Jamo

Hallo Jörg,
danke für die tolle Arbeit, natürlich auch an Franz - in Zeile 492 und 495 ist beidesmal  "my $dMod =" deklariert, und führt zu folgender Warning im Log : "my" variable $dMod masks earlier declaration in same scope at ./FHEM/98_CDCOpenData.pm line 495.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

JoWiemann

Zitat von: Jamo am 09 November 2023, 18:05:37Hallo Jörg,
danke für die tolle Arbeit, natürlich auch an Franz - in Zeile 492 und 495 ist beidesmal  "my $dMod =" deklariert, und führt zu folgender Warning im Log :
"my" variable $dMod masks earlier declaration in same scope at ./FHEM/98_CDCOpenData.pm line 495.

Hallo,

danke für den Hinweis. Anbei eine korrigierte Version.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Jamo

#134
Hi,
basierend auf den html bars der älteren Module '59_RainTMC.pm' und '59_Buienradar.pm', habe ich versucht die CDCOpenData rain_radar Werte auch mal als weblink HTMLbar anzeigen zu lassen. Sieht dann so aus wie im Bild, damit hat man schnell einen Überblick über die Regenvorhersage der nächsten 2 Stunden. Je dunkler die blaue Farbe, je mehr Regen gibt es. Das mit den Farben kann man auch schöner und feingranularer machen, aber dafür fehlt mir im Moment die Zeit und Geduld.

Hier meine Definitionen, der Aufruf des htmlcode für den Bar, und die nötigen subs für die 99_MyUtils.pm. Bitte beachten das ich als rain_radar readings die 'loc0_rain_radar' genommen habe.

Definition des Devices
defmod CDC CDCOpenData 48.1234,11.5678
attr CDC INTERVAL 600
attr CDC alias AtHome
attr CDC enableDWDdata rainRadarbyLocation
attr CDC event-on-change-reading .*/00
attr CDC verbose 2
Definition des weblink für den html bar:
defmod CDC_bar weblink htmlCode {radar2html('CDC','loc0_rain_radar')}Definition der subs in der 99_MyUtils.pm
# This is for htmlCode {radar2html('CDC','loc0_rain_radar')} Niederschlagsvorhersage (CDCOpenData)
# to create a HTML bar table with raincolors for the radarvalues
sub radar2html {
  my $name           = shift // 'CDC';# return "Error, sub color2html: we need name as parameter!";
  my $reading        = shift // 'loc0_rain_radar';    # return "Error, sub color2html: we need reading as parameter!";
  my $as_htmlBarhead = '<tr style="font-size:x-small">';
  my $as_htmlBar     = '';
  my $count          = 1;
  my $num            = 25;
  my $i2;
  for (my $i = 0; $i < $num; $i++) {
    if ($i <= 9) {$i2 = '0'.$i} else {$i2 = $i}
    my $radarvalue =        ReadingsNum      ($name,$reading.'/'.$i2,'-1');
    my $timestamp  = substr(ReadingsTimestamp($name,$reading.'/'.$i2,'2000-01-01 00:00:00'),11,5);
    my $color      = myColor2RGB($radarvalue);
    #Log 3, "[radar2html] i2=$i2, radarvalue=$radarvalue, color=$color, count=$count, timestamp=$timestamp"; #starttime=$starttime,
    if ($count > 1) {
      if ( ( ($count+2) % 4 ) == 0 || $i == 24) {
        $as_htmlBarhead .= '<td style="padding-left: 0; padding-right: 0">' . $timestamp . '</td>';
      } else {
        $as_htmlBarhead .= '<td style="padding-left: 0; padding-right: 0">&nbsp;&nbsp;&nbsp;&nbsp;</td>';
      }
      $as_htmlBar .= '<td style="padding-left: 0; padding-right: 0" bgcolor="' . $color . '">&nbsp;&nbsp;&nbsp;</td>';
    }
    $count++;
  }
  my $location  = '<b>' . AttrVal($name,'alias','MeineLocation') . '</b>'; # "<font color='red'>" . $body. "</font>"
  $as_htmlBar = "Niederschlagsvorhersage für $location (<a href=./fhem?detail=$name>$name</a>)<BR><table>" . $as_htmlBarhead . "</TR><tr style='border:2pt solid black'>" . $as_htmlBar . '</tr></table>';
  return $as_htmlBar;
}



sub myColor2RGB {
  my $value = shift // return "Error, sub myColor2RGB: we need value as parameter!";
  my $a     = $value*4;
  my $b     = ($value-int($value))*2;
  my $RGB1  = myCalcColor($a);
  my $RGB2  = myCalcColor($b);
  return $RGB1.$RGB2.$RGB1.$RGB2.'FF';
}


sub myCalcColor {
  my $a = shift // return "Error, sub myCalcColor: we need a as parameter!";
  if    ($a == 0)      {return 'F'} #transparent
  elsif ($a <= 0.0625) {return 'E'} #transparent
  elsif ($a <= 0.125)  {return 'D'}
  elsif ($a <= 0.1875) {return 'C'}
  elsif ($a <= 0.25)   {return 'B'}
  elsif ($a <= 0.3125) {return 'A'}
  elsif ($a <= 0.375)  {return '9'}
  elsif ($a <= 0.4375) {return '8'}
  elsif ($a <= 0.5)    {return '7'}
  elsif ($a <= 0.5625) {return '6'}
  elsif ($a <= 0.625)  {return '5'}
  elsif ($a <= 0.6875) {return '4'}
  elsif ($a <= 0.75)   {return '3'}
  elsif ($a <= 0.8125) {return '2'}
  elsif ($a <= 0.875)  {return '1'}
  elsif ($a <= 0.9375) {return '0'}
  else                 {return '0'}
}
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence