Funktionierende Scripts für FritzOS 6.0 7390

Hallo zusammen,

ich mach mal ein neues Thema für die FW 6.0 auf, da in dem 5.5 Thread schon 6.0 Lösungen diskutiert worden.

@Moderatoren: ggf. diese bitte umhängen.

Die zentrale Klingelsperre wird lt. AVM in der Version 6.0 nicht mehr unterstützt. Es ist nach deren Aussage nur noch eine individuelle Einstellung pro Gerät möglich.

vielen Dank für Ihre Anfrage an den AVM-Support.

Ich habe das intern nochmal nachgefragt. Es ist tatsächlich so, dass die zentrale Klingelsperre mit diesem Firmware-Update entfallen ist. Es gibt nur noch die individuelle Klingelsperre an jedem Telefon, die Sie unter Telefonie/Telefoniegeräte/Ihr Telefoniegerät/Klingelsperre konfigurieren können.

Die Anzeige der Nachtschaltung in der Übersicht ist somit davon abhängig, ob Sie die WLAN-Zeitschaltung oder die individuelle Klingesperre der Telefoniegeräte konfiguriert haben.

Diese Aussage ist nur bedingt richtig. Die zentrale Klingelsperre über Script funktioniert nach wie vor (s.u.).

<?
	IPS_SemaphoreEnter("Fritz",2000);
	include_once (IPS_GetScriptFile(37226 /*[01 Zentralfuktionen\Scripte\Includes\logonFritzbox]*/));
	$nachruhe=getValue(30553 /*[01 Zentralfuktionen\Nachtruhe\Schlafen]*/);
	$abwesend=getValue(54043 /*[01 Zentralfuktionen\AnAbwesenheit\V_Abwesend]*/);
	$startHH="23";
	$startMM="00";
	$endHH="11";
	$endMM="00";
//	$nachruhe=true; // Test
	if ($nachruhe or $abwesend) {
		$einAus=$ein;
		if ($abwesend) {
	   	$endHH="22";
			$endMM="59";
		}
	} else {
      $einAus=$aus;
   }
//   print_r("einAus=".$einAus."
");

	$ch = curl_init("http://{$fritzbox_ip}/system/ring_block.lua?sid={$SID}");
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   $rc1=curl_setopt($ch, CURLOPT_POSTFIELDS, ($einAus == "on" ? "active=on&start_hour=".$startHH."&start_minute=".$startMM."&end_hour=".$endHH."&end_minute=".$endMM : "") .
															"&sid=" . $SID. "&apply=");
   $rc2=curl_exec($ch);
//   print_r($rc2."
");
   curl_close($ch);
   IPS_SemaphoreLeave("Fritz");
?>

Kurioserweise erscheint unter dem Systemmenue der Punkt „Nachtschaltung“, wenn die Klingelsperre aktiv ist und verschwindet wieder, wenn man sie abschaltet (auch manuell).
Es ist also damit zu rechnen, dass bei einer der nächsten Versionen der FB-Firmware die zentrale Klingelsperre per Script nicht mehr funktioniert.
Also auf individuelle Sperre umstellen! Ich werd mich demnächst (???) mal daran machen und das Ergebnis dann hier posten, es sei den jemand anderes hat schon früher eine Lösung:).

Gruß BONOX

hallo Bonox,

ich habe eine individuelle Klingelsperre, aber leider Funktionier die mit der V 6 auch nicht mehr.

Hier mal mein Script, ist aus dem Forum, evtl. hast Du ja eine Idee woran es liegen könnte.

$fritzbox_Adresse = '192.168.*.*';
$fritzbox_Username = '';
$fritzbox_Password = '****';

$ch = curl_init('http://' . $fritzbox_Adresse . '/login_sid.lua');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);

$session_status_simplexml = simplexml_load_string($login);
if ($session_status_simplexml->SID != '0000000000000000')
    {
   $SID = $session_status_simplexml->SID;
    }
else
    {
   $challenge = $session_status_simplexml->Challenge;
   $response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $fritzbox_Password, "UCS-2LE", "UTF-8"));
   curl_setopt($ch, CURLOPT_POSTFIELDS, "response={$response}&page=/login_sid.lua&username={$fritzbox_Username}");
   $sendlogin = curl_exec($ch);

   $session_status_simplexml = simplexml_load_string($sendlogin);

   if ($session_status_simplexml->SID != '0000000000000000')
       {
       $SID = $session_status_simplexml->SID;
       }
   else
       {
      echo "Fehler: Login fehlgeschlagen";
      return;
       }
    }

curl_close($ch);

if($_IPS['SENDER'] == "WebFront")

    {
    SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);

      IF ($_IPS['VARIABLE'] ==12368 /*[Allgemein\Telefon\FritzBox\Klingelsperre Schlafzimmer]*/ )
       {
        if($_IPS['VALUE'])  // Einschalten
            {
             Klingelsperre_einschalten($SID);
            }
            else
             {
           Klingelsperre_ausschalten($SID);
             }
       }

     IF ($_IPS['VARIABLE'] ==19282 /*[Allgemein\Telefon\FritzBox\Klingelsperre Schlafzimmer Dauer]*/ )
       {
        If (GetValue (12368 /*[Allgemein\Telefon\FritzBox\Klingelsperre Schlafzimmer]*/  ))
            {
            Klingelsperre_einschalten($SID);
            }
         }

    }


if($_IPS['SENDER'] == "TimerEvent")
    {
    IPS_SetScriptTimer($_IPS['SELF'], 0);
    Klingelsperre_ausschalten($ch,$SID);
    }



/*********************************************************
**********************************************************/
function Klingelsperre_einschalten($SID)

    {

    $ch = curl_init('http://fritz.box/fon_devices/fondevices_list.lua');
     $Dauer= GetValue (19282 /*[Allgemein\Telefon\FritzBox\Klingelsperre Schlafzimmer Dauer]*/ );
    $Time= date("Hi", time()).date("Hi", time()+60*$Dauer);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($ch, CURLOPT_POSTFIELDS, "sid={$SID}&telcfg:settings/Foncontrol/User3/NoRingWithNightSetting=0".   // 612 Schlafzimmer
                                                    "&telcfg:settings/Foncontrol/User3/RingAllowed=1".
                                                     "&telcfg:settings/Foncontrol/User3/NoRingTime=".$Time);

//        curl_setopt($ch, CURLOPT_POSTFIELDS, "sid={$SID}&telcfg:settings/MSN/Port0/NoRingWithNightSetting=0");


   $temp=curl_exec($ch);
    curl_close($ch);

    IPS_SetScriptTimer($_IPS['SELF'], 60*$Dauer);

    SetValue (25473 /*[Allgemein\Telefon\FritzBox\Klingelsperre Schlafzimmer bis]*/ , date("H:i", time()+60*$Dauer));
   IPS_SetHidden(25473 /*[Allgemein\Telefon\FritzBox\Klingelsperre Schlafzimmer bis]*/ , false);
   }


function Klingelsperre_ausschalten($SID)
    {
    $ch = curl_init('http://fritz.box/fon_devices/fondevices_list.lua');
//    curl_setopt($ch, CURLOPT_POSTFIELDS, "sid={$SID}&&telcfg:settings/Foncontrol/User1/NoRingWithNightSetting=1");
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

      curl_setopt($ch, CURLOPT_POSTFIELDS, "sid={$SID}&telcfg:settings/Foncontrol/User3/NoRingWithNightSetting=0".
                                                    "&telcfg:settings/Foncontrol/User3/RingAllowed=4".
                                                     "&telcfg:settings/Foncontrol/User3/NoRingTime=15001700");

   $temp=curl_exec($ch);
   curl_close($ch);

     IPS_SetScriptTimer($_IPS['SELF'], 0);

   SetValue (25473 /*[Allgemein\Telefon\FritzBox\Klingelsperre Schlafzimmer bis]*/ , "");
    SetValue (12368 /*[Allgemein\Telefon\FritzBox\Klingelsperre Schlafzimmer]*/, false);
    IPS_SetHidden(25473 /*[Allgemein\Telefon\FritzBox\Klingelsperre Schlafzimmer bis]*/ , true);
    }


?>


Hallo Leute,

die Anzeige des Up/Downloads , habt ihr da bei euch im Einsatz ? Das aus dem Forum geht bei mir nicht mehr.

Hallo Horst,
ich bin nun endlich dazu gekommen, die individuelle Klingelsperre erfolgreich zu testen.
Die URLsfür analog Fon und dect sind unterschiedlich:
http://{$fritzbox_ip}/fon_devices/edit_".$type."_ring_block.lua
$type =fon bzw. dect.
Hier mein Script (noch quick and dirty und nicht generalisiert) für 3 Geräte , deren Eigenschaften in einem Array ($geraete) definiert sind:

<?
IPS_SemaphoreEnter("Fritz",2000);
	include_once (IPS_GetScriptFile(37226 /*[01 Zentralfuktionen\Scripte\Includes\logonFritzbox]*/));
	$nachruhe=getValue(30553 /*[01 Zentralfuktionen\Nachtruhe\Schlafen]*/);
	$abwesend=getValue(54043 /*[01 Zentralfuktionen\AnAbwesenheit\V_Abwesend]*/);
	$startHH="23";
	$startMM="00";
	$endHH="11";
	$endMM="00";
//	$nachruhe=true; // Test
	if ($nachruhe or $abwesend) {
		$einAus=$ein;
		if ($abwesend) {
	   	$endHH="22";
			$endMM="59";
		}
	} else {
      $einAus=$aus;
   }
//   print_r("einAus=".$einAus."
");
	$geraete=array();
	$geraete["fon1"]=array("fon",0);
	$geraete["fon2"]=array("fon",1);
	$geraete["dect1"]=array("dect",1);
	foreach($geraete as $key=>$properties) {
	   $type=$properties[0];
	   $idx=$properties[1];
		$ch = curl_init("http://{$fritzbox_ip}/fon_devices/edit_".$type."_ring_block.lua?sid={$SID}");
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   	$rc1=curl_setopt($ch, CURLOPT_POSTFIELDS, ($einAus == "on" ? "nightsetting=1&lockmode=0&lockday=everday&starthh=".$startHH."&startmm=".$startMM."&endhh=".$endHH."&endmm=".$endMM : "") .
		"&sid=" . $SID. "&idx=".$idx."&button_save=");
   	$rc2=curl_exec($ch);
	}
//   print_r($rc2."
");
   curl_close($ch);
   IPS_SemaphoreLeave("Fritz");
?>

Der post-Parameter $idx richtet sich nach der Reihenfolge der Geräte pro Type. fon beginnt mit 0, dect mit 1.
Für ISDN habe ich noch nicht getestet, da daran meine zweite Telefonanlage hängt, und dazu brauche ich noch mal eine eigene Testumgebung. Du müsstest nach dieser Vorlage Dein Script entsprechend anpassen können.

Viel Erfolg!

@Fraunhofer: up/download habe ich nicht umgesetzt, kann Dir daher leider nicht helfen.

Gruß BONOX
BONOX

Hallo BONOX, danke für dein Script.
Bin gerade auf Dienstreise werde es aber sobald ich wieder zu Hause bin testen.

@Fraunhofer,
meinst Du die Up und Download Geschwindigkeit?

Ge(Tapatalk)t mit meinem Galaxy S3

Moin…

anbei das Skript zum löschen der Anruferliste.


<?


    include "fritzbox.ips.php";

	 $ch = curl_init('http://fritz.box/fon_num/foncalls_list.lua?sid={$SID}');


       	curl_setopt($ch, CURLOPT_POSTFIELDS, "usejournal=on&clear=&sid=".$SID."&callstab=all");
       	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       	curl_exec($ch);

         curl_close($ch);


	echo " Anruferliste gelöscht ";

?>


In der fritzbox.ips.php befindet sich bei mir die Standart-Anmelde-Prozedur die ja immer gleich ist. Das wurde hier ja im Fritzbox 5.XX Thema schon mehrfach erklärt. Gegebenfalls müßt Ihr noch das fritz.box gegen eure IP der Fritzbox tauschen.

Viel Spaß und Gruß,
Peter

Hallo zusammen,

ich kämpfe auch mit den Umstellungen, man sollte halt doch nicht immer updaten…

Up/Downstream funktioniert bei mir so ( in der Fritzbox.php ist nur der Loginprozess hinterlegt )

 <?
include "fritzbox.php";

$home = file("http://fritz.box/internet/dsl_overview.lua?sid=".$SID);// Seite Auslesen

$Downstream = substr(trim($home[267]), 0,12); // String ausschneiden
//echo $Downstream;
SetValue(50270 /*[Fritzbox\FRITZ!Box\DSL Details\Datenrate empfangen]*/ , $Downstream);


$Upstream = substr(trim($home[270]), 0,12); // String ausschneiden
//echo $Upstream;
SetValue(34953 /*[Fritzbox\FRITZ!Box\DSL Details\Datenrate senden]*/ ,$Upstream);

?>

Hier hatte sich nur die Position der Info im Array verschoben.

Wenn jemand Ein/Aus WLAN hat , wäre ich dankbar, werde das mal am Gast-WLAN testen.

Gruss Thomas

Ich poste später mal meine Skripte für Wlan und Guestwlan, ausser es war jemand schneller! :smiley:

Mit Up/Downstream hatte ich mit der 6.0 Firmware keine Probleme und nutze weiterhin mein altes 5.XX Skript.

Gruß,
Peter

Hallo Thomas,
schau mal hier.

Gruß BONOX

Hallo Bonox,

hab ich probiert, tut sich bei mir gar nix. Da WLAN hier immer kritisch ist, hab ich auch mal die Rufumleitung nach
deinem Vorbild probiert. $einAus ist ja entweder „on“ oder „“ . Bei Rufumleitung habe ich eine Rufumleitung angelegt und
will die mit rul_0=on schalten, aber nix passiert in der Box

<?
 include "fritzbox.php";
 
	$einAus="on";
	
     $ch = curl_init("http://{$fritzbox_ip}/fon_num/rul_list.lua?sid={$SID}");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   $rc1=curl_setopt($ch, CURLOPT_POSTFIELDS, ($einAus == "on" ? "rul_0=on&" : "") . "apply=");
   $rc2=curl_exec($ch);
 ?>

oder hab ich hier nen Denkfehler.

Gruss Thomas

Hallo Thomas,
wie hast Du die Rufumleitung definiert?
Bei Umleitung von Anrufen an eine bestimmte Nummer heisst der Parameter rul_x, bei Anrufen von einer bestimmten Nummer oder für alle Anfrufe heisst er rub_x. x wird separat pro Kategorie, beginnend mit 0 hochgezählt.

Gruß BONOX

perfekt das wars. Danke !

Wenn du mir nun noch mit dem Guest_WLAN helfen könntest ( also am besten nur den Bereich des Schaltens selbst )
dann wäre ich wieder ein Stück weiter

Hallo Bonox,

ich bekomme es noch nicht hin :frowning:

Wie muss denn der Befehl aussehen um die Nachtruhe für dect 1 einzuschalten bzw. auszuschalten?
Mein Testscript sieht so aus:

 include "fritzbox.php";


   $Dauer= GetValue (19282 /*[Allgemein\Telefon\FritzBox\Klingelsperre Dauer]*/ );
     
		$startHH = date("H",time());
		$startMM = date("i",time());

		$endHH = date("H",time()+60*$Dauer);
		$endMM = date("i",time()+60*$Dauer);




$einAus="on";


        $ch = curl_init("http://192.168.*.*/fon_devices/edit_dect_ring_block.lua?sid={$SID}");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       $rc1=curl_setopt($ch, CURLOPT_POSTFIELDS, ($einAus == "on" ? "nightsetting=1&lockmode=0&lockday=everday&starthh=".$startHH."&startmm=".$startMM."&endhh=".$endHH."&endmm=".$endMM : "") .
        "&sid=" . $SID. "&idx=dect1&button_save=");
       $rc2=curl_exec($ch);

Funktioniert aber natürlich nicht :o Kannst Du nochmal helfen?

Hallo Horst,
der Parameterwert für idx muss 1 für das erste, 2 für das zweite,… Dect-Telefon sein.
also

..."&sid=" . $SID. "&idx=1&button_save=");

Viel Erfolg
BONOX

Danke Bonox,

den Fehler habe ich gerade in diesem Augenblick auch bemerkt.
Aber wo sehe ich ob es geklappt hat? Unter Telefonie Klingelsperre sehe ich keine Änderungen.

Doch jetzt klappt es.

Nun muss ich nur noch wissen wie der Befehl ist um die Klingelsperre für Samstag-Sonntag zu schalten ist und wie der Befehl zum ausschalten ist, dann hab Ich’s denke ich.

Alles erledigt läuft wie es soll, Danke BONOX für Deine Unterstützung.

Hallo Thomas,
anbei der Scriptauszug zum Schalten des WLAN-Gastzugangs.
Die Parameter entsprechen folgenden Definitionen:

.

Und hier die Schaltanweisungen:

	$ch = curl_init("http://{$fritzbox_ip}/wlan/guest_access.lua?sid={$SID}");
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

   $rc1=curl_setopt($ch, CURLOPT_POSTFIELDS, "autoupdate=on". ($einAus == "on" ? "&activate_guest_access=on&guest_ssid=FRITZ%21Box+Gastzugang&sec_mode=4&wpa_key=123456789876543210&push_service=on&group_access=on&down_time_activ=on&down_time_value=30" : "") ."&sid=" . $SID. "&btnSave=");
   $rc2=curl_exec($ch);
   curl_close($ch);

Viel Erfolg
BONOX

Hallo BONOX,

kann man das auch aufsplitten, also Dauer bzw. ein - ausschalten unabhängig von einander einstellen?

Ich habs in einem anderen Kontext mal getestet. Funktioniert nicht.
Aber warum, willst Du Dein Script komlizieren? Du kannst die Funktion doch mit unterschiedlichen Dauern über den gleichen Befehl mehrmals einschalten. Das funktioniert. Ausschalten geht eh nur ohne Parameter.

Gruss
BONOX

Hallo BONOX,

danke für die Info. Hatte es halt bisher so gelöst, aber ist nicht zwingend nötig. Werde es jetzt eben anders machen.

Hallo,
warum macht ihr das so statisch?
Ist doch klar, dass sich diese Position vermutlich fast jedes Mal ändert.
Bei mir funktioniert es auf diese Weise schon eine ganze Weile und so auch nach dem Update auf 6.0:

$strSpeedStart = "bereit, ";
$strSpeedEnde = "/sLAN";
$arrayId = 0
for(; $arrayId < count($home); $arrayId++)
{
	if(false !== stripos($home[$arrayId], $strSpeedStart))
	{
		break;
	}
}
$home[$arrayId] = strip_tags($home[$arrayId]);
$tag = str_replace(" ", " ", substr($home[$arrayId], (strpos($home[$arrayId], $strSpeedStart) + strlen($strSpeedStart)), (strpos($home[$arrayId], $strSpeedEnde) + strlen($strSpeedEnde) - 3) - (strpos($home[$arrayId], $strSpeedStart) + strlen($strSpeedStart))));
SetValue($controlId , $tag);

Mein Skript ist prinzipiell nur abhängig von der Oberflächensprache.