[HowTo] SensorAndSwitch: Pseudoscript: PseudoGeräte selbst entwickeln.

Meinste sowas?

tam
Code:
TAM=tam:settings/NumNewMessages

tams
Code:
#!/bin/sh
echo 'content-type: text/plain
'
cat tam | ../scripts/query.lua > queries.txt
cat queries.txt
#EOF

Aufruf und Ausgabe...
Code:
sh tams
content-type: text/plain

TAM="0"
 
Mehr von außen ohne root-Zugriff auf die Fritzbox.

Hintergrund ist der, dass ich meine Fritzbox immer wieder mal rebooten muss und nicht jedesmal per Telnet alles starten will.

Ich dachte also an sowas wie
Code:
http://fritz.box/query.lua?sid=xxxxxxxxxxxxx&TAM=tam:settings/NumNewMessages

aber das konnte ich jetzt von deinen Angaben ableiten. Vielen Dank, teste ich gleich mal aus. :)
 
Ja, wenn du eine sid= hast, ist dass...
HTML:
http://fritz.box/query.lua?sid=xxxxxxxxxxxxx&TAM=tam:settings/NumNewMessages
...kein Problem. ;)
 
Zuletzt bearbeitet:
Ich bin jetzt richtig verwirrt.

Ermittle ich eine SID und schalte per psg geht alles prima, rufe ich aber query.lua auf, kommt immer die Anmeldemaske als Antwort. Warum nur?

Code:
	include __DIR__."/../include/psg.php";

	$ver="V#V 4.20#";
	$AIN="08761 1234567";
	$Switch="off";
	$Login=$Conf["FB"]."/login_sid.lua";
	$user=$Conf["USER"];
	$password=$Conf["PASSWORD"];
	$sid=GetSessionID($Login,$user,$password);
	$cmd=$Conf["FB"]."/webservices/homeautoswitch.lua?sid=".$sid."&switchcmd=";
	$Statuss=file_get_contents($cmd.'setswitch'.$Switch.'&ain='.$AIN);
echo $cmd."<br>";
var_dump($Statuss); [B][COLOR="#008000"]#Funktioniert[/COLOR][/B]

	$url=$Conf["FB"]."/query.lua?sid=".$sid."&TAM=tam:settings/NumNewMessages";
	$Status=file_get_contents($url);
echo $url."<br>";
var_dump($Status); [COLOR="#FF0000"][B]#Kommt Anmeldemaske als Antwort[/B][/COLOR]

Nachtrag:

Ich habe mich selbst reingelegt! Es muss der admin als Anmeldung sein, dann gehts. :)
 
Zuletzt bearbeitet:
Du meinst: Ein Fritz!Box Benutzer mit Konfigurationsrechten ?

Sonst gibt es noch die Hürde: Pro IP = unterschiedliche sid
Noch eine: Ungültige sid = alle sids von dieser IP werden ungültig
 
Zuletzt bearbeitet:
Die einfache Variante mit nur Anzeigen. ;)
 
Moins

Bevor ich es wieder vergesse. :D

Alle Infos zu den Anrufbeantwortern...
Code:
tams=tam:settings/TAM/list(Active,MSNBitmap,Mode,UserAnsVP,UserAnsRecVP,UserEndVP,RecordLength,RingCount,PIN,PlayTimestamp,CompressionLevel,Display,PushmailActive,MailAddress,PushmailServer,PushmailUser,PushmailPass,PushmailFrom,Name,NumNewMessages,NumOldMessages)
Quelle
 
Zuletzt bearbeitet:
Hallo,
@JL3:
Daran habe ich mich einmal versucht, bin aber auf voller Linie gescheitert. Wenn Du das Script fertig hast, kannst Du es dann einmal posten?
Ich habe es damals mit den Möglichkeiten versucht, mit denen ich den Status von WLAN/SIP usw erfragt habe.
 
@koyaanisqatsi: Ah, super, da gibts ja einige interessante Sachen zum noch Einbauen. Danke. :)

@SF1975: Ja, aber ich denke, ich bastel ein ganz neues psgAnrufbeantworter.php mit mehr Infos dann als das alte. Wenn das fertig ist, stelle ich es ein. ;)
 
Pass aber auf, bin mir nicht sicher was da angezeigt wird.
Vermutlich einmal 1-5 für die ABs und einmal 1-5 für die Memofunktion.

Auch für uns interessant...
HTML:
<html>
<head>
<title>UPnP</title>
</head>
<body>
<a href="http://fritz.box:49000/any.xml">any.xml</a>
<br/>
<a href="http://fritz.box:49000/igddesc.xml">igddesc.xml</a>
<br/>
<a href="http://fritz.box:49000/igdicfgSCPD.xml">igdicfgSCPD.xml</a>
<br/>
<a href="http://fritz.box:49000/igddslSCPD.xml">igddslSCPD.xml</a>
<br/>
<a href="http://fritz.box:49000/igdconnSCPD.xml">igdconnSCPD.xml</a>
<br/>
<a href="http://fritz.box:49000/MediaReceiverRegistrar.xml">MediaReceiverRegistrar.xml</a>
<br/>
<a href="http://fritz.box:49000/MediaServerConnectionManager.xml">MediaServerConnectionManager.xml</a>
</body>
</html>
...da stehen Alle Requests drinne.

Damit gehen dann solche SOAP Requests...
Code:
curl "http://fritz.box:49000/igdupnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination" -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:ForceTermination xmlns:u='urn:schemas-upnp-org:service:WANIPConnection:1' /> </s:Body> </s:Envelope>"
...macht einen WAN Reconnect mit anschliessend erneuerter WAN IP.
Die neue IP klappt allerdings nicht mit jeden Anschluss/Anbieter.
 
Zuletzt bearbeitet:
psgAnrufbeantworter.php
PHP:
<?php

	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch                                      PSG-Script   |
		|   ===============================================================   |
		|   Anrufbeantworter                                 Fritzbox (url)   |
		|   ---------------------------------------------------------------   |
		|   Informationen zum Fritzbox Anrufbeantworter                       |
		|                                                                     |
		|   (C)2014/15 BlueDragon / koyaanisqatsi                             !
		|                                                                     |
		+---------------------------------------------------------------------+
	*/

	include __DIR__."/../include/psg.php";

	$ver="V#V 4.50#";
	$Login=$Conf["FB"]."/login_sid.lua";
	$user=$Conf["USER"];
	$password=$Conf["PASSWORD"];
	$url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&TAM=tam:settings/TAM/list(Active,MSNBitmap,Mode,UserAnsVP,UserAnsRecVP,UserEndVP,RecordLength,RingCount,PIN,PlayTimestamp,CompressionLevel,Display,PushmailActive,MailAddress,PushmailServer,PushmailUser,PushmailPass,PushmailFrom,Name,NumNewMessages,NumOldMessages)";
	$dat=json_decode(file_get_contents($url),true);
	$ab=0; #0,1,2,3,4 sind die 5 ABs
	$Status=" ".$dat["TAM"][$ab]["NumNewMessages"];
	$old=$dat["TAM"][$ab]["NumOldMessages"];
	$abaktiv=$dat["TAM"][$ab]["Active"];
	if ($abaktiv==0) {$abaktiv="nein";} else {$abaktiv="ja";}
	$abname=$dat["TAM"][$ab]["Name"];
	if ($Status) {
		if (trim($Status)=="0") {
			$anrufeneu="0";
			$anrufe="0";
			$fcss="f1";
			$abneu='<span id="'.$fcss.'" style="font-weight:bold;font-size:32px;">'.$anrufeneu.'</span> Nachrichten';
		}
		if (trim($Status)>="1") {
			$anrufeneu=trim($Status);
			$anrufe="1";
			$fcss="f2";
			$abneu='<span id="'.$fcss.'" style="font-weight:bold;font-size:32px;">'.$anrufeneu.'</span> Nachricht';
			if (trim($Status)>"1") {
				$abneu='<span id="'.$fcss.'" style="font-weight:bold;font-size:32px;">'.$anrufeneu.'</span> Nachrichten';
			}
		}
		if (trim($old)=="0") {
			$anrufealt="0";
			$fcss="f1";
			$abalt=$anrufealt.' alte Nachrichten';
		}
		if (trim($old)>="1") {
			$anrufealt=trim($old);
			$fcss="f2";
			$abalt=$anrufealt.' alte Nachricht';
			if (trim($old)>"1") {
				$abalt=$anrufealt.' alte Nachrichten';
			}
		}
		$echo='P#';
		$echo.='<div style="font-size:12px;text-align:right;width:310px;position:absolute;top:-20px;"><img src="'.picdesign("telab".$anrufe.".png").'" border="0"></div>';
		$echo.='<div style="font-size:16px;text-align:left;width:250px;position:absolute;top:22px;">'.$abname.'</div>';
		$echo.='<div style="font-size:22px;text-align:right;width:250px;position:absolute;top:-8px;">'.$abneu.'</div>';
		$echo.='<div style="font-size:12px;text-align:right;width:250px;position:absolute;top:26px;">'.$abalt.'</div>';
		$echo.='<div style="font-size:12px;text-align:left;width:250px;position:absolute;top:-1px;"><img src="'.picdesign($abaktiv.".png").'" border="0"></div>';
		$echo.='*HTML#'.$ver;
	}
	else {
		$echo='P##E##'.$ver;
	}
	echo $echo;
	exit;
	
?>
 
Zuletzt bearbeitet:
Ach, übrigens, so eine SOAP UPnP XML, die die Fritz!Box zurückliefert, wenn bspw...
Code:
#!/bin/sh
curl "http://fritz.box:49000/igdupnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#GetStatusInfo" -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:GetStatusInfo xmlns:u='urn:schemas-upnp-org:service:WANIPConnection:1' /> </s:Body> </s:Envelope>"
#EOF
...das hier als Antwort zurückliefert...
Code:
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<u:GetStatusInfoResponse xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1">
<NewConnectionStatus>Connected</NewConnectionStatus>
<NewLastConnectionError>ERROR_NONE</NewLastConnectionError>
<NewUptime>52230</NewUptime>
</u:GetStatusInfoResponse>
</s:Body>
</s:Envelope>
...liesse sich natürlich auch ganz einfach mit einem selbsterstellten XSL Stylesheet
in ein HTML oder Text formatieren, dass es genau das Ausgibt was es soll.

Wobei das parsen der XML und die Transformation mittels XSL vollkommen
klientseitig (Webbrowser) gemacht wird, sprich, der Server ist nicht damit belastet.

Da gibt es einen spassigen Spruch zu, ich zitiere mal frei...
:doktor:
XPath schrieb:
Nimm XML wenn du mit HTML nicht weiterkommst.
Erreichst du es damit auch nicht, hast du zuwenig XSLT und XPath benutzt
:rolleyes:

Beispiel, harmlose rechnereien...
sum.xml
HTML:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<?xml-stylesheet version="1.0" href="sum.xsl" type="text/xsl" ?>
<!DOCTYPE sum [<!ENTITY egrv "9.81">
<!ENTITY lg "299792458">
<!ENTITY au "149597870691">
<!ENTITY ly "9460730472580800">
<!ENTITY pc "30856776000000000">
<!ENTITY pi "3.1415926">
<!ENTITY lum "Licht">
<!ENTITY sec "sekunden">
<!ENTITY min "minuten">
<!ENTITY sec "stunden">
<!ENTITY yr "jahre">
<!ENTITY mm "Millimeter">
<!ENTITY cm "Zentimeter">
<!ENTITY dm "Dezimeter">
<!ENTITY m  "Meter">
<!ENTITY km "Kilometer">
<!ENTITY mg  "Milligramm">
<!ENTITY gr  "Gramm">
<!ENTITY kg  "Kilogramm">
<!ENTITY to  "Tonnen">
<!ENTITY l  "Liter">
<!ENTITY px "Pixel">
<!ENTITY nu "Nummer">
<!ENTITY sum "Die Summierung">
<!ELEMENT sum ANY>
<!ATTLIST sum
title CDATA "XSL kann rechnen!!!">
<!ELEMENT rechteck EMPTY>
<!ATTLIST rechteck
inf CDATA #REQUIRED
a CDATA #REQUIRED
b CDATA #REQUIRED
u CDATA "&mm;">
<!ELEMENT gauss EMPTY>
<!ATTLIST gauss
inf CDATA #REQUIRED
f CDATA #REQUIRED
u CDATA "(Der kleine Gauß)">
<!ELEMENT kugel EMPTY>
<!ATTLIST kugel
inf CDATA #REQUIRED
d CDATA #REQUIRED
pi CDATA #REQUIRED
u CDATA "&cm;">
<!ELEMENT astro EMPTY>
<!ATTLIST astro
inf CDATA #REQUIRED
d CDATA #REQUIRED
fac CDATA #REQUIRED
u CDATA "&m;"
beh (divide|add|multi|subs) "divide">
<!ELEMENT fall EMPTY>
<!ATTLIST fall
inf CDATA #REQUIRED
g CDATA #REQUIRED
h CDATA #REQUIRED
fac CDATA "&egrv;"
ua CDATA "&m;"
ub CDATA "&kg;">
<!ELEMENT quer EMPTY>
<!ATTLIST quer
inf CDATA #REQUIRED
d CDATA #REQUIRED
fac CDATA #REQUIRED
u CDATA "&m;"
beh (divide|add|multi|subs) "add">
<!ELEMENT xslinfo EMPTY>]>
<sum>
<astro inf="Von der Erde bis zum Mond" beh="divide" d="389730195.4" fac="&lg;" u="&lum;&sec;" />
<astro inf="Von der Erde bis zur Sonne" beh="divide" d="&au;" fac="&lg;" u="&lum;&sec;" />
<rechteck inf="Das Wohnhaus in der Lindenstrasse 68" a="70" b="90" u="&m;" />
<rechteck inf="Das Grundstück" a="300" b="55" u="&m;" />
<gauss inf="&sum;" f="2" />
<gauss inf="&sum;" f="100" />
<kugel inf="Die Erde" d="12742" u="&km;" pi="&pi;" />
<kugel inf="Der Mond" d="3476" u="&km;" pi="&pi;" />
<kugel inf="Kugelgefäß (1&l;)" d="12.4071" u="&cm;" pi="&pi;" />
<astro inf="Die Entfernung Erde/Mond beträgt" beh="multi" d="&lg;" fac="0.0013" u="&km;" />
<astro inf="Die mittlere Entfernung Sonne/Erde beträgt" beh="divide" d="&au;" fac="1000" u="&km;" />
<astro inf="Ein Parsec sind" beh="divide" d="&pc;" fac="&ly;" u="&lum;&yr;" />
<fall inf="Ein Fahrzeug" g="7.5" h="1" ua="&km;" ub="&to;" />
<fall inf="Eine Person" g="72" h="10" ua="&m;" ub="&kg;" />
<fall inf="Ein Amboss" g="250" h="1" ua="&m;" ub="&kg;" />
<quer inf="Die Quersumme von" d="5050" fac="4" u="&nu;" />
<xslinfo />
</sum>
...dazu gehört diese XSLT (und eine 1px kleine "one.png") ins gleiche Verzeichnis...
sum.xsl
HTML:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="anzahl" select="count(//*/*)" />
<xsl:decimal-format name="de" decimal-separator="," grouping-separator="." NaN="Falscher Datentyp"/>

<xsl:template match="/sum">
<xsl:element name="html">
<xsl:element name="head">
<xsl:element name="title"><xsl:value-of select="/sum/@title"/></xsl:element>
<xsl:element name="style">
<xsl:attribute name="type">text/css</xsl:attribute>
*{font-family:Blue Highway;font-size:28px;white-space:pre-line;text-align:justify;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;}
html{background-color:gray;color:black;text-align:left;font-size:1em;white-space:nowrap;}
a:link{text-decoration:none;color:black;}
a:visited{color:black;}
div{border:2px ridge white;color:black;background-color:silver;}
div div{border:none;}
table,caption,th,td{border-collapse:collapse;border:2px ridge white;text-align:center;color:black;background-color:silver;empty-cells:hide;}
</xsl:element>
</xsl:element>
<xsl:element name="body">
<xsl:element name="div"><xsl:if test="$anzahl &lt; 2"><xsl:value-of select="concat($anzahl,' Datensatz ist vorhanden.')" /></xsl:if><xsl:if test="$anzahl &gt; 1"><xsl:value-of select="concat($anzahl,' Datensätze sind vorhanden.')" /></xsl:if></xsl:element>
<xsl:apply-templates />
</xsl:element>
</xsl:element>
</xsl:template>

<xsl:template match="rechteck">
<xsl:element name="div">
<xsl:value-of select="concat(name(),': ',@inf,' hat ein Umfang von ',((number(@a) * 2) + (number(@b) * 2)),' ',@u)" />
<xsl:element name="div">
<xsl:value-of select="concat('und eine Fläche von ',(number(@a) * number(@b)),' ',@u)" />²
</xsl:element>
<xsl:element name="div">
<xsl:element name="img">
<xsl:attribute name="src">one.png</xsl:attribute>
<xsl:attribute name="width"><xsl:value-of select="@a" />px</xsl:attribute>
<xsl:attribute name="height"><xsl:value-of select="@b" />px</xsl:attribute>
<xsl:attribute name="alt"><xsl:value-of select="@inf" /></xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:template>

<xsl:template match="gauss">
<xsl:element name="div">
<xsl:value-of select="concat(name(),': ',@inf,' von 1 bis ', @f,' ergibt: ',((number(@f) * number(@f) + number(@f)) div 2),' ',@u)" />
</xsl:element>
</xsl:template>

<xsl:template match="kugel">
<xsl:element name="div">
<xsl:value-of select="concat(name(),': ',@inf,': Umfang: ',format-number(number(@d) * number(@pi),'###.##0,###','de'),' ',@u)" />
<xsl:element name="div">
<xsl:value-of select="concat(name(),': ',@inf,': Schnittfläche: ',format-number(((number(@d) div 2) * (number(@d) div 2)) * number(@pi),'###.##0,###','de'),' ',@u)" />²
</xsl:element>
<xsl:element name="div">
<xsl:value-of select="concat(name(),': ',@inf,': Volumen: ',format-number(1.33333333 * number(@pi) * ((number(@d) div 2) * (number(@d) div 2) * (number(@d) div 2)),'###.##0,###','de'),' ',@u)" />³
</xsl:element>
<xsl:element name="div">
<xsl:value-of select="concat(name(),': ',@inf,': Oberfläche: ',format-number(4 * number(@pi) * ((number(@d) div 2) * (number(@d) div 2)),'###.##0,###','de'),' ',@u)" />²
</xsl:element>
</xsl:element>
</xsl:template>

<xsl:template match="astro">
<xsl:element name="div">
<xsl:if test="@beh = 'divide'">
<xsl:value-of select="concat(name(),': ',@inf,': ',format-number((@d div @fac),'###.##0,###','de'),' ',@u)" />
</xsl:if>
<xsl:if test="@beh = 'add'">
<xsl:value-of select="concat(name(),': ',@inf,': ',format-number((@d + @fac),'###.##0,###','de'),' ',@u)" />
</xsl:if>
<xsl:if test="@beh = 'multi'">
<xsl:value-of select="concat(name(),': ',@inf,': ',format-number((@d * @fac),'###.##0,###','de'),' ',@u)" />
</xsl:if>
<xsl:if test="@beh = 'subs'">
<xsl:value-of select="concat(name(),': ',@inf,': ',format-number((@d - @fac),'###.##0,###','de'),' ',@u)" />
</xsl:if>
</xsl:element>
</xsl:template>

<xsl:template match="fall">
<xsl:element name="div">
<xsl:value-of select="concat(name(),': ',@inf,' wiegt ',format-number(number(@g),'###.##0,###','de'),' ',@ub,' und fällt aus einer Höhe von ',number(@h),' ',@ua,',')"/>
<xsl:element name="div">
<xsl:if test="@ua = 'Meter' and @ub = 'Kilogramm'">
<xsl:value-of select="concat(' dann wird die Aufschlagskraft ',format-number(number(@g) * number(@h) * number(@fac),'###.##0,###','de'),' ',@ub,' betragen.')" />
</xsl:if>
<xsl:if test="@ua = 'Kilometer' and @ub = 'Kilogramm'">
<xsl:value-of select="concat(' dann wird die Aufschlagskraft ',format-number(number(@g) * number(@h) * number(@fac) * 1000,'###.##0,###','de'),' ',@ub,' betragen.')" />
</xsl:if>
<xsl:if test="@ua = 'Kilometer' and @ub = 'Tonnen'">
<xsl:value-of select="concat(' dann wird die Aufschlagskraft ',format-number(number(@g) * number(@h) * number(@fac) * 1000,'###.##0,###','de'),' ',@ub,' betragen.')" />
</xsl:if>
<xsl:if test="@ua = 'Meter' and @ub = 'Tonnen'">
<xsl:value-of select="concat(' dann wird die Aufschlagskraft ',format-number(number(@g) * number(@h) * number(@fac),'###.##0,###','de'),' ',@ub,' betragen.')" />
</xsl:if>
</xsl:element>
</xsl:element>
</xsl:template>

<xsl:template match="quer">
<xsl:element name="div">
<xsl:if test="@beh = 'divide'">
<xsl:value-of select="concat(name(),': ',@inf,': ',format-number((@d div @fac),'###.##0,###','de'),' ',@u)" />
</xsl:if>
<xsl:if test="@beh = 'add'">
<xsl:value-of select="concat(name(),': ',@inf,' ',@d,' ist die ',@u,' ',format-number(substring(@d,@fac),'###.##0,###','de'))" />
</xsl:if>
<xsl:if test="@beh = 'multi'">
<xsl:value-of select="concat(name(),': ',@inf,': ',format-number((@d * @fac),'###.##0,###','de'),' ',@u)" />
</xsl:if>
<xsl:if test="@beh = 'subs'">
<xsl:value-of select="concat(name(),': ',@inf,': ',format-number((@d - @fac),'###.##0,###','de'),' ',@u)" />
</xsl:if>
</xsl:element>
</xsl:template>

<xsl:template match="xslinfo">
<xsl:element name="table">
<xsl:element name="caption"><xsl:value-of select="name()" /></xsl:element>
<xsl:element name="thead">
<xsl:element name="tr">
<xsl:element name="th"><xsl:text>Version</xsl:text></xsl:element>
<xsl:element name="th"><xsl:text>Hersteller</xsl:text></xsl:element>
<xsl:element name="th"><xsl:text>URL</xsl:text></xsl:element>
</xsl:element>
</xsl:element>
<xsl:element name="tfoot">
<xsl:element name="tr">
<xsl:element name="td"><xsl:text>number</xsl:text></xsl:element>
<xsl:element name="td"><xsl:text>string</xsl:text></xsl:element>
<xsl:element name="td"><xsl:text>link</xsl:text></xsl:element>
</xsl:element>
</xsl:element>
<xsl:element name="tbody">
<xsl:element name="tr">
<xsl:element name="td"><xsl:value-of select="system-property('xsl:version')" /></xsl:element>
<xsl:element name="td"><xsl:value-of select="system-property('xsl:vendor')" /></xsl:element>
<xsl:element name="td"><xsl:element name="a"><xsl:attribute name="href"><xsl:value-of select="system-property('xsl:vendor-url')" /></xsl:attribute><xsl:value-of select="system-property('xsl:vendor-url')" /></xsl:element></xsl:element>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:template>

</xsl:stylesheet>
...garantiert mit Rechenfehler, wer möchte, bitte verbessern. ;)
 
Zuletzt bearbeitet:
Hallo,
;) jaaa, schlagt mich, denkt ruhig "Da kommt der wieder mit seinen Fragen..." aber:

Kann man so, wie man nach der Anzahl der Nachrichten fragt, auch nach der Anzahl der registrierten Rufnummern fragen? "X von Y Rufnummern aktiv" oder so ähnlich?
 
Inzwischen habe ich ein wenig mit dem GPIO des Pi mittels Python und PHP "gespielt" und habe inzwischen ein paar Lösungen für die ich noch Probleme suche.

Mit ein paar Handgriffen und einem Breadboard, auf das man ein paar LEDs und Widerstände steckt, hat man schnell die Möglichkeit, Ereignisse per LEDs (an, aus, blinken usw.) anzuzeigen. Denkbar wäre z. B. Nachricht auf dem AB, eingegangene Mails, Schaltfehler-Alarm usw.

Vielleicht fällt Euch noch was ein. ;)
 
Moins

@SF1975: "http://fritz.box/query.lua?sid=xxxxxxxxxxxx&sips=sip:status/sip/list(connect)"
Code:
{
 "sips" : [
 {
 "connect" : "0"
 },
 {
 "connect" : "0"
 },
 {
 "connect" : "0"
 },
 {
 "connect" : "0"
 },
 {
 "connect" : "0"
 },
 {
 "connect" : "2"
 },
 {
 "connect" : "2"
 },
 {
 "connect" : "2"
 },
 {
 "connect" : "0"
 },
 {
 "connect" : "0"
 },
 {
 "connect" : "2"
 },
 {
 "connect" : "2"
 }
 ]
}
...wobei eine 0 deaktiviert, 1 herauszufinden und eine 2 registriert ist.

PS: ...blinkendes AB Symbol: 1x schnell (500ms)
HTML:
<img src="data:image/gif;base64,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"/>
und 1x langsam (1000ms)
HTML:
<img src="data:image/gif;base64,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"/>
 
Zuletzt bearbeitet:
bin mal wieder am basteln.

hab da noch 3 FS20 Funksteckdosen von ELV / Conrad, empfangen auf 486 Mhz und einen ELV PC-Sender.
dieser Sender funktioniert am Pc mit Windows und dem Program Eventghost ganz gut.

letzes Jahr schonmal versucht den Senderr am Raspberry an zu schliessen, aber ohne Erfolg!
Jetzt bei dem Pi-2 nochmal versucht und im Internet dazu Python Scripts dazu gefunden.

Aber der Pi-2 bringt bei den Script´s nur Fehler und die Dosen schalten nicht!
das Ganze nochmal auf dem Pi-1 versucht!

Klappt auf Anhieb!

scheinbar macht da Jessie wieder Probleme!

erst mal egal,
mein Problem, wie bekomme ich die Python Befehle in mein PHP Schalt-Script eingebunden?

zum schalten bräuchte ich:
python
>>>import fs20
>>>from fs20.pcs import PCS
>>>address = fs20.util.address_to_byte('1234-1234-1111')
>>>pcs = PCS()
>>>pcs.send_once(address, fs20.command.ON) # für einschalten
>>>pcs.send_once(address, fs20.command.OFF) # für ausschalten
>>>exit ()

ist wahrscheinlich gar nicht soo schwer, aber wie sende ich mehrere Python Befehle in PHP hintereinander?
 
Moin

Ich würde aus dem PSG das Pythonskript aufrufen.
...wie ein gewöhnliches Shellskript auch.
Und auch im Pythonskript echo und nicht einfach exit() für Rückgabewerte nutzen, wie es auch die Shellskripte machen sollten.

Dazu benötigt es die entsprechenden Rechte (Benutzer, ausführbar) und ein SHEBANG.
SHEBANG: #!/usr/bin/python
(which python)
 
Zuletzt bearbeitet:
Stimmt, ob bash-Script oder Python-Script, das ist eigentlich egal. In den PsGs genau die gleiche Handhabung. Was das Script nach stdout sendet, kann man mit dem PsG wieder einlesen (z. B. $Status)
 
funktioniert!!

wenn einer Interresse hat FS20 Steckdosen mit dem Pc-Sender zu schalten,
hier hab ich die Anleitung und Python Script´s gefunden:
https://github.com/dprokscha/pyfs20/

nur ärgert es mich doch etwas warum das auf dem Pi-2 mit Jessie nicht funktioniert?

wäre mir lieber wenn es da auch ginge!

meine Vermutung, die Usb Schnitstelle wird da nicht gefunden.

mit dmesg zeigt der Pi-2 mir das an:
PHP:
[51707.801009] usb 1-1.5: USB disconnect, device number 5
[51715.716581] usb 1-1.5: new full-speed USB device number 6 using dwc_otg
[51715.825218] usb 1-1.5: New USB device found, idVendor=18ef, idProduct=e015
[51715.825247] usb 1-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[51715.825263] usb 1-1.5: Product: FS20PCS
[51715.825278] usb 1-1.5: Manufacturer: ELV Elektronik AG
[51715.832169] hid-generic 0003:18EF:E015.0004: hiddev0,hidraw2: USB HID v1.01 Device [ELV Elektronik AG FS20PCS] on usb-3f980000.usb-1.5/input0
aber usb-3f980000.usb-1.5/input0 finde ich nicht.
 

Neueste Beiträge

Statistik des Forums

Themen
244,878
Beiträge
2,220,027
Mitglieder
371,604
Neuestes Mitglied
broekar
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.

IPPF im Überblick

Neueste Beiträge