.titleBar { margin-bottom: 5px!important; }

Fax Versand und Fax Empfang auf FritzBox oder PC-Linux

Dieses Thema im Forum "Freetz" wurde erstellt von RalfFriedl, 13 Aug. 2007.

  1. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    #1 RalfFriedl, 13 Aug. 2007
    Zuletzt bearbeitet: 2 März 2008
    Für alle, die nach eine Möglichkeit suchen, Faxe zu senden und zu empfangen, habe ich hier ein Programm, das entweder auf einer FritzBox oder auf einem PC-Linux läuft.
    Damit ist es möglich, über eine CAPI, die von sich aus das Fax Protokoll nicht unterstützt, Faxe zu senden und zu empfangen.

    Das Programm eignet sich für zwei Anwendungen:
    • Auf einer FritzBox sollen Faxe versendet und empfangen werden.
    • Auf einem PC-Linux sollen Faxe versendet und empfangen werden, eine CAPI-fähige ISDN-Karte ist vorhanden, aber die CAPI selbst unterstützt kein Fax.

    Voraussetzungen Software:
    • Eine CAPI Schnittstelle. Remote CAPI über Netzwerk funktioniert auch. FAX G3 Unterstützung in der CAPI ist nicht notwendig.
    • spandsp
    • libtiff
    Voraussetzungen Hardware:
    • entweder FritzBox 7170 oder vergleichbare, also 7140, 7141, 7170, W701V, W900V
    • oder PC-basiertes Linux

    Das Programm hat folgende Optionen:
    Code:
    Gemeinsame Optionen
    -m	Modem-Geschwindigkeit:
    -m0	2400
    -m1	4800
    -m2	9600
    -m3	14400 (default)
    -l	Eigene Fax-Kennung, default "+00 0000 0000000"
    Sende-Optionen
    -o	Eigene Sende-MSN, kein default
    -d	Ziel-Rufnummer, wird benötigt
    -t	Datei, die übertragen werden soll, TIFF G3 kodiert, wird benötigt
    Empfangs-Optionen
    -i	Eingehende MSNs, mehrere mit Komma getrennt möglich, kein default
    -r	Verzeichnis, wo enpfangene Faxe abgelegt werden sollen, default "/tmp"
    -R	Programm, das nach dem Empfang gestartet werden soll, kein default
    
    Wenn ein Fax gesendet werden soll, müssen die Optionen -d und -t angegeben werden.
    Zum Empfang muß die Option -i mit einer order mehreren MSNs angegeben werden, sonst wird kein Anruf angenommen.

    Das Programm für die FritzBox ist statisch gelinkt und benötigt daher keine zusätzlichen Libraries.
    Das Programm für PC-Linux benötigt libtiff, libjpeg, libz, libstdc++ und libm. Diese sollten aber normalerweise vorhanden sein.

    Das größte Problem bei der Fax-Verarbeitung ist die CPU-Auslastung.
    Auf der FritzBox habe ich beim Versenden von Faxen CPU-Auslastungen bis ca. 30% beobachtet. Die CPU-Leistung reicht, um auch zwei Faxe gleichzeitig zu senden.
    Das Senden also nicht kritisch, nur das Empfangen. Mit 4800 bit/s, also mit der Option -m1, habe ich recht zuverlässig Faxe empfangen können. Allerdings habe ich diese mit meiner eigenen ISDN-Karte gesendet, so daß hier keine Störungen auf der Leitung waren.
    Kurze Faxe gingen auch mit 14400 bit/s, also mit -m3. Wie es aussieht mit dem Empfang von analogen Absendern über evtl. gestörte Leitungen bleibt abzuwarten. Ebenso kann der Empfang bei mehreren Seiten oder bei komplexeren Seiten durcheinander kommen.

    Ebenso ist von Bedeutung, was sonst noch auf einer Box läuft. Es ist möglich, zusammen mit anderen Programmen, die schon auf der Box laufen, die CPU Belastung zu hoch wird. Ebenso ist es möglich, daß durch eine hohe CPU-Auslastung der Watchdog-Timer zuschlägt und die Box komplett neu startet.

    Auf einem PC-Linux ist die CPU-Auslastung nicht groß von Bedeutung, da sollte alles ab Pentium 100MHz ausreichen, sowohl zum Senden als auch zum Empfangen.

    Eine Datei, die gesendet werden soll, muß als TIFF-Datei mit G3 Fax-Kodierung vorliegen. Mehrseitige TIFF-Dateien sind möglich. Diese Datei kann von verschiedenen Programmen erzeugt werden.

    Beim Empfang wird eine Datei in dem angegebenen Verzeichnis erstellt. Das kann das Verzeichnis /tmp sein, es kann auch ein Verzeichnis auf einem USB oder NFS Dateisystem sein. Wenn das Fax nur im RAM der FritzBox abgelegt wird, ist es natürlich weg, falls die Box aus irgendeinem Grund neu startet.
    Optional kann ein Programm angeben werden, daß aufgerufen wird, nachdem ein Fax empfangen wurde. Dieses Programm wird mit folgenden Parametern aufgerufen:
    • Name der Fax-Datei, im TIFF Format, eine oder mehrere Seiten.
    • Telefonnummer der Gegenstelle
    • Status der Übertragung, 0=OK, alles andere ist Fehler. Auch bei Fehler könnten schon einige Seiten empfangen worden sein.

    Dieses Programm kann beliebige Aktionen durchführen: Ausgabe auf einem Drucker, Benachrichtigung per Email, usw.

    Zum Testen des Programms habe ich unter anderem das Programm c2faxsend in Verbindung mit der Fax-fähigen CAPI einer Fritz-Karte unter Linux verwendet. Dabei ist mir aufgefallen, daß c2faxsend und/oder die FritzCard CAPI munter behaupten, die Übertragung wäre erfolgreich, selbst wenn die Gegenstelle davon nichts mitbekommt oder der Verbindung längst getrennt ist. Ich habe einmal bei einem 10-seitigen Fax den Empfänger noch vor Übermittlung der ersten Seite abgebrochen. c2faxsend hat trotzdem angezeigt, daß es 10 Seiten übertragen hätte und die Übermittlung erfolgreich war. Man sollte sich also nicht auf diese Rückmeldung verlassen, sondern besser selbst die empfangene Datei kontrollieren.

    Probleme:
    Ein Fax das in der ersten Zeile die Bits immer abwechselnd hat, also 010101...010101 wird von spandsp bei T.6 Kodierung falsch empfangen, und dies hat nichts mit Frame-Slips oder CPU-Auslastung zu tun. Es könnte auch generell passieren, wenn ein solches Muster vorkommt und auch wenn es nicht über die ganze Zeile geht.

    Die CAPI der 7170 liefert zum Teil nicht korrekte Daten. Details dazu in etlichen Beiträgen weiter unten. Das bedeutet leider, daß die Fax-Übertragung nicht zuverlässig läuft, und es sieht nicht danach aus, als könnte jemand außerhalb von AVM etwas dagegen tun.

    FAQ
    noch keine.

    Updates
    noch keine.
     

    Anhänge:

  2. bodega

    bodega Aktives Mitglied

    Registriert seit:
    6 Juni 2006
    Beiträge:
    1,980
    Zustimmungen:
    1
    Punkte für Erfolge:
    0
    Ort:
    NRW
    Hallo Ralf,

    das mit dem Empfangen auf der Box habe ich leider nicht hingekriegt. Bei Text- und Grafik-Faxe bricht das Fax ab (so ab 65kb). Testweise mal 4800-14400 Baud probiert, größtenteils aber mit 9600.

    Unter Linux könnte es besser funktionieren, das habe ich noch nicht probiert.

    Welche spandsp Version verwendest du?
     
  3. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Die spandsp Version ist die neueste, die ich finden konnte, 0.0.4pre4.
    Mit längeren Faxen habe ich auf teilweise Probleme. Hat es mit 4800 funktioniert oder auch damit nicht?
    Ansonsten läuft bei mir zum Testen auf der Box sonst gar nichts, auch kein DSL.

    Auf einem PC dagegen ist die Auslastung unproblematisch. Das i386-Binary enthält auch schon die Unterstützung für Remote-CAPI, aber ich habe bei mir auf der Box keine rcapid laufen.

    Was hast Du zum Senden verwendet?
    Ich habe zum Senden nur einen ISDN-Karte, damit bekomme ich natürlich immer ein unverfälschtes Signal.
     
  4. bodega

    bodega Aktives Mitglied

    Registriert seit:
    6 Juni 2006
    Beiträge:
    1,980
    Zustimmungen:
    1
    Punkte für Erfolge:
    0
    Ort:
    NRW
    #4 bodega, 14 Aug. 2007
    Zuletzt bearbeitet: 14 Aug. 2007
    Zum testen hatte ich Fritz!Fax verwendet. Empfang mit 4800 hatte ich probiert, aber da blieb das Fax auch so bei ca. 60kb hängen. Einen Abbruch konnte ich da nicht feststellen (wobei ich das nur 3 mal mit 4800 getesten hatte). Mit einem richtigen Fax müsste ich das noch testen.

    Ich kann mich erinnern, das damals im Fax-Thread noch die Floating-Point Routinen im spandsp umgeschrieben wurden, damit die CPU Auslastung nicht ganz so hoch ausfällt.

    Mal schauen, wie das mit dem neuen spandsp aussieht.

    EDIT:
    siehe da. Es gibt sogar ein Compiler-Flag --enable-fixed-point :)
     
  5. knox

    knox Mitglied

    Registriert seit:
    20 Mai 2006
    Beiträge:
    577
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    #5 knox, 14 Aug. 2007
    Zuletzt bearbeitet: 14 Aug. 2007
    Schicke Sache :)

    Lass uns ein ds-mod Package daraus bauen....
     
  6. Whoopie

    Whoopie Aktives Mitglied

    Registriert seit:
    19 Okt. 2004
    Beiträge:
    814
    Zustimmungen:
    4
    Punkte für Erfolge:
    18
    @knox: die Sources sind doch auch angehängt. ;)
     
  7. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    In der dritten Datei ist (nicht nur) das Makefile drin.
    Das Makefile kann man sicher noch hübscher machen, aber erstmal wollte ich hören, wie es bei anderen läuft.

    Funktioniert es bei Dir?

    Inzwischen habe ich bei mir auf der Box rcapid installiert, damit funktioniert es von einem Linux PC aus.
     
  8. ichego1

    ichego1 Mitglied

    Registriert seit:
    19 Dez. 2005
    Beiträge:
    707
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
  9. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Bisher ist ja noch nicht einmal klar, ob die CPU-Leistung in dieser Form für einen zuverlässigen Empfang ausreicht. Bevor man es in Asterisk einbaut, sollte erstmal die Grundfunktion stehen.

    Hast Du es schon ausprobiert? Wenn ja, funktioniert es bei Dir?
     
  10. ichego1

    ichego1 Mitglied

    Registriert seit:
    19 Dez. 2005
    Beiträge:
    707
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    also

    asterisk auf fritz geht super bei mir aber das iaxmodem und halyfax müsste ds-danisahne
    komplieren da bin ich kein freak
    aber es war ja nur ein Idee und ein Gedankenblitz von mir
     
  11. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ich meinte, ob das Fax-Programm bei Dir funktioniert, nicht Asterisk.
     
  12. Whoopie

    Whoopie Aktives Mitglied

    Registriert seit:
    19 Okt. 2004
    Beiträge:
    814
    Zustimmungen:
    4
    Punkte für Erfolge:
    18
    Ich hab mal ein bisschen getestet. Leider klappt es maximal, 2 Seiten ordnungsgemäß zu empfangen, egal welche Geschwindigkeit.

    Aber bitte nicht aufgeben, es ist einfach eine geniale Idee.
     
  13. gfuer

    gfuer Mitglied

    Registriert seit:
    29 Juni 2007
    Beiträge:
    248
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    IAX-Modem ist meines Wissens ebenfalls Spandsp-basiert. Asterisk und IAX-Modem haben sicher noch einen größeren Overhaed als ein kleines, "schnuckeliges" Standalone-Fax-Programm.
     
  14. ichego1

    ichego1 Mitglied

    Registriert seit:
    19 Dez. 2005
    Beiträge:
    707
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    also ich bin kein linux guru aber da ich diese idee so gut finde und ich selber 50 faxe protag bekomme finde ich dieses projekt so gut
    habe mich noch ein wenig umgeschaut
    gruss euer ichego

    http://oss.gonicus.de/
     
  15. meimi039

    meimi039 Mitglied

    Registriert seit:
    7 Juni 2005
    Beiträge:
    323
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Senior IT-Security Engineer
    Ich habe mal "CapiSpFax --help" eingegeben und bekomme einen SegFault. Kann das jemand reproduzieren?
     
  16. bodega

    bodega Aktives Mitglied

    Registriert seit:
    6 Juni 2006
    Beiträge:
    1,980
    Zustimmungen:
    1
    Punkte für Erfolge:
    0
    Ort:
    NRW
    Warum manche immer sagen: "kann man Dies und Das nicht in XYZ implementieren", ohne das Programm vorher mal ausprobiert zu haben, ist mir völlig schleierhaft.

    @meimi039:
    Segfault bekomme ich nicht. Aber --? --help, etc. bringen auch keine Ausgabe. Eventuell liegt es an der Labor?
     
  17. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Bei mir kommt bei -? oder --help "illegal option".

    Wo kommt ein SegFault, auf eine FritzBox oder auf einem PC?
     
  18. bodega

    bodega Aktives Mitglied

    Registriert seit:
    6 Juni 2006
    Beiträge:
    1,980
    Zustimmungen:
    1
    Punkte für Erfolge:
    0
    Ort:
    NRW
    #18 bodega, 14 Aug. 2007
    Zuletzt bearbeitet: 14 Aug. 2007
    Wenn ich versuche, CapiSpFax selbst zu kompilieren bekomme ich sowas:

    Code:
    ./CapiSpFax -m2 -i xxxxxxxx -r /var/media/ftp/usb -vvvv
    put_cmsg '' -> 0
    get_cmsg ''
    get_cmsg ''
    Call from 'yyyyyyyyyy' to 'xxxxxxxx', PLCI 0xe01
    accept call
    put_cmsg '' -> 0
    get_cmsg ''
    put_cmsg '' -> 0
    get_cmsg ''
    CAPI_CONNECT_B3_IND
    put_cmsg '' -> 0
    FAX INIT 0, '/var/media/ftp/usb/rxfax-46c1f2d8-10e01.tif', '+00 0000 0000000', 2
    Segmentation fault
    
    Mit deiner Binary funktioiert es.

    Verwende tiff-3.8.2 und libspandsp-0.0.4pre4. rpl_malloc hab ich aus der config.h von spandsp auskommentiert und lrintf in tone_generate.c ergänzt. Habe auch schon --enable-fixed-point als ./configure Parameter probiert, mit selben Ergebnis. Statisch kompiliert mit mipsel-linux-g++.

    Habe ich etwas übersehen?
     
  19. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Nichts was mir direkt auffallen würde. Da GDB auf der Box nicht richtig funktioniert, bleibt nur ltrace oder die gute alte printf Methode, um die Stelle näher einzugrenzen.

    Allerdings hatte ich auch zuerst lrintf undefiniert. Ich hatte es dann in der Datei Fax.cpp defniert, genau wie __strdup. Irgendwann ging es dann aber auch ohne bzw. hat sich an der Definition gestört, da bin ich nicht mehr ganz sicher, jedenfalls habe ich die dann wieder entfernt. Vielleicht liegt es auch am statischen Linken. Ich habe das Programm statisch gelinkt, schon damit ich nur eine Datei immer übertragen muß.

    Zwischendurch habe ich mal aus anderen Gründen die Toolchain neu erstellt, mit dem neuen GCC 4.2.1, mit LFS und mit IPV6. Ich vermute da zwar keinen Zusammenhang, aber man kann nie wissen.

    Im Moment bin ich dabei, das Ganze soweit fertig zu machen, daß es sich mit dem ds-mod komplett bauen läßt, inkl. libtiff und spandsp.

    Anscheinend kommt es bei längeren Faxen doch noch leicht aus dem Gleichgewicht. Ich habe festgestellt, daß meine 10-Seiten Testdatei nur in niedriger Auflösung ist und daher ein kleineres Datenvolumen hat.

    Seltsamerweise ist es auch so, daß die gleiche Datei über ISDN übertragen mal funktioniert und mal nicht, obwohl die empfangenen Daten und auch der Zeitbedarf identisch sein sollten. Andere Programme habe ich schon extra nicht darauf laufen, damit diese den Empfang nicht störten.
     
  20. bodega

    bodega Aktives Mitglied

    Registriert seit:
    6 Juni 2006
    Beiträge:
    1,980
    Zustimmungen:
    1
    Punkte für Erfolge:
    0
    Ort:
    NRW
    Ok.. ich schau dann nochmal per ltrace, ob sich was erkennen lässt.

    Was beim Empfang auch Probleme machen könnte: die kürzeste Wartezeit bei der FritzBox beträgt 10ms (ein usleep(1) = ~10 ms). Wenn ich wüsste, wie und ob man die Systemticks ändern kann, bzw. ein anderes Timingdevice verwenden könnte, wären es wahrscheinlich weniger Frame-Slips.