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

RPi 4 B mit 4 GByte bookworm, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM; zigbee2mqtt

ioBroker als Datenlieferant für z.B. Anker, Samsung

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

RPi 4 B mit 4 GByte bookworm, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM; zigbee2mqtt

ioBroker als Datenlieferant für z.B. Anker, Samsung

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

RPi 4 B mit 4 GByte bookworm, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM; zigbee2mqtt

ioBroker als Datenlieferant für z.B. Anker, Samsung

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

RPi 4 B mit 4 GByte bookworm, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM; zigbee2mqtt

ioBroker als Datenlieferant für z.B. Anker, Samsung

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

RPi 4 B mit 4 GByte bookworm, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM; zigbee2mqtt

ioBroker als Datenlieferant für z.B. Anker, Samsung

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