FB_CALLMONITOR: Eingehende und ausgehende Rufe unterscheiden usw.

Begonnen von Brockmann, 10 Juli 2014, 16:55:46

Vorheriges Thema - Nächstes Thema

Brockmann

Ich habe ein paar Fragezeichen beim FB_CALLMONITOR.
Und zwar habe ich mir eine Lösung gebaut, die bei einem eingehenden Anruf (event:ring) eine Meldung mit der Anruferdaten auf ein Android-Tablet ausgibt.
Nimmt jemand das Gespräch an (event: connect), wird die Meldung wieder ausgeblendet.
Allerdings tritt das event: connect auch auf, wenn man selbst eine Nummer wählt. Gibt es eine Möglichkeit, in dem Moment anhand der Readings zu unterscheiden, ob es ein aus- oder eingehendes Gespräch ist?

Ähnliches Problem: Verpasste Anrufe sollen per Pushover gemeldet werden. Klappt auch, aber es werden eben auch Anrufe gemeldet, die ich nicht entgegengenommen habe, weil ich in dem Moment schon ein Gespräch geführt habe. Auch da suche ich eine Möglichkeit, solche Situationen unterscheiden zu können.

Gibt es eventuell bei call_id eine Systematik, aus der man sich diese Information erschließen kann?

Markus Bloch

Hi Brockman,

für die Anrufrichtung könnte ich ein Reading "call_direction" anbieten, was  bei einem event "connect" mit ausgegeben wird. Das wird aber etwas dauern, da ich momentan keine Zeit habe.

Eine Möglichkeit verpasste Anrufe bei parallelen Anrufe zu erkennen geht mit der Call Id. Immer wenn sie größer 0 ist, läuft noch ein Parallelgespräch zu der Zeit, als der Anruf eintraf.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Brockmann

Hallo Markus,
Zitat von: Markus Bloch am 13 Juli 2014, 00:18:29
für die Anrufrichtung könnte ich ein Reading "call_direction" anbieten, was  bei einem event "connect" mit ausgegeben wird. Das wird aber etwas dauern, da ich momentan keine Zeit habe.

Wenn Du das irgendwann einbauen könntest, wäre das toll. Dann kann man das jederzeit zuverlässig feststellen. Siehe aber auch unten.

Zitat von: Markus Bloch am 13 Juli 2014, 00:18:29
Eine Möglichkeit verpasste Anrufe bei parallelen Anrufe zu erkennen geht mit der Call Id. Immer wenn sie größer 0 ist, läuft noch ein Parallelgespräch zu der Zeit, als der Anruf eintraf.

Bist Du Dir da sicher? Ich habe in letzter Zeit extra drauf geachtet und meine Arbeitshypothese ist:

  • ein eingehender (erster) Anruf bekommt immer die call_id 0
  • ein ausgehender (erster) Anruf bekommt immer die call_id 1
  • ein eingehender zweiter (paralleler) Anruf bekommt immer die call_id 2
  • einen ausgehenden zweiten (parallelen) Anruf hatte ich noch nicht, müsste ich mal bewusst ausprobieren
Ein paralleler Anruf ließe sich also an einer call_id > 1 erkennen. Und man könnte aus der call_id ableiten, ob ein Anruf ein- oder ausgehend ist (wobei ich ein separates Reading dafür immer noch die schönere Lösung fände).
So sieht es jedenfalls bei meiner FB 7270 aus. Möglicherweise gibt es da Unterschiede zwischen den Modellen?

fiedel

Hi Brockmann,

kennst du schon den Wikieintrag zum Callmonitor? Damit kannst du zwischen eingehend + angenommen,  eingehend + verpasst, ausgehend + angenommen, ausgehend + nicht erreicht, eingehend + auf AB gelandet unterscheiden. Damit wäre zumindest ein Teil deiner Ideen umsetzbar.

Gruß

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

Markus Bloch

Ich habe ein neues Reading "direction" eingebracht, was den Wert "incoming" und "outgoing" haben kann.

Generell werden nun alle bekannten Daten zu einem Gespräch bei jedem Event erneut getriggert, so das bei jedem Call-Event (call, ring, connect und disconnect) die entsprechenden Daten in den Readings bereitstehen (external_nummer, _name,...)

Dein anderes Problem mit dem besetzten ausgehenden Anruf kann ich dir keine Lösung anbieten, da man das nicht genau unterscheiden kann. Ein ausgehender Anruf, wo man auflegt, weil die andere Seite nicht rangeht kann man anhand der call_duration = 0 erkennen (genauso funktioniert die missed_call erkennung für eingehende Anrufe).

Das alles gibt es ab morgen via update.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

coolice

Zitat von: Brockmann am 15 Juli 2014, 08:22:43
Super, dass das nun doch so schnell ging. Vielen Dank!  :)
Könntest Du uns deine Lösung "Pushovernachricht mit Rufnummer wenn Gespräch nicht angenommen" zur Verfügung stellen?

coolice

wie könnte ich die Fehlermeldung aus dem Log bekämpfen?
[/2014.09.30 09:12:34 3: Anruf_abwesend return value: Unrecognized character \xC3; marked by <-- HERE after bout |Im B<-- HERE near column 58 at (eval 11900) line 1.code]

Puschel74

Hallo,

diese Meldung kommt gerne wenn sich durch copy&paste und das bearbeiten mit Notepad oder Word nicht sichtbare steuerzeichen einschleichen.
Notepad++ verwenden ist das einfachste.

Grüße

P.S.: Dazu sollte die Suche aber ein paar Treffer ausspucken  ;)
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

coolice

Gerne
Fritz_Box:missed_call:.*  {if ((Value("Mirco.homestatus") =~ Mirco.whereabout |Im Büro") && ("%EVTPART1" ne "unknown"))    {my $t= substr("%EVENT",13);    fhem("set Pushover msg 'FHEM' 'Anruf verpasst: $t' 'gs5' 0 'tugboat'")   } }

Brockmann

Zitat von: coolice am 30 September 2014, 10:40:10
Gerne
Fritz_Box:missed_call:.*  {if ((Value("Mirco.homestatus") =~ Mirco.whereabout |Im Büro") && ("%EVTPART1" ne "unknown"))    {my $t= substr("%EVENT",13);    fhem("set Pushover msg 'FHEM' 'Anruf verpasst: $t' 'gs5' 0 'tugboat'")   } }
Da fehlt jedenfalls vor Mirco.whereabout ein Anführungszeichen...
Und bitte auch den Hinweis bzgl. Editor beachten.

coolice

Da ich Mac User bin habe ich kein Notepad. Benutze aber so was ähnliches.
Die Anführungszeichen habe ich komplett übersehen. Trotzdem bekomme ich den Fehlen Anruf_abwesend return value: syntax error at (eval 12124) line 1, near ")    {"
syntax error at (eval 12124) line 1, near "} }"

Brockmann

Zitat von: coolice am 30 September 2014, 12:43:06
Da ich Mac User bin habe ich kein Notepad. Benutze aber so was ähnliches.
Die Anführungszeichen habe ich komplett übersehen. Trotzdem bekomme ich den Fehlen Anruf_abwesend return value: syntax error at (eval 12124) line 1, near ")    {"
syntax error at (eval 12124) line 1, near "} }"

Na, das ist doch schon mal ein anderer Fehler. Versuch es doch auch mal mit einem doppelten ;; so wie in meinem Code.

coolice

Hmm mit dem notify Fritz_Box:missed_call:.*  {if ((Value("Mirco.homestatus") =~ "Mirco.whereabout |Im Büro") && ("%EVTPART1" ne "unknown"))    {my $t= substr("%EVENT",13);;    fhem("set Pushover msg 'FHEM' 'Anruf verpasst: $t' 'gs5' 0 'tugboat'")   } } bekomme ich im Log zwar keine Fehlermeldung aber leider auch keine Pushnachricht.

Brockmann

Zitat von: coolice am 30 September 2014, 14:24:42
Hmm mit dem notify Fritz_Box:missed_call:.*  {if ((Value("Mirco.homestatus") =~ "Mirco.whereabout |Im Büro") && ("%EVTPART1" ne "unknown"))    {my $t= substr("%EVENT",13);;    fhem("set Pushover msg 'FHEM' 'Anruf verpasst: $t' 'gs5' 0 'tugboat'")   } } bekomme ich im Log zwar keine Fehlermeldung aber leider auch keine Pushnachricht.
Mir kommt der erste Teil der if-Bedingung komisch vor, aber das kann ich nicht wirklich beurteilen, ohne zu wissen, was es damit genau auf sich hat.
Also im Klartext sagst Du damit:
Wenn der Dummy(?) Mirco.homestatus den State "Mirco.whereabout " (mit Leerzeichen am Ende) oder den State "Im Büro" hat ...

Wenn im Log keinerlei Fehler zu finden ist, dann kann es eigentlich nur daran liegen, dass die if-Bedingungen nicht erfüllt sind. Die kannst Du ja weglassen (erst die eine, dann die andere), um das näher einzugrenzen.

Puschel74

Hallo,

ich bin mir nicht sicher ob das
Zitat"Mirco.whereabout |Im Büro"
so klappen wird.

mMn ist das ein Zeichenkettenvergleich der auf Mirco.whereabout |Im Büro matchen muss (was er aber vermutlich nie machen wird).

Ist aber nur geraten.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.