Neues Modul FB_SIP.pm, ein SIP-Client

Begonnen von wmeiners, 21 August 2015, 01:53:56

Vorheriges Thema - Nächstes Thema

plin

Hallo Wzut,

ich hab's - muss es aber noch ausprogrammieren. Der Ansatz ist einfach: ein sleep im SIP_lo_invite. Damit wird die Annahme des Invites verzögert.

Bedeutet:

  • neues Attribut sip_waittime
  • Auslesen des Attributes in der SIP_lo_invite
  • Warteschleife innerhalb der SIP_lo_invite für die Dauer der waittime
  • über ein weiteres Attribut könnte man die Warteschleife unterbrechen => Call wird angenommen

Damit wären wir in der Lage mein Doorline-Szenario komplett mit FHEM abzubilden (ohne Asterisk, siehe mein Posting zu dieser Umgehungslösung).

VG plin
FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB

plin

#121
Hallo Wzut,

die nächste Stufe ist im Prinzip fertig, ich habe aber wieder ein Aktualisierungsproblem. Das Attribut sip_action will ich für die Kommunikation zwischen FHEM und der Warteschleife nutzen. Initial steht das auf "off". Wenn ich "listenonly" starte setze ich es auf "wait". Im Log wird das so auch ausgewiesen, im Webinterface aber nicht, da steht immer noch "off". Setze ich das Attribut im Webinterface auf "fetch" sollte das die Schleife beenden und der Anruf wird angenommen. Tut er aber nicht. Im Webinterface sehe ich "fetch", im Log wird weiterhin "wait" ausgegeben.

"wait" via telnet setzen geht ja noch, aber wie lese ich das "fetch" aus?

VG plin
FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB

hdiessner

Hallo plin,

wie auch den Doorline / Fritzbox / Klingel Thread verfolge ich die Entwicklung hier sehr gespannt. Ich möchte zwei Szenarien umsetzen:
1. Türklingel gedrückt -> Bild von der Türkamera wird verschickt. Das funktioniert schon. Super!
2. Bei Homestatus "away" soll die Apothekerschaltung der Doorline aktiviert bzw. bei Rückkehr deaktiviert werden.

Bei 2. hab ich noch folgendes Phänomen: Beim Absetzen des "set mysip call **1,,#11 10" wird die Apothekerschaltung nicht aktiviert.
Zum Test habe ich denselben Befehl an mein FritzFon (set mysip call **610,,#11 15) geschickt und bin "von Hand" rangegangen
- der Anschluss wird korrekt angerufen
- die Zeichen #11 werden nicht als Tonwahl geschickt / es ist nichts zu hören (ein test.wav wird korrekt abgespielt)
- der Anruf wird nicht beendet: STATE ändert sich zwar auf "call done", aber im Fritzfon bleibt die Verbindung bestehen und die Anrufdauer zählt weiter.

Kann es sein, dass der Anruf tatsächlich vom SIP.pm Modul nicht beendet wird oder liegt es eher am Fritzfon? (Dagegen spricht, dass wenn man den Befehl an die Doorline schickt, diese danach für mehrere Minuten bei explizitem Anruf das Besetzt-Zeichen ertönt).
Ist es erwartetes Verhalten, dass die Tonwahl-Signale bei bestehender Sprechverbindung nicht geschickt werden? Wenn ja, könnte man diese ja als WAV Datei abspeichern und der Doorline bei Anruf nur "vorspielen".

Schon jetzt danke für Dein Engagement, das Modul wird gut! :-)

Viele Grüße
Herwig

hdiessner

Neue Erkenntnis: habe mit sox zwei wav Files erstellt apoein.wav und apoaus.wav. Wenn ich die Doorline unter **1 anrufe und das wav file abspiele, erfolgt tatsächlich die Umschaltung der Apothekerschaltung, das klappt!
Allerding ist dann die Doorline so lange blockiert, bis sie von selbst die Verbindung beendet, da das sip Modul bei mir nicht "auflegt".

Any ideas?

Gruß
Herwig

plin

Hallo Herwig,

wenn ich den Anruf der doorline abfange und und kurzes Audiofile abspiele legt der SIP-Client anschließend wieder auf ...

Vielleicht hat Wzut eine Idee?

VG plin
FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB

Wzut

#125
Zitat von: plin am 11 Februar 2017, 16:26:52
"wait" via telnet setzen geht ja noch, aber wie lese ich das "fetch" aus?
ist klar nun steht du vor dem Problem "wie kann Parent mit Child reden" (Child zu Parent haben wir via Telnet), lies doch mal
http://perldoc.perl.org/perlipc.html#Bidirectional-Communication-with-Another-Process
Das schöne bei FHEM ist doch das man meist das Rad nicht noch einmal erfinden muß und statt dessen besser bei anderen Modulentwickler hemmungslos "klaut".
Bidirectional-Communication-with-Another-Process hat z.B. Andre (justme1968) genau so in seinem 32_yowsup Modul umgesetzt.
Vllt sollte man jetzt gleich einen radikalen Schnitt machen und das SIP Modul auf die Art und Weise fit fürs reden in beide Richtungen machen.

Warum das SIP Modul nicht auflegt muss ich auch erst selbst testen, leider bin ich z.Z. etwas knapp an Zeit.

@hdiessner, das Modul sollte im ersten Schritt Tastenkommandos empfangen ( das klappt auch) aber selbst Wähltone  schicken auf die Idee bin ich gar nicht erst gekommen das das sinnvoll sein könnte (vermutlich weil ich dafür keine Anwendung habe), bin mir auch nicht sicher ob das NET::SIP überhaupt kann,
aber deine Idee mit den wav Dateien ist doch recht elegant  8) 

Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

plin

Hallo Wzut,

ja, an eine Neuauflage, wenn die grundsätzlichen Fragen geklärt sind, habe ich auch schon gedacht. Der Umweg über Telnet müsste doch eleganter zu lösen sein indem ich direkt im Parent-Prozess die Attribute setze bzw. auslese.

>Das schöne bei FHEM ist doch das man meist das Rad nicht noch einmal erfinden muß und statt dessen besser bei anderen Modulentwickler hemmungslos "klaut".
Da bin ich auch schon dran :-), habe aber bisher noch nicht das passende Beispiel gefunden.

Wenn die Prozesskette wait->ring->fetch funktioniert ist der nächste Schritt das abspielen eines kurzen Audiofiles. Damit wird der Anruf der Doorline dann abgebrochen.

VG plin

P.S. Aufgeben gilt nicht!
FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB

Laffer72

Hallo,
irgendwie stell ich mich grad recht an.
Ich krieg einfach keine Verbindung hin.
Fehlermeldung im Log:
registration failed: Failed with code 404 at ./FHEM/96_SIP.pm line 203.
registration failed: Failed with code 404 at ./FHEM/96_SIP.pm line 203.
2017.02.11 21:31:19 3: SIP_ListenStart : listen
registration failed: Failed with code 404 at ./FHEM/96_SIP.pm line 203.


List meines Sip-Device:
CFGFN
   DEF        fritz.box xxxx xxxxxxxx
   LPID       31301
   NAME       FHEM_Sip
   NR         576
   STATE      listen
   TYPE       SIP
   Readings:
     2017-02-11 21:31:10   caller          -
     2017-02-11 21:31:10   callstatus      initialized
     2017-02-11 21:31:19   state           listen
   Helper:
     Listen_pid:
       abortArg
       abortFn
       arg        FHEM_Sip
       bc_pid     58
       finishFn   SIP_ListenDone
       fn         SIP_ListenStart
       pid        31301
       timeout
Attributes:
   sip_action off
   sip_from   sip:620@fritz.box
   sip_ip     192.168.178.26
   sip_password test
   sip_port   5060
   sip_registar fritz.box
   sip_ringtime 10
   sip_user   620
   sip_waittime 10


FHEM läuft auf einem Raspi2, in der Fritzbox 7390 (6.80) habe ich ein IP/LAN Telefon angelegt.

Achja Net::SIP hat mit cpanm funktioniert habe Version 0.808 jetzt auf meinem Raspi.

Wäre echt super, wenn mir einer auf die Sprünge helfen könnte.

Lieben Dank schonmal

Reinhard
Raspberry Pi Rev.B, FB7390 (FHEM2FHEM), Sonos, Smarter Coffee
Osram Lightify:2m LED-Streifen, 5m-LED-Streifen, Gartenspot, Surface 28W, Classic E14,E27, Classic RGBW E27, PAR16 GU10, Plug
CUL868:FS20-ST, FS20-DI, FS20-FMS, FS20-ES1
HMUSB:HM-Sec-RHS,HM-Sec-MDIR2
Jeelink868:TX-29-IT, TFA30.315

plin

Hallo Reinhard,

mein SIP-Device sieht so aus:


define FritzSipClient SIP 192.168.3.1 625 testfhem
attr FritzSipClient room Test
attr FritzSipClient sip_action off
attr FritzSipClient sip_from sip:625@fritz.box
attr FritzSipClient sip_ip 192.168.3.34
attr FritzSipClient sip_password testfhem
attr FritzSipClient sip_port 5070
attr FritzSipClient sip_registar 192.168.3.1
attr FritzSipClient sip_ringtime 10
attr FritzSipClient sip_user 625
attr FritzSipClient sip_waittime 30
attr FritzSipClient verbose 5


Die Regristierung hat bei mir erst funktioniert nachdem alle Attribute gesetzt waren.

Klappt auf deiner FHEM-Instanz die Auflösung von fritz.box? Sonst würde ich die IP-Adresse eingeben.

Der SIP-Port könnte auch das Problem sein.

Hast du in der Fritzbox beim Telefoniegrät->Anmeldedaten die Durchwahl als Benutzername angegeben? Nach der Änderung zeigt dir die Fritzbox einen Code den du zur Bestätigung an einem registrierten Telefon eingeben musst.

Und die Fritzbox zeigt dir unter Syytem->Ereignisse auch noch ein paar Infos an.

Viel Erfolg, Peter
FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB

Laffer72

Hallo Peter,

danke für die Hilfe, jetzt hats geklappt.
Hab den Benutzer auf die Nebenstelle gesetzt und alle Attribute gesetzt.

Super vielen Dank und einen schönen Sonntag

Reinhard
Raspberry Pi Rev.B, FB7390 (FHEM2FHEM), Sonos, Smarter Coffee
Osram Lightify:2m LED-Streifen, 5m-LED-Streifen, Gartenspot, Surface 28W, Classic E14,E27, Classic RGBW E27, PAR16 GU10, Plug
CUL868:FS20-ST, FS20-DI, FS20-FMS, FS20-ES1
HMUSB:HM-Sec-RHS,HM-Sec-MDIR2
Jeelink868:TX-29-IT, TFA30.315

Wzut

Zitat von: plin am 12 Februar 2017, 08:52:10

define FritzSipClient SIP 192.168.3.1 625 testfhem
attr FritzSipClient sip_ip 192.168.3.34
attr FritzSipClient sip_password testfhem
attr FritzSipClient sip_port 5070
attr FritzSipClient sip_registar 192.168.3.1
attr FritzSipClient sip_user 625

a. beim define werden keine Parameter übergeben : define FritzSipClient SIP  <-- reicht völlig aus
b. attr FritzSipClient sip_ip 192.168.3.34 -> die IP unter der euer FHEM läuft, wird vom Modul versucht zu ermitteln wenn nicht angegeben, bitte unbedingt überprüfen und ggf. ändern !
c. attr FritzSipClient sip_password testfhem -> das Passwort wie es auf der Fritzbox für diesen Sip User vergeben wurde. Wichtig : Meine FB mag da keine kurzen Passwörter ala test !
d. attr FritzSipClient sip_port 5070 -> als default versucht es das Modul zuerst auf 5060 weicht aber ggf auf 5070 aus (bzw. immer +10) wenn der Port nicht verfügbar ist.
e.  attr FritzSipClient sip_registar 192.168.3.1 -> die IP der FritzBox (oder des Asterix Server) hier ist man immer auf der sicheren Seite wenn die IP statt eines Namens benutzt.
f. attr FritzSipClient sip_user 625 -> die Rufnummer die auf der FB für diesen SIP Client eingerichtet wurde (FB beginnt mit 620 für das erste SIP Phone)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Tobbi

Hallo,

kann mir jemand sagen, wie ich dem SIP-Modul die wav-Datei mitgeben kann?
Wird der Pfad absolut her also /opt/FHEM/.... angegeben oder ausgehend vom fhem Ordner?

Danke...

Gruß Tobi

plin

Hi Tobi,

meine Syntax sieht so aus

set FritzSipClient  call *09 5 /opt/fhem/www/images/meinaudiofile.wav

VG plin
FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB

Wzut

Zitat von: Tobbi am 12 Februar 2017, 21:10:04
Wird der Pfad absolut her also /opt/FHEM/.... angegeben oder ausgehend vom fhem Ordner?
Ganz wie du möchtest , das Modul muss sie finden und der FHEM User muß Leserechte haben
D.h. absolut sollte immer gehen -> /home/pi/test.wav oder relativ ab dem Punkt wo die fhem.pl liegt -> ./log/test.wav
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

plin

Hallo Wzut,

weniger ist mehr - Schönheit kommt später. Bevor ich das ganze Modul auf eine elegantere Kommunikationsvariante umstelle habe ich es erst mal mit telnet gelöst.

Es gibt ein neues Attribut sip_audiofile zur Aufnahme des abzuspielenden Audiofiles. Bei mir
sip_audiofile   /opt/fhem/www/images/MomentBitteNadine.wav

Der Ablauf ist nun folgender:

  • du rufst deine SIP-Client-Nummer an
  • der Status geht auf ringing
  • du setzt den Status deines SIP-Clients auf fetch
  • der SIP-Client nimmt den Anruf an und spielt das vordefinierte Audiofile ab
  • er geht wieder in den Status listening

Sehen wir es mal als Proof-of-concept an. So viel für heute.

VG plin
FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB