Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Fritzbox rückwärtssuche mit iobroker?

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Fritzbox rückwärtssuche mit iobroker?

    This topic has been deleted. Only users with topic management privileges can see it.
    • liv-in-sky
      liv-in-sky @Walter White last edited by

      @Walter-White
      ja - habe ich nach jey-cee's post auch gedacht 🙂

      1 Reply Last reply Reply Quote 0
      • M
        Marsx79 last edited by Marsx79

        var request = require('request');
        on({id: 'tr-064.0.callmonitor.ringing', val: true, ack: true}, function (obj) { // wenn Anruf
          var value = obj.state.val;
          var oldValue = obj.oldState.val;
          log("Skript2 klingeln");
          var nummer = String(getState("tr-064.0.callmonitor.inbound.caller").val, 2000, false);  // caller Nummer auslesen
          log(' caller=' + nummer);
          var namen = String(getState("tr-064.0.callmonitor.inbound.callerName").val, 2000, false); // caller Name auslesen
          if (!namen.length){ // Namen leer in Fritz Telefonbuch, dann Namen in Das Örtliche suchen
              log('namen ist leer.');
              var url = 'http://www.dasoertliche.de/Controller?form_name=search_inv&ph='+ nummer; // suche namen
              request(url, function(err, stat, body) {
                if(err) log('Error: ' + err, error);
                var matches = body.match(/class="name ".*?<.*?>(.*?)&/); // in matches[1] steht der Namen aus Das Örtliche
                log('Name' + matches[1]);
                if (!matches[1].length){     // Das Örtliche kein Name gefunden
                   log('Namen Unbekannt');
                   setState('tr-064.0.callmonitor.inbound.calleeName').String('Unbekannt');
                } else {
                    log (Namen= + matches[1]);
                    setState('tr-064.0.callmonitor.inbound.calleeName').matches[1];
                }
              });
          } 
        });   
        

        Hatte dieses alte Script noch rumliegen. Keine Ahnung ob das noch funktioniert. Vielleicht kann das ja mal jemand testen.

        Gargano 2 Replies Last reply Reply Quote 0
        • Gargano
          Gargano @Marsx79 last edited by

          @Marsx79 Habs mal probiert, jedoch kommt der body.match mit der URL-Antwort nicht zurecht.
          Firefox meint, daß content-encoding gzip ist.
          Ich weiß nicht ob request mit gzip zurecht kommt.

          1 Reply Last reply Reply Quote 0
          • Gargano
            Gargano @Marsx79 last edited by

            @Marsx79 Hab mal ein log vom body gemacht, da erscheint des als Klartext, kommt also mit gzip zurecht. Scheint noch ein Problem mit der Zeile body.match zu sein

            M 1 Reply Last reply Reply Quote 0
            • M
              Marsx79 @Gargano last edited by

              @Gargano

              Mit Scripten kenne ich mich leider nicht so aus. War nur als Anregung gedacht. Vielleicht kann da ja jemand was mit anfangen und es entsprechend anpassen.

              Gargano 1 Reply Last reply Reply Quote 0
              • Gargano
                Gargano @Marsx79 last edited by Gargano

                @Marsx79 Also rausgefunden habe ich , daß die Klasse jetzt "st-treff-name" heißt und nicht mehr "name".
                Ich komme aber mit dem Ausdruck .?<.?>(.*?)&/ nicht klar.
                Hier scheint sich JS aufzuhängen.
                Evtl. kann jemand da helfen.

                Problem bei der ganzen HTML Geschichte ist, daß bei der nächsten Änderung der Klassenname wieder anders sein kann.
                Eine Abfrage mit Get und Antwort als JSON wäre da besser.

                Gargano 1 Reply Last reply Reply Quote 0
                • Gargano
                  Gargano @Gargano last edited by Gargano

                  @Gargano Hier nun der geänderte Code für die Rückwärtssuche im 'Das Örtliche'

                  // Rückwärtssuche von das Örtliche 
                  
                  const callerName = 'tr-064.0.callmonitor.inbound.callerName';
                  const lastCallerName ='tr-064.0.callmonitor.lastCall.callerName';
                  
                  var request = require('request');
                  
                  
                  on({id: 'tr-064.0.callmonitor.ringing', val: true, ack: true}, function (obj) { // wenn Anruf
                    log("Skript2 klingeln");
                    var nummer = String(getState("tr-064.0.callmonitor.inbound.caller").val, 2000, false);  // caller Nummer auslesen
                    log(' caller=' + nummer);
                    var namen = String(getState(callerName).val, 2000, false); // caller Name auslesen
                    if (!namen.length){ // Namen leer in Fritz Telefonbuch, dann Namen in Das Örtliche suchen
                        log('namen ist leer.');
                        var url = 'http://www.dasoertliche.de/Controller?form_name=search_inv&ph='+ nummer; // suche namen
                        log (url);
                        request(url, function(err, body) {
                          if(err) log('Error: ' + err);
                          var matches = body.match(/class="st-treff-name"\>(.*?)\</); // in matches[1] steht der Namen aus Das Örtliche
                          if (!matches){     // Das Örtliche kein Name gefunden
                             log('Namen Unbekannt');
                             setState(callerName,'Unbekannt');
                             setState(lastCallerName,'Unbekannt');
                          } else {
                              log ('Namen= '+ matches[1]);
                              setState(callerName,matches[1]);
                              setState(lastCallerName,matches[1]);
                          }
                        });
                    } 
                  });   
                  
                  
                  
                  M 1 Reply Last reply Reply Quote 0
                  • M
                    Marsx79 @Gargano last edited by

                    @Gargano

                    Super! Werde ich nachher gleich mal ausprobieren.

                    Gargano 2 Replies Last reply Reply Quote 0
                    • Gargano
                      Gargano @Marsx79 last edited by

                      @Marsx79 Ups , doch ein Schreibfehler

                      const lastCallerName ='tr-064.0.callmonitor.lastCall.callerName';
                      
                      1 Reply Last reply Reply Quote 0
                      • Gargano
                        Gargano @Marsx79 last edited by

                        @Marsx79 Nach der letzten Version vom JS Adapter kam bei mir eine Fehlermeldung mit der 'match' Funktion, daß diese nicht definiert sei.

                        Ich habe jetzt das aktuellere axios Modul verwendet :
                        Dazu muß in der JS Instanz unter den zusätzlichen NPM-Module axios eingetragen werden.

                        // Rückwärtssuche von das Örtliche 
                        
                        const callerName = 'tr-064.0.callmonitor.inbound.callerName';
                        const lastCallerName ='tr-064.0.callmonitor.lastCall.callerName';
                        const ringing = 'tr-064.0.callmonitor.ringing';
                        const caller = 'tr-064.0.callmonitor.inbound.caller';
                        
                        const axios = require('axios');
                        
                        function getCallerName(url) {
                            axios.get(url)
                                .then(function (response) {
                                    // handle success
                                  var matches = response.data.match(/class="st-treff-name"\>(.*?)\</); // in matches[1] steht der Namen aus Das Örtliche
                                    if (!matches){     // Das Örtliche kein Name gefunden
                                    setState(callerName,'Unbekannt');
                                    setState(lastCallerName,'Unbekannt');
                                    } else { 
                                        setState(callerName,matches[1]);
                                        setState(lastCallerName,matches[1]);
                                    } 
                                })
                                .catch(function (error) {
                                    // handle error
                                    console.log(error);
                                })
                        }
                        
                        on({id: ringing, val: true, ack: true}, function (obj) { // wenn Anruf
                          var nummer = String(getState(caller).val, 2000, false);  // caller Nummer auslesen
                          var namen = String(getState(callerName).val, 2000, false); // caller Name auslesen
                          if (!namen.length){ // Namen leer in Fritz Telefonbuch, dann Namen in Das Örtliche suchen
                            var url = 'http://www.dasoertliche.de/Controller?form_name=search_inv&ph='+ nummer; // suche namen
                            getCallerName(url);
                          } 
                        });   
                        
                        
                        
                        
                        F 1 Reply Last reply Reply Quote 0
                        • F
                          flotux @Gargano last edited by

                          @gargano
                          Dein Post hat mir damals sehr geholfen. Mir ist aber aufgefallen, dass sich offenbar der Aufbau der Seite von www.dasoertliche.de geändert hat, wodurch die Rückwärtssuche nicht mehr funktioniert. Mit folgenden Anpassungen funktioniert es bei mir zumindest wieder:

                          var url = 'https://mobil.dasoertliche.de/Themen?nummer='+ nummer;
                          

                          Folgender regulärer Ausdruck liefert bei mir dann den Namen bzw. die Firma zur Rufnummer:

                          var matches = response.data.match('<h2 class="tao-cb tao-b\">(.*)<\/h2>');
                          

                          Vielleicht hilft das dem einen oder anderen, so wie es mir damals geholfen hat. 😉

                          1 Reply Last reply Reply Quote 2
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate
                          FAQ Cloud / IOT
                          HowTo: Node.js-Update
                          HowTo: Backup/Restore
                          Downloads
                          BLOG

                          698
                          Online

                          31.9k
                          Users

                          80.2k
                          Topics

                          1.3m
                          Posts

                          fritzbox 7590 fritzfon
                          6
                          15
                          2028
                          Loading More Posts
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes
                          Reply
                          • Reply as topic
                          Log in to reply
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                          The ioBroker Community 2014-2023
                          logo