Ankündigung

Einklappen
Keine Ankündigung bisher.

AVM Plugin

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Marcov
    antwortet
    Zitat von psilo Beitrag anzeigen
    @Marcov: bei mir geht aktuell ein

    Code:
    [COLOR=#94558d]self[/COLOR].set_call_origin([COLOR=#008080][B]"**610"[/B][/COLOR])
    [COLOR=#94558d]self[/COLOR].start_call([COLOR=#008080][B]'**620'[/B][/COLOR])
    Die App am Handy klingelt - bin nur nicht sicher, ob das exakt das Verhalten von VOIP ist?!
    okay, wenn ich mal ne Stunde Zeit habe, werde ich es testen und hier berichten!

    Einen Kommentar schreiben:


  • psilo
    antwortet
    Da zeigt sich das Potential von OpenSource.
    Ich hoffe es zeigt sich auch in weiteren Performanceoptimierungen und Fehlerbehebungen in meinem Plugin durch andere
    Zuletzt geändert von cmalo; 05.04.2016, 16:22.

    Einen Kommentar schreiben:


  • cmalo
    antwortet
    Ja das stimmt. In dem Fall, in dem beide annehmen ist es nicht eindeutig.


    Das alte Plugin war da deutlich grobgranularer und hat nichtmal Zustandsübergänge berücksichtigt.
    Da zeigt sich das Potential von OpenSource.
    Zuletzt geändert von cmalo; 05.04.2016, 16:21.

    Einen Kommentar schreiben:


  • psilo
    antwortet
    @cmalo: ja nur nimmt der AB den Anruf entgegen und der CallMonitor Service quittiert das mit einem CONNECTED. Normal hätte ich "verpassten Anruf" mit RING und DISCONNECTED ermittelt.. Ich halte immer das letzte Event. Wenn jetzt der AB drangeht, kriege ich den zwar über die Nebenstellen-ID heraus (40-44), ABER wenn ich wärend der Anrufer auf den AB spricht noch abhebe, kriege ich genau das nicht mehr mit. Daher ist aus meiner Sicht nicht wirklich 100%ig ermittelbar, ob ein Anruf "wirklich" verpasst wurde. Wie im Widget zu sehen ist es sinnvoller, den letzten eingehenden und ausgehenden anzuzeigen. Man selber kann ja dann "interpolieren" ob der letzte eingehende angenommen wurde oder nicht..

    Das alte Plugin war da deutlich grobgranularer und hat nichtmal Zustandsübergänge berücksichtigt. Im übrigen checke ich auch explizit auf die CallId. Bitte nicht erschrecken - und noch keine Gewähr auf Fehler. In ersten Tests läuft es bei mir aber gut durch ;-):

    Code:
    def _trigger(self, call_from, call_to, time, callid, branch):
            """
            Triggers the event: sets item values and looks up numbers in the phone book.
            """
            event = self._event[callid]
    
            if event == 'RING':
                self._call_incoming_cid = callid # set call id for incoming call
                self._duration_item['call_duration_incoming'](0) # reset duration for incoming calls
                for item in self._items_incoming:  # update items for incoming calls
                    if item.conf['avm_data_type'] in ['is_call_incoming']:
                        item(1)
                    if item.conf['avm_data_type'] in ['is_call_outgoing']:
                        item(0)
                    elif item.conf['avm_data_type'] in ['last_caller_incoming']:
                        item(self._callback(call_from))
                    elif item.conf['avm_data_type'] in ['last_call_date_incoming']:
                        item(time)
                    elif item.conf['avm_data_type'] in ['call_event_incoming']:
                        item(event.lower())
                for item in self._items: # update generic items
                    if item.conf['avm_data_type'] in ['call_event']:
                        item(event.lower())
                    elif item.conf['avm_data_type'] in ['call_direction']:
                        item("incoming")
            elif event == 'CALL':
                self._call_outgoing_cid = callid # set call id for outgoing call
                self._duration_item['call_duration_outgoing'](0) # reset duration for outgoing calls
                for item in self._items_outgoing:  # update items for outgoing calls
                    if item.conf['avm_data_type'] in ['is_call_incoming']:
                        item(0)
                    elif item.conf['avm_data_type'] in ['is_call_outgoing']:
                        item(1)
                    elif item.conf['avm_data_type'] in ['last_caller_outgoing']:
                        item(self._callback(call_to))
                    elif item.conf['avm_data_type'] in ['last_call_date_outgoing']:
                        item(time)
                    elif item.conf['avm_data_type'] in ['call_event_outgoing']:
                        item(event.lower())
                for item in self._items:  # update generic items
                    if item.conf['avm_data_type'] in ['call_event']:
                        item(event.lower())
                    elif item.conf['avm_data_type'] in ['call_direction']:
                        item("outgoing")
            else: #connect und disconnect
                if event == 'CONNECT':
                    # start counter thread
                    if self._old_event[callid] == "CALL":  # start counter thread only if duration item set and call is outgoing
                        if self._duration_item['call_duration_outgoing'] != None:
                            self._start_counter(time, 'outgoing', callid)
                    elif self._old_event[callid] == "RING":  # start counter thread only if duration item set and call is incoming
                        if self._duration_item['call_duration_incoming'] != None:
                            self._start_counter(time, 'incoming', callid)
                    # set item attributes
                    if self._old_event[callid] == "CALL":
                        for item in self._items_outgoing:
                            if item.conf['avm_data_type'] in ['call_event_outgoing']:
                                item(event.lower())
                    elif self._old_event[callid] == "RING":
                        for item in self._items_incoming:
                            if item.conf['avm_data_type'] in ['call_event_incoming']:
                                item(event.lower())
                elif event == 'DISCONNECT':
                    # stop counter threads
                    if callid == self._call_incoming_cid:
                        for item in self._items_incoming:
                            if item.conf['avm_data_type'] in ['call_event_incoming']:
                                item(event.lower())
                            elif item.conf['avm_data_type'] in['is_call_incoming']:
                                item(0)
                        if self._duration_item['call_duration_incoming'] != None:
                            self._stop_counter('incoming')
                            self._call_incoming_cid = None
                    elif callid == self._call_outgoing_cid:
                        for item in self._items_outgoing:
                            if item.conf['avm_data_type'] in ['call_event_outgoing']:
                                item(event.lower())
                            elif item.conf['avm_data_type'] in ['is_call_outgoing']:
                                item(0)
                        if self._duration_item['call_duration_outgoing'] != None:
                            self._stop_counter('outgoing')
                            self._call_outgoing_cid = None
    
                    # set item attributes
                    if self._old_event[callid] == "CALL":
                        for item in self._items_outgoing:
                            if item.conf['avm_data_type'] in ['call_event_outgoing']:
                                item(event.lower())
                    elif self._old_event[callid] == "RING":
                        for item in self._items_incoming:
                            if item.conf['avm_data_type'] in ['call_event_incoming']:
                                item(event.lower())
                for item in self._items:
                    if item.conf['avm_data_type'] in ['call_event']:
                        item(event.lower())

    Einen Kommentar schreiben:


  • cmalo
    antwortet
    Zitat von psilo Beitrag anzeigen
    Noch jemand eine Idee wie ich einen verpassten Anruf ermitteln könnte?
    Wie meinst du das? Hab ich noch nicht verstanden.
    Du bekommst aus der Fritzbox den Status des Anrufs:
    1 = ankommende Verbindung, die entgegengenommen wurde
    2 = ankommende Verbindung, die niemand entgegengenommen hat (sog. verpasster Anruf)
    3 = abgehende Verbindung

    Laut tr064, von TAM den Eintrag wenn der Anrufbeantworter zugeschlagen hat, auch die URL zum download des Voice Files, Zeitpunkt etc.
    Oder meinst du etwas anderes?
    Ich stecke da jetzt aber nicht so tief in der tr064 wie du nach der ganzen Arbeit am Plugin.

    Übrigens sehr gute Arbeit! Danke dafür.
    Freue mich schon drauf das neue Plugin anzubinden.

    Einen Kommentar schreiben:


  • stromie
    antwortet
    sehr schöne Arbeit

    Grüße Ronny

    Einen Kommentar schreiben:


  • psilo
    antwortet
    Anbei mal ein kleiner Screenshot mit modifiziertem Widget aus dem Widget-Repo. Je nach Event verändert sich natürlich auch das Icon, so wie im Standardwidget auch:

    Code:
    {{ basic.symbol(id~'ring', gad_event, '', icon1~'phone_ring.png', 'ring') }}
    {{ basic.symbol(id~'call', gad_event, '', icon1~'phone_call_out.png', 'call') }}
    {{ basic.symbol(id~'connect', gad_event, '', icon1~'phone_call.png', 'connect') }}
    {{ basic.symbol(id~'disconnect', gad_event, '', 'icons/ws/phone_call_end.svg', 'disconnect') }}

    widget.png

    Einen Kommentar schreiben:


  • psilo
    antwortet
    @Marcov: bei mir geht aktuell ein

    Code:
    [COLOR=#94558d]self[/COLOR].set_call_origin([COLOR=#008080][B]"**610"[/B][/COLOR])
    [COLOR=#94558d]self[/COLOR].start_call([COLOR=#008080][B]'**620'[/B][/COLOR])
    Die App am Handy klingelt - bin nur nicht sicher, ob das exakt das Verhalten von VOIP ist?!

    Einen Kommentar schreiben:


  • psilo
    antwortet
    Hmmm mein FritzFon hat zwar etwas mit AB gesagt, ich habe aber nicht gerafft, wie ich abheben kann, war aber ein interner Testanruf.. Dann analysiere ich mal via Handy auf Festnetz weiter, ob es was bringt, den "last missed call" zu bestimmen oder ob einfach der letzte eingehende (mit "duration" Angabe) nicht ausreicht..

    Ok Analyseergebnis.. AB hebt mit Angabe Nebenstelle 40 ab (CONNECT). Wenn ich dann vom Telefon abhebe gibt es kein weiteres Event. Heißt: es lässt sich nicht eindeutig bestimmen, ob ein Anruf wirklich "verpasst" wurde.. Dementsprechend lasse ich den weiterentwickelten CM jetzt mal auf "letzter / laufender eingehender" und "letzter / laufender ausgehender" Anruf inkl. "live" Update der laufenden Dauer.
    Zuletzt geändert von psilo; 05.04.2016, 11:24.

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi,

    ich kann Dir bei Deiner eigentlichen Frage nicht helfen, aber bei der Nebenfrage: Mit den Fritz-Telefonen kann man, solange der AB noch läuft, das Gespräch übernehmen. Die blenden einen passenden Menüpunkt ein. Also: Ja, mann kann abheben. Wie die Eventreihenfolge hierbei aussieht weiß ich leider nicht.

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • psilo
    antwortet
    Noch jemand eine Idee wie ich einen verpassten Anruf ermitteln könnte? Dachte erst mit Eventreihenfolge RING -> DISCONNECT geht das vernünftig, wenn der AB aber annimmt, kriege ich ein RING -> CONNECT. Ich kann jetzt über die Nebenstelle rausfinden, ob der AB drangegangen ist.

    Frage wäre aber, ob man irgendwie abheben kann, so lange der interne AB noch aktiv ist?! Das könnte meine Auswertung dann wieder aushebeln..

    Einen Kommentar schreiben:


  • psilo
    antwortet
    Der App an meinem Handy hat er die **620 gegeben, ist das dann äquivalent? dann kann ich morgen mal testen.. Wenn das so funktioniert und ich testen kann, schaue ich gerne auch nochmal die ganze VOIP API durch.. jetzt bin ich noch warm mit dem Zeug.. Gibt aber wohl auch Limitierungen, der CallMonitor von der FB gibt wohl bei internen Calls keine Info-Zeilen aus... Hab den Output schon genauer analysiert. Das stört mich auch, weil die Sprechanlage dranhängt..

    Einen Kommentar schreiben:


  • Marcov
    antwortet
    Okay, ich teste es mal bei Zeiten. Die Ip Telefone haben die internen NUmmer **620 und folgende, früher ging es mit
    sh.fritzbox.call('**610', '**620') nicht

    Einen Kommentar schreiben:


  • psilo
    antwortet
    Im Develop wäre es jetzt auch: https://github.com/smarthomeNG/smarthome

    Und irgendwie bin ich immer noch zu doof für Pull-Requests...

    Einen Kommentar schreiben:


  • psilo
    antwortet
    Meine DECT Telefone gehen, reine IP Telefone weiß ich nicht, da ich keine habe ;-) Ich nutze die Standard API, ich würde behaupten mehr als das was geht geht nicht
    Ich verwende - wie meines Wissens auch das alte Plugin - die X_AVM-DE_DialNumber aus der http://avm.de/fileadmin/user_upload/...x_voipSCPD.pdf. Wenn hier mehr eingebunden werden muss für VOIP und mir das jemand sagen kann, baue ichs gerne. Wie gesagt, kann aber leider nur mit DECT testen..

    Ein IP Telefon müsste ja auch nie interne Nummer haben, oder? Ich mache das bei mir bspw. so:

    sh.fritzbox_7490.set_call_origin("**610")
    sh.fritzbox_7490.start_call('**9')

    **610 ist die interne Nummer meines Mobilteils 1. **9 Rundruf.

    Am besten einfach mal testen und schauen was rauskommt.. Wie gesagt: es kann auch noch Fehler geben. Drum ist testen und autonomes Analysieren für mich gerade wichtig.. Für mich pers. läuft alles, aber es muss halt noch robust werden..
    Zuletzt geändert von psilo; 04.04.2016, 17:39.

    Einen Kommentar schreiben:

Lädt...
X