Q & A zum FritzBox-Project

Morgen!
Habe mir eine 4040 zugelegt, wird diese auch unterstützt?
Aktuelle Firmware 7.10 (19.04.2019)

Danke und lg
Christian

Werden die Fehlerzähler/CRC bei DSL aktuell auch schon ausgelesen ? Kann zumindest dazu nichts finden

EDIT: zumindest in der API gibt es die Option

Habe es jetzt selber umgesetzt, aber k.a. warum das mit Deinen Klassen/Methoden nicht geht, habe deswegen ein FallBack eingebaut, evtl kannst Du es ja übernehmen bzw anpassen so das es mit Deiner Lösung funktioniert.

Falls einer von den Usern das nutzen möchte, ihr müsst die 3 ID bei IPS_GetScriptFile an eure IDs anpassen

<?
 ##### Project Exporter Comment: Script Version Stand 11.03.2018 19:29 #####

################################################################################
##    Zugriff auf diese Script-Funktionen
##
## Lesen der Parameter vom DSL-Modem:
##   IPS_RunScript(<ID von diesem Script>);
##
################################################################################

$ret = include(IPS_GetKernelDir()."scripts".DIRECTORY_SEPARATOR.IPS_GetScriptFile(20065 ));
if ($ret === false) return;
require_once(IPS_GetKernelDir()."scripts".DIRECTORY_SEPARATOR.IPS_GetScriptFile(34174 ));
require_once(IPS_GetKernelDir()."scripts".DIRECTORY_SEPARATOR.IPS_GetScriptFile(50350 ));

$fbroot  ='http://'.FB_HOST.':'.FB_PORT;                    // Adresse + Port (immer 49000)
$desc    = "igddesc.xml";                                   // Hier sind die Infos über die Dienste enthalten
$SCPD    = "igddslSCPD.xml";                                // Hier sind die Infos über die Funktionen und Parameter/Variablen enthalten, sowie die Definition der Variablen Typen.
$ident   = FB_GetIdent("/upnp/control/wandslifconfig1");    // WANDSLInterfaceConfig1   wandslifconfig1
$parent  = FB_GetOrCreateDummy($ident,'DSL-Modem-CRC-Fehler');
$service = FB_getServiceData($fbroot,$desc,$SCPD);
$action  = "GetStatisticsTotal";                            // Diese Funktion soll ausgeführt werden
$result  = FB_SoapAction($service,$action,null,FB_USER,FB_PASS);

if ($result === false) {
	if ($_IPS['SENDER'] == "WebFront") echo "Error READ of ".$service['location']."->".$action.PHP_EOL;
	else IPS_LogMessage("FritzBox","Error READ of ".$service['location']."->".$action);

    // FallBackMode
    // k.A. warum die andere Variante nicht funktioniert
    $client4CRC = new SoapClient(null,array('location'      => $fbroot . "/upnp/control/wandslifconfig1",
										    'uri'			=> "urn:dslforum-org:service:WANDSLInterfaceConfig:1",
										    'soapaction'	=> "urn:dslforum-org:service:WANDSLInterfaceConfig:1#GetStatisticsTotal",
										    'noroot'		=> True,
										    'login'			=> FB_USER,
										    'password'		=> FB_PASS
                                        )
                                );

    $status4CRC = $client4CRC->GetStatisticsTotal();
    if(is_array($status4CRC)){
        //print_r($status4CRC);
        //echo "
Start Update";

        UpdateIPSvar($parent,'NewReceiveBlocks',        $status4CRC['NewReceiveBlocks'],        1,true,1,0,'','NewReceiveBlocks');
        UpdateIPSvar($parent,'NewTransmitBlocks',       $status4CRC['NewTransmitBlocks'],       1,true,2,0,'','NewTransmitBlocks');
        UpdateIPSvar($parent,'NewCellDelin',            $status4CRC['NewCellDelin'],            1,true,3,0,'','NewCellDelin');
        UpdateIPSvar($parent,'NewLinkRetrain',          $status4CRC['NewLinkRetrain'],          1,true,4,0,'','NewLinkRetrain');
        UpdateIPSvar($parent,'NewInitErrors',           $status4CRC['NewInitErrors'],           1,true,5,0,'','NewInitErrors');
        UpdateIPSvar($parent,'NewInitTimeouts',         $status4CRC['NewInitTimeouts'],         1,true,6,0,'','NewInitTimeouts');
        UpdateIPSvar($parent,'NewLossOfFraming',        $status4CRC['NewLossOfFraming'],        1,true,7,0,'','NewLossOfFraming');
        UpdateIPSvar($parent,'NewErroredSecs',          $status4CRC['NewErroredSecs'],          1,true,8,0,'','NewErroredSecs');
        UpdateIPSvar($parent,'NewSeverelyErroredSecs',  $status4CRC['NewSeverelyErroredSecs'],  1,true,9,0,'','NewSeverelyErroredSecs');
        UpdateIPSvar($parent,'NewFECErrors',            $status4CRC['NewFECErrors'],            1,true,10,0,'','NewFECErrors');
        UpdateIPSvar($parent,'NewATUCFECErrors',        $status4CRC['NewATUCFECErrors'],        1,true,11,0,'','NewATUCFECErrors');
        UpdateIPSvar($parent,'NewHECErrors',            $status4CRC['NewHECErrors'],            1,true,12,0,'','NewHECErrors');
        UpdateIPSvar($parent,'NewATUCHECErrors',        $status4CRC['NewATUCHECErrors'],        1,true,13,0,'','NewATUCHECErrors');
        UpdateIPSvar($parent,'NewCRCErrors',            $status4CRC['NewCRCErrors'],            1,true,14,0,'','NewCRCErrors');
        UpdateIPSvar($parent,'NewATUCCRCErrors',        $status4CRC['NewATUCCRCErrors'],        1,true,15,0,'','NewATUCCRCErrors');

        if ($_IPS['SENDER'] == "WebFront") echo "FallBack Method used for ".$service['location']."->".$action.PHP_EOL;
	    else IPS_LogMessage("FritzBox","FallBack Method used for ".$service['location']."->".$action);
    }
} else {
    /*
    echo "
Test NewCRCErrors: "     . $result['NewCRCErrors'];
    echo "
Test NewATUCCRCErrors: " . $result['NewATUCCRCErrors'];
    echo "
Test NewATUCHECErrors: " . $result['NewATUCHECErrors'];
    */
	UpdateIPSvar($parent,'NewReceiveBlocks',        $result['NewReceiveBlocks'],        1,true,1,0,'','NewReceiveBlocks');
	UpdateIPSvar($parent,'NewTransmitBlocks',       $result['NewTransmitBlocks'],       1,true,2,0,'','NewTransmitBlocks');
	UpdateIPSvar($parent,'NewCellDelin',            $result['NewCellDelin'],            1,true,3,0,'','NewCellDelin');
	UpdateIPSvar($parent,'NewLinkRetrain',          $result['NewLinkRetrain'],          1,true,4,0,'','NewLinkRetrain');
	UpdateIPSvar($parent,'NewInitErrors',           $result['NewInitErrors'],           1,true,5,0,'','NewInitErrors');
	UpdateIPSvar($parent,'NewInitTimeouts',         $result['NewInitTimeouts'],         1,true,6,0,'','NewInitTimeouts');
	UpdateIPSvar($parent,'NewLossOfFraming',        $result['NewLossOfFraming'],        1,true,7,0,'','NewLossOfFraming');
	UpdateIPSvar($parent,'NewErroredSecs',          $result['NewErroredSecs'],          1,true,8,0,'','NewErroredSecs');
	UpdateIPSvar($parent,'NewSeverelyErroredSecs',  $result['NewSeverelyErroredSecs'],  1,true,9,0,'','NewSeverelyErroredSecs');
	UpdateIPSvar($parent,'NewFECErrors',            $result['NewFECErrors'],            1,true,10,0,'','NewFECErrors');
	UpdateIPSvar($parent,'NewATUCFECErrors',        $result['NewATUCFECErrors'],        1,true,11,0,'','NewATUCFECErrors');
	UpdateIPSvar($parent,'NewHECErrors',            $result['NewHECErrors'],            1,true,12,0,'','NewHECErrors');
    UpdateIPSvar($parent,'NewATUCHECErrors',        $result['NewATUCHECErrors'],        1,true,13,0,'','NewATUCHECErrors');
	UpdateIPSvar($parent,'NewCRCErrors',            $result['NewCRCErrors'],            1,true,14,0,'','NewCRCErrors');
	UpdateIPSvar($parent,'NewATUCCRCErrors',        $result['NewATUCCRCErrors'],        1,true,15,0,'','NewATUCCRCErrors');
}


?>

Hallo zusammen,

hat jemand von euch das Script mit einer FritzBox 6590 ( Kabel-Box ) laufen ?

Ich habe den Eindruck, da einige Daten nicht ständig aktualisiert werden, die Anrufliste funktioniert leider garnicht

Moin,
also die Anrufliste geht bei meiner jetzt neuen 6591 :cool:
Allerdings habe ich den Rest noch nicht weiter getestet, geschweige den Zeit für das Script gefunden.
Aktuell liegen die Prioritäten leider wo anders.

Aufgrund der auch teilweise unterschiedlichen Geräten, werde ich vermutlich doch anfangen hieraus eine Sammlung von PHP-Modulen zu bauen. Ideen zur Realisierung habe ich schon, auch einige Schwierigkeiten / Probleme welche ich immer als Grund gegen so eine Umsetzung hatte, sind mit den aktuellen IPS Versionen kein Thema mehr.
Aber… einen Zeitplan werde ich hier nennen. Man braucht ja nicht noch mehr Druck in seiner Freizeit :smiley:
Michael

Moin Michael,

da sind wir HIER ja sehr gespannt :smiley:

Gruß
Hans

Hallo zusammen,

bei mir ist etwas merkwürdig. Wenn ich den Gastzugang der Fritzbox 7490 über IPS aktiviere kommt das

der Gastzgang wird aber aktiviert aber nicht angezeigt und ein QR-Code kommt auch nicht.

Ob es an IPS 5.1 liegt weiß ich nicht. Ich habe vor kurzem gewechselt. Soweit funktioniert aber alles.

Hat das auch schon jemand festgestellt oder kann mir jemand sagen woran das liegen könnte?

Viele Grüße
Thomas

Interessantes Verhalten auf unterschiedlichen Betriebssystemene:

Mein IPS läuft normalerweise auf einer VMWare mit Ubuntu Linux.

Dort habe ich das Problem, das beim FritzBox Script z.b die Anruferliste nicht angezeigt ( und vermuttlich auch nicht von der FB ausgelesen wird )

Jetzt ist mein VMWare-Rechner wegen Hardwaredefekt offline und ich hab zum weiteren Konfigurieren das letzte Backup auf meine Apple MacBook eingespielt und siehe da, die Anruferliste wird angezeigt.

Was läuft hier anders ?

Hi,
vorweg eine Warnung: Meine IPS-Kenntnisse liegen, wenn überhaupt schon, im sehr tiefen zweistelligen Prozentbereich und meine Soap-Kenntnisse eher bei 0 oder tiefer.

Ich habe eine 7490 (Repeater) mit OS 7.11 und die Scripte laufen ohne Probleme und Fehler. Mein Router ist eine 7590 mit OS 7.10 und es gab jede Menge der Fehler „Error READ of“.

Der Fallback von Nisbo hat mir zu denken gegeben. Ich habe seinen Fallback leicht angepasst und für meine 7590 in FB_SoapAction eingebaut:

    $client = new SoapClient(null,array('location'      => $service['location'],
                                            'uri'            => $service['uri'],
                                            'soapaction'    => $service['uri']."#".$action,
                                            'noroot'        => True,
                                            'login'            => FB_USER,
                                            'password'        => FB_PASS
                                        )
                                );


//	$client = new SoapClient(null,$service);

etwa bei Zeile 230 vom Script GLOBAL-FUNKTIONEN und seitdem keine Fehler bei der 7590 mehr und Variablen werden schön aktualisiert.

Habe ich da vielleicht unwissend Mist gebaut? Vielleicht könnte jemand mit Ahnung etwas dazu sagen:-)

Ralf

Sehr gut,

mit deiner Änderung funktioniert nun auch die Anruferliste unter Linux mit einer FB6590

Danke dafür

Hallo Zusammen. Ich bin mir sicher… irgendwo hier im Forum steckt bereits die Antwort… ich kann sie nur nicht finden.

Ich verwende drei Fritzbox (7390) als WLAN-AccessPoints (KG, EG, OG) und möchte auf diesen in der Nacht von IPS aus das WLAN deaktiveren und morgens automatisch wieder aktivieren.

GELÖST:
Die Funktionalität steckt bereits im Fritzbox-Projekt. Im Config-File muss man dazu die Bedienbarkeit auf true setzen

// FritzBox WLan WebFront-Funktionen
define ('FB_WLAN_24_SWITCH',true);        // true = WLAN darf über das WebFront ein & ausgeschaltet werden. false = darf nicht.
define ('FB_WLAN_5_SWITCH',true);
define ('FB_WLAN_G_SWITCH',true);

Damit ist die Bedienbarkeit vorhanden. Für die Zeitsteuerung ist dann noch ein zusätzliches Skript nötig. Sobald ich das habe poste ich es noch.

PROBLEM:
Das Skript gestaltet sich etwas schwieriger wie ich dachte. Man muss das „Aktions & Auslese-Script WLAN“ dazu mit nutzen und das muss man wohl anpassen, dass es nicht nur aus dem Webfront ausgeführt werden kann… und man muss die ID des WLAN kennen und übergeben.

Hat das schon jemand mal gelöst?

### MAIN ###
switch ($_IPS['SENDER'])
{
	case "RequestAction":
		$wlan_id = constant($_IPS['IDENT']);
	case "WebFront":
		if (!isset($wlan_id)) $wlan_id=substr(IPS_GetObject(IPS_GetParent($_IPS['VARIABLE']))['ObjectIdent'],-1);
		FB_SetWLan($wlan_id,$_IPS['VALUE']);
		if (defined("FB_WLAN_G") and (FB_WLAN_G <> $wlan_id)) FB_GetWLan ($wlan_id);
		elseif (!defined("FB_WLAN_G"))  FB_GetWLan ($wlan_id);
		break;
	case "RunScript":
	case "Execute":
	case "TimerEvent":
		if (defined("FB_WLAN_5"))
			FB_GetWLan (FB_WLAN_5);
		if (defined("FB_WLAN_24"))
			FB_GetWLan (FB_WLAN_24);
		if (defined("FB_WLAN_G"))
			FB_GetWLan (FB_WLAN_G);
		break;

LÖSUNG:

Wer lesen kann ist klar im Vorteil :slight_smile: - Die Funtion ist enthalten und braucht „nur“ benutzt zu werden.

################################################################################
## WLAN ein-/ausschalten und rücklesen des Stati vom geschaltetet WLAN. (Ohne Tabellen zu generieren.)
##   IPS_RunScriptEx(<ID von diesem Script>,array('SENDER'=>'RequestAction','IDENT'=>'FB_WLAN_24','VALUE'=>true));
##   Parameter: IDENT =  'FB_WLAN_5' , 'FB_WLAN_24' oder 'FB_WLAN_G' als String, je nachdem welches Netz geschaltet werden soll.
##              VALUE = true / false für an / aus
################################################################################

Hallo,

und danke für das super Projekt.
Bisher habe ich mir immer mit einzelnen Lösungen aus dem Forum die für mich wichtigsten Infos aus der FB geholt.
Seit ich gestern auf 5.1 gegangen bin gab es da aber einige Schwierikeiten. Deshalb habe ich jetzt das FritzBox-Project am laufen und habe zwei Fragen:

  1. Wie kann ich eine Anrufliste löschen?
  2. Ich möchte gern aus Webfront meine Netzwerkeilnehmer aktualisieren. Ich habe mir dafür einfach das Skript „Aktions & Auslese-Script Host“ verlinkt, aber das erzeugt Fehler bei der Bedienung aus WF heraus. Was kann ich tuen?
    Das gleich gilt auch für die Abfrage des Gast-WLAN Status. Wenn ich den Gastzugang einschalte, zeigt der Button in WF erst „EIN“ wenn das Skript sich aktualisiert hat (im „schlimmsten“ Fall 300 Sekunden). Ich möchte aber in keinem Fall die zyklische Auslösung verkürzen. Auch hier habe ich Probleme mit der Aulösung des Skript aus WF.

Wegen Punkt 2 dem Auslesen der Host

### MAIN ###
switch ($_IPS['SENDER'])
{
	case "RequestAction":
	case "WebFront":
			FB_WOLHost();
		break;
	case "Execute":
	case "RunScript":
	case "TimerEvent":
			FB_GetHosts();
		break;
}

ist dafür zuständig was bei welcher Aktion ausgeführt wird
WebFront --> macht nur das WOL

Du brauchst einen Aufruf auf die
FB_GetHosts();

Das passiert bei
Execute --> wenn Du das Script im „Editor“ ausführst
RunScript --> wenn das Script von einem anderen Script aufgerufen wurde
IPS_RunScript — IP-Symcon :: Automatisierungssoftware
System Variables — IP-Symcon :: Automation Software
TimerEvent --> sollte per Default 120 Sekunden sein

jetzt kannst Du einmal ein neues Script erstellen und mit dem Script dnan mittels
IPS_RunScript ($SkriptID);
Das Auslesen anstoßen

oder wenn Du das WOL nicht brauchst dann tausche einfach
das
FB_WOLHost();
gehen
FB_GetHosts();
aus

Ich würde das aber über ein eigenes Script lösen

Schneller abfragen bringt aber nix.
Die Erkennung durch die FritzBox selber wird dadurch auch nicht schneller.
Und zu deinem WLAN Status, das hier lesen:
Q & A zum FritzBox-Project - Seite 18

Michael

Vielen Dank, das hat mir sehr geholfen!

Hallo,

ich bekomme seit einiger zeit im Protokoll die Meldung
Reconnecting [FB Call-Monitor Reciever - Client Socket] failed connection refused

die Schnittstelle ist als Fehlerhaft markiert.

IP Adresse stimmt, Port 1012

An was kann das liegen?

Gruß

Oliver

In der FritzBox nicht per Telefon freigeschaltet.
Michael

Hallo Michael,

war die Nachricht „In der FritzBox nicht per Telefon freigeschaltet.“

für meine Frage?, dann versteh ich nicht, was ich tun muss

Gruß

Oliver

Hi,
der CallMonitor muss in der FritzBox aktiviert werden denn normal ist er aus. Aktivieren kann man ihn mit einem Telefon und dann

#965 wählen.

Ralf

super, danke

oliver