NEWS
Fritzbox regelmäßig neu starten - erbitte Hilfe
-
Hallo,
ich erbitte von euch Hilfe bei einem Problem.Meine FB bekommt nach 5-7 Tagen Probleme dahingehend das die angemeldeten Geräte nicht mehr aktualisiert werden und meine WLAN- Repeater aus dem Mesh fliegen.
Habe mit AVM darüber schon Mailverkehr gehabt. Haben von mir Log´s sämtlicher Geräte bei Fehlerfall bekommen und anschließend nach dem Neustart. AVM hat sich diese Log´s angeschaut, aber keinen Ursache für den Fehler gefunden.
Danach habe ich im Internet mal gestöbert um meine Idee eines regelmäßigen Neustarts der FB zu realiesiern. Ich Komme aus der WIndowsecke und kann mit den Linuxmechanissmen nicht viel anfangen.Deshalb meine Frage:
Kann ich meinen Raspberry Pi 4 oder ioBroker irgendwie programmieren das der FB alle 4 Tage zwischen 3 und 4 Uhr von außen den Befehl zum Neustart gesendet wird?
Wie wäre dann die genaue Vorgehenweise? -
-
Ich starte per JS folgendes Shell script
#!/bin/bash ####################################################### ### Autor: Nico Hartung <nicohartung1@googlemail.com> # ####################################################### # Skript sollte ab FritzOS 6.0 (2013) funktioneren - also auch für die 6.8x und 6.9x # Dieses Bash-Skript nutzt das Protokoll TR-064 nicht die WEBCM-Schnittstelle # http://fritz.box:49000/tr64desc.xml # https://wiki.fhem.de/wiki/FRITZBOX#TR-064 # https://avm.de/service/schnittstellen/ # Thanks to Dragonfly (https://homematic-forum.de/forum/viewtopic.php?t=27994) ###=======### # Variablen # ###=======### IPS="FB-IP-Adresse" FRITZUSER="MeinUser" FRITZPW="MeinPassword" ###====### # Skript # ###====### location="/upnp/control/deviceconfig" uri="urn:dslforum-org:service:DeviceConfig:1" action='Reboot' for IP in ${IPS}; do curl -k -m 5 --anyauth -u "$FRITZUSER:$FRITZPW" http://$IP:49000$location -H 'Content-Type: text/xml; charset="utf-8"' -H "SoapAction:$uri#$action" -d "<?xml version='1.0' encoding='utf-8'?><s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/e ncoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'><s:Body><u:$action xmlns:u='$uri'></u:$action></s:Body></s:Envelope> " -s > /dev/null done
Der relevante JS Teil (in einer async function)
exec('/home/iobroker/reset_fb.sh > /home/iobroker/FBlog', function(err, stdout, stderr) { if(err) { log('Exec-Fehler: '+ stderr, 'error'); } else { log('FB restarted'+ stdout, 'info'); } });
-
@Rand
Danke schon mal für die Dateien.
Nur: Wo wird was wie gespeichert? Wo stelle ich ein, das das Script alle 4 Tage zwischn 3 und 4 Uhr startet?
Die einzutragenen Daten sind mir klar. -
Naja das Shell Skript kommt nach "/home/iobroker/reset_fb.sh" (mit entsprechenden ausführungsrechten für user iobroker und auf execute gesetzt [chmod +x /home/iobroker/reset_fb.sh]), (oder wo anders hin, nur der Aufruf im Skript muss dann natürlich geändert werden)
das Javascript legst du irgendwo im Javascript adapter an und dann per cron wie gewüscht triggern.Da fehlt natürlich noch ein paar Kleinigkeiten, ich triggere es aber über einen Button in der VIS und nicht via cron, aber so was sollte dann passen (mit anderen Zeiten)
function test () { console.log("Restarting"); exec('/home/iobroker/reset_fb.sh > /home/iobroker/FBlog', function(err, stdout, stderr) { if(err) { log('Exec-Fehler: '+ stderr, 'error'); } else { log('FB restarted'+ stdout, 'info'); } }); } schedule("* * * * *", function () { test(); });
-
@Rand
bin jetzt erst dazu gekommen das ganze umzusetzen.Problem:
Das Script läuft, FB wird resettet.
Habe über das Uhrsymbol eine Zeit eingestellt. Alle 3 Tage um 3:00.
das Script wurde vom Editor folgendermaßen geändert.'{"time":{"start":"03:00","end":"04:00","mode":"hours","interval":1},"valid":{"from":"06.11.2020"},"period":{"days":3}}' function test () { console.log("Restarting"); exec('/home/iobroker/reset_fb.sh > /home/iobroker/FBlog', function(err, stdout, stderr) { if(err) { log('Exec-Fehler: '+ stderr, 'error'); } else { log('FB restarted'+ stdout, 'info'); } }); } schedule("* * * * *", function () { test(); });
Wenn ich nun das Script laufen lasse wird die FB immer neu gestartet und im Log erscheint folgender Fehler:
javascript.0 2020-11-08 06:48:05.322 error (2029) script.js.meine_Scripte.FB-Reset_starten: Exec-Fehler: javascript.0 2020-11-08 06:48:00.007 info (2029) script.js.meine_Scripte.FB-Reset_starten: Restarting
Wo liegt der Fehler? Wie gesagt, ich komme aus der Windowsecke und habe mit Linux "noch" nicht viel Erfahrung.
Gruß
Bernd -
@Berlon Ich würde um es einfach zu halten einfach den tr064 Adapter installieren und per Zeitsteuerung im Blockly einfach den Datenpunkt reboot nutzen lassen und gut ists. Ist das einfachste...
-
@David-Froebus
habe mal das Script zusammen geklickt. Würde das funktionieren?<block xmlns="https://developers.google.com/blockly/xml" type="schedule" id="ip^_?xFbOW;Z1}!(Pug7" x="38" y="38"> <field name="SCHEDULE">{"time":{"start":"03:00","end":"","mode":"hours","interval":0},"period":{"days":3},"valid":{"from":"08.11.2020"}}</field> <statement name="STATEMENT"> <block type="control" id="0G%-]IJ#r~caPJ~0^P~B"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">tr-064.0.states.reboot</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="AR+JzgrSo,{WDF],[hLe"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> </block>
Wegen der langen Zeitspanne kann ich es nicht überprüfen, hoffe nun auf die Meister des Scriptens.
Gruß
Bernd -
@Berlon Da warst du nah dran. Aber für den ersten Versuch ganz gut. Du musst keine Zeitspannen nehmen, sondern einen bestimmten Zeitpunkt. Und bei dem "Button" Status würde ich umschalten. Dann gehst du auf Nummer sicher...
Versuch es so:<block xmlns="https://developers.google.com/blockly/xml" type="schedule" id="ip^_?xFbOW;Z1}!(Pug7" x="38" y="38"> <field name="SCHEDULE">{"time":{"start":"03:00","exactTime":true},"valid":{"from":"08.11.2020"},"period":{"days":3}}</field> <statement name="STATEMENT"> <block type="toggle" id="|Zny_ua0bv/ZQd(muxpV"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">tr-064.0.states.reboot</field> <field name="WITH_DELAY">FALSE</field> </block> </statement> </block>
-
@David-Froebus
danke schon mal. "Zu einem bestimmeten Zeitpunkt" sehe ich ein. ist eleganter.
Aber was bewirkt Umschalten gegenüber steure??Gruß
Bernd -
@Berlon Der State reboot ist ein Button. Da habe ich mal iwo gelesen nutzt man einfach umschalten. Habe ich nicht hinterfragt und hat bei mir auch super geklappt...
-
Sorry war etwas busy...
Ich sehe Du hast umgebaut und damit ggf nicht mehr relevant, aber zur Vollständigkeit -
ich nehme an das Dein Script mit einem Exit Code != 0 endet (aber ohne Fehlermeldung) auf stderr; daher gibt es einen Fehler ohne Mitteilung.Sollte sich auf shell ebene einfdach prüfen lassen mit einem "echo $?" nachdem das script aufgerufen wurde.
Oder heisst "immer neu gestartet" bei jedem Aufruf? - Nicht ganz klar was das Problem ist:)
-
@Rand
Das Problem bestand darin, das die FB bei laufendem Script alle 3-4 Minuten neu gestartet ist.
Da ich die FB so eingestellt habe, das bei einem Neustart Logs per eMail zugestellt bekomme habe ich die halt alle 3-4 Minuten erhalten.
Wo das Problem liegt weiß ich nicht.
Die Jetzige Funktion geht auch, nur mit dem Unterschied das die Logs nicht mehr zugestellt werden.
Vieleicht kann man da nochmal drüber schauen, das mit den zugestellten Logs ist schon gut.
Gruß
Bernd -
Naja Du hast oben einen alle 3 Tage triggger und unter ein dauernd trigger würde ich sagen, aber schedules sind mir auch noch ein wenig suspekt... die agieren bei mir auch öfter mal schwer nachvollziehbar;)
Sieht aber für mich doppelt aus - ersetze mal den unteren aufruf einfach mit test(), also
'{"time":{"start":"03:00","end":"04:00","mode":"hours","interval":1},"valid":{"from":"06.11.2020"},"period":{"days":3}}' function test () { console.log("Restarting"); exec('/home/iobroker/reset_fb.sh > /home/iobroker/FBlog', function(err, stdout, stderr) { if(err) { log('Exec-Fehler: '+ stderr, 'error'); } else { log('FB restarted'+ stdout, 'info'); } }); } test();
-
Hallo Rand,
bin zur Zeit stark beruflich gebunden und komme deshalb momentan zu selten an den Broker. Habe dein Script mal eingetragen bekomme aber den Fehler08:26:28.281 error javascript.0 (2029) script.js.meine_Scripte.FB-Reset_starten compile failed: at script.js.meine_Scripte.FB-Reset_starten:1
beim ausfüheren des Skriptes.
Die Datei reset_fb.sh ist vorhanden und ausgefüllt.
Für die Datei ist sudo chmod +x /home/iobroker/reset_fb.sh ausgeführtIn der Datei FBlog steht nix drin.
Kannst du mir da weiterhelfen da ich mit der Fehlermeldung nix anfangen kann.
Gruß
Bernd -
@Berlon
Hi,hast Du mal die Leerzeile weggemacht? (und die anderen unnötigen auch damit es besser lesbar ist)
Der Codeblock war nur Copy&Paste und nicht getestet... -
@Rand ,
so langsam verzweifele ich am Broker......Script sieht nun so aus:
function test () { console.log("Restarting"); exec('/home/iobroker/reset_fb.sh > /home/iobroker/FBlog', function(err, stdout, stderr) { if(err) { log('Exec-Fehler: '+ stderr, 'error'); } else { log('FB restarted'+ stdout, 'info'); } }); } test();
Fehlermeldung kommt:
javascript.0 2020-11-21 08:25:30.514 error (2029) script.js.meine_Scripte.FB-Reset_starten: Exec-Fehler: javascript.0 2020-11-21 08:25:25.465 info (2029) script.js.meine_Scripte.FB-Reset_starten: registered 0 subscriptions and 0 schedules javascript.0 2020-11-21 08:25:25.427 info (2029) script.js.meine_Scripte.FB-Reset_starten: Restarting javascript.0 2020-11-21 08:25:25.413 info (2029) Start javascript script.js.meine_Scripte.FB-Reset_starten
Ich sehe den Fehler nicht da vom Broker keine genaueren Angaben.
Hiiilfe!!!!
Gruß
Bernd -
@Berlon said in Fritzbox regelmäßig neu starten - erbitte Hilfe:
function test ()
Naja das sieht doch so aus als würde er versuchen das Skript auszuführen (Log Meldung Restarting), aber dann auf Shell Ebene einen unbekannten Fehler finden.
Läuft das Shell script denn wenn du es als User iobroker ausführst?
-
@Rand
hmmm.. wie Eingangs schongeschrieben bin ich linuxmäßig ein DAU.
Wenn ich mit Putty auf den Pi gehe habe ich als user:
pi@raspberry.
Wie kann ich da nun das Script als iobroker ausführen.
Und wenn das nicht geht, wie kann ich dem iobroker die Rechte für das Script geben?Gruß
Bernd -
Wenn du das Passwort vom iobroker User gesetzt hast dann mit su - iobroker
Alternativ su - um root zu werden, dann su - iobroker
Falls Du das root pw nicht hast ggf auch sudo su - wenn bei Dir sudo eingerichtet ist.Dann als iobroker /home/iobroker/reset_fb.sh ausführen.
Wenn es einen Ausführungsfehler gibt bitte ein ls -l /home/iobroker/reset_fb.sh herzeigen
Wenn es einen anderen Fehler ist dann entsprechend den zeigen