FTP Server DWD eingestellt

Hi Kai,

Sorry, hatte gar nicht mitbekommen das Du hier einen Frage gestellt hättest. Out of the Box wahrscheinlich nicht, aber die Warnungstypen gibt es ja und man könnte theoretisch schon filtern und dann separat schalten.

Ciao Pitti

Gesendet von iPad mit Tapatalk

Hi Pitti,

kein Problem :wink:

Hast du evtl. vor diese Funktion noch einzubauen, um auf die Warntypen reagieren zu können?

Beste Grüße
Kai

Hallo zusammen,

ich habe gerade das Script von @pitti bei mir integriert. Zunächst nochmal vielen Dank dafür.

Leider bekomme ich in IPSView die Karten nicht angezeigt. Im WebFront werden die Karten angezeigt.

in IPView habe ich eine HTML Box angelegt mit der ID der entsprechenden Karten, leider bleibt diese aber leer.

Was mache ich hier falsch?

VG
Thomas

Hallo Thomas,

dieser Thread Darstellung eine Animation mit mehreren Mediaimages - Seite 2 beschäftigt sich mit der Thematik :wink:

Gruß
Hans

Hallo Thomas,

noch ein Nachtrag. Zur Zeit ist IPSView 3.4 im Betatest. Diese Version stellt die Images vom DWD unter Win nun korrekt da. Den Aufwand den ich seiner Zeit getrieben habe um das Problem zu umlaufen kann man sich damit schenken :slight_smile:

Gruß
Hans

Hallo Hans,

vielen Dank für Deine Hinweise. Das mit der Version 3.4 hört sich ja sehr gut an :slight_smile:

Gruß
Thomas

Hallo,
habe das Script von pitti jetzt unter IPS 5 auf meinem Raspberry laufen und erhalte immer folgende Fehlermeldungen:

01.09.2018 00:54:20 | PHP | Error: Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed
   Error in Script /var/lib/symcon/scripts/53780.ips.php on Line 214
  134 in IPSLibrary/app/core/IPSLogger/IPSLogger.inc.php (call IPSLogger_Out)
   37 in IPSLibrary/app/core/IPSLogger/IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err)
      in IPSLogger_PhpErrorHandler
  214 in 53780.ips.php (call file_get_contents)
  195 in 53780.ips.php (call GetWeatherWarnings)
01.09.2018 00:54:20 | PHP | Error: Warning: file_get_contents(): Failed to enable crypto
   Error in Script /var/lib/symcon/scripts/53780.ips.php on Line 214
  134 in IPSLibrary/app/core/IPSLogger/IPSLogger.inc.php (call IPSLogger_Out)
   37 in IPSLibrary/app/core/IPSLogger/IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err)
      in IPSLogger_PhpErrorHandler
  214 in 53780.ips.php (call file_get_contents)
  195 in 53780.ips.php (call GetWeatherWarnings)
01.09.2018 00:54:20 | PHP | Error: Warning: file_get_contents(https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json): failed to open stream: operation failed
   Error in Script /var/lib/symcon/scripts/53780.ips.php on Line 214
  134 in IPSLibrary/app/core/IPSLogger/IPSLogger.inc.php (call IPSLogger_Out)
   37 in IPSLibrary/app/core/IPSLogger/IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err)
      in IPSLogger_PhpErrorHandler
  214 in 53780.ips.php (call file_get_contents)
  195 in 53780.ips.php (call GetWeatherWarnings)

Gruß,
Jürgen

Moin,

ja, DWD hat gestern neue Zertifikate eingespielt die file_get_contents() nicht mag.

Ersetze den Aufruf einfach mit Sys_GetURLContents(). Das sollte Abhilfe schaffen.

Gruß Heiko

Gesendet von iPhone mit Tapatalk

Danke @pitti
bringt jedoch jetzt eine neue Fehlermeldung:

01.09.2018 12:09:20 | PHP | Error: Error: Uncaught Error: Call to undefined function Sys_GetURLContents() in /var/lib/symcon/scripts/53780.ips.php:214
Stack trace:
#0 /var/lib/symcon/scripts/53780.ips.php(195): GetWeatherWarnings('107235000', 0, Array, Array, Array, 0)
#1 {main}
  thrown
   Error in Script /var/lib/symcon/scripts/53780.ips.php on Line 214
  134 in IPSLibrary/app/core/IPSLogger/IPSLogger.inc.php (call IPSLogger_Out)
   33 in IPSLibrary/app/core/IPSLogger/IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err)
  121 in IPSLibrary/app/core/IPSLogger/IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_PhpErrorHandler)
      in IPSLogger_PhpFatalErrorHandler

In Zeile 214 steht bei mir:

$json = Sys_GetURLContents($urls['JSON']);

Sorry immergut, ich hatte die Antwort schnell beim Frühstücken geschrieben.

Es heißt richtig


Sys_GetURLContent

also ohne (s) am Ende :frowning:

Ciao Heiko

Vielen Dank @pitti

jetzt klappt es wieder.:smiley:

Grüße,
Jürgen

Hallo zusammen,
Hallo squeeezer,

ich habe gestern dein Script aus Post # 10 gefunden, um die Wetterberichte vom DWD in meine View einzubinden.

<?

$forecast = API_GetWeatherForecastText("DWEH");
#print_r($forecast);

// String Variablen anlegen
SetValue(29950 /*[-= in Arbeit\Wetterbericht\DWD_Wetterbericht_NRW\DWD Wetterbericht Tag 1]*/, $forecast[short]);
#SetValue(52393 /*[-= in Arbeit\Wetterbericht\DWD_Wetterbericht_NRW\DWD Wetterbericht Tag 1 Heute]*/, $forecast[today]);
#SetValue(21406 /*[-= in Arbeit\Wetterbericht\DWD_Wetterbericht_NRW\DWD Wetterbericht Tag 2 Morgen]*/, $forecast[tomorrow]);
#SetValue(58873 /*[-= in Arbeit\Wetterbericht\DWD_Wetterbericht_NRW\DWD Wetterbericht Tag 3 Übermorgen]*/, $forecast[secondday]);
#SetValue(38477 /*[-= in Arbeit\Wetterbericht\DWD_Wetterbericht_NRW\DWD Wetterbericht Tag 4  Überübermorgen]*/, $forecast[thirdday]);

 function API_GetWeatherForecastText($stateCode)
 //Findet zum übergebenen DWD-StateCode entsprechende Wettervorhersagen als Texte
 //Übergabe: [STRING]$stateCode = Bundesland-Code, z.B. DEWG für Hessen
 //Rückgabe: [ARRAY] = Wettervorhersagetexte
 {
  //Fehlerbehandlung
  if(!isset($stateCode)) die("Error in Function ".__FUNCTION__." - Missing argument for \$stateCode");
  if(!is_string($stateCode)) die("Error in Function ".__FUNCTION__." - Value for parameter \$stateCode is not a string");   
//API URL
  $url = "https://opendata.dwd.de/weather/text_forecasts/html/";  
//Vergangene Zeitcodes berechnen, Mögliche Zeitcodes
  $timeCodeArray = array("td2334","td2134","td1934","td1834","td1734","td1634","td1534","td1434","td1334","td1234","td1134","td1034","td0934","td0834","td0734","td0634","td0534","td0334","td0134","yd2334","yd2134","yd1934","yd1834","yd1734","yd1634","yd1534");
  
  //Zeitcodes durchlaufen
  foreach($timeCodeArray as $key => $row)
  {
   //Zeitcode splitten
   $timeCodeSplit = str_split($row,2);
   
   //Zeitcode abhängig vom Tag in Timestamp umwandeln
   if($timeCodeSplit[0] == "td") $timestamp = mktime($timeCodeSplit[1],$timeCodeSplit[2],0);
   if($timeCodeSplit[0] == "yd") $timestamp = mktime($timeCodeSplit[1],$timeCodeSplit[2],0,date("m",strtotime("-1 day")),date("d",strtotime("-1 day")),date("Y",strtotime("-1 day")));
   
   //Zeitcode liegt unterhalb der aktuellen Zeit
   if($timestamp < time())
   {
    //Array Key merken und beenden
    $index = $key;
    break;
   }
  }
  
  //Neues Array erstellen
  $targetCodeArray = array();
  
  //Letzte 5 Zeitcodes durchlaufen
  for($i = $index; $i < $index + 5; $i++)
  {
   //Zeitcode splitten
   $targetCodeSplit = str_split($timeCodeArray[$i],2);
   
   //Zeitcode abhängig vom Tag in Zielcode umwandeln
   if($targetCodeSplit[0] == "td") $targetCode = date("d").$targetCodeSplit[1].$targetCodeSplit[2];
   if($targetCodeSplit[0] == "yd") $targetCode = date("d",strtotime("-1 day")).$targetCodeSplit[1].$targetCodeSplit[2];
   
   //Zielcode in neues Array ablegen
   array_push($targetCodeArray,$targetCode);
  }
   
  //Variablen für Vorhersagetexte initialisieren 
  for($i = 0; $i <= 3; $i++) $text[$i] = "";
  $textTimestamp = 0;
  
  //Vorhersagetage durchlaufen
  for($i = 0; $i <= 3; $i++)
  {
   //Falls noch kein Text für den Vorhersagetag gespeichert ist
   if(!$text[$i])
   {
    //Zeitcodes durchlaufen
    foreach($targetCodeArray as $row)
    {
     //Filename zusammenbauen
     $filename = strval("VHDL".(50 + $i)."_".$stateCode."_".$row."_html");
     
     //Text holen, wenn vorhanden
     $content = @file_get_contents($url.$filename);
              
     //Erfolgreich
     if($content)
     {
      //Text übernehmen
      $text[$i] = $content;
      
      //Falls noch kein Timestamp bestimmt wurde
      if(!$textTimestamp)
      {
       //Timecode splitten
       $split = str_split($row,2);
       
       //Falls Tag nicht dem aktuellen Tag entspricht
       if(intval($split[0]) != intval(date("d")))
       {
        //Timestamp von gesten benutzen
        $textTimestamp = mktime($split[1],$split[2],0,date("m",strtotime("-1 day")),date("d",strtotime("-1 day")),date("Y",strtotime("-1 day")));
       }
       //Tag entspricht aktuellem Tag
       else
       {
        //Timestamp von heute benutzen
        $textTimestamp = mktime($split[1],$split[2],0);
       }
      }
            
      //Schleife abbrechen
      break;
     }
    }
    
   }
  }
  
  //Erster Texteintrag in Kurzbericht und ausführlichen Bericht aufteilen
  $firstTextSplit = explode("</strong>",$text[0]);
  
  //Rückgabe formatieren und Array zusammenstellen
  $return["short"] = trim(strip_tags($firstTextSplit[0]));
  $return["today"] = trim(str_replace("
"," ",strip_tags($firstTextSplit[1])));
  $return["tomorrow"] = trim(strip_tags($text[1]));
  $return["secondday"] = trim(strip_tags($text[2]));
  $return["thirdday"] = trim(strip_tags($text[3]));
  $return["timestamp"] = $textTimestamp;  //Rückgabe
  return $return;
 } 

?>

Ich habe mir 5 String Variablen angelegt um diese mit den Werten zu füllen. Die Variablen werden gefüllt… Das Script gibt aber ein „Warning“ aus.

Warning:  Use of undefined constant short - assumed 'short' (this will throw an Error in a future version of PHP) in /var/lib/symcon/scripts/include_DWD_Wettervorhersage_Text.ips.php on line 7

Was mache ich hier falsch?

Beste Grüße
Kai

Edit: Fehler gefunden…:banghead: