XML "Sammlung"

...sieht aber im Webbrowser hässlich aus.
...so machste in PHP eine XML...
Code:
header('Content-Type: application/xhtml+xml; charset=UTF-8');
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
...
...
...duck und weg...
 
Zuletzt bearbeitet:
Recht hast du schon, sieht wirklich nicht schön aus!
Aber ehrlich gesagt war mir das egal wie es im Browser aussieht, solange es auf dem snom läuft :mrgreen:
 
Wenn das so ist, kannst du dir auch diese Zeile
PHP:
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
sparen, denn die braucht das snom auch nicht, damit es funktioniert.
Ohne den XML PHP header() geht der standardkonforme Modus nicht.
Apropos, weather.php erzeugt eine echo Ausgabe, die am Anfang ausgegeben wird.
Noch vor der <?xml Deklaration. Ich hab es einfach auskommentiert.
 
danke für den Hinweis, man lernt nicht aus. In der weather.php die Zeile habe ich vergessen zu löschen, das war ein Test ob die URL richtig "gebaut" wird.
 
Moin

Ich hab ein paar XSL für dein snomWeather gebastelt.
Aber nicht fürs snom (ignoriert XSL, benutzt intern ein Eigenes), sondern für Firefox optimiert.
So siehts aus...
info.xml
index.php
menu.php
more.php
today.php
tomorrow.php
datomorrow.php
...leider gestaltet sich das Einfügen eines Zeilenumbruchs als knifflig.
Hat da Jemand einen Tip?

SnomIPPhoneText.xsl
Code:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<xsl:element name="html">
<xsl:element name="head">
<xsl:element name="title"><xsl:value-of select="/*/Title" /></xsl:element>

<xsl:element name="meta">
<xsl:attribute name="http-equiv"><xsl:text>content-type</xsl:text></xsl:attribute>
<xsl:attribute name="content"><xsl:text>application/xhtml+xml; charset=UTF-8</xsl:text></xsl:attribute>
</xsl:element>

<xsl:element name="meta">
<xsl:attribute name="http-equiv"><xsl:text>refresh</xsl:text></xsl:attribute>
<xsl:attribute name="content"><xsl:value-of select="number(/SnomIPPhoneText/Fetch/@mil div 1000)" /><xsl:text>; URL=</xsl:text><xsl:value-of select="normalize-space(/SnomIPPhoneText/Fetch)" /></xsl:attribute>
</xsl:element>

<xsl:element name="link">
<xsl:attribute name="rel"><xsl:text>stylesheet</xsl:text></xsl:attribute>
<xsl:attribute name="media"><xsl:text>screen</xsl:text></xsl:attribute>
<xsl:attribute name="type"><xsl:text>text/css</xsl:text></xsl:attribute>
<xsl:attribute name="href"><xsl:text>/css/xml.css</xsl:text></xsl:attribute>
</xsl:element>

<xsl:element name="link">
<xsl:attribute name="rel"><xsl:text>shortcut icon</xsl:text></xsl:attribute>
<xsl:attribute name="type"><xsl:text>image/x-ico</xsl:text></xsl:attribute>
<xsl:attribute name="href"><xsl:text>/img/favicon.ico</xsl:text></xsl:attribute>
</xsl:element>

<xsl:element name="style">
<xsl:attribute name="type"><xsl:text>text/css</xsl:text></xsl:attribute>
*{margin:0px 0px 0px 0px;
padding:0px 0px 0px 0px;
text-align:left;}
table,th,td{margin:1px 1px 1px 1px;
border:1px outset black;
padding:1px 1px 1px 1px;
border-collapse:collapse;}
th,td{white-space:nowrap;}
table{width:auto;}</xsl:element>
</xsl:element>
<!--SnomIPPhoneText-->
<xsl:element name="body">
<xsl:apply-templates/>
</xsl:element>
</xsl:element>
</xsl:template>

<xsl:template match="Title">
</xsl:template>

<xsl:template match="Prompt">
<xsl:element name="div"><xsl:value-of select="." /></xsl:element>
</xsl:template>

<xsl:template match="Text">
<xsl:element name="div"><xsl:value-of select="." /></xsl:element>
</xsl:template>

<xsl:template match="br"><xsl:element name="br"></xsl:element></xsl:template>

<xsl:template match="SoftKeyItem">
<xsl:element name="button">
<xsl:attribute name="onclick"><xsl:text>location.replace('http://</xsl:text><xsl:value-of select="URL" /><xsl:text>')</xsl:text></xsl:attribute>
<xsl:value-of select="Label" />
</xsl:element>
</xsl:template>

</xsl:stylesheet>

SnomIPPhoneMenu.xsl
Code:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<xsl:element name="html">
<xsl:element name="head">
<xsl:element name="title"><xsl:value-of select="normalize-space(/SnomIPPhoneMenu/Title)" /></xsl:element>

<xsl:element name="meta">
<xsl:attribute name="http-equiv"><xsl:text>content-type</xsl:text></xsl:attribute>
<xsl:attribute name="content"><xsl:text>application/xhtml+xml; charset=UTF-8</xsl:text></xsl:attribute>
</xsl:element>

<xsl:element name="meta">
<xsl:attribute name="http-equiv"><xsl:text>refresh</xsl:text></xsl:attribute>
<xsl:attribute name="content"><xsl:value-of select="number(/SnomIPPhoneMenu/Fetch/@mil div 1000)" /><xsl:text>; URL=</xsl:text><xsl:value-of select="normalize-space(/SnomIPPhoneMenu/Fetch)" /></xsl:attribute>
</xsl:element>

<xsl:element name="link">
<xsl:attribute name="rel"><xsl:text>stylesheet</xsl:text></xsl:attribute>
<xsl:attribute name="media"><xsl:text>screen</xsl:text></xsl:attribute>
<xsl:attribute name="type"><xsl:text>text/css</xsl:text></xsl:attribute>
<xsl:attribute name="href"><xsl:text>/css/xml.css</xsl:text></xsl:attribute>
</xsl:element>

<xsl:element name="link">
<xsl:attribute name="rel"><xsl:text>shortcut icon</xsl:text></xsl:attribute>
<xsl:attribute name="type"><xsl:text>image/x-ico</xsl:text></xsl:attribute>
<xsl:attribute name="href"><xsl:text>/img/favicon.ico</xsl:text></xsl:attribute>
</xsl:element>

<xsl:element name="style">
<xsl:attribute name="type"><xsl:text>text/css</xsl:text></xsl:attribute>
*{margin:0px 0px 0px 0px;
padding:0px 0px 0px 0px;
text-align:left;}
table,th,td{margin:1px 1px 1px 1px;
border:1px outset black;
padding:1px 1px 1px 1px;
border-collapse:collapse;}
th,td{white-space:nowrap;}
table{width:auto;}</xsl:element>
</xsl:element>
<!--SnomIPPhoneMenu-->
<xsl:element name="p"><xsl:value-of select="/SnomIPPhoneMenu/Title" /></xsl:element>

<xsl:element name="body">
<xsl:apply-templates/>
</xsl:element>

</xsl:element>
</xsl:template>

<xsl:template match="Title">
</xsl:template>

<xsl:template match="Prompt">
</xsl:template>

<xsl:template match="MenuItem">
<xsl:element name="div">
<xsl:number level="single" count="MenuItem" format="1 " />
<xsl:element name="button">
<xsl:attribute name="onclick"><xsl:text>location.replace('http://</xsl:text><xsl:value-of select="URL" /><xsl:text>')</xsl:text></xsl:attribute>
<xsl:value-of select="Name" />
</xsl:element>
</xsl:element>
</xsl:template>

</xsl:stylesheet>

SnomIPPhoneInput.xsl
Code:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<xsl:element name="html">
<xsl:element name="head">
<xsl:element name="title"><xsl:value-of select="normalize-space(/SnomIPPhoneInput/Title)" /></xsl:element>

<xsl:element name="meta">
<xsl:attribute name="http-equiv"><xsl:text>content-type</xsl:text></xsl:attribute>
<xsl:attribute name="content"><xsl:text>application/xhtml+xml; charset=UTF-8</xsl:text></xsl:attribute>
</xsl:element>

<xsl:element name="meta">
<xsl:attribute name="http-equiv"><xsl:text>refresh</xsl:text></xsl:attribute>
<xsl:attribute name="content"><xsl:value-of select="number(/SnomIPPhoneInput/Fetch/@mil div 1000)" /><xsl:text>; URL=</xsl:text><xsl:value-of select="normalize-space(/SnomIPPhoneInput/Fetch)" /></xsl:attribute>
</xsl:element>

<xsl:element name="link">
<xsl:attribute name="rel"><xsl:text>stylesheet</xsl:text></xsl:attribute>
<xsl:attribute name="media"><xsl:text>screen</xsl:text></xsl:attribute>
<xsl:attribute name="type"><xsl:text>text/css</xsl:text></xsl:attribute>
<xsl:attribute name="href"><xsl:text>/css/xml.css</xsl:text></xsl:attribute>
</xsl:element>

<xsl:element name="link">
<xsl:attribute name="rel"><xsl:text>shortcut icon</xsl:text></xsl:attribute>
<xsl:attribute name="type"><xsl:text>image/x-ico</xsl:text></xsl:attribute>
<xsl:attribute name="href"><xsl:text>/img/favicon.ico</xsl:text></xsl:attribute>
</xsl:element>

<xsl:element name="style">
<xsl:attribute name="type"><xsl:text>text/css</xsl:text></xsl:attribute>
*{margin:0px 0px 0px 0px;
padding:0px 0px 0px 0px;
text-align:left;}
table,th,td{margin:1px 1px 1px 1px;
border:1px outset black;
padding:1px 1px 1px 1px;
border-collapse:collapse;}
th,td{white-space:nowrap;}
table{width:auto;}</xsl:element>
</xsl:element>
<!--SnomIPPhoneInput-->
<xsl:element name="body">
<xsl:apply-templates/>
</xsl:element>
</xsl:element>
</xsl:template>

<xsl:template match="Title">
</xsl:template>

<xsl:template match="Prompt">
<xsl:element name="div"><xsl:value-of select="." /></xsl:element>
</xsl:template>

<xsl:template match="InputItem">
<xsl:number level="single" count="InputItem" format="1 " />
<xsl:element name="button">
<xsl:attribute name="onclick"><xsl:text>location.replace('http://</xsl:text><xsl:value-of select="/SnomIPPhoneInput/URL" /><xsl:text>')</xsl:text></xsl:attribute>
<xsl:value-of select="DisplayName" />
</xsl:element>
</xsl:template>

<xsl:template match="URL">
</xsl:template>

</xsl:stylesheet>

PS: @goozales, einige .php erzeugen das snom XML Element <Titel>, es muß aber <Title> heissen. ;)
 
Zuletzt bearbeitet:
So liebe Leute,

snomWeather 1.2 ist fertig :) http://www.goozales.de/

Viel Spaß! :p

Hallo,

das läuft auf meinem Snom 870 ohne Probleme. Super!
Vielleicht läßt sich das optisch noch etwas ausgestalten, doch von der Funktion her einfach und gut.

Interessant wäre für mich das Steuern einer DECT 200 per Action URL - z.B. auf Tastendruck ein / aus

Gruß Laban63
 
Fritz!Box Status Anzeige

Ich fand ein Script hier: http://de.dyn.com/blog/power-outage...t-updates-faster-than-your-power-company-can/

Das habe ich mal für Snom geändert und erweitert.
So habe ich mit nur einem Tastendruck die wichtigsten Daten der FB.
Weitere lassen sich ergänzen.

fb_uptime_snom.php:
PHP:
<?php
//from: http://de.dyn.com/blog/power-outages-using-dyndns-pro-to-get-updates-faster-than-your-power-company-can/
//Script to get server uptime
	$shellcommand = shell_exec('uptime');
	$uptime = explode(' up ', $shellcommand);
	$uptime = explode(',', $uptime[1]);
	$uptime = $uptime[0].', '.$uptime[1];

//  	echo ('Server uptime: ' . $uptime . '');
//ENDE Original

//Last ermitteln
	$load = explode('average: ', $shellcommand);
	$load = $load[1];

//externe IP ermitteln
	$ip = shell_exec('showdsldstat');
	$ip = explode('0: IPv4: ip ', $ip); //in den Hochkommas anpassen (z.B. '0: ip ')
	$ip = explode(' peer ', $ip[1]); //in den Hochkommas anpassen (z.B. ' mask ')
	$ip = $ip[0];

//WLAN Status ermitteln
	$wlan = shell_exec('ctlmgr_ctl r wlan settings/ap_enabled');
	if ($wlan == 0) {
		$wlan = "Wlan ist AUS";
	}
	else {
		$wlan = "Wlan ist AN";
	}

//Ausgabe für Snom
		echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
		echo "<SnomIPPhoneText>";
		echo "<Text>";
		echo ('Fritz!Box uptime:<br/>' . $uptime . '<br/>');
		echo "load average:<br/>";
		echo $load;
		echo "<br/>ext. IP-Adresse:<br/>" .$ip;
		echo "<br/>" .$wlan;
		echo "</Text>";
//	echo "<Fetch mil="5000">snom://mb_exit</Fetch>"; //klappt nicht
	echo "<Fetch mil=/"5000/">snom://mb_exit</Fetch>"; //so geht's
		echo "</SnomIPPhoneText>";

?>
 
Zuletzt bearbeitet:
Moin

Sehr schön, habs bei mir probiert, muss aber wohl erst eine "Sicherheitseinstellung" deaktivieren...
Code:
Warning: shell_exec() has been disabled for security reasons in /var/media/ftp/SanDisk-Cruzer-01/snom320/fb_uptime_snom.php on line 4

Warning: shell_exec() has been disabled for security reasons in /var/media/ftp/SanDisk-Cruzer-01/snom320/fb_uptime_snom.php on line 16

Warning: shell_exec() has been disabled for security reasons in /var/media/ftp/SanDisk-Cruzer-01/snom320/fb_uptime_snom.php on line 22
Fritz!Box uptime:
,
load average:

ext. IP-Adresse:

Wlan ist AUS
Die XML sieht nach Aktivierung von shell_exec() so aus...
Code:
<?xml version="1.0" encoding="UTF-8"?><SnomIPPhoneText><Text>Fritz!Box uptime:<br/> 1:37,   load average: 1.13<br/>load average:<br/>1.13, 1.09, 1.03
<br/>ext. IP-Adresse:<br/><br/>Wlan ist AUS</Text></SnomIPPhoneText>
Scheint so, als ob es nicht überall gleich gut funktioniert.
Denn das uptime Kommando geht, die ctlmgr_ctl Aufrufe irgendwie jedoch nicht, komisch.

Mal auf der Konsole probieren...
Code:
deepbase # ../cgi-bin/php-cgi fb_uptime_snom.php
X-Powered-By: PHP/5.5.6
Content-type: text/html

<?xml version="1.0" encoding="UTF-8"?><SnomIPPhoneText><Text>Fritz!Box uptime:<br/> 1:49,   0 users<br/>load average:<br/>1.19, 1.14, 1.07
<br/>ext. IP-Adresse:<br/>62.226.XXX.XXX<br/>Wlan ist AN</Text></SnomIPPhoneText>
Hier siehste mal welchen HTML Header PHP standardmässig erzeugt, wenn nicht...
PHP:
header('Content-Type: application/xhtml+xml; charset=UTF-8');
...benutzt wird.

Mal einsetzen...
PHP:
<?php
        header("Content-Type: application/xhtml+xml; charset=UTF-8");
        echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
        echo "<SnomIPPhoneText>";
        echo "<Text>";
        echo ('Fritz!Box uptime:<br/>' . $uptime . '<br/>');
        echo "load average:<br/>";
        echo $load;
        echo "<br/>ext. IP-Adresse:<br/>" .$ip;
        echo "<br/>" .$wlan;
        echo "</Text>";
//    echo "<Fetch mil="5000">snom://mb_exit</Fetch>"; //klappt nicht
        echo "</SnomIPPhoneText>";
?>
Konsolenaufruf...
Code:
deepbase # ../cgi-bin/php-cgi fb_uptime_snom.php
X-Powered-By: PHP/5.5.6
Content-Type: application/xhtml+xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?><SnomIPPhoneText><Text>Fritz!Box uptime:<br/> 2:03,   0 users<br/>load average:<br/>1.16, 1.12, 1.09
<br/>ext. IP-Adresse:<br/>62.226.XXX.XXX<br/>Wlan ist AN</Text></SnomIPPhoneText>
 
Zuletzt bearbeitet:
Schön, daß es dir gefällt.

Bei mir sieht es im Browser so aus:
Fritz!Box uptime:
41 days, 17:57
load average:
0.06, 0.07, 0.02
ext. IP-Adresse:
xx.xxx.xxx.xxx
Wlan ist AUS
Da musst du bei uptime noch etwas ändern, die "0 user" soll eigentlich nicht angezeigt werden.

Soll ja hauptsächlich eine Anregung für weitere Möglichkeiten mit Scripten sein.
 
Zuletzt bearbeitet:
Ich hab sowieso eine "exotische" Konfiguration. ;)

Zu dem Fetch Tag:
Dein klappt nicht...
PHP:
echo "<Fetch mil="20000">snom://mb_exit</Fetch>";
Mein klappt...
PHP:
echo '<Fetch mil="20000">snom://mb_exit</Fetch>';
...fällt dir was auf?
 
Ja! Einmal ist die 20000 blau und einmal rot. :lach:
Danke! (ich hab' doch keine Ahnung von programmieren ;) )
Sollten dann alle echo's so sein?
 
Zuletzt bearbeitet:
Das kommt darauf an, wieviel Arbeit du dir machen möchtest.
Das Problem nennt sich "maskieren" und ich kenne Niemanden der davon noch keine Kopfschmerzen bekam.
Korrekt ist eigentlich eine Maskierung alá: echo "Ich \"stehe\" in Gänsefüsschen";
Sowas fällt auch auf im Quelltext. Wesentlich unauffälliger ist beschriebenes: echo 'Ich "stehe" in Gänsefüsschen';
Denn die Hochkommata stellen eine Fehlerquelle dar, weil sie leicht übersehen werden können.

In PHP mach ich eine echo Ausgabe auch gerne über mehrere Zeilen, so...
PHP:
<?php
header('Content-Type: application/xhtml+xml; charset=UTF-8');
echo '<?xml version="1.0" encoding="UTF-8"?>
<SnomIPPhoneText>
<Fetch mil="20000">snom://mb_exit</Fetch>
<Text>
Fritz!Box uptime:<br/>'.$uptime.'<br/>
load average:<br/>
'.$load.'
<br/>ext. IP-Adresse:<br/>'.$ip.'
<br/>'.$wlan.'
</Text>
</SnomIPPhoneText>
';
?>
Also nur ein echo für das Gesamte XML.
 
Zuletzt bearbeitet:
Fritz!Box Last Anzeige mit Aktualisierung

Mit und dank deiner Hilfe habe ich jetzt noch ein Script geschrieben, welches die Last anzeigt und sich jede Sekunde aktualisiert.

Im Fetch Tag das Ziehl anpassen!

fb_load_snom.php
PHP:
<?php
//Zeit und Last ermitteln
	$uptime = shell_exec('uptime');
	$time = explode(' ', $uptime);
	$time = $time[1];
	$load = explode('average: ', $uptime);
	$load = $load[1];

//Ausgabe für Snom
	header('Content-Type: application/xhtml+xml; charset=UTF-8');
	echo '<?xml version="1.0" encoding="UTF-8"?>
	<SnomIPPhoneText>
	<Text>FritzBox Zeit '.$time.'<br/>Last: '.$load.'</Text>
	<Fetch mil="1000">fritz.box:4200/fb_load_snom.php</Fetch>
	</SnomIPPhoneText>';
?>
Sollte bei dir bei $wlan der rote Punkt nicht blau sein?
 
Zuletzt bearbeitet:
Hehe, wollt nur mal gucken ob du aufpasst. :)
Nee, passiert schonmal, wenn ungetestet getippst wurde.
Verbessert, dankeschön.

Verbesserungsvorschlag:
fb_load_snom.php
PHP:
<?php
$uptime = shell_exec('uptime');
$time = explode(' ', $uptime);
$time = $time[1];
$load = explode('average: ', $uptime);
$load = $load[1];
header('Content-Type: application/xhtml+xml; charset=UTF-8');
echo '<?xml version="1.0" encoding="UTF-8"?>
<SnomIPPhoneText>
<Title></Title>
<Prompt></Prompt>
<Fetch mil="1000">'.$_SERVER['PHP_SELF'].'</Fetch>
<Text>FritzBox Zeit '.$time.'<br/>Last: '.$load.'</Text>
</SnomIPPhoneText>
';
?>
 
Zuletzt bearbeitet:
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.