Programmierung > Delphi/Lazarus > FRITZ!Box

Nachtschaltung - Klingelsperre (ab Klasse v0.11)

Auf der FRITZ!Box kann unter System - Nachtschaltung - Klingelsperre ein Zeitraum eingestellt werden, während dessen nur Anrufe von im Telefonbuch als wichtige Personen gekennzeichneten Rufnummern durchgelassen werden. Alle anderen Anrufer erhalten ein Besetztzeichen. Die Einstellung gilt für alle an die FRITZ!Box angeschlossenen Telefone, sofern nicht eine indiduelle Einstellung unter Telefonie - Telefoniegeräte - [Gerät] - Klingelsperre vorgenommen wird.

Nachschaltung

Hinweis: Bei FRITZ!OS 6.03 musste ich feststellen, dass der Menuepunkt System - Nachtschaltung fehlt, wenn die Klingelsperre nicht aktiviert ist. Die unten beschriebende Funktion hat dennoch funktioniert. Nach Aktivierung der Klingelsperre war der Menuepunkt wieder vorhanden.

Eigenschaften

Es steht folgende Eigenschaft zur Verfügung:

property NightServiceExtension: TNightServiceExtension;

IN/OUT DSL: Setzen und Lesen der Nachtschaltung - Klingelsperre als Record.

type
  TNightServiceExtension = record
    Active      : Boolean;
    StartHour   : string;
    StartMinute : string;
    EndHour     : string;
    EndMinute   : string;
  end;

Anwendung

Durch Aufruf der Property können die Werte gesetzt und abgerufen werden. Dazu muss die Anwendung an der FRITZ!Box angemeldet sein.

procedure TfrmMain.sbnNSEReadClick(Sender: TObject);
var
  aNSE : TNightServiceExtension;
begin
  {
  *  Nachtschaltung lesen.
  }
  aNSE := fFritzbox.NightServiceExtension;
  chbNSEactive.Checked     := aNSE.Active;
  edtNSExtStartHour.Text   := aNSE.StartHour;
  edtNSExtStartMinute.Text := aNSE.StartMinute;
  edtNSExtEndHour.Text     := aNSE.EndHour;
  edtNSExtEndMinute.Text   := aNSE.EndMinute;
end;
 
procedure TfrmMain.sbnNSEWriteClick(Sender: TObject);
var
  aNSE : TNightServiceExtension;
begin
  {
  *  Nachtschaltung setzen.
  }
  aNSE.Active      := chbNSEactive.Checked;
  aNSE.StartHour   := edtNSExtStartHour.Text;
  aNSE.StartMinute := edtNSExtStartMinute.Text;
  aNSE.EndHour     := edtNSExtEndHour.Text;
  aNSE.EndMinute   := edtNSExtEndMinute.Text;
  fFritzbox.NightServiceExtension := aNSE;
end;

Informationen

Bis Version 0.16 wurden die Werte nach Aufruf von /system/ring_block.lua aus der HTML-Seite geparst. Ab Version 0.17 wird eine Query-Anfrage verwendet:

GET /query.lua?sid=de49a0e0b1b48282&aktiv=box:settings/night_time_control_enabled;
        von=box:settings/night_time_control_off_time;
        bis=box:settings/night_time_control_on_time;
        block=box:settings/night_time_control_ring_blocked HTTP/1.1
Host: fritz.box:80
Accept: text/html
Connection: Close

Der Variablen sid folgt die aktuelle SessionID. Die ersten vier Zeilen sind eine Zeile und wurde wegen der Darstellung umgesprochen. Die Antwort enthält ein JSON-Dokument und könnte so aussehen:

HTTP/1.1 200 OK
Connection: close
Content-Type: application/json; charset=utf-8;
Expires: -1
 
{
 {
 "aktiv" : "1"
 },
 {
 "von" : "21:00",
 },
 {
 "bis" : "06:00",
 }
 {
 "block" : "1",
 }
}

Die Werte werden ausgelesen werden. Zum Setzen wird diese Abfrage gestellt:

POST /system/ring_block.lua?sid=89b29db967b50aa6 HTTP/1.1
Host: fritz.box:80
Accept: text
Keep-Alive: 115
Connection: Keep-Alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 72
 
active=on&start_hour=21&start_minute=00&end_hour=06&end_minute=00&apply=

Hier wird eine Klingelsperre für die Zeit von 21:00 bis 06:00 Uhr gesetzt. Zum Ausschalten muss die letzte Zeile auf

apply=

gekürzt und die Content-Length entsprechend angepasst werden. Die Antwort sieht hier genauso aus wie oben. Mit einem kurzen Aussehen der Werte kann man prüfen, ob die Änderung vorgenommen wurde.

Links

Live HTTP Headers
Wikipedia: Lua