Blog

Google-Kalender Parser

Mein Ziel war es Termine auf einer Webseite anzuzeigen und diese am Besten komfortabel von unterwegs zu ändern bzw. zu ergänzen. Daraus entstand die Idee, einen Google-Kalender als Grundlage zu nehmen, da sich so ein Kalender einfach auf dem Smartphone sowie am PC im Browser verwalten lässt.

Da die Termine des Kalenders, den man dazu nutzt, ja öffentlich sichtbar sein sollen, muss man den Kalender im Google-Konto unter den Kalendereinstellungen öffentlich machen. Anschließend kann man über die Kalenderadresse (ebenfalls in den Kalendereinstellungen zu finden) auf die ICS-Datei zu greifen.

Read More

Wetterwarnungen vom DWD – Alternative: GDS (FTP)

ACHTUNG: Der GDS-FTP-Server wird zum 15.01.2018 abgeschaltet.

Wie schon im ersten Beitrag zu erahnen, war ich mit den Wetterdaten auf Landkreisebene nicht wirklich zufrieden. Es soll zwar irgendwann auch eine Json-Schnittstelle mit Gemeindewarnungen geben, aber diese gibt noch nicht.

Der DWD liefert per FTP-Server – ebenfalls kostenlos – Wetterdaten im CAP-Format auf Gemeindeebene an. Das Ganze nennt sich GDS (Global Basic Data Set) und ist hier zu finden:

http://www.dwd.de/DE/leistungen/gds/gds.html?nn=480258

Nach einer kostenlosen Registrierung erhält man per Mail die FTP-Zugangsdaten. Der FTP-Server ist voll von Wetterdaten und Grafiken. An der richtigen Stelle findet man eine Menge ZIP-Dateien die unterschiedlich viele XML-CAP-Dateien enthalten.

FTP-Ordnerstruktur

In der zuletzt erstellten ZIP-Datei sind die aktuellen Meldungen enthalten. Für jede Wetterwarnung in Deutschland steht eine XML-CAP-Datei, worin die betroffenen Regionen aufgelistet sind (auf Gemeindeebene).

Hier ein Beispiel eines „Warnhinweis vor STARKWIND“ für das Seegebiet Viking in der Nordsee (Warncell-ID 401000006):

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<alert xmlns="urn:oasis:names:tc:emergency:cap:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:emergency:cap:1.2 https://werdis.dwd.de/conf/CAP-DWD-Profil-v2.1.xsd">
<identifier>2.49.0.1.276.DWD.PVW.1484593937218.17</identifier>
<sender>CAP@dwd.de</sender>
<sent>2017-01-16T19:13:00+00:00</sent>
<status>Actual</status>
<msgType>Alert</msgType>
<source>PVW</source>
<scope>Public</scope>
<info>
<language>de-DE</language>
<category>Met</category>
<event>Starkwind</event>
<responseType>None</responseType>
<urgency>Immediate</urgency>
<severity>Minor</severity>
<certainty>Observed</certainty>
<eventCode>
<valueName>PROFILE_VERSION</valueName>
<value>2.1</value>
</eventCode>
<eventCode>
<valueName>LICENSE</valueName>
<value>Geobasisdaten: Copyright Bundesamt für Kartographie und Geodäsie, Frankfurt am Main, 2013</value>
</eventCode>
<eventCode>
<valueName>II</valueName>
<value>14</value>
</eventCode>
<eventCode>
<valueName>GROUP</valueName>
<value>WIND</value>
</eventCode>
<eventCode>
<valueName>AREA_COLOR</valueName>
<value>255 255 0</value>
</eventCode>
<effective>2017-01-16T17:19:00+00:00</effective>
<onset>2017-01-16T17:19:00+00:00</onset>
<senderName>DWD / Seewetterdienst Hamburg</senderName>
<headline>Warnhinweis vor STARKWIND </headline>
<description>Süd um 6, südwestdrehend, abnehmend 4 bis 5, strichweise diesig, See 3 Meter. </description>
<instruction/>
<web>http://www.wettergefahren.de</web>
<contact>Deutscher Wetterdienst</contact>
<area>
<areaDesc>Viking</areaDesc>
<geocode>
<valueName>WARNCELLID</valueName>
<value>401000006</value>
</geocode>
<geocode>
<valueName>STATE</valueName>
<value>SH</value>
</geocode>
<altitude>0.0</altitude>
<ceiling>9842.5197</ceiling>
</area>
</info>
</alert>

Im Gegensatz zu den Json-Daten gibt es hierzu eine vollständige Dokumentation, was mich sehr gefreut hat:

http://www.dwd.de/DE/leistungen/gds/help/warnungen/cap_dwd_profile_de_pdf.pdf

Das Prinzip der Json-Variante, bei der bei jedem Aufruf der Webseite, die Json-Daten ausgewertet wurden, lässt sich hier natürlich nicht anwenden. Die Zeit, die das Script brauchen würde, die Infos aus den Dateien in der ZIP-Datei vom FTP-Server zu lesen, wäre viel zu lang und die Darstellung auf der Webseite wäre viel zu sehr verzögert.

Aus diesem Grund ist mir die Idee gekommen, die Wetterdaten selbst aufzubereiten und im gleichen Format wie der DWD es tut bereitzustellen. Das hat den Vorteil, dass ich mein bisheriges Script zur Anzeige der Warnungen kaum verändern muss.

Read More

Wetterwarnungen vom DWD – Erster Ansatz: JSON

Mein Ziel war es, Wetterwarnungen für eine bestimmte Region auf einer Webseite (www.merkenonline.de Info-Plattform für den Ort Düren-Merken) darzustellen. Glücklicherweise bietet der Deutsche Wetterdienst Unwetterwarnung in verschiedenen Varianten kostenlos an. Mein erster Ansatz war das Parsen der Unwetterdaten im Json-Format:

http://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json
Daten-Beispiel:

{
   "time":1484853036000,
   "warnings":{
      "105512000":[{                            //Warncell-ID des Landkreises
         "start":1484841600000,
         "end":1484910000000,
         "regionName":"Stadt Bottrop",
         "level":2,
         "type":5,
         "altitudeStart":null,
         "event":"FROST",
         "headline":"Amtliche WARNUNG vor FROST",
         "description":"Es tritt mäßiger Frost zwischen -4 °C und -9 °C auf.",
         "altitudeEnd":null,
         "stateShort":“NRW“,
         "instruction":"",
         "state":"Nordrhein-Westfalen"
      }]
   },
   "vorabInformation":{
      ## gleiches Format ##
   }
}

Tabelle mit Warncell-IDs für die Landkreise:
http://www.dwd.de/DE/leistungen/gds/help/warnungen/cap_warncellids_csv.csv?__blob=publicationFile&v=4

Der DWD liefert genauer gesagt im JSONP-Format und nicht im reinen JSON-Format. Der einzige Unterschied liegt jedoch darin, dass das reine JSON in „warnWetter.loadWarnings(‚“ und „);“ eingeschlossen ist.

Mit folgendem Script werden die Daten gelesen und entsprechend formatiert ausgegeben.

Read More

Willkommen

Hallo Leute,

da ich in der Vergangenheit schon so Einiges programmiert habe und die Ergebnisse mit Euch teilen möchte, habe ich mich dazu entschieden, diesen Blog zu eröffnen.

Meine Arbeit deckt mehrere Bereiche ab, wie z.B.:

  • Android APPs (JAVA)
  • Android APP Backend (PHP)
  • Arduino (C/C++)
  • Webseiten-Scripte (PHP)
  • Windows Software (VB .NET)

Da ich denke, dass das ein oder andere nützlich für jemand anderen sein könnte, werde ich bestehende Projekte hier veröffentlichen und kommende laufend dokumentieren.

Gruß,

eMpTy