Pi & Fritz = Telefonklingeln

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Moin,

    auf der Fritzbox reicht ein Befehl um einen Sammelruf auszulösen:
    echo "ATP1 ATD**9" | nc 127.0.0.1 1011

    Jetzt muss ich den Befehl aber vom Pi aus absetzen, ein
    echo "ATP1 ATD**9" | nc [IP der Fritte] 1011
    funktioniert natürlich nicht, jetzt fehlt mir der zündende Gedanke!

    Wer schubst mich mal bitte vom Schlauch?:s

    -teddy

  • Moin,

    nein, der Port ist nicht offen, sonst wäre es ja einfach.
    der Daemon lauscht dummerweise auf localhost.
    Das will ich auch nicht ändern, sonst müsste ich bei jedem Update wieder Hand anlegen.
    Ich brauche quasi einen Lauscher auf der Fritte und den Sender auf dem Pi.
    Das ganze würde ich dann in mein schon auf der Box laufendes Script integrieren.

    -teddy

  • Da läuft ein Script auf der Box?

    Ist sie nicht mehr innerhalb des AVM-Supports? Telnet freigeschaltet oder gar Freetz?
    Dann weiß der Rest der Welt nicht, was auf der Fritte möglich ist.

    Aber wenn die Box was macht, warum den Spieß nicht umdrehen?
    Die Fritte holt sich die Information vom Pi - beim Pi kann dieses Forum helfen.

    Oder man macht es ganz simpel nach dem Geist der Erfinder von Unix:
    Der Pi schreibt eine Datei, die Fritte liest die Datei.

    Keep it simple [,&] stupid

  • Hörer abnehmen und wählen:

    Code
    #96*7*

    Das aktiviert Telnet auf der Fritzbox.

    Code
    echo "ATDT*124#01511234567" | nc 192.168.178.1 1011

    Vorher musst Du der Fritzbox noch sagen das sie nicht nur auf localhost und Port 1011 lauschen soll sondern auch auf dem Interface ins lokale Netz lauscht.
    Also einmal per Telnet drauf ohne Portangabe:

    Dann klappt auch telnet 192.168.178.1 1011 bzw. nc 192.168.178.1 1011


  • Vorher musst Du der Fritzbox noch sagen das sie nicht nur auf localhost und Port 1011 lauschen soll sondern auch auf dem Interface ins lokale Netz lauscht.
    Also einmal per Telnet drauf ohne Portangabe:


    Moin,

    klar, Dein Vorschlag funktioniert, aber das will ich nicht. Ich reiße damit den Telefon Dämon nach innen komplett auf, da könnte jeder einen beliebigen Wählbefehl absetzen :@.

    Frau und Kinder haben schon soviel [eigenzensur] ins Lan geholt, ich könnte heulen. Da reiße ich nicht mehr Löcher auf als nötig. Gibt es nicht eine einfache Möglichkeit auf Fritz einen Port zu öffnen, wo ein Script drauf lauscht und auf Action wartet? Das sendende Script läuft auf dem Pi und schubst ein paar Byte rüber ...


    -teddy


  • Gibt es nicht eine einfache Möglichkeit auf Fritz einen Port zu öffnen, wo ein Script drauf lauscht und auf Action wartet? Das sendende Script läuft auf dem Pi und schubst ein paar Byte rüber ...
    -teddy

    auf der FB läuft auch nur Linux, vielleicht mit open Fritzbox versuchen ?

    aber das wissen die Linux Profis hier besser als ich :D

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • http://sipcmd.sourceforge.net den Client benutzen um der Fritzbox zu sagen sie soll Telnet aktivieren.

    Dann noch auf dem Netzwork Interface aktivieren.

    Das kannst Du auch schön alles Scripten.

  • Dann habe ich gleich die nächste Frage, habe das soweit auch schon vorbereitet, aber scheitere immer.

    Code
    ./sipcmd -P sip -u 621 -c **** -w fritz.box -x "c**613;w30000;h"


    Was mache ich falsch oder wie muss ich meine Kommandozeile anpassen das ich '**613' 30sek anklingele?

    danke schonmal

  • Hallo,
    das wärs für mich!!!! Aber...

    Ich betreibe FHEM-Hauautomation auf dem RP und setze den Fritzbox-Rundruf aus FHEM via telnet und netcat ab. Da die neue Firmware von AVM anscheinend kein nc mehr hat, muss ich was anderes machen. Da kommt mir sipcmd sehr entgegen.

    Ich bräuchte jedoch eine Anleitung zum installieren von sipcmd auf dem RP. Mit allgemeinen Anweisungen zum kompilieren komme ich noch nicht zurecht. Den Aufruf von sipcmd aus FHEM kriege ich dann wohl hin.

    Die Anleitung würde mir eine dicke Mauer abreissen!

    wing350

  • ich weiß jetzt nicht wie weit du bist, deshalb fange ich mal von vorn an.

    Sourcecode downloaden von

    Code
    wget https://github.com/tmakkonen/sipcmd/archive/master.zip

    Die Zip entpacken nach /home/BENUTZER

    Code
    unzip master.zip

    per Konsole die benötigten Pakete holen

    Code
    sudo apt-get update
    sudo apt-get upgrade -y
    sudo apt-get install libopal-dev libpt-dev -y

    wechseln in das Sipcmd-Verzeichnis

    Code
    cd ./sipcmd-master

    Zwischenschritt zum Verbessern der Klingelverzögerung und aktivieren der Aliasfunktion:

    Code
    nano ~/.nanorc
    Code
    set const

    einfügen-->abspeichern, nun zeigt nano dauerhaft die Zeilennummer an

    Code
    nano ./src/main.cpp


    in Zeile 268 den sleep von 2000ms ändern zu z.B. 500 (abhängig von der fritzbox, meine aktuelle 7490 nimmt das so, ältere können da lansamer sein)

    Code
    PThread::Sleep(500);


    zwischen Zeile 313 und 314 dies einfügen

    Code
    "a-alias:"


    ab Zeile 367 einfügen

    Code
    if (args.HasOption('a')) {
                 sipep->SetDefaultDisplayName(args.GetOptionString('a'));
            }


    abspeichern!

    Festlegen wie lange geklingelt wird

    Code
    nano ./src/state.h


    in Zeile 39

    Code
    #define DIAL_TIMEOUT                            5


    die Sekunden festlegen (Standard 10)

    Debugmeldung Deaktivieren

    Code
    sed -i 's/^DEBUG/#DEBUG/' /opt/sipcmd/Makefile

    und jetzt ....

    Code
    make

    fertig!


    Ich habe die "sipcmd"-Datei dann noch ins /bin Verzeichniss gelegt

    Code
    cp /home/BENUTZER/sipcmd-master/sipcmd /bin/sipcmd


    Nun kann ich ohne Pfadangabe den sipcmd-Befehl nutzen

    Jetzt noch ein beispiel wie ich den Befehl aktuell nutze

    Code
    sipcmd -P sip -u 621 -c **** -a Türklingel -w fritz.box -x "c**703"


    -P sip =das Protokoll was genutzt wird
    -u 621 =die Nummer die anrufen soll, muss auch so in der Fritzbox eingerichtet sein!
    -c **** =das Passwort zu der Nummer
    -a ____ =das was später als Anrufer im Display angezeigt werden soll
    -w fritz.box oder IP =selbsterklärend
    -x "____" =auszuführendes Programm
    c**703 oder cTELEFONNUMMER =Nummer die angerufen wird!

    P.s. ich habe mit linux, kompilieren usw. habe ich auch erst angefangen. http://wiki.ubuntuusers.de und "try and error" sind meine bewährten Methoden und wenn ich dann noch Fragen habe bin ich hier im Forum gut aufgehoben.

  • Vielen Dank für die schnelle Reaktion. Das war eine tolle Hilfe.

    Sipcmd funktioniert schon mal auf der Konsole. Dabei hatte ich zunächst das Problem, dass der Anrufg auf ein ISDN-Telefon an der FB gehen sollte, aber nicht ankam. Ein genereller Rundruf bricht nach ca. 1 s ab (wahrscheinlich weil der Raspi dann auch den Anruf mitkriegt). Ein Gruppenruf auf die DECT-Telefone funktioniert einwandfrei.

    Allerdings ist die Latenzzeit vom Aufruf bis zum Klingeln relativ lang. Ich denke, es liegt am debug-Modus. Dazu müsste man wohl mit auskommentiertem "Debug" im Makefile neu kompilieren, oder?

    Und fürs reine Türklingeln ohne Abheben kann man einfach das "w" und das "h" im aufruf weglassen. Irgendwo ist ein Dial-Timeout von ca. 10s eingebaut.

    Übrigens habe ich den Befehl ins /usr/bin- Verzeichnis kopiert. Das funktioniert.

    Hiermit experimentiere ich noch ein bisschen, bevor ich den Aufruf in FHEM einbinde.
    Dort empfange ich das Klingelsignal von der Haustür über einen FS20-Klingelsignalsender.

    Bis dann
    wing350

    Einmal editiert, zuletzt von wing350 (20. August 2014 um 13:54)


  • Hiermit experimentiere ich noch ein bisschen, bevor ich den Aufruf in FHEM einbinde.
    Dort empfange ich das Klingelsignal von der Haustür über einen FS20-Klingelsignalsender.

    Nun bin ich deutlich weiter:

    Nach langem Suchen habe ich jetzt eine Fritzbox Api gefunden, mit deren Hilfe man div. Befehle auf der Fritzbox vom RP aus ausführen kann (php muss installiert sein).

    Vorteil:
    - Die Latenzzeit vom Aufruf bis zum Klingeln ist deutlich kürzer. (Beim Klingeln von Paketdiensten nicht zu unterschätzen).
    - Ich kann die Dauer des Klingelns einstellen und der Raspi ist schneller wieder dienstbereit (für ein zweites Klingeln).
    - Rundruf '**9' klappt einwandfrei
    - Gruppenruf '**6xx#6xy#....' kann als Parameter übergeben werden.
    - Es funktioniert ebenso bei den neuen Firmwareversionen

    Nachteil:
    - Gruppenruf aus dem Telefonbuch '7xx' klappt nicht.
    - Auf dem Display erscheint "ISDN/DECT-Rundruf". Bei sipcmd erscheint ja der Name des eingtragenen Raspis)

    Ich habe jetzt die php scripts auch in FHEM als Systemaufrufe definiert. Das klappt hervorragend. Vielleicht ist es wegen der kurzen Latenzzeit beim Türklingeln auch was für dich.

    Gruß
    wing350

    Einmal editiert, zuletzt von wing350 (21. August 2014 um 16:47)


  • Ich habe die "sipcmd"-Datei dann noch ins /bin Verzeichniss gelegt weil ich gehofft habe das ich mir die Pfadangabe vor dem "sipcmd" sparen kann, hat leider nicht funktioniert.:no_sad:

    Wenn du mal

    Code
    echo $PATH


    bekommst du eine Liste der Pfade durch ":" getrennt ausgegeben die durchsucht werden um einen Befehl zu finden.
    Du kannst es für deinen User einzeln erreitern z.B. in der .bashrc:


    Code
    export PATH=$PATH:/foo/bin

    Oder System weit in /etc/profile oder bashrc

    --
    man ist das System-Anzeigeprogramm für die Handbuchseiten von Linux.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!