DWD Wetterwarnungen JSON Daten auswerten

:), Spezialschalter, war ich ja nah dran.

Hallo zusammen,

ich will gerne eine Push Meldung an die mobilen Geräte rausjagen, sobald es zu einer Änderung der Wetterlage kommt. Das klappt schon super, nur sende ich gerade nur die Wetteränderungen „von 0 auf x Meldungen“ etc.
Ich wollte nun die eigentliche Wetterwarnung auslesen und in eine neue IPS Variable schreiben. IPS Variable ist durch eine Erweiterung des Scripts erstellt und wird auch aktualisiert, aber mit welchen Parametern aus dem Script erhalte ich genau die namentlichen Warnung (siehe Code Snippet)

So will ich es haben

Di. 02.02.2016  10:00 Uhr  - Amtliche WARNUNG vor WINDBÖEN - Mo. 01.02.2016 13:08 - 19:00 Uhr   -  Amtliche WARNUNG vor STURMBÖEN

So bekomme ich es derzeit

 <p><font size="2" color="#FA9600"> █ </font>Mo. 01.02.2016 13:08 - 19:00 Uhr   -  Amtliche WARNUNG vor STURMBÖEN  </p><p><font size="2" color="#FFFF00"> █ </font>Mo. 01.02.2016  12:00 Uhr <FONT SIZE="1">&#160 bis </FONT><b> </br><font size="2" color="#FFFF00"> █ </font>Di. 02.02.2016  10:00 Uhr  - Amtliche WARNUNG vor WINDBÖEN  </p>

habe folgendes Code angepasst

   $VarNames[5]                             = array('name'=>'DWD Wetterwarnung Pushnotification-Text', 'type'=>3, 'hidden'=>true, 'profil'=>'', 'position'=> -70, 'default_value'=>'noch keine Informationen vorhanden',);

// DWD Warnmeldungen Auswertelogik
if(($ParentModul['ObjectType'] == 1) && ($ParentModul['ObjectName'] == 'DWD Wetterwarnungen') && ($Update == false))
  {

    // Variablen identifizieren
       $letzteAktualisierung_ID            = IPS_GetObjectIDByName($VarNames[0]['name'], IPS_GetParent($_IPS['SELF']));
       $anzahlMeldungen_ID                 = IPS_GetObjectIDByName($VarNames[1]['name'], IPS_GetParent($_IPS['SELF']));
       $letzteAenderung_ID                   = IPS_GetObjectIDByName($VarNames[2]['name'], IPS_GetParent($_IPS['SELF']));
       $letzteAenderungBeschr_ID             = IPS_GetObjectIDByName($VarNames[3]['name'], IPS_GetParent($_IPS['SELF']));
      $WFE_ID                          = IPS_GetObjectIDByName($VarNames[4]['name'], IPS_GetParent($_IPS['SELF']));
	  $WFE_Push_ID					   = IPS_GetObjectIDByName($VarNames[5]['name'], IPS_GetParent($_IPS['SELF']));

   // IPS Werte auslesen
        $letzteAktualisierung             = getValueInteger($letzteAktualisierung_ID);
       $anzahlMeldungen                   = getValueInteger($anzahlMeldungen_ID);
       $letzteAenderung                   = getValueInteger($letzteAenderung_ID);
        $letzteAenderungBeschr           = getValueString($letzteAenderungBeschr_ID);
       $WFE                              = getValueString($WFE_ID);
	   $WFE_Push						 = getValueString($WFE_Push_ID);

    }



// #WFE_Push zusammenstellen - Anfang

$WFE_Push_Content       = ($WL_Title.$WarnBox.$startTimestamp.' - '.$endTimestamp.'  -  '.$DWDmsgs[$w]->headline.$WL_altitudeStart.$WL_altitudeEnd.);

   if ( $Update == true )
         {
         echo "=====================     Installation / Erster Lauf     ===================== 
";
         echo "=== Es können noch keine IPS Variablen gesetzt oder gelesen werden ============ 
";

        }
     else
        {
          SetValueString($WFE_Push_ID, $WFE_Push_Content);
          }

Was muss ich denn nun am ehesten für die Variable $WFE_Push_Content nutzen?

Vor der Zeile „#WFE zusammenstellen - Anfang“ (ca. Zeile 600) stehen schon alle Daten in der Tabelle „$DWDwarnings“ für die primäre Region, man muß sie nur noch abgreifen.
Hier ein Beispiel:


print_r($DWDwarnings[$regionInput1][0]);  // Zeigt die erste Warnung
print_r($DWDwarnings[$regionInput1][0]);  // Zeigt die zweite Warnung - wenn eine vorhanden ist

// Ob überhaupt eine Warnung oder wieviele vorhanden sind, steht in: 
echo "Anzahl der Warnmeldungen für primäre Region: ".$warnNbr."
";


// Einzelne Werte können wie folgt benutzt werden:
$Beschreibung = $DWDwarnings[$regionInput1][0]->description;
$Ende = $DWDwarnings[$regionInput1][0]->end;
$Begin = $DWDwarnings[$regionInput1][0]->start;
$Ereignis = $DWDwarnings[$regionInput1][0]->event;
// ... etc.

echo $Beschreibung."
";
 // oder
echo $DWDwarnings[$regionInput1][0]->description."
";

echo $Ende."
";
// oder
echo $DWDwarnings[$regionInput1][0]->end."
";

// ... etc.

// #WFE zusammenstellen - Anfang

?>

Das geht allerdings nur innerhalb des Scripts!
Ich hoffe das hilft :wink:

Haben die schon wieder etwas geändert? Ich bekomme aktuell Fehlermeldungen:

Notice: Undefined index: Kreis Nienburg in [Wettervariablen\DWD_JSON\DWD Wetterwarnungen\Abruf] on line 615
keine Meldungen

Scheinbar dasselbe wie hier schon mal: DWD Wetterwarnungen JSON Daten auswerten

Hi,

hast du irgendwas am Script verändert?
Ich habe keine Probleme mit dem Abruf. Es sieht aber auch mehr danach aus, dass du einen fehlerhaften Index hast.
Was hast du in Zeile 24-26 stehen?

Geändert habe ich Nullkommanix …

$regionInput1 = „Kreis Nienburg“; // primäre Region
$regionInput2 = „Kreis Diepholz“; // sekundäre Region - Nachbarregion oder Finca
$regionInput3 = „Kreis Verden“; // sekundäre Region - Nachbarregion oder Datscha

erledigt

Komischerweise hatte das Script einen alten Stand, obwohl ich die Änderung im Januar durchgeführt habe … :eek:

Hallo Junior Member,

ich habe eine Frage und da ich NEU bin versuche ich es mal auf diesem Wege…
Als erstes würde ich mich gerne mal vorstellen.
Ich bin ein Wetterfrosch aus dem Nordschwarzwald und betreibe eine eigene Wetterseite
http://www.dieters-wetter.de
welche ich gerne mit der DWD-Warnmeldung etwas aufpeppen würde…
Daher auch meine Frage bzgl. des von Ihnen programmierten Script´s

1 - Das Script bzgl. DWD-Warnung mittels JASON, ist das noch aktiv ??
2- Wenn ja, Wo kann man sich die neueste Version auch runterziehen??

Wäre echt toll wenn ich eine kurze Info bekommen könnte …

Moin Dieter,

als erstes Willkommen im Forum. Du bist hier im IP-Symcon Forum gelandet. Die hier veröffentlichten Scripte laufen in erster Linie unter IP-Symcon. Ohne Modifikation wirst Du die Skripte nicht einsetzen können.

Prüfe bitte mal die .-Taste auf Deiner Tastatur. Damit scheint etwas nicht in Ordnung zu sein.

Übrigens: Deine Wetterstation, die Du auf Deiner Homepage beschreibst, gefällt mir.

Grüße,
Christoph

Also, ich habe das Script jetzt auch mal versucht, leider kommt bei mir das hier

Fatal error: Uncaught Error: Call to undefined function IPS_GetParent() in /homepages/15/d265167905/htdocs/test/wetterwarnung/unwetter.php:55 Stack trace: #0 {main} thrown in /homepages/15/d265167905/htdocs/test/wetterwarnung/unwetter.php on line 55

Viele Grüsse Angelo

Hallo Zusammen,

ich habe ein Phänomen bei dem ich Hilfe gebrauchen könnte.

Das Script läuft bei soweit, nur leider bekomme ich keine Warnungen für meine Region.
Ich wohne in München.
für alle anderen Orte wird, z.B. Original-Einstellugn im Script bekomme ich Warnungen, nur München nicht.

Beim ersten Durchlauf sehe ich ja, dass Warnungen für meine Region vorhanden sind, gerade heute Nacht.

Wer kann mir einen Tipp geben, was ich falsch mache.

$region = array ("München", "Ostfrisische Küste", "Nordfriesische Küste", "Kreis Prignitz");

Habe nur München gegen Hamburg getauscht. In der Wetter-Online App bekomme ich eine Warnung für München angezeigt, Stufe 3.

Gruß

Alex

Hallo zusammen,

ich versuche über das Script aus Post #6 eine Push-Nachricht über das Telegrammodul zu senden.

Zum senden nutze ich folgenden Befehl:

<?

/*
    Telegram_SendText($InstanzID, $text, $UserID, $ParseMode='Markdown')
    Telegram_SendTextToAll($InstanzID, $text, $ParseMode='Markdown')
    Telegram_SendImage($InstanzID, $text, $Path_To_ImageFile, $UserID)
    Telegram_SendImageToAll($InstanzID, $text, $Path_To_ImageFile)
    Telegram_SendDocumentToAll($InstanzID, $text, $Path_to_Document, $MimeType);
    Telegram_SendDocument($InstanzID, $text, $Path_to_Document, $MimeType, $UserID);
*/

$InstanzID = 22786 /*[Programme\TelegramMessenger]*/;
$UserID = 377280332;
$text = "Hallo Welt";

Telegram_SendText($InstanzID, $text, $UserID, $ParseMode='HTML')

?>

Ich habe das Script von „N22“ wie folgt ab Zeile 560 angepasst.

//Zugriff auf erste Warnmeldung - Gezählt wird ab 0!
               if($warnNbr > 0 ){
             print_r($DWDwarnings[$regionInput1][0]);
			 
			 // Ob überhaupt eine Warnung oder wieviele vorhanden sind, steht in: 
			echo "Anzahl der Warnmeldungen für primäre Region: ".$warnNbr."
";
			
			// Einzelne Werte können wie folgt benutzt werden:			
			$event = $DWDwarnings[$regionInput1][0]->event;
			$headline = $DWDwarnings[$regionInput1][0]->headline;
			$Beschreibung = $DWDwarnings[$regionInput1][0]->description;
			$Ende = $DWDwarnings[$regionInput1][0]->end;
			$Begin = $DWDwarnings[$regionInput1][0]->start;
			$Ereignis = $DWDwarnings[$regionInput1][0]->event;
			
			// Ausgabe
			echo $event. "
";	   
			echo $Begin. " - ";
			echo $Ende. "
";
			echo $Beschreibung."
";

Leider wieß ich nicht, wie bei anstehenden Unwetterwarnungen eine Push-Nachricht versendet werden kann.

Über Tipps und Anregungen würde ich mich freuen.

Beste Grüße
Kai

Hallo Alexandro,

Du verwendest offenbar ein modifiziertes Skript, im Original wird das nicht als Array übergeben, sondern als einzelne Strings. Aber ersetze mal „München“ durch „Kreis und Stadt München“. Im originalen Skript wäre das dann:

$regionInput1 = "Kreis und Stadt München"; // primäre Region

Viele Grüße,
auch Alex

P.S: Die genauen Bezeichnungen kannst Du Dir unter http://www.wettergefahren.de/warnungen/warnsituation_landkreise.html?v=2 anschauen.

Hallo ACE,

danke, das wars.

Gruß Alex

Ich würde die Werte die Du haben willst in eine Variable Type String ablegen.


// Einzelne Werte können wie folgt benutzt werden:             
            $event = $DWDwarnings[$regionInput1][0]->event; 
            $headline = $DWDwarnings[$regionInput1][0]->headline; 
            $Beschreibung = $DWDwarnings[$regionInput1][0]->description; 
            $Ende = $DWDwarnings[$regionInput1][0]->end; 
            $Begin = $DWDwarnings[$regionInput1][0]->start; 
            $Ereignis = $DWDwarnings[$regionInput1][0]->event; 

$regiondata = array ("event" => $event, "headline" => $headline, "description" => $Beschreibung, "end" => $Ende, "start" => $Begin, "event" => $Ereignis);
SetValue(12345, json_encode($regiondata); 

Dann legst Du ein Ereignis auf die Variable mit der Anzahl, bei Grenzüberschreitung größer 0 rufst Du das Skript auf das Dir was schicken soll.

In dem Skript das Dir was schicken soll liest Du die Daten wieder aus, bastelt Dir das in der Form zusammen wie Du das haben willst und verschickst den Text dann. Wie die Variable vom Inhalt aussehen muss beim Parsemode HTML bin ich überfragt, da musst du mal beim Telegram Modul nachschauen.

also so in der Art


$regiondata = json_decode(GetValue(12345));
$event = $regiondata->event;
$headline = $regiondata->headline;
$description = $regiondata->description;
// u.s.w.
$text = '$headline."<br>".$description';
$InstanzID = 22786 /*[Programme\TelegramMessenger]*/; 
$UserID = 377280332; 

Telegram_SendText($InstanzID, $text, $UserID, $ParseMode='HTML') 


Hallo Fonzo,

vielen Dank für deine Hilfe!

Hier die Scripte falls sie jemand gebrauchen kann.

// ab Zeile 565 einfügen

// Einzelne Werte können wie folgt benutzt werden:			
			$event = $DWDwarnings[$regionInput1][0]->event;
			$headline = $DWDwarnings[$regionInput1][0]->headline;
			$Beschreibung = $DWDwarnings[$regionInput1][0]->description;
			$Ende = $DWDwarnings[$regionInput1][0]->end;
			$Begin = $DWDwarnings[$regionInput1][0]->start;
			$Ereignis = $DWDwarnings[$regionInput1][0]->event;
			
			$regiondata = array ("event" => $event, "headline" => $headline, "description" => $Beschreibung, "end" => $Ende, "start" => $Begin, "event" => $Ereignis);
			SetValue(41077 /*[Visualisierung\DWD Wetterwarnungen\DWD Ausgabe für Push]*/, json_encode($regiondata));

Telegram Push
https://www.symcon.de/forum/threads/32157-Telegram-Messenger-Modul

<?

$regiondata = json_decode(GetValue(41077 /*[Visualisierung\DWD Wetterwarnungen\DWD Ausgabe für Push]*/));
$event = $regiondata->event;
$Begin = $regiondata->start;
$Ende = $regiondata->end;
$headline = $regiondata->headline;
$description = $regiondata->description;
$Ereignis = $regiondata->event;

// Telegram Nachricht

$text = "DWD Unwetterwarnung!". "
". "$event". "
". "$description";
$InstanzID = 22786 /*[Programme\TelegramMessenger IPS]*/; 
$UserID = 377280332; 

Telegram_SendText($InstanzID, $text, $UserID, $ParseMode='HTML') 

?>

Beste Grüße
Kai