Nachtschaltung für einzelne VoIP-Accounts!?

[Edit wichard: Fullquote von Beitrag #31 gelöscht. Bitte Forenregeln beachten.]

Hallo,

geniales Script...genau das was ich derzeit benötige! Allerdings wie funktioniert die Einbindung in meine Fritzbox? Muss ich da per Telnet auf meine Fritzbox?Habe damit ehr weniger Erfahrungen! Vielleicht könnte jmd. einen Informatiker ne kurzanleitung geben ;-)

Danke schonmal im Voraus!
 
inovate schrieb:
Allerdings wie funktioniert die Einbindung in meine Fritzbox?
Das steht in Beitrag #33: Dieser Code ist für die debug.cfg. Wie die bearbeitet wird, findet sich im Forum. Alternativ kannst Du (ohne Telnet und nvi) auch über "Pseudo-Images" Code in die debug.cfg befördern; dazu siehe http://www.ip-phone-forum.de/showthread.php?t=89465


Gruß,
Wichard
 
Ich habe eine dringende Frage zu dem Skript.

An sich funktioniert dieses aber leider nicht dauerhaft.

Es funktioniert genau 1 mal. (Anschalten & Ausschalten).

Am 2. Tag funktioniert es nicht mehr... da blinkt ab und zu die "info" Leuchte.

Wäre es möglich,dass jemand sich den Quellcode anschaut und überprüft, ob die "Dauerschleife" einen Fehler hat?

Code:
sleep 120;
###############################################################
# Start- und End-Zeit der Nachtschaltung(!):                  #
von=2000  # Format: 'hhmm'  (Format wird nicht geprüft!)      #
bis=0800  # Format: 'hhmm'  (Format wird nicht geprüft!)      #
sip=6     # zu schaltender Account (*121# entspricht Wert: 0) #
###############################################################
await() {
  local day=$((60*60*24))
  sleep $(( ($(date -d $(date +%m%d$1%Y) +%s) - $(date +%s) + $day) % $day ))
}
TestIt () {
case $(date +%a) in
  Mon|Tue|Wed|Thu|Fri)
    SipS=`ParseWebsite` # Daten einlesen
    SipState $SipS      # Ist irgend ein Sip-Acount verbunden?
    if [ $verbunden -eq 1 ]
      then
      (sleep 20; TestIt $1 $2) &
    else
      DoIt $1 $2
    fi
  ;;
esac
}
ParseWebsite() {
  export REQUEST_METHOD="GET"
  export REMOTE_ADDR="127.0.0.1"
  export QUERY_STRING="getpage=../html/de/menus/menu2.html&var:lang=de&var:menu=home&var:pagename=home"
  cd /usr/www/html/cgi-bin
  ./webcm |
  sed -n 's/^.*sip:status.sip[0-9].connect.*value="\([0-9]\).*/\1/p'
}
SipState() {
  local i
  verbunden=0
    for i in $*
  do
    if [ $i -eq 3 ]
    then
      verbunden=1
    fi
  done
}
DoIt() {
  export REQUEST_METHOD="POST"
  export REMOTE_ADDR="127.0.0.1"
  export CONTENT_TYPE="application/x-www-form-urlencoded"
  POST_DATA="sip:settings/sip$1/activated=$2"
  export CONTENT_LENGTH=${#POST_DATA}
  echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm > /dev/null
}
#################################################
# Hauptschleife. Einstieg automatisch über init()
NS_start() {
  (await $bis; NS_ende) &
  TestIt $sip 0  
}
NS_ende() {
  (await $von; NS_start) &
  TestIt $sip 1 
}
#################################################
# autom. richtigen Einstieg finden
init() {
  local now=$(date +%H%M)
  if [ $now -ge $2 ] && [ $now -lt $1 ]
  then
    NS_ende 
  else
    NS_start
  fi
}
#################################################
init $von $bis  # Dauerschleife initialisieren

MANY THX ;-)
 
Hat denn keine eine Idee .. warum das o.g. Skript nur einmal "funktioniert"??:noidea:
 
inovate schrieb:
...
Am 2. Tag funktioniert es nicht mehr... da blinkt ab und zu die "info" Leuchte.
...
Und warum blinkt die Info-LED?
Hast du mal nachgesehen, ob die Uhrzeit in deiner FBF noch stimmt?

Ich setze dieses Script schon länger nicht mehr ein, und weiss leider auch nicht ad hoc, ob sich irgendwas in der Firmware geändert hat.

Ach ja: Das Script schaltet nur an Wochentagen! ... nicht am Sa und So!
 
RudatNet schrieb:
Und warum blinkt die Info-LED?
Hast du mal nachgesehen, ob die Uhrzeit in deiner FBF noch stimmt?

Ich setze dieses Script schon länger nicht mehr ein, und weiss leider auch nicht ad hoc, ob sich irgendwas in der Firmware geändert hat.

Ach ja: Das Script schaltet nur an Wochentagen! ... nicht am Sa und So!

Hallo RudaNet,

danke für deine Antwort. Das blinken der Info-LED hatte mit der Sache des Skriptes nichts zutun gehabt. Es blinkte wenn ich ein kostenloses Gespräch führe (innerhalb von GMX).

Ja das mit den Wochentagen ist mir bekannt und wöllte ich auch so.

Wo kann man das überprüfen ob sich was geändert hat in der Firmware??

Ich habe die neuste von AVM 29.04.29 für die FBF 7170.
================================================

Wie gesagt, die Sache ist so .. er schaltet aus .. dann wieder an!

Aber das 2. AUS schalten funktioniert leider nicht. (Dauerschleifen Problem???)

Könntest du dir den Code nochmals anschauen ?

Wäre sehr nett & MANY THX
 
Sorry, aber da kann ich dir leider auf die Schnelle nicht weiterhelfen.

Bei mir hat's funktioniert, solange es sollte. Jetzt nutze ich es nicht mehr.
Momentan habe ich auch sehr wenig Zeit, es zu testen.

Ich hoffe, einer der Linux-Experten kann hier evtl. helfen!?

Dein Webinterface ist aber nicht Passwort geschützt, oder?
 
RudatNet schrieb:
Dein Webinterface ist aber nicht Passwort geschützt, oder?


Nein ist nicht Passwort geschützt, wie gesagt. EINMAL funktioniert der Durchlauf wie gewünscht, nur DAUERHAFT (leider) nicht.

Ist denn nen Linux Experte mal hier?
 
Setz mal eine neue Zeile hinter der ersten z.B.:

Code:
(await 0400; reboot) &

Damit sollte deine FBF um 4:00 Uhr rebooten und das komplette Script neu starten.
Vielleicht hilft das ja, bis jemand herausfindet, warum es nicht funktioniert!?
 
Hallo,

habe ich soeben probiert, leider startet die BOX somit alle 2 Minuten neu. (Habe soeben ein Recovery getätigt) .. das passiert wohl wenn man "bastelt" :p

Code:
sleep 120; 
[COLOR="Red"](await 0400; reboot) &[/COLOR]
###############################################################
# Start- und End-Zeit der Nachtschaltung(!):                  #
von=2000  # Format: 'hhmm'  (Format wird nicht geprüft!)      #
bis=0800  # Format: 'hhmm'  (Format wird nicht geprüft!)      #
sip=6     # zu schaltender Account (*121# entspricht Wert: 0) #
###############################################################
await() {
......
....

Das die FBF jetzt alle 2 Minuten neustartet liegt wohl an dem "sleep 120;" und dann gleich der Reboot (wobei die Zeitangabe : 4Uhr Nachts nicht beachtet wird)...

Ist der Code denn nicht richtig eingebaut worden od. erkennt er die "richtige Uhrzeit" nicht?

Danke schonmal
 
Zuletzt bearbeitet:
Ich werde das ürspüngliche Script mal bei mir testen ...
... in 2 Tagen kann ich wahrscheinlich mehr berichten ...
 
Das sieht so aus, als stimme da was mit dem Datumsformat in dem 'await'-Code nicht.

Ersetze die neue Zeile mal mit :
Code:
(sleep 86400; reboot) &
Damit wird keine Zeitabfrage (await) mehr gemacht, sondern es wird generell alle 24h rebootet.
 
Da meine FB (zum Glück :cool:) ein Passwort benötigt, habe ich in (ParseWebsite() und) DoIt() erstmal diesen Login-Teil am Anfang hinzugefügt:
Code:
  export REQUEST_METHOD="POST"
  export REMOTE_ADDR="127.0.0.1"
  export CONTENT_TYPE="application/x-www-form-urlencoded"
  POST_DATA="login:command/password=[COLOR=Lime]mein_passwort[/COLOR]"
  export CONTENT_LENGTH=${#POST_DATA}
  echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm > /dev/null
  sleep 3
Da noch keine 2 Tage rum sind, gibts sonst noch nix neues ...

(*) EDIT:
Man braucht ja eigentlich auch gar nit so lange warten ;-)
Ich habe einfach den sleep-Prozess gekillt, geprüft in Weboberfläche (jeweils ok, Nr an bzw. aus), nen Moment gewartet,
bis nur noch ein längerer sleep-Prozess da war ("ps ax"), diesen wieder gekillt usw. (und das wirklich mehrmals ...)
Dabei hat (leider) alles so funktioniert, wie es sollte.

@ inovate:
Ist deine FB-Weboberfläche mit Passwort gesichert?
Könntest ja auch mal (*) probieren ... ?
Wird denn evtl. um 8 oder um 20 Uhr telefoniert?
Ansonsten könnte man es auch mit crond bewerkstelligen ... (müsste aber u.a. erst besorgt werden)

Ich habe den Code in ein separates Script geschrieben, weil ich nicht neu starten wollte,
und meine debug.cfg nicht ändern wollte, sollte aber keinen Unterschied machen.

Den "sleep 120" könnte man übrigens auch durch ne Schleife ersetzen, die z.B. max. 10 mal nen ping versucht usw.
(danach sollte eigentlich auch die Uhrzeit stimmen):
Code:
max=10
i=0
while [ $i -lt $max ]; do
        if ping -c 1 www.heise.de >/dev/null; then
                break
        fi
        let i=$i+1
        sleep 15
done
Die Von-Uhrzeit muss übrigens grösser als die Bis-Zeit sein (von 0300 bis 0600 funktioniert also nicht wie erwartet).
 
Zuletzt bearbeitet:
u.g schrieb:
@ inovate:
Ist deine FB-Weboberfläche mit Passwort gesichert?
Könntest ja auch mal (*) probieren ... ?
Wird denn evtl. um 8 oder um 20 Uhr telefoniert?
Ansonsten könnte man es auch mit crond bewerkstelligen ... (müsste aber u.a. erst besorgt werden)
[/code] Die Von-Uhrzeit muss übrigens grösser als die Bis-Zeit sein (von 0300 bis 0600 funktioniert also nicht wie erwartet).

Hallo U.g.,

erstmal vielen vielen Dank für die Mühe und für das Testen des Codes...

Zu deinen Fragen : Nein meine FB-Oberfläche hat (noch) kein PW...

Im Regelfall wird um 8/20Uhr NICHT telefoniert.
Allerdings ... ist mir aufgefallen, dass ich wirklich andere Zeiten habe und dein letzter Satz war somit sehr hilfreich.

Ich habe eine "Tagsschaltung" => von 07.30 --- bis 18.30! (Wochentags)

Wie müsste der Code aussehen .. wenn ich während dieser Zeit
Mo-Fr (07.30 - 18.30) nicht Telefonieren kann (bzw. SIP Abgemeldet) ist.

Hoffe die Lösung ist "nah" :)

@Rudanet: Habe den Code mal eingebaut & bis jetzt kommt zumindest kein "2-Min Reboot"

Auszug aus MEINER Debug.cfg
Code:
sleep 120;
###############################################################
# Start- und End-Zeit der Nachtschaltung(!):                  #
von=[COLOR="Magenta"]0730[/COLOR]  # Format: 'hhmm'  (Format wird nicht geprüft!)      #
bis=[COLOR="Magenta"]1830[/COLOR]  # Format: 'hhmm'  (Format wird nicht geprüft!)      #
sip=2     # zu schaltender Account (*121# entspricht Wert: 0) #
###############################################################
await() {
....
 
Zuletzt bearbeitet:
inovate schrieb:
Wie müsste der Code aussehen .. wenn ich während dieser Zeit
Mo-Fr (07.30 - 18.30) nicht Telefonieren kann (bzw. SIP Abgemeldet) ist.
Vertausch mal die Aufrufe in init():
Code:
init() {
  local now=$(date +%H%M)
  if [ $now -ge $2 ] && [ $now -lt $1 ]
  then
    # NS_ende
    NS_start
  else
    # NS_start
    NS_ende
  fi
}
 
Hallo u.g.

habe ich soeben mal getätigt ..

Anscheinend macht das Skript jetzt gar nichts...

Also der SIP Accout *123# ist (um 10:50Uhr) angemeldet... was ja nicht sein dürfte... Hast du noch nen Tipp bzw. nen Änderungsvorschlag?

Hier mein "kompletter Code":

Code:
sleep 120;
###############################################################
# Start- und End-Zeit der [I]Tageschaltung [/I];-)(!):                  #
von=0730  # Format: 'hhmm'  (Format wird nicht geprüft!)      #
bis=1800  # Format: 'hhmm'  (Format wird nicht geprüft!)      #
sip=2     # zu schaltender Account (*121# entspricht Wert: 0) #
###############################################################
await() {
  local day=$((60*60*24))
  sleep $(( ($(date -d $(date +%m%d$1%Y) +%s) - $(date +%s) + $day) % $day ))
}
TestIt () {
case $(date +%a) in
  Mon|Tue|Wed|Thu|Fri)
    SipS=`ParseWebsite` # Daten einlesen
    SipState $SipS      # Ist irgend ein Sip-Acount verbunden?
    if [ $verbunden -eq 1 ]
      then
      (sleep 20; TestIt $1 $2) &
    else
      DoIt $1 $2
    fi
  ;;
esac
}
ParseWebsite() {
  export REQUEST_METHOD="GET"
  export REMOTE_ADDR="127.0.0.1"
  export QUERY_STRING="getpage=../html/de/menus/menu2.html&var:lang=de&var:menu=home&var:pagename=home"
  cd /usr/www/html/cgi-bin
  ./webcm |
  sed -n 's/^.*sip:status.sip[0-9].connect.*value="\([0-9]\).*/\1/p'
}
SipState() {
  local i
  verbunden=0
    for i in $*
  do
    if [ $i -eq 3 ]
    then
      verbunden=1
    fi
  done
}
DoIt() {
  export REQUEST_METHOD="POST"
  export REMOTE_ADDR="127.0.0.1"
  export CONTENT_TYPE="application/x-www-form-urlencoded"
  POST_DATA="sip:settings/sip$1/activated=$2"
  export CONTENT_LENGTH=${#POST_DATA}
  echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm > /dev/null
sleep 3
}
#################################################
# Hauptschleife. Einstieg automatisch über init()
NS_start() {
  (await $bis; NS_ende) &
  TestIt $sip 0  
}
NS_ende() {
  (await $von; NS_start) &
  TestIt $sip 1 
}
#################################################
# autom. richtigen Einstieg finden
init() {
  local now=$(date +%H%M)
  if [ $now -ge $2 ] && [ $now -lt $1 ]
  then
   # NS_ende
    NS_start 
  else
   # NS_start
    NS_ende
  fi
}
#################################################
init $von $bis  # Dauerschleife initialisieren
 
inovate schrieb:
Allerdings ... ist mir aufgefallen, dass ich wirklich andere Zeiten habe und dein letzter Satz war somit sehr hilfreich.
Das habe ich von Anfang an schon vermutet und auch gefragt!
Gib mal im Telnet-Fenster
Code:
date
ein und poste mal das Ergebnis.

Ich habe eine "Tagsschaltung" => von 07.30 --- bis 18.30! (Wochentags)

Wie müsste der Code aussehen .. wenn ich während dieser Zeit
Mo-Fr (07.30 - 18.30) nicht Telefonieren kann (bzw. SIP Abgemeldet) ist.
Der Code und deine Zeiten dafür sind schon vollkommen richtig.
In der Zeit zwischen start und end ist der Account abgeschltet!
 
RudatNet schrieb:
Das habe ich von Anfang an schon vermutet und auch gefragt!

Ohh?Das muss ich wirklich überlesen habe .. Asche auf mein Haupt :blonk:

RudatNet schrieb:
Gib mal im Telnet-Fenster
Code:
date
ein und poste mal das Ergebnis.

Folgendes Ergebnis kommt bei der Telnet-Eingabe :

# date
Thu Mar 8 11:27:49 CET 2007

Hoffe das hilft etwas weiter??
 
Naja ok, war auch nicht so ganz einfach ersichtlich
RudatNet schrieb:
Das sieht so aus, als stimme da was mit dem Datumsformat in dem 'await'-Code nicht. ...
Also das Format ist ok, und die Zeit eigentlich doch auch.


Zu dem Problem von > bis:

Lass die init-Schleife original
und tausche mal in der letzten Zeile "von" und "bis" aus!
 
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.