Hauptmenü

Modul 96_SIP

Begonnen von Wzut, 19 Februar 2017, 19:10:09

Vorheriges Thema - Nächstes Thema

Wzut

Danke fürs Feedback, schau ich mir nochmal genau an.
Stutzig macht mich allerdings diese Zeile :
2017.03.20 10:14:33 5: mySIP[7922], telnet : set mySIP dtmf_event 5#
der # dürfte nie als Event rausgehen sondern sollte immer wieder als Startzeichen erkannt werden.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Olly

Hallo,

wollte mich heute auch mal am SIP-Modul versuchen, doch leider schießt es mir FHEM schon beim define ab:

define fhemSIP SIP

FHEM muss ich dann manuell neu starten. Im Log sehe ich dann folgendes:

2017.03.21 20:41:59 1: PERL WARNING: Use of uninitialized value in subroutine entry at ./FHEM/96_SIP.pm line 109.
Bad arg length for Socket::inet_ntoa, length is 0, should be 4 at ./FHEM/96_SIP.pm line 109.

Net::SIP habe ich über cpan installiert, es ist die Version 0.808

Eine Idee, was hier schief läuft?

Gruß

      Olly
BananaPi 1GB;NetCSM 868MHz, miniCUL 433MHz, LaCrosseGateway, 2x SignalESP; FHEM 6.2

Wzut

#182
ja , bei dire klappt die Feststellung der eigenen IP nicht.
Bis ich da eine Umgehung gebaut habe kannst du dir damit behelfen die Zeile 109 von Hand zu ändern :
my $addr = "0.0.0.0"; bzw. statt 0.0.0.0 deine echte IP des FHEM Servers.

Ab morgen früh gibt es wieder ein Update :
FIX : das Modul legt wieder auf bei wfp

Neu
neues Attribut sip_call_audio_delay  , gültige Werte 0 - 3 in 0.25 (1/4) Sekunden Schritten.
Damit wird festgelegt wie lange bei einem Call mit dem abspielen des Audiofiles gewartet werden soll nachdem man den Anruf angenommen hat  (Vorschlag MadMax)

neue Funktion Call force
Ihr wollt sicherstellen da ein bestimmter ausgehender Anruf auch wirklich ankommt / angenommen wird ?
Wenn ein normaler Anruf nicht "zugestellt" werden kann (besetzt, nicht erreichbar, etc) ist er verloren. Die Lösung : solange wiederholen bis er erfolgreich angenommen wurde.
Dazu ist dem set call  am Ende ein & mitzugeben , Bsp :
set mySIP call 01601234567 30 !Rauchmelder Keller ausgelöst &
set mySIP call **611 20 ./tada.alaw &
WICHTIG : wählt die maxtime groß genug damit das Audiofile auch wirklich komplett abgespielt werden kann , bzw. hört s euch auch bis zum Ende an !
Immer wenn so ein Anruf endet mit quasi NOK wird ein temp at mit dem Namen at_forecall_<teile der Rufnummer> und der Zeitdauer von 1 Minute  erstellt.
Ist diese eine Minute abgelaufen wird der Anruf wiederholt, und zwar so lange bis er erfolgreich war. Wollt Ihr den Ablauf stoppen bitte einfach das at löschen,
es befindet sich im gleichen Raum wie euer SIP Device. Z.Z ist diese 1 Minute noch fix, wenn es bei euch sauber läuft werde ich dafür ein neues Attribut spendieren.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Olly

Hallo Wzut,

perfekt! Eintragen der Server-IP in der SIP.pm hat geholfen.
Werde dann mal schauen, dass ich weiter komme.

vielen Dank

Gruß

     Olly
BananaPi 1GB;NetCSM 868MHz, miniCUL 433MHz, LaCrosseGateway, 2x SignalESP; FHEM 6.2

Heuberg

Hallo Wzut,

ich möchte mich bei Dir an diese Stelle besonders bedanken!
Deine Entwicklungsarbeit ist genial! Du reagierst sehr schnell und stellst Parameter zur Verfügung, die für die individuelle Lösungssuche ideal einsetzbar sind. Man kommt mit dem Testen und einbauen der Parameter fast nicht nach ;D.
Ich setze dein Modul für die Feuerwehralarmierung ein. Falls mal der Feuerwehrmelder in der Wohnung nicht gehört wird, meldet der HM-MOD-EM-8 daß ein Einsatzalarm vorliegt und dann gehts rund in FHEM :-). Alarmierung unserer Jungs auf allen verfügbaren Kanälen.
Der Anruf über Dein Modul ist schneller als das FritzBox Modul.

Viele Grüße
Rainer

HM, MAX, MySensors, Fronius, Conbee II, ZigBee, VCONTROL, Modbus, RPi, AVM

Wzut

Zitat von: Heuberg am 21 März 2017, 23:19:31
Man kommt mit dem Testen und einbauen der Parameter fast nicht nach ;D.
BIG THX, aber das hat auch seinen Preis, ich/wir hängen mit der Doku in der command.ref furchtbar zurück :(
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

knodono

Hallo,
ein schönes Modul. Ich bin gerade dabei, meine Anbindung der Türsprechanlage damit zu realisieren. Dabei hätte ich einen Wunsch: Ich möchte gerne einen Anruf erkennen (ringing), ihn dann aber nicht annehmen, sondern abweisen. Das könnte man doch bestimmt einbauen. Oder habe ich was übersehen und das geht schon?

Gruß
Otto

JoWiemann

Zitat von: Wzut am 22 März 2017, 06:58:04
BIG THX, aber das hat auch seinen Preis, ich/wir hängen mit der Doku in der command.ref furchtbar zurück :(

Vor vielen, vielen Jahren hat mein Chef mal gesagt: Die beste Doku ist der Source und wer ihn lesen kann, versteht auch wirklich was passiert  :)

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Wzut

#188
Zitat von: Olly am 21 März 2017, 22:55:53
perfekt! Eintragen der Server-IP in der SIP.pm hat geholfen.
gut , bei dir geht FQDN Auflösung schief. Ich möchte mein Testsystem nicht unnötig verbiegen und kann daher das nicht nachstellen. Könntest du bitte mal bei dir folgendes versuchen :
1. ändere im Modul die Zeile
use Net::Domain qw( hostfqdn );
in
use Net::Domain qw( hostfqdn hostname);
dann weiter unten (ohne die böse Zeile 109 ) ab my $addr=

my $addr = "0.0.0.0";
unless (exists($attr{$name}{sip_ip}))
  {
   eval { $addr = inet_ntoa(scalar(gethostbyname(hostfqdn()))); };
   if ($@)
   {
    Log3 $name,2,"$name, please check your FQDN hostname -> $@";
    eval { $addr = inet_ntoa(scalar(gethostbyname(hostname()))); };
    Log3 $name,2,"$name, please check your hostname -> ".$@ if ($@);
   }
   $attr{$name}{sip_ip} = $addr;
  }

2. Das vorhande attribut sip_ip löschen
3. fhem save
4. shutdown restart
FHEM sollte starten ohne hängen zu bleiben. Bitte ins Log schauen die die ggf. vorhanden "please check your" hier posten.

Zitat von: knodono am 22 März 2017, 09:02:09
Oder habe ich was übersehen und das geht schon?
2x ja :) setze sip_filter auf irgend etwas was auf keine deiner Telefonnummern passt z.B. 0000
Das Modul wird nun nur noch abheben wenn in der Quell Rufnummer 0000 vorhanden ist.
D.h. es wird ihn nicht direkt abweisen sondern nur einfach nicht ran gehen, zusammen mit  sip_ringtime (kleiner Wert bsp 2) ist es aber recht schnell wieder bereit für den nächsten Anruf



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

knodono

Zitat von: Wzut am 22 März 2017, 09:54:30
2x ja :) setze sip_filter auf irgend etwas was auf keine deiner Telefonnummern passt z.B. 0000
Das Modul wird nun nur noch abheben wenn in der Quell Rufnummer 0000 vorhanden ist.
D.h. es wird ihn nicht direkt abweisen sondern nur einfach nicht ran gehen, zusammen mit  sip_ringtime (kleiner Wert bsp 2) ist es aber recht schnell wieder bereit für den nächsten Anruf
Danke, aber so ganz wie ich mir das vorstelle, funktioniert das noch nicht. Nur "caller" reagiert auf den Anruf, "caller_state" bleibt  aber unverändert. Außerdem ruft das anrufende Telefon munter weiter, der Ruf wird also nicht abgewiesen.

Gruß Otto

Olly



Zitat von: Wzut am 22 März 2017, 09:54:30
gut , bei dir geht FQDN Auflösung schief. Ich möchte mein Testsystem nicht unnötig verbiegen und kann daher das nicht nachstellen. Könntest du bitte mal bei dir folgendes versuchen :
1. ändere im Modul die Zeile
use Net::Domain qw( hostfqdn );
in
use Net::Domain qw( hostfqdn hostname);
dann weiter unten (ohne die böse Zeile 109 ) ab my $addr=

my $addr = "0.0.0.0";
unless (exists($attr{$name}{sip_ip}))
  {
   eval { $addr = inet_ntoa(scalar(gethostbyname(hostfqdn()))); };
   if ($@)
   {
    Log3 $name,2,"$name, please check your FQDN hostname -> $@";
    eval { $addr = inet_ntoa(scalar(gethostbyname(hostname()))); };
    Log3 $name,2,"$name, please check your hostname -> ".$@ if ($@);
   }
   $attr{$name}{sip_ip} = $addr;
  }

2. Das vorhande attribut sip_ip löschen
3. fhem save
4. shutdown restart
FHEM sollte starten ohne hängen zu bleiben. Bitte ins Log schauen die die ggf. vorhanden "please check your" hier posten.

Ok, das kann ich mal testen.
Kann es ggf. auch einfach daran liegen, dass ich gar keinen FQDN hinterlegt habe? Bin mir nicht ganz sicher, aber habe ggf. nur den Hostname eingetragen.
Ich teste das heute Abend mal....

Gruß

     Olly
BananaPi 1GB;NetCSM 868MHz, miniCUL 433MHz, LaCrosseGateway, 2x SignalESP; FHEM 6.2

Wzut

#191
Zitat von: knodono am 22 März 2017, 10:20:32
Danke, aber so ganz wie ich mir das vorstelle, funktioniert das noch nicht.
Nun gut, ich habe halt Probleme mir deine Config direkt anzuschauen ..... daher könnten wir den Posting Ping-Pong vermutlich erheblich verkürzen wenn du a. mal ein List von deinem SIP Device postest und b. mir exakt erklärst wie der Ablauf denn sein sollte. Entscheidend ist auf jeden Fall schon mal in welchem listen Modus du arbeitest, ich würde wfp empfehlen und eine sehr kleine sip_waittime BTW : Wiki https://wiki.fhem.de/wiki/SIP-Client hast du gelesen ?


Zitat von: Olly am 22 März 2017, 13:27:40
Bin mir nicht ganz sicher, aber habe ggf. nur den Hostname eingetragen.
schön, das sollte dann mit der Änderung auch gehen. Letztendlich ist nur wichtig das beim ersten Start ohne gesetztes sip_ip Attribut eine relative plausible IP Adresse heraus kommt. Nachdem die config einmal mit dem Attribut gespeichert wurde wird sie eh nicht mehr durchlaufen.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

knodono

ZitatNun gut, ich habe halt Probleme mir deine Config direkt anzuschauen ..... daher könnten wir den Posting Ping-Pong vermutlich erheblich verkürzen wenn du a. mal ein List von deinem SIP Device postest und b. mir exakt erklärst wie der Ablauf denn sein sollte.

Danke für Deine Mühe. Hier das Listing:

Internals:
   LPID       32074
   NAME       sip1
   NOTIFYDEV  babbel
   NR         468
   NTFY_ORDER 50-sip1
   STATE      listen_wfp
   TYPE       SIP
   VERSION    V1.46 / 21.03.17
   Readings:
     2017-03-22 09:49:07   call            done
     2017-03-22 09:49:07   call_state      ok
     2017-03-22 15:35:40   caller          Mobilteil 4 sip:**613@fritz.box
     2017-03-22 15:32:58   caller_state    hangup
     2017-03-22 15:31:13   last_error      ListenRegister: Failed with code 401
     2017-03-22 15:35:05   state           listen_wfp
   Helper:
     Listen_pid:
       abortArg
       abortFn
       arg        sip1
       bc_pid     1
       finishFn   SIP_ListenDone
       fn         SIP_ListenStart
       pid        32074
       timeout
Attributes:
   T2S_Device babbel
   room       Haustuer
   sip_dtmf_loop once
   sip_dtmf_send audio
   sip_dtmf_size 2
   sip_filter 0000
   sip_from   sip:620@fritz.box
   sip_ip     10.0.0.52
   sip_listen wfp
   sip_port   5060
   sip_registrar fritz.box
   sip_ringtime 2
   sip_user   620


Das Wiki habe ich schon gelesen, was nicht heißt, dass ich nichts übersehen haben könnte.

Was ich erreichen will: Ich möchte durch einen Anruf eine Aktion in fhem auslösen, z.B. über ein DOIF. Dabei soll der Anruf nur erkannt und dann abgewiesen werden. Das hat z.B. den Vorteil, dass bei einem Anruf von außen (Handy) dabei keine Kosten anfallen. Im Moment habe ich eine solche Anwendung (als Türöffner über Handy-Anruf) mit Asterisk realisiert, fände es aber schön, wenn der Asterisk-Server, der nur dafür läuft, wegfallen könnte.

Gruß Otto

plin

Versuch mal bei sip_registrar fritz.box die IP-Adresse der FritzBox einzutragen und den sip_port 5070 zu nehmen.
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

#194
Zitat von: knodono am 22 März 2017, 15:48:24
Dabei soll der Anruf nur erkannt und dann abgewiesen werden. Das hat z.B. den Vorteil, dass bei einem Anruf von außen (Handy) dabei keine Kosten anfallen. Im Moment habe ich eine solche Anwendung (als Türöffner über Handy-Anruf)
Also Türöffner nur mit Anruf auf die Zielrufnr , das lasse ich jetzt mal unkommentiert. Mit Rufnr Prüfung + DTMF Code wäre mir zwar auch noch zu unsicher, aber jeder wie er mag.
Wie ich schon schrieb abweisen geht nicht , einzige Alternative : gar nicht abheben.
listen auf wfp ist schon mal gut, da bekommst du die passenden Events, allerdings must du sip_filter dann auch ganz löschen oder ihm einen Wert geben der zu deiner Quelle passt, sonst gibt es keine Events mit caller_state.
Setze die sip_waittime auf einen großen Wert , Bsp 60 oder 120 dann hast du genug Zeit rechtzeitig mit dem Handy aufzulegen ohne Kosten zu verursachen.
Nachteil ist halt das du für die nächste Aktion wieder warten mußt bis diese Zeit komplett abgelaufen ist. So schaut das z.B. dann bei mir im Event Monitor aus :
2017-03-22 17:19:37 SIP mySIP caller: Büro sip:**611@fritz.box
2017-03-22 17:19:37 SIP mySIP caller_state: ringing
2017-03-22 17:21:38 SIP mySIP caller: none
2017-03-22 17:21:38 SIP mySIP caller_state: waiting
2017-03-22 17:21:38 SIP mySIP caller: none
2017-03-22 17:21:38 SIP mySIP caller_state: hangup

so könntest du dein notify auf zb mySIP:caller_state:ringing triggern um die Aktion auszulösen
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher