Category Archive » PHP

MG Merken Info Android App + Backend

In der Maigesellschaft Merken habe ich als damaliger Schriftführer allen Mitgliedern Erinnerungs-SMS gesendet, damit möglichst niemand anstehende Termin vergisst. Da das jedoch sehr lästig war und ohne SMS-Flat auch hätte richtig teuer werden können, da rund um den Monat Mai gerne Mal 1000-2000 (mehrere SMS, teils 1-3 fache SMS-länge an ca. 40 Mitglieder) SMS zusammengekommen sind, musste eine andere Lösung her. Zwischenzeitlich werden alle Termine bereits in einem Google Kalender gepflegt aus dem die Termine auf der Webseite der Gesellschaft angezeigt werden. Letztendlich habe ich eine Android App inklusive PHP Backend entwickelt.

Read More

Sonos Steuerung mit ESP8266 (Wemos D1 mini)

Ich besitze seit einiger Zeit 2 Sonos Play 1. Es ist wirklich sehr praktisch so unkompliziert in einem oder mehreren Räumen die selbe oder unterschiedliche Musik zu hören. Da ich mich sehr für Smart Home Technologien interessiere, habe ich gelesen, dass die Sonos Lautsprecher auch in ein Smart Home integriert werden können. KNX Sonos Komponenten, die dies später im Eigenheim realisieren könnten, sind jedoch recht teuer und können teilweise sogar nur das: Sonos Boxen steuern.

Das muss auch selber funktionieren, habe ich mir gedacht.

Read More

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