Zusatzklingel, Zweitklingel

  • Hallo zusammen,
    mein Testsystem läuft mit folgender Hardware: raspi + piface, Fritzbox 7580. Ich möchte nun eine Zusatzklingel anbringen, diese sollte im gleichen Rhythmus wie das Telefon klingeln. Dies müßte dann eigentlich die Fritzbox übernehmen, kann sie aber nicht? Derzeit habe ich es so gelöst:


    Code
    [EVENT_OnSipPhoneMakeCall]
    10 = out:Tuerklingel,1,0,3
    20 = sleep:3
    30 = out:Tuerklingel,1,0,3
    40 = sleep:3
    50 = out:Tuerklingel,1,0,3
    60 = sleep:3
    70 = out:Tuerklingel,1,0,3
    80 = sleep:3
    90 = out:Tuerklingel,1,0,3

    Bei dieser Methode wird das Relais auch nach dem Abheben des Telefons weiter betätigt, das Event wird bis zum Ende abgearbeitet. Die Zusatzklingel soll natürlich nach dem Abheben nicht weiter klingeln. Wie kann ich das realisieren?


    Gruß
    Bernd

  • Hallo Bernd,


    ich könnte mir vorstellen, dass es evtl. über ein externes Skript funktioniert.
    (Da ich mit den Begrifflichkeiten von Linux noch nicht allzu fit bin, bitte ich falsche Begriffe zu entschuldigen.)


    Wenn du dein Zusatzklingel-Signal von einem Dienst (wie DoorPi, mit Start / Stop schaltbar) schalten lassen würdest,
    könntest du mit dem [EVENT_OnSipPhoneMakeCall] das Skript starten, und mit [EVENT_OnCallStateConnect] oder [EVENT_AfterCallStateConnect] das Skript stoppen. (Link: Events)


    Nur ein Gedankengang meinerseits - weder getestet, noch ein derartiges Skript in meinem DoorPi vorhanden.
    Ich könnte mir aber vorstellen, dass es wohl gar nicht so aufwändig sein dürfte.

  • Habe ein kleines Script: zweitklingel.py


    doorpi.ini


    Code
    [EVENT_OnSipPhoneMakeCall]
    10 = os_execute:sudo python3 /home/pi/zweitklingel.py &                                                                                      
    
    
    [EVENT_OnCallStateConnect]
    10 = os_execute:sudo kill -s SIGINT $(ps aux | grep -v grep | grep zweitklingel.py | awk {'print $2'})


    Beim Betätigen des Klingeltasters wird das Script gestartet und läuft in einer Endlosschleife. Wenn der Hörer abgenommen wird klappt das Beenden nicht.
    sudo kill -s SIGINT $(ps aux | grep -v grep | grep zweitklingel.py | awk {'print $2'}) auf der Konsole eingegeben funktioniert.
    Hat noch jemand eine Idee?

  • Interessehalber: Wird das Event OnCallStateConnect gar nicht ausgeführt, oder funktioniert nur dein Code nicht?


    Falls OnCallStateConnect nicht geht würde ich es ggfs. nochmal mit dem Event OnCallStateChange versuchen.
    Das wird zwar mehrfach beim Anruf aufgerufen/getriggert (zumindest gemäß Tracelog), ggfs. könnte man hier bis zum x-ten Change nach Anrufstart warten und dann stoppen.

  • Dann würde ich mal versuchen mit Anführungszeichen ein wenig rumzuspielen.
    Vielleicht alles nach os_execute in "", oder vielleicht mittels einem echo "..." ausführen lassen.
    Wenn dein Skript manuell geht, liegt es wohl am Aufruf. Ich hatte sowas auch, mit den "" ging es dann irgendwie.
    (Bin nicht am Pi, habe daher meinen Code leider nicht griffbereit...)

  • Vielleicht hilft es bei manchen Befehlen den Pfad mit anzugeben?
    (Vielleicht, weil ich nicht weiß ob es damit zu tun hat)


    Der kill Befehl ist, bei meinem Raspi, ganz lustig:

    Code
    root@doorpi:~# kill -L
    -bash: kill: L: invalid signal specification
    
    
    root@doorpi:~# /bin/kill -L
     1 HUP      2 INT      3 QUIT     4 ILL      5 TRAP     6 ABRT     7 BUS
     8 FPE      9 KILL    10 USR1    11 SEGV    12 USR2    13 PIPE    14 ALRM
    15 TERM    16 STKFLT  17 CHLD    18 CONT    19 STOP    20 TSTP    21 TTIN
    22 TTOU    23 URG     24 XCPU    25 XFSZ    26 VTALRM  27 PROF    28 WINCH
    29 POLL    30 PWR     31 SYS


    Viele Grüße
    Olaf

  • So, nun klappt es:


    Was mich ein wenig wundert, dass bislang noch niemand nach der Ansteuerung einer Zweitklingel gefragt hat. Das könnte man sonst sicherlich in das Projekt integrieren.


    Code
    [DoorPi]
    base_path = /usr/local/etc/DoorPi
    eventlog = !BASEPATH!/conf/eventlog.db
    is_alive_led = blinking_led

    Mit is_alive_led wird ja eine LED des piFace angesteuert, das könnte man sicherlich auch mit einem Relais machen.

  • Würdest du deine zweitklingel.py auch noch posten? - Dann wäre die Funktion komplett.
    Ich wäre dir dankbar - und garantiert auch viele andere.


    EDIT: Manomann, vor lauter Dingen im Kopf ganz überlesen/vergessen, dass dein Script ja oben in einer Box ist.
    Ist wohl das alte geblieben schätz ich mal. Sorry für den Post.


    Ich bin schon am überlegen ob dein skript nicht bei mir auch nutzen könnte.
    Ich stelle mit da statt ner Klingel eine Beleuchtung die Flackert vor...