Router Software Reset W700V

Wir haben eine bescheidene DSL-Leitung die alle paar Tage mal resetet werden muss (Reset vom Router bewirkt offenbar neue Leitungsschätzung oder so was in der Richtung).

Ich habe mir schon überlegt über einen Aktor die Spannung weg zu nehmen… aber das ist eben ein bisschen unschön :wink:

Aus diesem Grund würde ich das lieber direkt über die Software machen.

Unter „/hcti_hilfsmittel_reboot.stm“ befindet sich der Button um den Reset durchzuführen

<HTML>

<HEAD>

<TITLE>HilfsmittelReboot</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta http-equiv="cache-control" content="no-cache">
<SCRIPT language="JavaScript" src="js_menu.js" type="text/JavaScript"></SCRIPT>

<SCRIPT language="JavaScript">
<!--
var iTimeOut=600000;
var NextPage='/top_start_passwort.stm';

function zero_run() {
	top.location.href=NextPage;
	return;
}
if (iTimeOut != 0) setTimeout("zero_run()", iTimeOut);

function stOk(){
	document.getElementById("c_verzoeg1").style.visibility='visible';
	if(navigator.appName != "Netscape")
		document.getElementById("c_verzoeg2").style.visibility='visible';
	else
		document.getElementById("c_verzoeg21").style.visibility='visible';
	top.flag_UI_reload = 1;
	document.forms[0].submit();
}

function stVerz(){
  if (top.flag_UI_reload == 1)
  {
    top.flag_UI_reload = 0;
    document.getElementById("c_text").innerHTML="";
  document.getElementById("c_verzoeg1").style.visibility='hidden';
//  document.getElementById("c_verzoeg2").style.visibility='hidden';
	if(navigator.appName != "Netscape")
	  document.getElementById("c_verzoeg2").style.visibility='hidden';
	else
	  document.getElementById("c_verzoeg21").style.visibility='hidden';
    alert('Reboot wurde erfolgreich durchgeführt.');
//  restart();
//  document.forms[0].submit();
    top.frames[2].location.href= "/cgi-bin/logout.cgi";
  }
}

function stZrk(){
	top.reload_logout=0;
  top.frames[2].location.href = "hcti_hilfsmittel.stm";
}

//-->
</SCRIPT>

<LINK rel="stylesheet" href="style.css" type="text/css">

</HEAD>

<BODY onload=stVerz()>
<FORM name="tF" method="POST" action="/cgi-bin/restart.cgi" onSubmit="return stOk();">

<DIV id=c_Frame>

<DIV id=c_border>
<DIV id=c_pfad>Hilfsmittel / Reboot</DIV>
<DIV id=c_titel>Reboot durchführen</DIV>
<DIV id=c_text>Wenn Sie bei Ihrem Endgerät einen Reboot durchführen möchten, dann bestätigen Sie jetzt mit 'OK'.</DIV>
<DIV id=c_leer></DIV>
<DIV id=c_foot></DIV>
</DIV>

<SCRIPT language="JavaScript">
if(navigator.appName != "Netscape")
	document.write('<DIV id=c_verzoeg2></DIV>');
else
	document.write('<DIV id=c_verzoeg21></DIV>');
</script>
<DIV id=c_verzoeg1></DIV>

</DIV>

<DIV id=t_Frame>

<DIV id=t_but1 onclick=startseite() onmouseover=rahmen(1,1) onmouseout=rahmen(0,1)><<  <<</DIV>
<DIV id=t_but3 onclick=stZrk() onmouseover=rahmen(1,3) onmouseout=rahmen(0,3)>Zurück <<</DIV>
<DIV id=t_but4 onclick=stOk() onmouseover=rahmen(1,4) onmouseout=rahmen(0,4)>OK <<</DIV>

</DIV>

<DIV id=i_Frame>

  <DIV id=i_content>
    <h2>Reboot durchführen</h2>
    <p>Falls das System nicht mehr korrekt antwortet oder in irgendeiner Form aufhört zu arbeiten, können Sie
    ein Reboot durchführen. Ihre Einstellungen werden dabei nicht verändert.</p>
    <p>Um den Reboot auszulösen, klicken Sie auf 'OK'.</p>
    <p>Der Reboot ist beendet, wenn die Betriebsanzeige aufhört zu blinken.</p>
  </DIV>

</DIV>

</FORM>
</BODY>

</HTML>

Wenn ich das richtig sehe ist das hier die Aktion die ausgelöst werden müsste:
<FORM name=„tF“ method=„POST“ action="/cgi-bin/restart.cgi" onSubmit=„return stOk();“>

nur wie bekomme ich das in einem PHP-Skript ausgelöst?
hat jemand eine Idee?

Skripte für IP-Adresse, Datenrate, CRC-Fehler usw. habe ich schon am laufen und kann ich bei Bedarf auch weiter geben :wink:

Auf Nachfrage hier das Auslesen der Werte.
Dies geschieht mit dem WWW-Reader und dem Text-Parser

Parameter im WWW-Reader:

www-reader.png

IP ist natürlich die Adresse des Routers :wink:

Parameter im Textparser:

Upstream: zwischen var int_up=" und „;
Downstram: zwischen var int_down=“ und „;
WAN-IP: zwischen var wan_ip=“ und „;
Downstream CRC-Fehler: zwischen var crc_ne=“ und ";

Dann müssen natürlich noch die Fatalen angelegt werden:
Downstram, Upstream und CRC-Fehler sind Integer-Werte
IP-Adresse ist sin String

Zunächst kannst Du probieren, ob das reset.cgi auch auf Get reagiert. Dann kannst Du das ganz normal wie Deine anderen Seiten abrufen. Die Parameter werden einfach angehangen, wobei ich aus dem Beispiel oben keine Parameter erkannt habe.

Ich habe bei meiner JSON Wrapper API file_get_contents benutzt

$header=array('Authorization: Basic '. base64_encode($this->user.":".$this->password),
				  'Content-type: application/json; charset=utf-8');
	$result = file_get_contents($this->url, false, stream_context_create(
	    array('http' => array(
		'method'  => 'POST',
	        'header'  => $header,
	        'content' => $content)
	    )
	));

Ansonsten schaue mal nach php + curl, was auch post absetzen kann. Dafür gibt es hier auch viele Beispiele, z.B. in den Fritzbox-Scripten.

Tommi

Schau mal nach Router reset w700 für jdownloader. Evtl. Ist jetzt auch schon im jdownloader enthalten. Da könnten die passenden Kommandos drin stehen

Ich weiß nicht ob ich hier voll auf dem Holzweg bin aber ich habe das jetzt mal ausprobiert:

<?php
//file_get_contents can do a POST, create a context for that first:

$opts = array('http' =>
  array(
    'method'  => 'POST',
    'action'  => "/cgi-bin/restart.cgi"
  )
);

$context  = stream_context_create($opts);
$url = 'http://192.168.3.1/hcti_hilfsmittel_reboot.stm';
$result = file_get_contents($url, false, $context);
echo $result;

?>

Als Rückgabewert bekomme ich die Startseite vom Router. Sprich ich müsste mich hierfür wohl erst am Router anmelden :frowning:

Das ist sogar sehr wahrscheinlich. Dazu gab es mal die login.cgi. Eine Anregung zu den Parametern findest Du hier, wo bei ich nicht weiss, ob das für die aktuelle Firmware funktionieren wird.
Du müsstest im finalen Post zum Auslösen des restart als URL auch restart.cgi statt der .stm angeben, die ja nur das Formular bereitstellt.

Tommi