Callmonitor: Anrufer finden (Rufnummernvergleich) Telefonbuch Fritzbox

Begonnen von Invers, 14 April 2015, 11:08:08

Vorheriges Thema - Nächstes Thema

JoWiemann

Hallo Markus,

Ok und Danke. Könntest Du die Info noch in die command.ref übernehmen?! Oder habe ich es da nur übersehen.

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

JoWiemann

Hallo Markus,

habe gerade festgestellt, dass das Textfile beim Setzen des Attributes nicht angelegt wird. Ein Anlegen wäre natürlich schick.

Grüße Jörg

siehe auch: http://forum.fhem.de/index.php/topic,35625.msg288065.html#msg288065
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

JoWiemann

Hallo Markus,

hier noch ein Fehlerbild bei der Rückwärtssuche:

Irgendwie verstehe ich die Sub FB_CALLMONITOR_normalizePhoneNumber nicht. Wenn ich über set search suche erhalte ich folgende Logeinträge (Habe einen entsprechenden Log3 Aufruf eingebaut):

Mein local-area-code: 02234

+49 (1234) 5678912 -> FB_CALLMONITOR (FBTel) - normalized phone number: 022344912345678912 -> Suchergebnis: unknown

+4912345678912 -> FB_CALLMONITOR (FBTel) - normalized phone number: 022344912345678912 -> Suchergebnis: unknown

Lösche ich nun die Attribute: local-area-code und country-code erhalte ich folgende Ergebnisse:

+49 (1234) 5678912 -> FB_CALLMONITOR (FBTel) - normalized phone number: 4912345678912 -> Suchergebnis: unknown

+4912345678912 -> FB_CALLMONITOR (FBTel) - normalized phone number: 4912345678912 -> Suchergebnis: unknown

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

JoWiemann

Hallo Markus,

habe die sub FB_CALLMONITOR_normalizePhoneNumber mal wie folgt geändert:


sub FB_CALLMONITOR_normalizePhoneNumber($$)
{

    my ($hash, $number) = @_;
    my $name = $hash->{NAME};
   
    my $area_code = AttrVal($name, "local-area-code", "");
    my $country_code = AttrVal($name, "country-code", "0049");

    #          Alle 0 nach einem Leerzeichen werden gelöscht
    #          |        |
    #          |        |
    #          |        | Alle Zeichen, ausser 0-9 und + werden gelöscht
    #          |        | |          |
    #          |        | |          |
    #          |        | |          | Alle +, die nicht am Anfang stehen werden gelöscht
    #          |        | |          | |       |
    #          |        | |          | |       |
    $number =~ s/((?<= )0)|[^0-9\\+]|((?<!\A)\+)//g;

    # Steht keine Null, kein NullNUll oder kein + am Anfang, dann fehlt wohl der Local Area Code und dieser wird ergänzt
    $number = $area_code.$number if(!($number =~ m/((?<=\A)00)|((?<=\A)0)|((?<=\A)\+)/g));

    # Steht nur eine Null am Anfang oder weiterhin keine, dann fehlt wohl der Country Code und die Null wird ersetzt
    $number =~ s/((?<=\A)0)/$country_code/g;
    $number = $country_code.$number if(!($number =~ m/((?<=\A)0)/g));

    # Jetzt wird noch das + am Anfang durch 00 ersetzt
    $number =~ s/((?<=\A)\+)/00/g;

    # $number =~ s/[^*\d]//g if(not $number =~ /@/); # Remove anything else isn't a number if it is no VoIP number
   
    Log3 $name, 4, "FB_CALLMONITOR ($name) - normalized phone number: $number";

    return $number;
}


Außerdem habe ich noch Zeile 164 in FB_CALLMONITOR_Get geändert:


        # Leerzeichen, anstatt "nichts" im join
        return FB_CALLMONITOR_reverseSearch($hash, FB_CALLMONITOR_normalizePhoneNumber($hash, join ' ', @arguments[2..$#arguments]));



Bei mir funktionieren nun ne ganze Menge Telefonnummern-Notationen. Was ich noch nicht verstanden habe ist folgende Zeile bezüglich Voip:


# $number =~ s/[^*\d]//g if(not $number =~ /@/); # Remove anything else isn't a number if it is no VoIP number


Angehängt habe ich auch noch mal das geänderte Modul.

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

Markus Bloch

Hallo Jörg,

zu deinen Änderungen.

Zitat von: JoWiemann am 22 April 2015, 15:04:12

Außerdem habe ich noch Zeile 164 in FB_CALLMONITOR_Get geändert:


        # Leerzeichen, anstatt "nichts" im join
        return FB_CALLMONITOR_reverseSearch($hash, FB_CALLMONITOR_normalizePhoneNumber($hash, join ' ', @arguments[2..$#arguments]));




Was soll das bringen? Die Leerzeichen müssen letztlich sowieso wieder entfernt werden. Warum also künstlich Leerzeichen wieder einfügen?

Zitat von: JoWiemann am 22 April 2015, 15:04:12
Bei mir funktionieren nun ne ganze Menge Telefonnummern-Notationen. Was ich noch nicht verstanden habe ist folgende Zeile bezüglich Voip:


# $number =~ s/[^*\d]//g if(not $number =~ /@/); # Remove anything else isn't a number if it is no VoIP number


Denk an die vorkonfigurierten AVM VoIP-Nummern im FritzBox-Telefonbuch: 

200@hd-telefonie.avm.de - HD-Musik
100@hd-telefonie.avm.de - HD-Sprache
500@hdtelefonie.avm.de  - AVM Ansage (HD)

Das sind VoIP Nummern und da ist der Teil hinter dem @ durchaus Teil der Rufnummer.

Zu deinem Änderungsvorschlag bevorzuge ich die weniger aufwändige und dennoch funktionierende Variante:

    $number =~ s/\s//g;                             # Remove spaces
    $number =~ s/^(\#[0-9]{1,10}\#)//g;             # Remove phone control codes
    $number =~ s/^\+/00/g;                          # Convert leading + to 00 country extension
    $number =~ s/[^*\d]//g if(not $number =~ /@/);  # Remove anything else isn't a number if it is no VoIP number
    $number =~ s/^$country_code/0/g;                # Replace own country code with leading 0


Ich hab lediglich zwei Zeilen vertauscht und schon funktionieren alle deine Beispiele die du oben genannt hast korrekt. ;-)

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)

JoWiemann

Na gut. Gewonnen


Grüße Jörg

Gesendet von iPhone mit Tapatalk
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

Markus Bloch

Hab eine neue Version im SVN eingecheckt. Sollte alles dabei sein, was du angesprochen hattest.

Gruß
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)

FunkOdyssey

#22
Ich hatte mir dem noch heutigem Repository das Problem, dass die Ortsvorwahl vor allen Rufnummern stand. Mit der PM-Datei von oben stand plötzlich überall ein +49 vor den Nummern.

Ich habe das gesehen, als ich mir die Einträge der Adressbücher anzeigen lassen habe.

Ich schaue mir morgen mal das heutige Commit an.

---

Nachtrag 1:
Es hat sich leider nichts geändert. Führe ich ein showPhonebookEntries durch, dann erscheint eine Liste mit falschen Rufnummern. Beispiel:


  • 0049+49150123456 - Max Müller
  • 0049+49251234567  - Homer Simpsons
  • 0049+49231123456  - Lucky Luke

Nachtrag 2:
Ach, verdammt. Ich hatte in der Hektik nach dem 'update' ein 'shutdown restart' vergessen. Nun ist alles perfekt. Danke.

carzl

Kann ich bestätigen, Namensauflösung funzt nun auch bei mir einwandfrei. Vielen Dank!  :)
Fhem 6.0 auf RPi3: CUL, JeeLink, Hue Bridge v2, HarmonyHub, Fritzbox7590+7412, 6x FHT80b, 2x FS20S6A, FS20S4A, S300TH, 4x FritzDECT200/210, 4x TX29DTH, 4x Hue LightStripe, 5x Hue Smart Plug, Sonos mit 5x Play:1, Beam und Sub; 3x Lenovo Tab M10 mit FTUI