Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Fritzbox - Adapter; unbekannt = "### ? ###" lässt sich nicht verarbeiten

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] Fritzbox - Adapter; unbekannt = "### ? ###" lässt sich nicht verarbeiten

    This topic has been deleted. Only users with topic management privileges can see it.
    • bahnuhr
      bahnuhr Forum Testing Most Active last edited by

      Guten Abend,

      ich spiele per Script an meinem Telefon View.

      Dabei will ich die Telefonnummer abgreifen; sowie den Namen des Anrufers per tr-064 darstellen.

      Klappt soweit.

      Nur bei unbekannten Anrufen verzweifle ich derzeit.

      Im Adapter lässt sich hinterlegen was angezeigt wird. Standard und bei mir ist "### ? ###".

      Komischerweise lässt sich dies nicht verarbeiten. Es ist kein String (warum aber nicht; sieht doch so aus).

      If Abfragen mit string klappen nicht.

      Auch die Scripte hier im Forum, z.B.

      http://forum.iobroker.net/viewtopic.php … mer#p20299

      funktionieren bei unbekannten / unterdrückten Nummer nicht (zumindest bei mir nicht).

      Obwohl es lt. Script ja abgegriffen wird:

          if (!telefonbuchRufnummer[rufnummer]) {                                     // undefinierte Rufnummern
              name = telefonbuchRufnummerNichtBekannt;                                // undefinierte Rufnummern
      

      In meinem einfachen Script klappt es ebenfalls nicht.

      ! ````
      // Telefon Anzeige in vis
      ! // Variablen
      var Anrufer_Nr = "fritzbox.0.calls.ringActualNumber"; // Nr. des Anrufers
      var Anrufer_Name = "tr-064.0.callmonitor.inbound.callerName"; // Name des Anrufers
      var Sprache = getState("hm-rega.0.29816").val; // Auto Sprachausgabe
      var request = require ('request');
      ! on ({id: Anrufer_Nr, valGe: 1}, function(obj) {
      log ('Auslöser Telefon');
      ! // Name ermitteln
      var name = "";
      ! if (obj.state.val === "### ? ###") { // undefinierte Rufnummern
      name = "Unbekannt"; // undefinierte Rufnummern
      } else {
      name = getState(Anrufer_Name).val;
      }
      ! // Bild ermitteln
      switch (name) {
      case 'Dieter Arbeit':
      name = "Dieter";
      setState('javascript.0.Status.Telefon.Bild_Nr', 1);
      break;
      default:
      setState('javascript.0.Status.Telefon.Bild_Nr', 0);
      break;
      }
      ! setState('javascript.0.Status.Telefon.Name', name);
      setState('javascript.0.Status.Telefon.Nummer', obj.state.val);

      // Sprachausgabe
          if (Sprache === true) {
              request('http://192.168.243.76:50000/track=tos-computer-03.wav');
              setTimeout(setState('sayit.0.tts.text', name + " ruft an."), 3000);
          }
      
      //Telegram
          if (name ==='Unbekannt') {
              sendTo('telegram', "Telefon zu Hause:\n unbekannte Nummer ruft an.");
          } else {
              sendTo('telegram', "Telefon zu Hause:\n" + name + ", " + getState('javascript.0.Status.Telefon.Nummer').val + ", ruft an.");     
          }
      
      View_change ('Telefon', 0); 
      setTimeout(function() {
              View_change ('Titel', 0);
      }, 30000); 
      

      ! });
      ! ````

      Bitte mal anschauen. Bin am verzweifeln.

      mfg

      Dieter

      1 Reply Last reply Reply Quote 0
      • bahnuhr
        bahnuhr Forum Testing Most Active last edited by

        Also, ich bin nicht richtig weiter !

        Wenn ich schreibe:

        var nummer = getState('fritzbox.0.calls.ringLastNumber').val;

        log (nummer);

        log (typeof nummer);

        log (nummer.length);

        bekomme ich ausgegeben:

        nummer = ### ? ###

        type = string

        length = 9

        soweit alles richtig.

        Wenn ich dann aber dazu setze:

        if (nummer === "### ? ###") {

        log ("richtig");

        } else {

        log ("nein");

        }

        bekomme ich -> nein.

        Warum ???????????????????????

        Hier für euch mal komplett (wer es testen möchte).

        var nummer = getState('fritzbox.0.calls.ringLastNumber').val;
        
        log (nummer);
        log (typeof nummer);
        log (nummer.length);
        
        if (nummer === "### ? ###") {
            log ("richtig");
        } else {
            log ("nein");
        }
        
        for (z=0; z<=8; ++z) {
            log ('zeichen '+ (z+1) + ':  ' + nummer.charCodeAt(z));
        }
        
        

        Hab mir unten auch mal den charcode anzeigen lassen.

        Komme damit aber nicht richtig weiter (der code passt irgendwie nicht mit der utf16 Tabelle die ich im Netz gefunden habe.

        Vielleicht sieht jemand den Fehler sofort.

        mfg

        1 Reply Last reply Reply Quote 0
        • bahnuhr
          bahnuhr Forum Testing Most Active last edited by

          ok,

          hab jetzt folgende Lösung (warum das ursprüngliche nicht klappt weiß ich nicht)

          if (nummer === String.fromCharCode(35,35,35,160,63,160,35,35,35)) {  // charCode entspricht "### ? ###"
              log ("richtig");
          } else {
              log ("nein");
          }
          
          

          d.h.

          ich überprüfe einfach ob der charCode passt.

          Damit bekomme ich als log : richtig !

          mfg

          1 Reply Last reply Reply Quote 0
          • blauholsten
            blauholsten Developer last edited by

            probier doch mal mit

            var str =  "### ? ###";
            
            if(str.test(nummer)){
                   "tue dies tue das"
            }
            
            1 Reply Last reply Reply Quote 0
            • bahnuhr
              bahnuhr Forum Testing Most Active last edited by

              Deinen code versteh ich nicht.

              mfg

              1 Reply Last reply Reply Quote 0
              • blauholsten
                blauholsten Developer last edited by

                @bahnuhr:

                Deinen code versteh ich nicht.

                mfg `
                Die .test() Methode prüft einen String auf dessen Inhalt, und gibt dann true oder false zurück.

                von mir aus so

                var str =  "### ? ###";
                
                if(str.test(nummer)){
                       log('ja');
                }
                else{
                       log('nein');
                }
                
                1 Reply Last reply Reply Quote 0
                • bahnuhr
                  bahnuhr Forum Testing Most Active last edited by

                  @blauholsten:

                  probier doch mal mit

                  var str =  "### ? ###";
                  
                  if(str.test(nummer)){
                         "tue dies tue das"
                  }
                  ```` `  
                  

                  Es kommt Fehlermeldung:

                  str.test is not a function

                  1 Reply Last reply Reply Quote 0
                  • bahnuhr
                    bahnuhr Forum Testing Most Active last edited by

                    Müsste dies (wie oben im Code)

                    if (nummer === "### ? ###") {
                        log ("richtig");
                    } else {
                        log ("nein");
                    }
                    

                    nicht das gleiche sein.

                    Und dies klappt eben nicht.

                    1 Reply Last reply Reply Quote 0
                    • blauholsten
                      blauholsten Developer last edited by

                      @bahnuhr:

                      @blauholsten:

                      probier doch mal mit

                      var str =  "### ? ###";
                      
                      if(str.test(nummer)){
                             "tue dies tue das"
                      }
                      ```` `  
                      

                      Es kommt Fehlermeldung:

                      str.test is not a function `

                      Stimmt! Muss wohl so heissen….

                      var str = /### ? ###/
                      

                      Kommt aber trotzdem false raus. Kann es sein das das "verbotene Zeichen" sind?

                      1 Reply Last reply Reply Quote 0
                      • bahnuhr
                        bahnuhr Forum Testing Most Active last edited by

                        habe mittlerweile folgendes festgestellt:

                        Die Fritzbox übermittelt: "### ? ###"

                        Hierbei ist die Leertaste mit dem charCode 160 !!! benannt.

                        Im String ""### ? ###" ist der charCode der Leertaste 32 !!!

                        Also unterschiedlicher Code für Leertaste.

                        mfg

                        1 Reply Last reply Reply Quote 0
                        • bahnuhr
                          bahnuhr Forum Testing Most Active last edited by

                          wie vermutet landet dein Code auch bei Nein !!!

                            var str =  /### ? ###/;
                          
                          if(str.test(nummer)){
                                 log('ja');
                          }
                          else{
                                 log('nein');
                          }
                          

                          m.E. liegt es an der unterschiedlichen Behandlung der Leertaste.

                          mfg

                          D.Müller

                          1 Reply Last reply Reply Quote 0
                          • blauholsten
                            blauholsten Developer last edited by

                            Fehler gefunden:

                            var str =  /### \? ###/;
                            
                            if(str.test(nummer)){
                                   log('ja');
                            }
                            else{
                                   log('nein');
                            }
                            

                            Das geht

                            1 Reply Last reply Reply Quote 0
                            • bahnuhr
                              bahnuhr Forum Testing Most Active last edited by

                              bei mir geht es nicht.

                              … not a function

                              1 Reply Last reply Reply Quote 0
                              • bahnuhr
                                bahnuhr Forum Testing Most Active last edited by

                                Also ich bleib jetzt bei meiner Lösung:

                                if (nummer === String.fromCharCode(35,35,35,160,63,160,35,35,35)) {  // charCode entspricht "### ? ###"
                                    log ("richtig");
                                } else {
                                    log ("nein");
                                }
                                

                                Die Fritzbox scheint die Leertaste anders zu übermitteln.

                                Und mit o.g. char… funktioniert es.

                                mfg

                                1 Reply Last reply Reply Quote 0
                                • blauholsten
                                  blauholsten Developer last edited by

                                  Jetzt schon:

                                  var str =  /### \? ###/;
                                  
                                  if(str.test(nummer)){
                                         log('ja');
                                  }
                                  else{
                                         log('nein');
                                  }
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • bahnuhr
                                    bahnuhr Forum Testing Most Active last edited by

                                    blauholsten

                                    Deine Lösung klappt nicht !!!

                                    -> Es klappt mit deinem String

                                    -> Es klappt aber nicht mit dem String der die Fritzbox übermittelt.

                                    Diese übermittelt als String einen anderen CharCode für die Leertaste.

                                    Probier es mit dem Handy aus und schalt die Tel.Nr. aus.

                                    mfg

                                    Dieter

                                    1 Reply Last reply Reply Quote 0
                                    • blauholsten
                                      blauholsten Developer last edited by

                                      Okay!

                                      PS Skript bitte als gelöst markieren.

                                      1 Reply Last reply Reply Quote 0
                                      • bahnuhr
                                        bahnuhr Forum Testing Most Active last edited by

                                        Anbei das Script wie es nun bei mir läuft komplett:

                                        ! ````
                                        // Telefon Anzeige in vis
                                        ! // Variablen
                                        var Anrufer_Nr = "fritzbox.0.calls.ringActualNumber"; // Nr. des Anrufers
                                        var Anrufer_Name = "tr-064.0.callmonitor.inbound.callerName"; // Name des Anrufers
                                        var Sprache = getState("hm-rega.0.29816").val; // Auto Sprachausgabe
                                        var request = require ('request');
                                        ! function weiter(obj) {
                                        // Name ermitteln
                                        var name = "";
                                        ! if (obj.state.val === String.fromCharCode(35,35,35,160,63,160,35,35,35)) { // undefinierte Rufnummern, charCode entspricht "### ? ###"
                                        name = "Unbekannt"; // undefinierte Rufnummern
                                        } else {
                                        name = getState(Anrufer_Name).val;
                                        }
                                        ! // Bild ermitteln
                                        switch (name) {
                                        case 'Dieter Arbeit':
                                        name = "Dieter";
                                        setState('javascript.0.Status.Telefon.Bild_Nr', 1);
                                        break;
                                        default:
                                        setState('javascript.0.Status.Telefon.Bild_Nr', 0);
                                        break;
                                        }
                                        ! if (name === "") {
                                        name = "Unbekannt";
                                        } else {
                                        setState('javascript.0.Status.Telefon.Name', name);
                                        }
                                        setState('javascript.0.Status.Telefon.Nummer', obj.state.val);

                                        // Sprachausgabe
                                            if (Sprache === true) {
                                                request('http://192.168.243.76:50000/track=tos-computer-03.wav');
                                                setTimeout(setState('sayit.0.tts.text', name + " ruft an."), 3000);
                                            }
                                        
                                        //Telegram und log
                                            if (name ==='Unbekannt') {
                                                sendTo('telegram', "Telefon zu Hause:\n Unbekannte Nummer ruft an.");
                                                log("Telefon zu Hause: Unbekannte Nummer ruft an.");
                                            } else {
                                                sendTo('telegram', "Telefon zu Hause:\n" + name + ", " + obj.state.val + ", ruft an.");     
                                                log("Telefon zu Hause: " + name + ", " + obj.state.val + ", ruft an.");     
                                            }
                                        
                                        View_change ('Telefon', 0); 
                                        setTimeout(function() {
                                                View_change ('Titel', 0);
                                                setState('javascript.0.Status.Telefon.Name', "");
                                                setState('javascript.0.Status.Telefon.Nummer', "");
                                                setState('javascript.0.Status.Telefon.Bild_Nr', 0);
                                        }, 30000); 
                                        

                                        ! }
                                        ! on({id: Anrufer_Nr, change: "ne"}, function(obj) {
                                        log ('Auslöser Telefon');
                                        if (obj.state.val !== '') {
                                        weiter(obj);
                                        }
                                        });
                                        ! ````

                                        1 Reply Last reply Reply Quote 0
                                        • ruhr70
                                          ruhr70 last edited by

                                          das "andere Leerzeichen" kommt nicht von der Fritzbox, sondern vom Adapter.

                                          Ein Leerzeichen wird gegen ein nbsp; (non breaking space) ausgetauscht, damit die Länge bei html mit Festbreitenschrift passt.

                                          Beim Mac erzeugt man ein nbsp; mit alt+Leertaste (aus dem Gedächtnis)

                                          im Javascripteditor wird das dann auch grafisch angezeigt

                                          Gesendet von iPhone mit Tapatalk

                                          1 Reply Last reply Reply Quote 0
                                          • bahnuhr
                                            bahnuhr Forum Testing Most Active last edited by

                                            Vom Adapter - hab ich mir schon gedacht.

                                            Trotzdem muss man das erst einmal wissen. Man versucht halt mit der normalen Leertaste eine if abfrage zu basteln und ist fast am verzweifeln warum dies nicht klappt.

                                            Danke für den Tipp mit dem "alt + Leertaste".

                                            Muss ich mal versuchen.

                                            Wieder was gelernt.

                                            Mit freundlichen Grüßen

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            757
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            3
                                            20
                                            2149
                                            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