Neues Modul FB_SIP.pm, ein SIP-Client

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

Vorheriges Thema - Nächstes Thema

sig10680

Guten Morgen,

habe schon viel mit dem neuen Modul gespielt und es funktioniert bei mir auch. Nur leider habe ich ein Problem mit einen DOIF oder Notify was auf #23 oder so reagieren soll. Es wird auch ausgeführt wenn ich eine andere DTMF Zahl wähle?

([fritzbox7390:internal_number] == "123456789" and [SipCall2:dtmf] == "23") (set HM_Taster_Motor_Hoftor on-for-timer 1)

Vielleicht hat einer von euch eine Idee was bei mir in dem DOIF falsch läuft!?

Danke Vorab
Sig10680

plin

Hi,

ich habe mir gerade das Modul via Link auf Seite 6 des Threads runter geladen. Ist das

# 96_SIP.pm
# created: 2015-08-19 0345
# update:        2015-08-20 0105

das aktuellste Modul? Das erzeugt bei mir die Fehlermeldung

Bad address family for Socket::inet_pton, got -1, should be either AF_INET or AF_INET6 at /usr/lib/perl5/site_perl/5.18.2/Net/SIP/Util.pm line 743.

im Log.

VG Peter

P.S. Etwas Doku dazu wäre schön (so am Ende des Moduls) :-)
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

#107
Hi,

ich habe die Attribute mal alle von den voreingestellten Werten auf mein eigenes Umfeld abgeändert (z.B. reale IP-Adresse statt fritz.box) und nun ist der IPv6-Fehler weg.
Ich kann den Listen-Prozess starten und kriege beim Anruf des SIP-Clients ein Echo zurück. Eigentlich will ich aber nur wissen, dass es klingelt.

Was habe ich vor? Ich habe eine Türsprechanlage am FON1-Port hängen und die zugehörige Doorline für Direktannahme programmiert. Klingelt nun jemand an der Tür, klingeln die definierten Telefone 30 Sekunden lang, auch wenn man direkt zur Tür geht. Das nervt. Wenn ich aber wüsste, dass jemand die Türklingel betätigt hat und die Haustür (via Türkontakt signalisiert) geöffnet wird, könnte ich mittels *09 den Anruf der Türsprechanlage entgegennehmen und nach 1 Sekunde wieder auflegen.

Hat schon jemand das Modul für sich so angepasst, dass beim Klingeln der Status auf "ring"  gesetzt wird?

Ciao, 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

plin

Hi,

mit folgenden Anpassungen (Zeile 432ff. in 96_SIP.pm) komme ich meinem Ziel näher

$ua->listen(cb_invite => \&SIP_invite, recv_bye => \&SIP_hungup, cb_dtmf => \&SIP_dtmf); # echo everything back

$ua->loop;
$ua->cleanup;
return $name."|end";
}

sub SIP_invite{
Log3 "sip", 1, "sip invite";
}

sub SIP_hungup{
Log3 "sip", 1, "sip hung up";
}


In SIP_invite könnte ich den Status auf "ring" setzen und in SIP_hungup wieder auf "listen", aber der SIP-Client nimmt den Anruf an, obwohl ich "init_media => $ua->rtp( 'recv_echo' )" entfernt habe.

Wie kriege ich das unterbunden?

Ciao, 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

plin

Ich habe https://github.com/noxxi/p5-net-sip gefunden, mal schauen wo mich die Beispiele hinführen ...
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

spooy99

Hallo,

danke für das Modul (aus Post #79). Ich kann damit Rufe initieren - funktioniert! Im Log bekomme ich jedoch noch folgende Meldungen:


2017.02.01 21:58:23.647 1: PERL WARNING: Use of uninitialized value in string ne at ./FHEM/96_SIP.pm line 448.
2017.02.01 21:59:23.288 1: Timeout for SIP_ListenStart reached, terminated process 5747


Wird es möglich sein ein Notify für einen eingehenden, internen Ruf zu erhalten? Ich habe eine Auerswald TFS Universal als Türklingel, welche einen Anruf auf die Fritzbox und dort als Türstation mit Live-Bild der Kamera auf die internen Telefone sendet und klingeln lässt. Ich würde Fhem gerne als interne Nebenstelle mit in die Rufgruppe aufnehmen und entsprechend darauf reagieren.

Danke!
Spooy99
FHEM auf Debian unter Hyper-V, HMLAN und KNX
Sonst: Fritzbox, Yamaha RX-V2065, Fröling S4 per MQTT, Enigma, Robonect, Hue, LG

plin

@spooy99

ich habe versucht im Modul 96_SIP.pm die "listen"-Funktion zu modifizieren und ein Reading in FHEM zu setzen - leider erfolglos. Ich habe darauf hin den etwas komplizierteren aber funktionsfähigen Weg via Asterisk gewählt und hier https://forum.fhem.de/index.php/topic,66001.0.html beschrieben.
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

spooy99

Hallo plin,

Danke für den Hinweis. Hatte das schon gelesen, aber gehofft mir den 'Umweg' mit Asterisk ersparen zu können ;-). Und einen Ruf nach extern und wieder zurück um über den FB_Callmonitor zu reagieren gefällt mir auch nicht wirklich...  sipcmd gibts ja auch noch - aber auf einen Ruf reagieren habe ich da auch noch nicht gefunden.

Evtl. muss ich mich doch mit Asterisk anfreunden :-(  obwohl es mit dem Modul sehr elegant wäre (wenn es diese Option geben sollte)

Danke!
FHEM auf Debian unter Hyper-V, HMLAN und KNX
Sonst: Fritzbox, Yamaha RX-V2065, Fröling S4 per MQTT, Enigma, Robonect, Hue, LG

plin

Ich hatte im Modul 96_SIP.pm versuchsweise eine neue Funktion "listenonly" kreiert und versucht mit folgendem Coding


...
  if  ($my_listentype eq "listen")
  {
     $hash->{dtmf} = 0;
     $ua->listen(init_media => $ua->rtp( 'recv_echo' ), cb_dtmf => \&SIP_dtmf); # echo everything back

     $ua->loop;
  } else {
     Log3 "listenonly", 3, $my_listentype;
     Log3 "listenonly", 3, $hash->{DEF};
$hash->{STATE}              = "Initializing";
        readingsSingleUpdate($hash, "state","listenonly-ready",1);
     $ua->listen( cb_established => sub {
       (my $status) = @_;
       die "failed" if $status ne 'OK';
       return 1;
     }, cb_invite => \&SIP_ListenStart_invite($hash), recv_bye => \&SIP_ListenStart_recv_bye($hash));
     $ua->loop;
  }

$ua->cleanup;
return $name."|end";
}

sub SIP_ListenStart_invite($){
my ($hash) = @_;
#  my $hash         = $defs{$my_name};
     Log3 "listenonly", 3, "invite";
     Log3 "listenonly", 3, $hash->{DEF};
$hash->{STATE}              = "invite";
        readingsSingleUpdate($hash, "state","invite",1);
     $ua->loop;
}
...


statt der Echo-Schleife beim "Invite" die Sub SIP_ListenStart_invite aufzurufen.  Obwohl das Statement Log3 "listenonly", 3, $hash->{DEF}; das korrekte Device logged, erzeugt  readingsSingleUpdate($hash, "state","invite",1); kein Reading-Update sondern läuft einfach ins leere.

Wenn man das zum Laufen bringen würde könnte man auf Asterisk verzichten und statt dessen das Reading des SIP-Devices als Trigger verwenden.
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: plin am 02 Februar 2017, 21:53:00
Obwohl das Statement Log3 "listenonly", 3, $hash->{DEF}; das korrekte Device logged, erzeugt  readingsSingleUpdate($hash, "state","invite",1); kein Reading-Update sondern läuft einfach ins leere.
und ich kann dir sagen warum :
Du hast deinen Zusatz in der sub  SIP_ListenStart gesteckt. Diese Sub wird aber ständig im Child Prozess durchlaufen. Parent und Child Prozess können zwar problemlos zeitgleich die gleiche Log Datei befüllen, aber ein ReadingUpdate im Child Prozess aktualisiert eben nur die Readings des Child und nicht die des Parent (den du unter Beobachtung hast) !
Lösung : schau dir mal an wie ich via Telnet die DTMF Informationen vom Child zum Parent übermittle. Wenn du diesen Weg gehst hast du dein Reading im Parent :)   
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

frank

hi,

96_SIP.pm lässt sich auch hervorragend als "virtuelle sip-türklingel" nutzen, um von der fritzbox ein livebild auf die fritzfon's zu senden. wenn das sip device bei einer in der fritzbox definierten ip-türsprecheinrichtung registriert ist, wird ein livebild angezeigt mit:
set <my_sip> call <Rufnummer_der_Klingeltaste> <anzeigedauer>

ich nutze als livebild zb das jpg file, dass durch das rss modul erzeugt wird, um ein paar fhemdaten anzuzeigen.

FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Wzut

Uii , auch ne gute Idee ... wenn plin jetzt noch seinen listen Teil zum laufen bekommt könnte man doch darüber nachdenken das Modul amtlich zu machen :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

plin

Hallo Wzut,

ja, ich kann mir vorstellen, dass Dein Ansatz für das Setzen des Readings auch beim invite funktioniert, habe ich aber noch nicht getestet, denn

>Uii , auch ne gute Idee ... wenn plin jetzt noch seinen listen Teil zum laufen bekommt könnte man doch darüber nachdenken das Modul amtlich zu machen :)
mein kleines Problem: Was soll's denn werden? Was ich brauche wäre folgender Ablauf:


  • der SIP-CLient ist in die Rufgruppe der Türklingel eingetragen
  • in FHEM starte ich den Lauschprozess (listenonly)
  • jemand betätigt die Türklingel, der SIP-CLient erhält ein "invite"
  • der SIP-Client setzt ein Reading (oder den Status) "ring" und lauscht weiter
  • entweder nimmt jemand ein anderes Telefon ab, um zu hören wer vor der Tür steht
  • oder die Haustür wird geöffnet
  • in FHEM führt die Kombination "ring" in Verbindung mit Haustür closed->open dazu, dass der SIP-Client das Telefonat annimmt und sofort wieder beendet

Da gibt's zwei Probleme:

  • Wie kann ich vermeiden, dass der Anruf vom SIP-Client angenommen wird (bei meinen Tests ging er glaube ich immer in den Echo-Mode, muss ich mir aber noch mal anschauen)
  • Wie kriege ich den SIP-Client (von FHEM aus gesteuert) dazu den Anruf anzunehmen? Ich müsste mich in die Schleife des Client-Prozesses einklinken, um diesem den Auftrag "annehmen" zu erteilen.

Du hast mehr Erfahrung mit dem perl SIP-Modul. hast du ein paar Tipps?

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

Hallo Wzut,

wir sind fast am Ziel. Die angehängte Version des 96_SIP.pm kennt jetzt den set-Command listenonly.

Der SIP-Client lauscht auf eingehende Anrufe und setzt ein Reading callstatus auf 'ring' oder 'hungup'. Ist also ein guter Start.

Problem: Der SIP-Client nimmt das Gespräch an und geht in den Echo-Modus. Würde beim Einsatz für die Türklingel bedeuten: Ich kann nicht mehr ans Telefon gehen und nachfragen wer vor der Tür steht, weil mir den SIP-Client den Anruf weggeschnappt hat.

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

OK, ich schaue mir das mal an. Wie ich bereits geschrieben habe stehe ich mit der Doku vom SIP Packet etwas auf Kriegsfuss, aber vllt gibt es ja einen Weg das Ding ersteinemal von der direkten Gesprächsannahme abzuhalten ( Anzahl Klingeltöne ? , Anrufer Nr ? )
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher