6.51: edit_isdn_ring_block.lua/edit_fon_ring_block.lua direkt aufrufen

Arganto

Neuer User
Mitglied seit
22 Dez 2006
Beiträge
77
Punkte für Reaktionen
5
Punkte
8
Hallo. Bis zum Update auf 6.51 vor ein paar Minuten hatte ich im 6.23 einen direkten Link http://fritz.box/fon_devices/edit_isdn_ring_block.lua oder http://fritz.box/fon_devices/edit_fon_ring_block.lua abgespeichert, konnte den aufrufen, habe PW eingegeben und war dann auf der direkten Unterseite für die Nachtschaltung (nachdem es die zentrale Nachtschaltung ja schon länger - aber warum auch immer - nicht mehr gibt.

Nun geht das aber auch nicht mehr. Es erscheint nur { "pid": "logout" }

Und nehme ich den neuen Link mit den ganzen Parametern
http://fritz.box/fon_devices/edit_isdn_ring_block.lua?sid=4771b47feebe4468 oder mit beliebig folgenden &idx=1&back_to_page=%2Ffon_devices%2Ffondevices_list.lua&popup_url=

so lande ich zwar auf der Login-Seite, aber danach nicht da, wo ich hinmöchte, sondern nur auf der Startseite.

Wie bekomme ich meinen Deeplink zurück? Direkt oder über Bastellösung?
 
Basteln ... der direkte Aufruf scheitert an der Einbindung der "global_lua.lua" und da führt ohne (noch weitergehende Änderungen) auch kein Weg dran vorbei.

Aber die gute Nachricht ... die notwendige Änderung ist so klein, daß es auch kein wirklicher Aufwand ist, sie bei jedem Update erneut einzubauen.

Das Basteln beschränkt sich (da bei AVM sogar noch Reste im Menü existieren) auf die folgenden Zeilen, die man auch an irgendeiner anderen sinnvollen Stelle einfügen kann:
Code:
--- /usr/www/avm/menus/menu_data.lua
+++ /usr/www/avm/menus/menu_data.lua
@@ -405,6 +405,11 @@
 ["lua"] = "system/wlan_night.lua",
 ["help"] = forLuaOnly and "hilfe_system_nachtschalt_wlan"
 } or nil
+pageData["night"] = config.TIMERCONTROL and {
+["show"] = true,
+["lua"] = "system/nacht.lua",
+["help"] = forLuaOnly and "hilfe_system_nachtschalt_wlan"
+} or nil
 tmp = wlan_on and not is_wlan_ata
 if config.GUI_IS_REPEATER or is_wds_repeater then
 tmp = tmp and config.WLAN.has_repeater_guest_ap
Die verwendete FRITZ!Box kann man nicht erkennen, mit einem NOR-Modell braucht es Freetz mit "fwmod" (und etwas Lesen, wie man die Firmware in die Box bekommt) und bei einem NAND-Modell geht sowohl Freetz als auch "modfs" bzw. man könnte sogar über passende Skripte im wrapper-FS den gewünschten Effekt erreichen.

Aber ohne die erwähnte Änderung sehe ich schwarz - anschließend geht auch dieses wieder:
Anhang anzeigen 86863

PS: ... und diese Seite läßt sich dann auch wieder direkt durch "fritz.box?lp=night" aufrufen.
 
Danke Dir. Damit hätte ich aber "nur" so etwas wie die alte ring_block.lua zurück, nicht aber den Aufruf der edit_isdn/fon_ring_block.lua, oder?

Da die alte zentrale Einstellung bei mir mit Kombi ISDN/Fon seit der Verbannung aus dem Menü sowieso nicht mehr ging (dazu gab es hier auch schon mal einen Thread, in Kurzform, es hat trotz gobaler Sperre geklingelt oder ohne globale Sperre nicht und das im Kreis, je nachdem was man in welcher Reihenfolge aktiviert hat. Damit die Anlage an ISDN-Buchse nicht klingelt, brauche ich sogar ein Dummy-Telefon, usw. Hintergrund ist, dass ich ein Freizeichen für die anrufenden möchte und kein "ist nicht verfügbar"), kann ich nur noch edit_isdn_ring_block.lua nutzen und würde dies gern wieder aufrufen. Gerne auch mit PW vorweg, aber danach möchte ich halt wieder auf der Seite und nicht im Hauptmenü landen. :(

Und das geht mit den ganzen luas nicht mehr? Auch nicht per Vorschaltseite, o.Ä.?
 
Code:
--- /usr/www/avm/menus/menu_data.lua
+++ /usr/www/avm/menus/menu_data.lua
@@ -405,6 +405,11 @@
+pageData["night"] = [COLOR=#0000ff]config.TIMERCONTROL[/COLOR] and {
+["show"] = true,
+["lua"] = "system/nacht.lua",
+["help"] = forLuaOnly and "hilfe_system_nachtschalt_wlan"
+} or nil
 tmp = wlan_on and not is_wlan_ata
 if [COLOR=#0000ff]config.GUI_IS_REPEATER[/COLOR] or is_wds_repeater then
 tmp = tmp and [COLOR=#0000ff]config.WLAN[/COLOR].has_repeater_guest_ap

Hallo PeterPawn,
ich interessiere mich für LUA-Skripting, irgendwie kann ich das Setzen der Umgebungsvariablen CONFIG.TIMERCONTROL, config.GUI_IS_REPEATER nicht finden;

Code:
# env | grep TIMERCONTROL
CONFIG_TIMERCONTROL=y
# 

# grep TIMERCONTROL /etc/*/*
/etc/init.d/S11-config_def:if [ -n "${CONFIG_TIMERCONTROL}" ] && [ "${CONFIG_TIMERCONTROL}" = "y" ]; then
/etc/init.d/S11-config_def:if [ -n "${CONFIG_TIMERCONTROL}" ] && [ "${CONFIG_TIMERCONTROL}" = "n" ]; then
/etc/init.d/rc.conf:export CONFIG_TIMERCONTROL="y"
# 

# cd /usr/www/avm
# grep -i TIMERCONTROL */*
home/home.lua:if not config.TIMERCONTROL then
menus/menu_data.lua:pageData["wTime"] = (config.WLAN and config.TIMERCONTROL) and {
system/ring_block.lua:if config.WLAN and not config.TIMERCONTROL then
system/wlan_night.lua:if config.TIMERCONTROL then
system/wlan_night.lua:if config.TIMERCONTROL then
system/wlan_night.lua:if config.TIMERCONTROL then
system/wlan_night.lua:if config.TIMERCONTROL then
system/wlan_night.lua:if config.TIMERCONTROL then
system/wlan_night.lua:if not(config.TIMERCONTROL) then
system/wlan_night.lua:if config.TIMERCONTROL then
system/wlan_night.lua:if config.TIMERCONTROL then
system/wlan_night.lua:if config.TIMERCONTROL and g_hastime then
system/wlan_night.lua:if config.TIMERCONTROL and g_hastime then
system/wlan_night.lua:if config.TIMERCONTROL and g_hastime then
system/wlan_night.lua:if config.TIMERCONTROL then
system/wlan_night.lua:if not(config.TIMERCONTROL) then box.out([[style="display:none;"]]) end
system/wlan_night.lua:<div <?lua if not(config.TIMERCONTROL) then box.out([[style="display:none;"]]) end ?>>
#

Könntest Du mir hierzu Bitte Hinweise geben ?

LG
PantaRhei
 
Ich weiß nicht genau, ob ich den Inhalt der Frage richtig verstehe ... in /etc/init.d/rc.conf werden jede Menge Shell-Variablen ins Environment exportiert.

Für einige wird zwar in S11-config_def noch eine passende Variable auf dem alten Weg (als "server side include" für libwebsrv.so.2) erzeugt, aber das wird m.E. fast nicht mehr genutzt.

Stattdessen kommt durch Einbinden der /usr/lua/config.lua eine Table mit dem Namen config als globales Objekt zum Einsatz, für diese Table wird die Metamethode __index überschrieben, die beim Zugriff auf ein Feld der Tabelle das richtige aussucht. EDIT: schlecht formuliert, die Metamethode wird nur konsultiert, wenn sie (A) existiert und (B) das gesuchte Feld nicht als "einfache Property" existiert.

Die überladene Methode get_config_flag()(das ist das "Ziel" von __index) sucht dann "live" nach einem passenden Wert im Shell-Environment (mit os.getenv()) und liefert diesen Wert zurück (als "boolean", wenn es ein Y/N-Wert ist).

Damit wird das also durch das config-Objekt direkt aus dem Shell-Environment ausgelesen und als Property zurückgeliefert, solange es den passenden CONFIG_XXX-Wert dort gibt ... deshalb auch der Property-Name XXX in Großschreibung und es gibt am Ende keine wirkliche Zuweisung, weil der Wert bei der Abfrage direkt generiert wird. Somit wäre die eigentlich gesuchte "Zuweisung" die in /etc/init.d/rc.conf.
 
Zuletzt bearbeitet:
@PeterPawn: Danke!
die Datei /usr/lua/config.lua hatte ich übersehen; nun ist es nachvollziehbar.

LG
PantaRhei
 
Nochmal ich. Auch beim repeater geht der Aufruf von wlan/guest_access.lua nach dem Update ja nicht mehr. Dafür aber fritz.repeater/?sid=74cd47021f40d556&lp=wGuest als Ersatz. D.h. dann neu einloggen, wg. alter SID, aber ich bin dort, wo ich hinmöchte.

Gibt es denn ebtl. so einen Ersatz für die "edit_isdn_ring_block.lua" auf der Box auch? Das würde mir ja auch reichen.
 
Nochmal ich. Nein, gibt es (immer noch) nicht - auch wenn Du es vermutlich wieder nicht glauben wirst ... es gibt eine genau definierte Menge von Seiten, die als lp (heißt wohl "last page") angegeben werden können.

Das wird in der Datei usr/www/$OEM/index.lua (das ist die "Einsprungseite" des gesamten GUI) folgendermaßen getestet:
Code:
[COLOR="#008000"]gMenu, gPages = getMenuData()[/COLOR]
gLastPage = box.post.lp or box.get.lp or nil
[COLOR="#0000FF"]local goodLpPages = {
support = true, direct_first = true, cap = true, oauth = true, surf = true,
ltestat = true, ltegraph = true, uleoverview = true, sitemap = true, expert = true
}[/COLOR]
if not gLastPage or not gMenu or (not [COLOR="#FF0000"]gMenu[gLastPage][/COLOR] and not [COLOR="#FF0000"]goodLpPages[gLastPage][/COLOR]) then
gLastPage = nil
end
box.get.lp = nil
box.post.lp = nil
Bei lp ist also nur die Angabe einer "Seite" möglich, die entweder in der Menüstruktur in usr/www/menus/menu_data.lua als Menüpunkt (das kann auch ein Tab sein) enthalten ist und eben auch definitiv im Menü (gMenu, dem ersten Rückgabewert von getMenuData()) und nicht nur in der Aufzählung gültiger Seiten (gPages, das ist der zweite Rückgabewert) oder explizit in der Aufzählung goodLpPages erwähnt wird.

Beides ist für die gesuchten Seiten nicht der Fall und - egal wie oft Du danach noch fragst - ohne entsprechende Änderungen an der Firmware wird sich das auch solange nicht ändern, wie AVM kein Mitleid mit Dir hat und einen solchen direkten Aufruf zuläßt.

Den Umweg über die usr/www/$OEM/index.lua nimmt auch jeder Request, der keine gültige SID hat (und ggf. auch jeder andere, wenn er zusätzliche Verwaltungsstrukturen in der Seite benötigt) ... man könnte also theoretisch für einige Seiten bei Kenntnis einer gültigen SID tatsächlich einen "deep link" konstruieren, aber den wird man schwerlich als statisches Lesezeichen irgendwo ablegen können. Einem entsprechenden Skript steht allerdings wenig im Wege ... aber auch die Wiederholung dieser "Binsenweisheit" wäre eigentlich unnötig.
 
Vielen Dank für die schnelle und doch so höfliche Antwort.
 
Um auch die Frage nach den Menüpunkten in gMenu mal zu klären (für die 113.06.60), hier die Liste der "Punkte":
Code:
 # sed -n -e "s|menuData\[\"\([^\"]*\)\"\].*\$|\1|p" www/avm/menus/menu_data.lua | sort | uniq
alarm
alarm1
alarm2
apps
ataSet
audio
autoUp
bookLi
boxname
callHan
callLock
callRedi
calls
callThro
cfgtakeover_edit
chan
coun
cred
dbg
dect
dectDev
dectMail
dectMoni
dectMoniEx
dectOv
dectRdio
dectRep
dectSer
dectSet
default
diag
dial
dialLi
dialList
dialProv
dnsSrv
docInfo
docLog
docOpt
docOv
docSet
docsis
docStat
dslFeed
dslGraph
dslInfo
dslLab
dslOv
dslSet
dslSpec
dslStat
dvb
dvbradio
dvbSet
dvbSig
dvbTun
dvbUsa
dyndns
ecoStat
edit_plc
eMon
energy
expert
fax
faxSet
fiberSet
filter
fn
funcCheck
homeNet
inet
ipv6
ipv6fw
keyLo
kidLis
kidPro
lan
lanbridges
lang
lanpublic
led
lisp
liveImg
liveTv
log
logout
lteDsl
lteFeed
lteInfo
lteList
lteMoni
lteOv
lteSet
lteSim
lteStats
mCred
mFax
mfn
mfSet
mfShare
mLte
mNetMoni
mobile
mPush
mSave
mServSet
mSrv
mUp
mUser
myfritz
myNum
nas
nasSet
net
netCnt
netDev
netMoni
netSet
night
numLi
output
overview
pod
portfw
provServ
push
pushAcc
radio
rBlock
rdio
reboot
regi
remoteHttps
repMode
rss
secCheck
sh
shares
shareUsb
shareVpn
sipQual
sipSet
ssoEmail
ssoPass
ssoSet
sys
sysImp
sysSave
tAlarm
tam
tBook
tel
telDev
telDial
telInt
touch
trafapp
trafprio
tvhd
tvsd
tZone
update
usbDev
usbMode
usbOv
usbRemo
user
userSet
userUp
vdslProf
wds
wds2
wGuest
wizOv
wKey
wlan
wNet
wps
wRepSet
wSecu
wSet
wTime
Das sind also (zzgl. der oben gezeigten "Namen" in goodLpPages) die Angaben, welche beim lp-Parameter verwendet werden können.

Das heißt auch noch lange nicht, daß jede dieser Angaben dann auch funktioniert ... hier sind die "Rahmenbedingungen", die ein Ein- oder Ausschließen eines Punktes beeinflussen können, ja gar nicht berücksichtigt und es kann auch Seiten geben, die bei fehlenden Parametern automatisch wieder auf die Übersichtsseite weiterleiten.

- - - Aktualisiert - - -

Gern geschehen ... hoffentlich ging die Höflichkeit nicht zu Lasten der Deutlichkeit der Aussage - es ist auch nicht die erste Antwort, die sich mit den möglichen Angaben im lp-Parameter beschäftigt.
 
Hallo Arganto,
so wie ich Dich verstanden habe suchst Du Direktlinks für Klingelsperre für Analog- und ISDN-Devices

Beispiel:
http://fritz.box/?lp=edit_fon_ring_block
http://fritz.box/?lp=edit_isdn_ring_block

und die zugehörige Code-Anpassung:
Code:
# vi /usr/www/avm/menus/menu_data.lua
SNIP
local pageData = {
SNIP
["telDev"] = {
["show"] = data.has_fon,
["lua"] = "fon_devices/fondevices_list.lua",
["help"] = forLuaOnly and "hilfe_fon_fondevices"
} or nil,
SNIP
--
-- http://fritz.box/?lp=edit_fon_ring_block
["edit_fon_ring_block"] = {
["show"] = true,
["lua"] = "fon_devices/edit_fon_ring_block.lua"
} or nil,
-- SNIP
-- 
-- http://fritz.box/?lp=edit_isdn_ring_block
["edit_isdn_ring_block"] = {
["show"] = true,
["lua"] = "fon_devices/edit_isdn_ring_block.lua"
} or nil,
SNIP
["endTag"] = nil
}


local menuData = {
SNIP
["tel"] = {
["txt"] = TXT([[{?menuFon?}]]),
["pos"] = 40,
["sub"] = {"calls", "tam", "tBook", "tAlarm", "mFax", "callHan", "telDev", "myNum"[COLOR=#0000ff], "EditRingBlock"[/COLOR]}
},

[COLOR=#0000ff]["EditRingBlock"] = {
["txt"] = TXT([[Klingelsperre]]),
["par"] = "tel",
["pos"] = 90,
["tab"] = {"edit_fon_ring_block","edit_isdn_ring_block"}
},

["edit_isdn_fon_block"] = pageData["edit_fon_ring_block"] and {
["txt"] = TXT([[edit_fon_ring_block]]),
["par"] = "EditRingBlock",
["pos"] = 10
} or nil,

["edit_isdn_ring_block"] = pageData["edit_isdn_ring_block"] and {
["txt"] = TXT([[edit_isdn_ring_block]]),
["par"] = "EditRingBlock",
["pos"] = 20
} or nil,[/COLOR]
Bei Interesse einfach mal testen; die zugrunde liegende Syntax entspricht FW 06.69, ggf. ist dies für FW 06.51 anzupassen.

LG
Shirocco88
 
["txt"] = TXT([[Klingelsperre]]),
Bei dieser Konstruktion hast Du Dich (unnötigerweise) von den AVM-Texten verleiten lassen ... das TXT() (eine globale Funktion) wird nur dann benötigt, wenn ein lokalisierter Text anhand der Sprachdatenbank aufgelöst werden soll.

Hier kannst Du auch ganz simpel
Code:
["txt"] = "Klingelsperre",
verwenden ... die Verkettung mit anderem Lua-Code über die alternative Form der Zeichenketten-Begrenzung (das sind die eckigen "Doppelklammern") braucht es ja auch nicht an dieser Stelle (die hat halt Vorteile, wenn der einzufügende Text seinerseits noch "quotes" enthält).

Außerdem glaube ich ehrlich gesagt nicht, daß Du das wirklich getestet hast.

Die edit_fon_ring_block.lua enthält am Beginn den folgenden Code:
Code:
g_data = {}
function read_data()
g_data.id = nil
if (next(box.get)) then
g_data.id = tonumber(box.get["idx"])
elseif(next(box.post)) then
g_data.id = tonumber(box.post["idx"])
end
[COLOR="#FF0000"]if not g_data.id then
redirect_back()
end[/COLOR]
g_data.cur_123phon = fon_devices.get_fon123_ring_data("Port"..tostring(g_data.id))
if not g_data.cur_123phon then
redirect_back()
end
table.insert(g_data.cur_123phon, fon_devices.get_fon123_phonedata(tostring(g_data.id)))
end
read_data()
Wenn der Aufruf also weder im QueryString (bei GET) noch im Formular (bei POST) den Wert idx enthält, endet die Abarbeitung der Seite an der rot markierten Stelle recht abrupt. Einen solchen Aufruf-Parameter (er gibt an, für welchen internen Telefon-Anschluß die Einstellungen geändert werden sollen) kann ich aber bei den Zusätzen zum Menü nicht ausmachen. Wo habe ich da etwas übersehen?

Bei der ISDN-Seite funktioniert das (mehr oder weniger zufällig), weil dort der Code so aussieht:
Code:
function read_data()
[COLOR="#008000"]g_data.idx=box.get.idx or box.post.idx or 1[/COLOR]
[COLOR="#FF0000"]if not g_data.idx or not config.CAPI_NT then
redirect_back()
end[/COLOR]
local isdn_list = fon_devices.read_nt_hotdiallist(true)
local l, device = fon_devices.find_elem(isdn_list, "nthotdiallist", "idx", tonumber(g_data.idx))
g_data.cur_elem = device
if not g_data.cur_elem then
redirect_back()
end
g_data.idx_=g_data.idx
if device.src=="nthotdiallist" then
g_data.idx_=3
end
end
read_data()
Hier wird also ein fehlender Wert für idx durch eine 1 ersetzt.
 
Wenn der Aufruf also weder im QueryString (bei GET) noch im Formular (bei POST) den Wert idx enthält, endet die Abarbeitung der Seite an der rot markierten Stelle recht abrupt. Einen solchen Aufruf-Parameter (er gibt an, für welchen internen Telefon-Anschluß die Einstellungen geändert werden sollen) kann ich aber bei den Zusätzen zum Menü nicht ausmachen. Wo habe ich da etwas übersehen?

Hallo PeterPawn und andere LUA-Interessierte,
Danke für Feedback und Optimierungsvorschläge (TXT, idx, ...)

so wie ich Dich verstehe sollte der Aufrufparameter "idx=0" für FON-1 und "idx=1" für FON-2 direkt als Query-String übergeben werden ?

Code:
# vi /usr/www/avm/menus/menu_data.lua
SNIP
-- http://fritz.box/?lp=edit_fon_ring_block
["edit_fon_ring_block"] = {
["show"] = true,
["lua"] = "fon_devices/edit_fon_ring_block.lua[COLOR=#0000ff]&idx=0[/COLOR]"
} or nil,
-- SNIP

LG
Shirocco88
 
@Shirocco88:
So könnte es funktionieren ... ich werde es nicht ausprobieren.

Man kann einfach nicht für jede Seite, die man irgendwie direkt erreichen will, einen zusätzlichen Eintrag in das Menü einbauen - deshalb halte ich (persönlich) dieses Vorgehen für einen Irrweg.

Wenn man so etwas schon unbedingt machen muß/will, dann sollte man das mit einem "unsichtbaren" Menüeintrag machen und z.B. die index.lua entsprechend erweitern.

Das wird trotzdem immer eine "Krücke" bleiben, weil der zusätzlich erforderliche "Umweg" über die Login-Seite (in der Folge des Aufrufs über die index.lua) eben nur die Parameter "weiterleiten" kann, die er kennt und entsprechend "aufbewahrt". Der lp-Wert gehört dazu, ein paar wenige andere vielleicht noch (hier kann man ja nachlesen).

Hat man hingegen eine gültige SID (weil man sich eben per Skript anmeldet, was nur auf "wirklich dummen" Endgeräten mit iOS ein Problem sein dürfte und selbst da kann man sich seine eigene HTML-Seite mit Javascript-Code erstellen, die über XHR die Kommunikation mit der Box übernimmt und die irgendwo anders hosten - im Extremfall sogar wieder auf der Box selbst als statische Seite), kann man jeden beliebigen Request auch für einen "deep link" absetzen.

Die andere Alternative hier wäre eben das Erstellen einer komplett neuen Seite, die dann gleich entsprechende Aktionen, die man ansonsten erst von Hand in der angezeigten Seite ausführen muß, auch noch automatisiert. Beim Ein- und Ausschalten von Klingelsperren sollte das eigentlich halbwegs automatisierbar sein (mindestens beim Ausschalten, beim Einschalten müßte man ggf. noch Zeiten festlegen) ... schon wenn man zwei Telefone gleichzeitig "schalten" will (das legt die Suche nach ISDN- und Analog-"Shortcuts" ja nahe), kann man sicherlich vermuten, daß diese identische Einstellungen verwenden soll(t)en.

Dieses "auf Teufel komm raus"-Modifizieren des Menüs, damit eine einzelne tiefer gelegene Seite mit speziellen Parametern angezeigt werden kann (bzw. bei einer einzelnen ist das vielleicht sogar noch etwas anderes und vertretbar, aber das sind ja alleine hier schon drei bis sechs "spezialisierte" lp-Werte, denn auch bei der ISDN-Seite sind ja idx-Werte ungleich 1 möglich), ist (mir persönlich) zu mechanisch und zu wenig "weitergedacht" von der AVM-Lösung aus. Was macht denn der Nächste, der jetzt noch die DECT-Seiten (die haben eine eigene Adresse) einbeziehen will und da dann drei weitere Telefone hat?

Dann sollte man sich lieber etwas neu erschaffen, was ich für die alte Oberfläche mal in Angriff genommen hatte (aber dann wieder eingestampft habe, nachdem ich im Februar 2015 wußte, daß das neue GUI kommen würde) ... ein "Dashboard", auf dem man sich die Links für die eigenen Favoriten-Seiten arrangieren kann (einige kennen vielleicht aus der Firma SharePoint oder andere "Portale", die man frei konfigurieren kann mit entsprechenden Elementen) und zwar so, daß diese Elemente (bzw. die Links dahinter) jeweils auch die gültige SID tragen und direkt aufgerufen werden können.

Das kann man dann mit Traffic-Grafiken "anreichern" und (wenn man sich etwas Mühe gibt) auch gleich noch die von AVM ebenfalls verwendeten "Schalter" (wie z.B. beim AB) benutzen, um solche Aktionen wie die "Klingelsperre" hier auf ein einzelnes Bedienelement zu reduzieren. Also praktisch so eine Art eigene alternative Home-Page für die FRITZ!Box ... da kann man dann auch wieder unterschiedliche Refresh-Zyklen für einzelne Elemente vorsehen (per Javascript), weil sich die IP-Adresse oder der Tages"verbrauch" an Volumen (was per se schon Quatsch ist, aber es hat sich halt so eingebürgert) sicherlich deutlich seltener ändern als man ein Traffic-Diagramm aktualisieren möchte. Da kriegt man dann auch solche "Elemente" unter, die AVM nicht direkt als eigenständige Seiten vorgesehen hat, z.B. die Anzeige, ob die Box gerade für ein Telefonat verwendet wird (das könnte ja auch ein Anrufer sein, der etwas auf den AB spricht).

Einige Projekte (SaS z.B.) machen das auch, aber eben über einen zusätzlichen Server mit PHP ... was mir hier "vorschwebt", ist aber eine Lösung auf der Basis von Javascript und HTML, die direkt die von AVM ohnehin bereitgestellten Puzzle-Teile für die Oberfläche nutzt (z.B. eben die AVM-XHR-Abfragen anstelle der Abfrage von TR-064 für die Traffic-Anzeigen verwendet) und auch deren JS-Code so weit es geht nachnutzt.

Wobei das tatsächlich nur ein denkbarer Ansatz ist ... der andere wäre genau der umgekehrte Weg und der würde darin bestehen, daß man dort, wo es kein Interface für die externe Steuerung gibt (also in erster Linie keines für TR-064), sich selbst eines baut. Das muß nicht unbedingt auch TR-064 verwenden (was AVM leider dadurch schon extrem schwer macht, daß es dort wohl auch keine "Plugin"-Schnittstelle gibt, in die man einfach eine weitere Funktion einklinken kann).

Entscheidender ist es hier, daß man sich entweder konsequent auf die "Verschmelzung" mit dem AVM-GUI/-Code einläßt (das wäre der "Dashboard"-Ansatz, der dann natürlich auf Änderungen durch AVM besonders sensibel reagiert) oder sich so weit es geht davon abnabelt (die eigene Schnittstelle - im Verbund mit den "offiziellen" von AVM - und das in einer Art und Weise, daß man so wenig Abhängigkeiten wie möglich mitschleppt, falls AVM doch mal etwas ändert).

Alles dazwischen handelt sich zwar die Vorteile der einen Lösung ein, aber parallel auch sofort wieder die Nachteile der anderen. Schon der "Mittelweg", so eine eigene Schnittstelle von einer Zusatzsoftware auf der Box selbst aus zu benutzen, ist ein wenig fragwürdig, weil er der Box beide Seiten so eines "Interfaces" (also den "provider" und den "consumer") aufbürdet.
 
Hat man hingegen eine gültige SID (weil man sich eben per Skript anmeldet, was nur auf "wirklich dummen" Endgeräten mit iOS ein Problem sein dürfte und selbst da kann man sich seine eigene HTML-Seite mit Javascript-Code erstellen, die über XHR die Kommunikation mit der Box übernimmt und die irgendwo anders hosten - im Extremfall sogar wieder auf der Box selbst als statische Seite), kann man jeden beliebigen Request auch für einen "deep link" absetzen.

Ich habe wahrscheinlich lange aber vergeblich und scheinbar nach den falschen Stichworten und Beispielen gesucht, aber eben dies bisher nicht gefunden oder den Wald vor lauter Bäumen nicht gesehen. Ich würde mich ja gern daran versuchen, s.h. Skript, eigene "externe" Vorschaltseite, o.Ä.

Hat da jemand ein Beispiel oder einen Link zu einem Beispiel?
 
Genauer? Was willst Du nun realisieren und was suchst Du? Es standen im Verlauf dieses Threads ja mehrere Wege zur Auswahl.

Was willst Du genau erreichen?

Soll das "scraping" einer HTML-Seite werden oder nur die "Aktions-Requests", mit denen eine Einstellung umgeschaltet wird (wo man die exakten Parameter vorher kennt) usw. - auch die Frage, was denn nun als "Host" für eigene Skripte vorhanden ist, wäre zu (er-)klären.

Ansonsten gibt es hier ein Beispiel einer API in PHP, im Netz gibt es irgendwo eine in Python und viele weitere GUI-Aufrufe - von cURL bis wget - gibt es auch in diversen Beispielen hier im Thread Forum (korrigiert). In meinem GitHub-Repo gibt es ein Beispiel in Shell-Code (für die BusyBox-Shell geeignet).

Es muß also etwas präziser sein, was Du genau suchst und nicht finden kannst bzw. was Du nun von den aufgezählten Varianten (vor diesem Beitrag) umsetzen willst. Wenn es nur der HTTP-POST-Request mit passenden Parametern inkl. einer "session ID" ist, gibt es Beispiele praktisch wie Sand am Meer.

Wenn Du PHP beherrschst, kannst Du Dir auch ein Plugin für fb_tools schreiben, da gibt es jetzt wohl eine Schnittstelle.
 
Ich bin da wieder bei der Ausgangslage. Ich möchte schnell an- und ausschalten. Da reicht mir mE auch "Wenn es nur der HTTP-POST-Request mit passenden Parametern inkl. einer "session ID" ist"", und eben diese Beispiel, die es wie Sand am Meer gibt, habe ich bislang halt vergeblich gesucht oder falsch gesucht oder den Wald, ...
 
https://pypi.python.org/pypi/fritzconnection

http://www.ip-phone-forum.de/showthread.php?t=196309

https://github.com/PeterPawn/YourFritz/tree/master/export

"site:ip-phone-forum.de cURL SID" bei Google

SaS hier irgendwo im IPPF

usw., usf.

Nur die Lösungen, die zum Setzen von Werten auf der Box auf "webcm" zurückgreifen, die funktionieren halt nicht mehr.

Aber sich so einen Request mit den Developer-Tools eines beliebigen Browsers mitzuschneiden und ihn (mit eigener SID) nachzubauen, braucht doch kaum noch irgendein Beispiel ... das ist doch eigentlich immer dasselbe.

:gruebel:
 
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.