Hinweis zum Beitrag "Callmonitor für Anfänger": 99_myUtilsTelefon.pm mit Fehlern

Begonnen von charly166, 14 Januar 2016, 09:45:51

Vorheriges Thema - Nächstes Thema

charly166

Hallo zusammen,

erstmal ein dickes Lob an die Macher des Beitrags Callmonitor für Anfänger und auch den WIKI-Beitrag zu diesem Thema. Die Beiträge haben mir sehr geholfen. Doch mir ist nun aufgefallen, dass die Kommentare in 99_myUtilsTelefon.pm total falsch sind.
Ich bin darauf gekommen, da ich mit meinen "beschränkten Kenntnissen" bei einem Anruf in Abwesenheit eine WhatsApp per Yowsup zu verschicken. Anhand der Kommentare wollte ich dies dann ab Zeile 182 einbauen:

if ( $lastPhoneEvent[$callID] eq "call" ) {
  if ( $intCallDuration eq 0 ) {
    $A[$callID] = "out_notconnected";
    # hier notieren was passieren soll, wenn es ein eingehender Anruf war,
    # der nicht angenommen wurde


Ein Anruf in Abwesenheit hat jedoch das vorherige Event "ring" und nicht "call". Und so ziehen sich die falschen Kommentare immer weiter. Ich durchblicke leider nicht den ganzen Code, würde aber sagen, dass es wie folgt richtig sein sollte (ab Zeile 170):
    if ( $stat eq "disconnect" ) {

        if ( $event eq "call_duration" ) {
            $intCallDuration = $arg;
            $callDuration = sprintf( "%2d:%02d", ( $arg / 60 ), $arg % 60 );
            return;
        }    # if call_duration
       
        if ( $lastPhoneEvent[$callID] eq "call" ) {
            if ( $intCallDuration eq 0 ) {
                $A[$callID] = "out_notconnected";
                # hier notieren was passieren soll, wenn es ein ausgehender Anruf war,
                # der nicht angenommen wurde
                               
            } elsif ( $intCallDuration gt 0 ) {
                $A[$callID] = "out_connected";
                # hier notieren was passieren soll, wenn es ein ausgehender Anruf war,
                # der angenommen wurde
               
            }
        } elsif ( $lastPhoneEvent[$callID] eq "ring") {
            if ( $intCallDuration eq 0 ) {
                $A[$callID] = "in_notconnected";
                # hier notieren was passieren soll, wenn es ein eingehender Anruf war,
                # der nicht angenommen wurde

                $intCallDuration = undef;
            } elsif ( $ab eq "AB" ) {
                $A[$callID] = "AB";
                $ab = undef;
                # hier notieren was passieren soll, wenn der AB dranging

                $intCallDuration = undef;
            } elsif ($intCallDuration gt 0 ){
                $A[$callID] = "in_connected";
                # hier notieren was passieren soll, wenn es ein eingehender Anruf war,
                # der angenommen wurde
               
                $intCallDuration = undef;
            }
        }


Vielleicht hilft das ja noch jemand weiter!

Mein Code für die WhatsApp lautet übrigens (ab Zeile 190):
        } elsif ( $lastPhoneEvent[$callID] eq "ring") {
            if ( $intCallDuration eq 0 ) {
                $A[$callID] = "in_notconnected";
                # hier notieren was passieren soll, wenn es ein eingehender Anruf war,
                # der nicht angenommen wurde
Log(3,"WhatsApp: $extname $intnum");
fhem("set markus send Anruf in Abwesenheit: $extname $extnum");

                $intCallDuration = undef;


Viele Grüße

charly
--- FHEM 5.9 Docker Image fhem/fhem-docker auf Diskstation ---

Markus Bloch

Hallo charly,

Zitat von: charly166 am 14 Januar 2016, 09:45:51
Ich bin darauf gekommen, da ich mit meinen "beschränkten Kenntnissen" bei einem Anruf in Abwesenheit eine WhatsApp per Yowsup zu verschicken. Anhand der Kommentare wollte ich dies dann ab Zeile 182 einbauen:

Der Beitrag "Callmonitor für Anfänger" sowohl im Forum, als auch im Wiki, ist zu einer Zeit entstanden, als das Modul FB_CALLMONITOR noch recht starr war und man nur auf bestimmte Anruf-Konstellationen keine Aktionen ausführen konnte. In diesem Fall war eine etwas komplizierte Zwischenspeicherung und Auswertung notwendig, welche damals durch einige User in diesem genannten Forumsthread entstanden sind. Mittlerweile ist da aber einiges an Logik in das Modul selber gewandert und für eine Anrufliste gibt es nun das Modul FB_CALLLIST.

Somit muss man heute diesen Aufwand nicht mehr betreiben um an sein Ziel zu kommen.

In deinem konkreten Beispiel kann man dein Wunsch mit folgendem notify einfach erreichen (FB_CALLMONITOR Definition heiß "Callmonitor"):

define WhatsApp_Nachricht notify Callmonitor:missed_call.* set markus send Anruf in Abwesenheit: [Callmonitor:missed_call]


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)