Wettermeldungen per WML auf dem optipoint Display Module

betateilchen

Grandstream-Guru
Mitglied seit
30 Jun 2004
Beiträge
12,882
Punkte für Reaktionen
0
Punkte
0
Heute mal wieder ein kleines Skript :mrgreen:

Ich wollte einfach mal das Display Modul meines optipoint 410 für was anderes nutzen als nur verpaßte Anrufe zu sehen oder im LDAP Telefonbuch zu blättern. Also habe ich mal ein bißchen in meinen PHP Kenntnissen gekramt und mir eine WML Seite gebastelt, die mir aktuelle Wetterdaten einer beliebigen Stadt anzeigt und diese auch automatisch aktualisiert.

Das Beispiel zeigt das aktuelle Wetter in Heidelberg an.

Die Beschaffung der Wetterdaten habe ich mir ganz einfach (und vor allem legal(*) gemacht...
Unter http://deutsch.wunderground.com/ werden RSS-Feeds die aktuellen Wetterdaten weltweit als RSS-Feeds bereitsgestellt.

  1. Man sucht sich unter http://deutsch.wunderground.com/global/DL.html unten aus der tabelle eine deutsche Stadt aussuchen
  2. nach Auswahl der Stadt kopiert man sich den oben recht an dem Symbol "RSS" verankerten Link
  3. und fügt diesen im Skript in $url ein
  4. in $city noch die Stadt eintragen Ja, ich weiß... ich hätte die Stadt auch aus dem XML extrahieren können. Aber dazu war ich einfach zu faul, es ist schließlich Sonntag.

Die beiden images "blind100.wbmp" und "blind130.wbmp" dienen lediglich der Fixierung der Tabellenspaltenbreite, da WML recht eingeschränkt ist, was Formatierungsangaben im Quelltext angeht. Und das op410 schein aus dieser reduzierten Menge auch wieder nur einen Teil zu kennen und nicht den gesamten Umfang :( Die beiden images sind im Anhang zu diesem Posting zu finden.

Viel Spaß damit :D

Wer hat eigentlich hier im Forum außer mir noch so ein Display im Einsatz?

PHP:
<?php
header("Content-Type: text/vnd.wap.wml");
echo "<?xml version=\"1.0\"?>\n";
echo "<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">\n";
?>

<?PHP
//
// Example: weather in Heidelberg
// modify these three parameters
// for your requirements
//
$url = "http://deutsch.wunderground.com/auto/rss_full/global/stations/10734.xml";
$city = "Heidelberg";
//
// do not modify anyhting behind this line!
//

$content = implode("", file($url));

preg_match_all("/\<item>(.*?)\<\/item\>/si", $content, $results);
preg_match("/\<description\>(.*?)\<\/description\>/si", $results[1][0], $desc);

$arr = explode(" | ",$desc[1]);

preg_match("/Temperature: (.*?)F \/ (.*?)C/si", $arr[0], $str);
$wetter['temp'] = $str['2'];

preg_match("/Humidity: (.*)%/si", $arr[1], $str);
$wetter['feuchte'] = $str['1'];

preg_match("/Pressure: (.*?)inch \/ (.*?)hPa/si", $arr[2], $str);
$wetter['druck'] = $str['2'];

preg_match("/Conditions: (.*)/si", $arr[3], $str);
$wetter['wolken'] = $str['1'];

preg_match("/Wind Direction: (.*)/si", $arr[4], $str);
$wetter['windr'] = $str['1'];

preg_match("/Wind Speed: (.*?)mph \/ (.*?)km\/h/si", $arr[5], $str);
$wetter['windg'] = $str['2'];

preg_match("/Updated: (.*)/si", $arr[6], $str);
$wetter['stand'] = $str['1'];

// added for time format conversion
// from am/pm to 24-hour format
$stand = explode(' ',$wetter['stand']);
if ($stand[1] == 'AM')
{ $stand = explode(':',$stand[0]);
  $stand[0] = $stand[0] % 12;
}
else
{ $stand = explode(':',$stand[0]);
  if ($stand[0] < 12)
  {$stand[0]+=12;}
}
$wetter['stand'] = $stand[0].':'.$stand[1];
// end format conversion 
?>

<wml>
 <card id      = "wetter" 
       title   = "<?php echo $city ?>" 
       ontimer = "<?php echo $SCRIPT_NAME ?>" >
 <timer value="3000" />
  <p>
<table columns="2">
 <tr>
  <td><img src="blind100.wbmp" alt="blind" /></td>
  <td><img src="blind130.wbmp" alt="blind" /></td>
 </tr>
 <tr>
  <td>Temperatur:</td>
  <td><? echo $wetter['temp'] . 'C&nbsp;&nbsp;&nbsp;' . $wetter['stand'] ?></td>
 </tr>
 <tr>
  <td>Luftfeuchte:</td>
  <td><? echo $wetter['feuchte'] . '%'; ?></td>
 </tr>
 <tr>
  <td>Luftdruck:</td>
  <td><? echo $wetter['druck'] . 'hPa'; ?></td>
 </tr>
 <tr>
  <td>Bewölkung:</td>
  <td><? echo $wetter['wolken']; ?></td>
 </tr>
 <tr>
  <td>Windrichtung:</td>
  <td><? echo $wetter['windr']; ?></td>
 </tr>
 <tr>
  <td>Windstärke:</td>
  <td><? echo $wetter['windg'] . 'km/h'; ?></td>
 </tr>
</table>
  </p>
 </card>
</wml>

(*) Wichtiger Hinweis zu Wetterdaten im Internet: Auch wenn es möglich ist, per PHP die Wetterdaten z.B. von wetter.com oder ähnlichen Anbietern zu extrahieren, so ist dies doch in den allermeisten Fällen nicht legal! sondern stellt einen Verstoß gegen die Nutzungsbedingungen dieser Anbieter dar. Bei der hier verwendeten Variante stellt sich diese Problematik nicht.
 

Anhänge

  • blind.tar.gz
    177 Bytes · Aufrufe: 15
  • op410wetter.jpg
    op410wetter.jpg
    179.1 KB · Aufrufe: 64
Interessantes skript. Ich betreibe nicht soviel Aufwand, sondern hole mir die WAP Angebote direkt aus dem internet. Ist zwar dann nicht so spezifsich, aber für Wetter, Staumeldungen, S-Bahnverspätung etc. reicht es.

Praktisch ist auch sich eine Linksammlung bei einem serviceanbieter zu hinterlegen und darauf direkt zuzugreifen. Spart den Server im eigenen Netzwerk, aber wahrscheinlich hast Du Dein PHP skript auch irgendwo zentral abgelegt?

Ciao,
sip@home
 
Ich habe mehrere vserver, auf denen auch das LAMPP Paket installiert ist und deshalb ein Apache zur Verfügung steht. Insofern ist die Bereitstellung der Daten kein Problem.

Zwischenzeitlich habe ich das Skript insofern verfeinert, daß es komplett parametriebar ist. Ein vorgeschaltetes PHP Skript erzeugt aus einer simplen Liste mit Stationsnummern automatisch eine alphabetisch sortierte Liste mit Städtenamen (wird aus XML extrahiert) und ermöglicht so eine einfache Erweiterung der Liste.

Mit den standardmäßig im Internet vorhandenen WAP Seiten habe ich auf dem Display Module nur schlechte Erfahrungen gemacht - meistens bekomme ich da nur eine Fehlermeldung auf dem Display. Das Display Module scheint nur einen begrenzten Umfang der WML Tags zu kennen.
 
Die zum Bezug der Wettermeldungen genutze Webseite liefert die Meldungen seit einigen Tagen komplett in deutscher Sprache im Quelltext aus.

Wer das o.g. Skript im Einsatz hat, sollte sich mal den gelieferten Quelltext des RSS Feeds anschauen und dann die preg_match() Aufrufe entsprechend der jetzt verwendeten deutschen Bezeichnungen ändern.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.