FritzBox mit SOAP auslesen und steuern

Hört sich gut an.
Wäre schön, so etwas dann wie z.B. die Telefonliste im Webfront abbilden zu können und evtl. auch gleich die Anrufe abhören oder löschen zu können.

Werde mir xpath jetzt mal ansehen. Möchte das auch selber etwas verstehen.

Bin gespannt.
Grüße,
Doc

ich suche schon länger nach einer Möglichkeit, den aktuellen „Telefonstatus“ auszulesen. Wenn zwei Gespräche paralell am laufen sind, meldet die Registervariable nach beenden des ersten ein Disconnect, merkt aber natürlich nicht, dass das andere Gespräch noch aktuell ist. Mit foncontrol müssten die Daten eigentlich ausgelesen werden können, jedoch finde ich nirgends eine Befehlsübersicht dafür.

In der SCPD vom foncontrol schon nachgesehen ?
Ich kann immer nur abends für 1-2 Stunden was aktiv machen. Darum dauert das bei mir immer.
Eventuell geht das ja auch per Events; habe mich damit aber noch gar nicht beschäftigt.
Das setzt ja bestimmt eine RegVar und dahinter einen SoapServer vor raus, welcher auch bei der FB aktiv registriert werden muss.
Ist ja eh alles Upnp like
Michael

Hallo,
das 2.4 GHz WLAN schaltet man wie folgt.

2.4 GHz WLAN schalten:

// WLAN 2.4 GHz
$client = new SoapClient(
    null,
    array(
        'location'   => "http://".$fritzbox_ip.":49000/upnp/control/wlanconfig1",
        'uri'        => "urn:dslforum-org:service:WLANConfiguration:1",
        'noroot'     => True,
        'login'      => $fritzbox_Username,
        'password'   => $fritzbox_Password
    )
);

$client->SetEnable(new SoapParam($wert,'NewEnable'));

Aber wie schaltet man das 5.0 GHz WLAN?

Wow, wenn das in dem Tempo weitergeht komme ich zu gar nichts mehr :smiley:
Ansonsten habe ich im Wiki jetzt eine Kategorie für die FritzBox eingerichtet
und dort können gerne auch die Scripte eingestellt werden. Zumindest wenn nicht
noch Rückfragen sind.
Ist vielleicht sinnvoller dort den Code zu pflegen und sich hier darüber auszutauschen.
Sonst verliere ich glaube ich den Überblick.

@Broving
Ich kann das leider nicht testen, aber vielleicht ist das diese Action ?


<action>
<name>X_SetHighFrequencyBand</name>
<argumentList>
<argument>
<name>NewEnableHighFrequency</name>
<direction>in</direction>
<relatedStateVariable>EnableHighFrequency</relatedStateVariable>
</argument>
</argumentList>
</action>

Michael

Es funktioniert mit der 2. Gastzugang ist dann die 3. Hatte immer die 0 probiert…
5.0 GHz WLAN schalten:

// WLAN 5.0 GHz
$client = new SoapClient(
    null,
    array(
        'location'   => "http://".$fritzbox_ip.":49000/upnp/control/wlanconfig2",
        'uri'        => "urn:dslforum-org:service:WLANConfiguration:2",
        'noroot'     => True,
        'login'      => $fritzbox_Username,
        'password'   => $fritzbox_Password
    )
);

$client->SetEnable(new SoapParam($wert,'NewEnable'));

Gäste WLAN schalten (wenn 5 GHz WLAN in verwendetem Fritzbox-Modell verfügbar):

// Gäste-WLAN aktivieren/deaktivieren
$client = new SoapClient(
    null,
    array(
        'location'   => "http://".$fritzbox_ip.":49000/upnp/control/wlanconfig3",
        'uri'        => "urn:dslforum-org:service:WLANConfiguration:3",
        'noroot'     => True,
        'login'      => $fritzbox_Username,
        'password'   => $fritzbox_Password
    )
);

$client->SetEnable(new SoapParam($wert,'NewEnable'));

Ah cool.
Dann muss der Dienst ja auch in einer desc.xml stehen.
Ich habe dort nur 1 und 2.
Wäre gut wenn du dann noch ergänzt um welche Box es sich handelt. Am besten die Bezeichnung aus DeviceInfo (habe die Uri und location jetzt nicht im Kopf).
Da es, wie schon vermutet, Unterschiede bei den Modellen gibt.
Michael

Also die Anzeige kannst du gerne Testen, habe die Anrufliste mal etwas modifiziert :smiley:
http://www.ip-symcon.de/wiki/FritzBox_Anrufbeantworter_auslesen
Abhören habe ich nicht geschafft… wenn ich die in der XML genannte URL aufrufe (mit http://<IP>:49000 davor)
bekomme ich immer das hier:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:dslforum-org:control-1-0">
<errorCode>606</errorCode>
<errorDescription>Action Not Authorized</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>

Und ohne Möglichkeiten die Nachricht abzuhören, macht es glaube ich keinen Sinn aus dem Webfront die Nachrichten zu löschen bzw. als abgehört zu makieren :frowning:

Was ich aber noch ergänzen werde sind die zwei Summenzähler für alle Nachrichten und neue Nachrichten.

[EDIT]: Eben Änderung im WIKI durchgeführt.


$vid = CreateVariableByName($parentID, 'Messages', 1);
SetValueInteger($vid, count($anruflistexml->Message)); // Alle Nachrichten);
$vid = CreateVariableByName($parentID, 'NewMessages', 1);
SetValueInteger($vid, count($anruflistexml->xpath("//Message[New ='1']"))); // Neue Nachrichten

Und nun mal wieder ein Bild :smiley:


Michael

Es handelt sich um die 7390.

Wo finde ich diese?

Seite 1 Erster Post:

SCPDURL: deviceinfoSCPD.xml
Location: http://fritz.box:49000/upnp/control/deviceinfo
URI: urn:dslforum-org:service:DeviceInfo:1
Action: GetInfo

Am besten den Wert [NewDescription] da dieser nicht nur das Model sondern auch die Firmware enthält:
Bei mir => FRITZ!Box 6360 Cable (kdg) 85.06.05

Michael

FRITZ!Box Fon WLAN 7390 84.06.04

Habe einfach dein Komplett-Auslese-Skript verwendet und in IPS abgelesen.

Verbindungsgeschwindigkeit und Zwangstrennungszeit:

// Reconnect-Zeit ermitteln
$client = new SoapClient(
    null,
    array(
			'location'            => "http://".$fritzbox_ip.":49000/upnp/control/time",
         'uri'        => "urn:dslforum-org:service:Time:1",
			'noroot'          => True,
			'login'      => $fritzbox_Username,
			'password'   => $fritzbox_Password
    )
);

$result = $client->GetInfo();

$client = new SoapClient(
    null,
    array(
        'location'   => "http://".$fritzbox_ip.":49000/igdupnp/control/WANIPConn1",
        'uri'        => "urn:schemas-upnp-org:service:WANIPConnection:1",
        'noroot'     => True
    )
);
$status = $client->GetStatusInfo();

$tag = date('d.m.Y, H:i', strtotime($result['NewCurrentLocalTime']) - $status['NewUptime'])." Uhr";
SetValue(20163 /*[Fritzbox/Zwangstrennung]*/, "Verbunden seit " . $tag);

// Up-/Down-Loadrate ermitteln
$client = new SoapClient(
    null,
    array(
        'location'   => "http://".$fritzbox_ip.":49000/igdupnp/control/WANCommonIFC1",
        'uri'        => "urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1",
        'noroot'     => True
    )
);
$result = $client->GetCommonLinkProperties();

$tag = round($result['NewLayer1DownstreamMaxBitRate']/1000000, 1)." Mbit/s Down, ".round($result['NewLayer1UpstreamMaxBitRate']/1000000, 1)." Mbit/s Up";
SetValue(31787 /*[Fritzbox/Verbindungsgeschwindigkeit]*/  , $tag);

Hallo Michael,
hatte bei deinem Skript immer eine Fehlermeldung „Warning: Ident darf nur aus Buchstaben und Zahlen bestehen“ für bspw. „Stats.Total.InitErrors“ in Zeile 149 bei IPSSetIdent().
Musste es wie folgt anpassen, da „.“ darin vorkamen:

        $ident = str_replace(".", "_", $ident);
        if(!IPS_SetIdent($var_id, $ident))
        {
            echo "
ID: ".$var_id." - ".$ident;
		  }

Hallo,

ich versuche auch gerade meine Scripte anzupassen, komme aber beim auswerten des Status
nicht weiter.

Ich wollte das Wlan ein bzw. ausschalten. Möchte aber nur ein Script nutzen, müsste also erstes den Zustand auswerten um dann je nach Zustand ein.- bzw. ausschalten.

Kann jemand so Nett sein und mir das an Hand eine Beispiels zeigen?

Hallo Michael,

danke dir.

habe jetzt

$zaehler_neu = count($xml->xpath("//Message[New ='1']"));

in meinem Script hinzugefügt, jetzt gehts auch mit den neuen Nachrichten.

Ich muss gestehen, ich hatte mir xpath auch angeschaut, nur war mir der Syntax nicht ganz klar.
Das ist doch komplexer, als ich vermutet hatte.

Du hast aber recht, eine Anzeige der Liste macht nur Sinn, wenn man sie auch abspielen kann.
Aber dafür gibt es doch ein Tool, welches das Format der Fritzbox wiedergeben kann.
Ja mit dem Pfad hatte ich allerdings ja zuvor auch die Probleme.

Grüße,
Doc

Wo ist den Stats.Total.InitErros ?
So einen Wert habe ich nicht :frowning:
Sonst wäre mir das bestimmt aufgefallen.
Und noch mal zu xpath. Richtig fies ist es wenn das XML noch Namespaces nutzt, dafür hatte ich erst keine Beispiele bei PHP.net gefunden. Brauchen wir bei den FritzBoxen aber auch nicht bei den Rückgabewerten, sondern nur bei den statischen XMLs.
Michael

Die habe ich hier:
fritzbox_stats.png

$client = new SoapClient(
    null,
    array(
        'location'   => "http://".$fritzbox_ip.":49000/upnp/control/wlanconfig2",
        'uri'        => "urn:dslforum-org:service:WLANConfiguration:2",
        'noroot'     => True,
        'login'      => $fritzbox_Username,
        'password'   => $fritzbox_Password
    )
);

echo $client->GetInfo()['NewEnable'];

Ahhh… das habe ich logischerweise nicht (Cabel statt DSL).
Passe ich bei Gelegenheit an.
Michael

Hi,

so mein Reconnect Script geht jetzt auch.

BOX: FRITZ!Box Fon WLAN 7270 v2, FRITZ!OS 05.54

Das Reconnect funktioniert nicht 1:1 aus den vorherigen Threads.

Dort ist immer folgender Aufruf

:49000/igdupnp/control/

.
Wenn ich das in

:49000/upnp/control/

Funktionierte es bei meiner Box auch.

Vielleicht hilft es den ein oder anderen.

Gruß
Andre