Fritzbox und Türklingel, wie Status a/b-Port überwachen?

Der Adapter ist heute angekommen und meldet auch artig Papier leer bzw. nicht leer.
Habe jetzt folgendes Skript genommen:
Code:
#!/bin/sh
while :
  do
  
  if test -r /var/log/printer_status #wenn ein usb_printer_port gesteckt ist ...
    then
    while grep 2 /var/log/printer_status >/dev/null 2>&1
      do
      sleep 1
    done

    echo "ATP1 ATD**9" | nc 127.0.0.1 1011		# Rundruf auf alle Telefone von FON1
    sleep 30						# 30 sek. warten
    echo "ATP1 ATH0" | nc 127.0.0.1 1011		# auflegen = Ruf beenden
  fi
  
  sleep 2

done
Brücke ich jetzt Pin 12 mit Pin 25 erhalte ich die Fehlermeldung line 19: nc : not found.
Wo könnte das Problem liegen?
Habe leider absolut keine Ahnung von Linux-Shell.
 
Vermutlich hat dein Freetz kein "nc". Das muss beim menuconfig mit gewählt werden, z.B. wähle unter "Busybox-Applets" den Punkt "network tools", da ist es mit bei. Oder du gehst in die Busybox-Settings direkt in "Network Tools" und wählst da "nc" aus.
 
meine Fritzbox lädt das Script jedoch gibt Sie mir, wenn ich via telnet zugreife die Meldung
"usblp0:failed reading printer status (-32)" aus.

Kann mir jemand helfen?
 
Moin,

Welche Box?
Welche Firmware?
Welcher USB-Adapter?
Wird der Drucker auf der Weboberfläche registriert? Bei mir USB USB2.0-Print USB-Drucker Status: Bitte Papier einlegen

-teddy
 
Oh sorry.. dachte die Box und Firmware hätte ich in die Signatur eingetragen.

Also es ist eine 7390 mit der aktuellen FritzOS 6.0
Auf der WebOberfläche steht USB-Drucker: Status nicht verfügbar.
Habe den Adpater gekauft, welchen Knusterus gepostet hat oder zumindest hab ich den aus dem Link bestellt.
Als Geräte wird "Prolific Technology Inc. IEEE-1284 Controller" angezeigt.

Schon mal Danke

edit: Mein Problem hat sich gelöst habe noch einen Adapter bestellt, diesmal bei einem anderen Händler und der funktioniert einwandfrei :)
Trotzdem Danke für die Hilfe
 
Zuletzt bearbeitet:
Auf die Gefahr hin, mich unbeliebt zu machen, wenn ich einen alten Thread wieder ausgrabe :). Ich möchte gerne meine Lösung zur Türklingel vorstellen, die seit längerer Zeit bei mir auf einer FB 7270 und 7490 stabil läuft. Dafür ist kein Drucker-Adapter oder Ähnliches notwendig. Der Code, der in die debug.cfg eingefügt werden muss, ist aber komplizierter.

In meinem Fall hat die Türsprechanlage ein Relais, welches für 2 Sekunden durchschaltet, wenn geklingelt wird. Die vorgestellte Lösung sollte aber auch mit einem normalen Klingeltaster funktionieren. Die beiden Klingelleitungen habe ich einfach an den Port Fon2 der Fritzbox angeschlossen, ohne jegliche Zusatzhardware.

Kernidee ist nun, diesen Port per Kommando "dtrace" zu überwachen (Skript siehe unten). Damit das funktioniert, muss in der FB-Oberfläche ein Analogtelefon am Port Fon2 eingerichtet werden. Dafür eine Rufnummer ausdenken, die es nicht gibt (ich habe - quasi per Zufall - 587125897 gewählt). Bei den Eigenschaften einstellen, dass nur auf diese Nummer reagiert werden soll. Siehe Screenshots:

klingel-fb-1.png
klingel-fb-2.png

Außerdem ist Folgendes in der debug.cfg einzufügen (nvi /var/flash/debug.cfg):
Code:
# Datei klingel.sh erstellen
cat > /var/tmp/klingel.sh <<HERE
#!/bin/sh
TTY=4
oldDate=0

# Prozess vor Beendigung schuetzen
trap '' SIGHUP
# Input aus Pseudo-TTY lesen (kommt von dtrace)
cat /dev/ptyp\${TTY} | while read -r line
do
        case \${line} in
        # die imaginäre Rufnummer
        *"587125897"*)
        	newDate=\$(date +%s)
        	let diff=\$newDate-\$oldDate
                # mindestens 15 Sekunden Abstand zwischen Calls
        	[[ \$diff -lt 15 ]] && continue
        	oldDate=\$newDate
                # warten, bis frei
        	while echo "ATP2 ATD**9" | nc 127.0.0.1 1011 | grep ERROR ; do usleep 100000 ; done
        	sleep 5
        	while echo "ATP2 ATH0" | nc 127.0.0.1 1011 | grep ERROR ; do usleep 100000 ; done
		date >> /var/tmp/klingelliste.txt
        ;;
        esac
done
HERE

# Datei klingeldtrace.sh erstellen
cat > /var/tmp/klingeldtrace.sh <<HERE
#!/bin/sh
TTY=4
TTY2=5

# Prozess vor Beendigung schuetzen
trap '' SIGHUP
while true
do
	# dtrace mit Input aus Pseudo-TTY fuettern, sonst funktioniert es nicht
	# Ausgabe ebenfalls auf Pseudo-TTY umleiten
	dtrace -c5 -s < /dev/ptyp\${TTY2}
done > /dev/ttyp\${TTY}
HERE

# Startsequenz fuer die Klingel-Skripte
cd /var/tmp
chmod 755 klingel.sh
chmod 755 klingeldtrace.sh
/var/tmp/klingel.sh &
sleep 5
/var/tmp/klingeldtrace.sh &
cd /

Dies erstellt die beiden Skripte /var/tmp/klingel.sh und /var/tmp/klingeldtrace.sh und startet sie beim Booten der FB. Sobald geklingelt wird (aus FB-Sicht wird der Hörer abgehoben), emittiert dtrace einige Zeilen, die auch die vorher definierte Rufnummer enthält. Wenn diese auftaucht, wird der AT-Befehl "ATP2 ATD**9" ausgelöst - ein Internruf auf alle Telefone. Soll ein spezielles Telefon angerufen werden, ist der Befehl entsprechend zu ändern, z.B. **1 statt **9.

Zu Dokumentationszwecken wird bei jedem Klingeln Datum und Zeit in die Datei /var/tmp/klingelliste.txt geschrieben.

Für Interessierte - es gab einige Einschränkungen, die ein paar Nerven gekostet haben:
1. dtrace braucht ein Terminal als Standardeingabe/STDIN, sonst funktioniert es nicht. Lösung: Standardeingabe auf Pseudo-Terminal setzen.
2. Pufferung der Ausgabe von dtrace. Da dtrace nicht regelmäßig die Ausgabe "flusht", erfolgt die Datenausgabe u.U. verzögert, wenn die Ausgabe von einem Skript weiterverarbeitet wird. Lösung hier: Ausgabe auf ein weiteres Pseudo-Terminal umleiten und dann in einem separaten Skript verarbeiten.
3. Mit "trap '' SIGHUP" in den einzelnen Skripten wird verhindert, dass das Skript gestoppt wird, sobald die debug.cfg komplett ausgeführt wurde. "nohup" funktioniert nicht.
4. Wenn die Fon2-Leitung noch belegt ist (d.h. während die Klingeltaste noch gedrückt ist), kann kein Internruf ausgelöst werden. Daher versucht obiges Skript den Internruf solange auszulösen, bis er erfolgreich ist.

Das Ganze wurde hier auch schon mal diskutiert, aber irgendwie habe ich es damals versäumt, eine "Komplettlösung" zu posten.
 
Zuletzt bearbeitet:
Hallo Pumbo,

leider funktionieren die Skripte auf meiner 7490 nicht, ich erhalte immer nur I/O Error.

cat: can't open '/dev/ptyp4': Input/output error

Ein Wechsel auf 0 und 1 brachte auch keine Änderung.

Hast du zufällig eine aktuelle und funktionierende Version für die Fritz OS 6.30 ?

Danke :)
 
Hallo feuerfresser,

leider funktionieren die Skripte auf meiner 7490 nicht, ich erhalte immer nur I/O Error.

cat: can't open '/dev/ptyp4': Input/output error

Ein Wechsel auf 0 und 1 brachte auch keine Änderung.

Hast du zufällig eine aktuelle und funktionierende Version für die Fritz OS 6.30 ?

Danke :)

Obige Ausgabe hat nichts mit der Fritz-OS-Version zu tun, ein Reboot dürfte das Problem prinzipiell beheben, dann sind die PTYs wieder freigegeben. Wichtig ist dann nur die korrekte Startreihenfolge der Skripte.

Außerdem müssen die Kommandozeilentools "dtrace" und "nc" funktionieren, bitte vorher manuell prüfen.
 
# Startsequenz fuer die Klingel-Skripte
cd /var/tmp
chmod 755 klingel.sh
chmod 755 klingeldtrace.sh
/var/tmp/klingel.sh &
sleep 5
/var/tmp/klingeldtrace.sh &
cd /

Die Reihenfolge habe ich so übernommen, dürfte also passen.
Ein Neustart brachte keine Besserung - die Telefon LED geht an beim Klingelknopf betätigen aber es wird kein Sammelruf ausgelöst.
 
Kannst du bestätigen, dass die Tools "dtrace" und "nc" vorhanden sind?

Bitte prüfe auch, welchen Inhalt die Datei /var/tmp/klingelliste.txt hat. Darin sollten sich die Zeitstempel der Klingelversuche seit dem letzten Reboot befinden:

Code:
cat /var/tmp/klingelliste.txt

Falls die Datei nicht existiert oder leer ist, wird eine Ferndiagnose schwierig.... Du kannst dann noch versuchen, die beiden Skripte in zwei Terminals in der richtigen Reihenfolge manuell zu starten und auf Ausgaben zu achten. Vorher die beiden Skriptaufrufe am Ende der debug.cfg entfernen.
 
Ich habe den automatischen Start rausgenommen und festgestellt das meine 7490 scheinbar wirklich kein dtrace hat.
Ein Aufruf von dtrace -? brachte ebenfalls nur: "-sh: dtrace: not found"

Über das Telefon kann ich es aber per Tastencode aktivieren, dort steht dann: "Dtrace on".
Wie kann es sein das ich es übers Telefon aktiviere dann aber das Programm nicht installiert ist?
 
Ich habe gerade gesehen, dass dtrace ab der 7490 nicht mehr dabei ist. Ich benutze Freetz, da konnte man es meines Wissens dazukonfigurieren. Du bekommst auch gleich noch ne private Nachricht...
 
nc als Busybox-Applet dürfte bei aktueller Firmware (ab 06.30) auch nicht mehr dabei sein ... EDIT: dtrace hingegen schon. Wo und wie hast Du denn festgestellt, daß es fehlt?
 
Zuletzt bearbeitet:
Wenn nc nicht mehr dabei ist, ist das natürlich blöd. Irgendeine Alternative?

Wenn dtrace nicht mehr dabei ist, dann kommt eventuell auch noch ein völlig anderer Ansatz in Frage, nämlich zyklisch den Klingelstatus zu prüfen, siehe z.B. hier.

Die geänderte /var/flash/debug.cfg sähe dann in etwa so aus (Achtung UNGETESTET). "Port2" müsste ggf. geändert werden, falls für die Klingel ein anderer Port als Port2 benutzt wird, genauso die beiden ATP2-Befehle:

Code:
# Datei klingelneu.sh erstellen
cat > /var/tmp/klingelneu.sh <<HERE
#!/bin/sh
oldDate=0

# Prozess vor Beendigung schuetzen
trap '' SIGHUP
while usleep 500000
do
	if echo "AT&V" | nc 127.0.0.1 1011 | grep "Port2 OFFHOOK"
	then
		newDate=\$(date +%s)
		let diff=\$newDate-\$oldDate
		# mindestens 15 Sekunden Abstand zwischen Calls
		[[ \$diff -lt 15 ]] && continue
		oldDate=\$newDate
		# warten, bis frei
		while echo "ATP2 ATD**9" | nc 127.0.0.1 1011 | grep ERROR ; do usleep 100000 ; done
		sleep 5
		while echo "ATP2 ATH0" | nc 127.0.0.1 1011 | grep ERROR ; do usleep 100000 ; done
		date >> /var/tmp/klingelliste.txt
	fi
done
HERE

cd /var/tmp
chmod 755 klingelneu.sh
/var/tmp/klingelneu.sh &
cd /

€: Für netcat braucht man offenbar eine unbeschnittene Busybox, z.B. von hier.

€2: Es scheint auch ganz ohne nc zu gehen (auch ungetestet): http://www.ip-phone-forum.de/showthread.php?t=272463&p=2029966&viewfull=1#post2029966
 
Zuletzt bearbeitet:
Hallo Pumbo,

erstmal danke soweit. Ich habe mich jetzt ein wenig eingelesen und umgebaut - jetzt muss ich nur noch ohne nc den Klingelzustand überprüfen...
Aktuell:

Code:
# Leere Datei klingelliste.txt erstellen                                                                                                    
cat > /var/tmp/klingelliste.txt <<HERE                                                                                                      
HERE                                                                                                                                        
                                                                                                                                            
#Datei klingelneu.sh erstellen                                                                                                              
cat > /var/tmp/klingelneu.sh <<HERE                                                                                                         
#!/bin/sh                                                                                                                                   
oldDate=0                                                                                                                                   
                                                                                                                                            
# Prozess vor Beendigung schuetzen                                                                                                          
trap '' SIGHUP                                                                                                                              
while usleep 500000                                                                                                                         
do                                                                                                                                          
        if echo "AT&V" | nc 127.0.0.1 1011 | grep "Port2 OFFHOOK"                                                                           
        then                                                                                                                                
                newDate=\$(date +%s)                                                                                                        
                let diff=\$newDate-\$oldDate                                                                                                
                # mindestens 15 Sekunden Abstand zwischen Calls                                                                             
                [[ \$diff -lt 15 ]] && continue                                                                                             
                oldDate=\$newDate                                                                                                           
                # warten, bis frei                                                                                                          
                while ctlmgr_ctl w telcfg command/Dial **9 | grep ERROR ; do usleep 100000 ; done                                           
                sleep 5                                                                                                                     
                while ctlmgr_ctl w telcfg command/Hangup 1 | grep ERROR ; do usleep 100000 ; done                                           
                date >> /var/tmp/klingelliste.txt                                                                                           
        fi                                                                                                                                  
done                                                                                                                                        
HERE                                                                                                                                        
                                                                                                                                            
cd /var/tmp                                                                                                                                 
chmod 755 klingelliste.txt                                                                                                                  
chmod 755 klingelneu.sh                                                                                                                     
/var/tmp/klingelneu.sh &                                                                                                                    
cd /

Nachtrag: nc habe ich als binary im flash abgelegt und den Pfad geändert, das hat soweit auch geklappt - neuer Fehler:
./klingelneu.sh: line 21: usleep: not found
 
Zuletzt bearbeitet:
Wenn du nc und dtrace hast, würde ich an deiner Stelle wieder die "alte" Variante nutzen. Das Problem ist, dass bei deiner Lösung zyklisch (aller halben Sekunden) der Zustand geprüft wird. Das sollte die FB nicht auslasten, aber sie hat auch immer was zu tun... und um die halbe Sekunde zu warten, habe ich oben probehalber "usleep" benutzt, das du wahrscheinlich auch nicht hast. Du könntest das "usleep 500000" probehalber durch "sleep 1" ersetzen. Mit "sleep" aus der Busybox (sollte bei dir vorhanden sein) kann man leider immer nur eine ganze Sekunde warten. Würde aber bedeuten, dass es sein kann, dass nicht jedes Klingeln erkannt wird, wenn kürzer als eine Sekunde geklingelt wurde. Wenn du dtrace nutzt, brauchst du keine zyklische Prüfung.

Anfangs eine leere klingelliste.txt zu erstellen, ist übrigens nicht notwendig...

Und um den ctlmgr_ctl zu nutzen, solltest du sicherheitshalber noch den Telefonport definieren, von dem er anruft. Irgendwo am Anfang des Skripts (Im Falle von Port 2):
Code:
ctlmgr_ctl w telcfg settings/DialPort 2
 
Moins

Danke für die Info...
Und um den ctlmgr_ctl zu nutzen, solltest du sicherheitshalber noch den Telefonport definieren, von dem er anruft.
...ansonsten gilt der, der als Wählhilfe in der Box eingestellt ist.

Um eingestellte Wählhilfe vorher abzufragen...
Code:
/usr/bin/ctlmgr_ctl r telcfg settings/DialPort
...so hab ich rausgefunden, dass DECT bei 60 beginnt.
(keine am Fon-Anschluss)

Aktualisierung von dialer.sh...
Code:
#!/bin/sh
if [ ${#} -eq 2 ] ; then
/usr/bin/ctlmgr_ctl w telcfg settings/DialPort ${1}
/usr/bin/ctlmgr_ctl w telcfg command/Dial ${2}
echo -ne $(basename $0) $?': Dialing '${1}'\n'
else
/usr/bin/ctlmgr_ctl w telcfg command/Hangup 1
echo -ne $(basename $0) $?': Hangup!\n'
fi
#EOF
Aufruf: dialer.sh 60 **701
...nimmt das erste DECT und wählt dann die Kurzwahl.
Aufruf: dialer.sh
...legt auf.
 
Guten Abend,

Es sind ja einige gute Ideen hier zusammengekommen.
Da aber sehr viel ausprobiert und getestet wurde, ist mir der finale Aufbau beider Varianten nicht ganz klar.

Die USB Port Variante sieht für mich ganz gut aus. Aber welche Komponenten funktionieren denn nun? Ein passendes Kabel habe ich da. Welche Bauteile benötige ich darüber hinaus?

Ich möchte eine fritzbox 7272 nutzen

Danke für Antworten
 
Hallo an alle hier


Ich habe mich auch mit dem Thema „Klingeltaster“ an Fritzbox beschäftigt ,da die Softwarelösungen nichts für den Normalverbraucher sind hab ich mir einen a/b Adapter für den Analogen Port gebaut 3-Klingeltasten anschließbar der die entsprechenden nummern wählt,

Funktioniert auch soweit ganz gut.Jetzt hab ich nur mal eine Frage wenn ich in der Fritzbox (meine 7362sl) den Analogen Port auf Türsprechstelle konfiguriere habe ich die 11,12,13,14 für die Klingeltasten.
Wenn ich eine Türrufgruppe einrichte ist die erste mögliche Nummer die **701 die zweite die **702… usw.
ist das bei allen Fritz-boxen 7390,7490 usw.… auch so??


Danke im voraus
ronyh
 
Nein.
Wenns ums erstellen einer Kurzwahl geht.
Das bedeutet, dass du auch mit der **797 anfangen kannst.
...vorausgesetzt die ist noch frei.
Gratis HD Musikberieselung: **798
HD Sprachdemo: **799
 
Zuletzt bearbeitet:
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.