Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Anrufer Ansage FritzBox / SayIt

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Anrufer Ansage FritzBox / SayIt

    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      Big Fish last edited by

      Hallo Zusammen,

      das Skript funktioniert soweit ganz gut. Allerdings bin ich auf folgendes Problem gestoßen.

      Die Variable Anrufer wird bei mir wie folgt gesetzt.

      var Anrufer = "fritzbox.0.calls.ringActualNumber"; // actual last ringing number

      Im iobroker sehe ich auch unter diesem Objekt die Anrufer Nummer. Im skript enthält die var jedoch nur den String "fritzbox.0.calls.ringActualNumber"

      Zum überprüfen habe ich in den Step einen Logger eingebaut:

      // Hier Vergleich 1

      if (Vergleich_1 == Standard_1 && Vergleich_2 == Standard_2){

      setState(idSayIT_1, TextBeginn + rufnummer2name(getState(Anrufer).val));

      log(Log_Vergleich_1);

      log(Anrufer)

      }

      Kann es sein, dass ringActualNumber nicht gleichzeitig mit dem Ring Objekt beschrieben wird? Bzw. hat jemand anderes das gleiche Problem?

      1 Reply Last reply Reply Quote 0
      • N
        nobob last edited by

        Hallo Big Fish,

        das ist richtig, dass Du über den Befehl ´log(Anrufer)´ nur den String zurückbekommst.

        Wenn Du die Rufnummer mit loggen möchtest musst Du den Befehl wie folgt schreiben:

        log(getState(Anrufer).val)

        Damit sollte dann die Rufnummer im Log eingetragen werden.

        Ich hoffe ich konnte Dir diesbezüglich weiterhelfen.

        Gruß nobob.

        P.S.: Anbei wünsche ich allen noch schöne Ostern.

        1 Reply Last reply Reply Quote 0
        • S
          simpixo last edited by

          @ruhr70:

          @Dragonius:

          Danke!

          Das klappt schon mal prima!!

          Und ich hab mir da so einen bei abgebrochen…...

          Wäre schön wenn die Namenszuordnung im Fritz-Adapter dann auch irgendwann möglich wäre.

          Gruß

          Dragonius `

          Anbei mit Telefonbuch im Script und Ansage des Namens (ungetestet).

          var telefonbuchRufnummerNichtBekannt = "Rufnummer nicht im Telefonbuch";
          
          var telefonbuchRufnummer = {
              "021147114711":
              {
                  "name":         "Michael Handy",    // name zur Rufnummer
                  "bemerkung":    "Reserve"           // optional
              },
              "051147110815":     {"name":"Hänschen Klein"},
              "07114711471":      {"name":"Gustav Gans Handy"},
              "089123456789":     {"name":"Vanessa Müller"},
              "030200020001":     {"name":"Gabi Kösters"},
              
              "### ? ###":        {"name":"Rufnummer unterdrückt"}
          };
          
          function rufnummer2name (rufnummer) {
              var name = "";
          
              //rufnummer = rufnummer.replace("#","");
              //rufnummer = rufnummer.replace("*","");
          
              if (!telefonbuchRufnummer[rufnummer]) {                                     // undefinierte Rufnummern
                  name = telefonbuchRufnummerNichtBekannt;                                // undefinierte Rufnummern
              } else {
                  name = telefonbuchRufnummer[rufnummer].name;
              }
              return name;
          }
          
          var Anrufer = "fritzbox.0.calls.ringActualNumber"; // actual last ringing number
          
          on ({id: Anrufer, valGe: 1}, AusgabeAnrufer);
          
          function AusgabeAnrufer(){
              //setState("sayit.0.tts.text", "Anruf von. " + getState(Anrufer).val);
              setState("sayit.0.tts.text", "Anruf von. " + rufnummer2name(getState(Anrufer).val)); 
          }
          
          

          Ich nutze den oberen Part (JSON und die Funktion rufnummer2name()) als globales Script und nutze es in verschiedenen weiteren Scripts (Ereignisliste, Ansage des Anrufernamen, usw.). `

          Hallo ruhr70

          Super Script, dafür schon mal ein fettes DANKE!!!

          Wäre es aber möglich ein exportiertes Fritz!Box Telefonbuch in das Script einzubinden!? Es handelt sich bei dem exportierten File um eine xml Datei!

          Dann würde das eintragen der Nummern in das Script wegfallen!!

          Oder könntest du mir ein Tip geben, wonach ich suchen müsste um das umsetzten zu können [emoji16][emoji6]

          Danke schon mal

          Gruß

          Adrian

          Gesendet von meinem iPhone mit Tapatalk

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

            @simpixo:

            Wäre es aber möglich ein exportiertes Fritz!Box Telefonbuch in das Script einzubinden!? Es handelt sich bei dem exportierten File um eine xml Datei!

            Dann würde das eintragen der Nummern in das Script wegfallen!!

            Oder könntest du mir ein Tip geben, wonach ich suchen müsste um das umsetzten zu können [emoji16][emoji6] `

            Tja, wunder Punkt 😉

            Ich meine der alte Fritzbox-Adapter für ccu.io hatte das implementiert, dass man das XML-Telefonbuch im Adapter importieren konnte (war jetzt zu faul das nachzuprüfen).

            Das steht eigentlich auf der todo für den Adapter. Der jetzige Adapter läuft genau 1:1 so, wie er das erste Mal veröffentlicht wurde. Momentan ist das in der Prio für mich recht weit unten. Sorry.

            Vielleicht findet sich ja jemand, der den Adapter um den XML-Parser erweitert 😉

            1 Reply Last reply Reply Quote 0
            • B
              BasGo last edited by

              @ruhr70:

              @simpixo:

              Wäre es aber möglich ein exportiertes Fritz!Box Telefonbuch in das Script einzubinden!? Es handelt sich bei dem exportierten File um eine xml Datei!

              Dann würde das eintragen der Nummern in das Script wegfallen!!

              Oder könntest du mir ein Tip geben, wonach ich suchen müsste um das umsetzten zu können [emoji16][emoji6] `

              Tja, wunder Punkt 😉

              Ich meine der alte Fritzbox-Adapter für ccu.io hatte das implementiert, dass man das XML-Telefonbuch im Adapter importieren konnte (war jetzt zu faul das nachzuprüfen).

              Das steht eigentlich auf der todo für den Adapter. Der jetzige Adapter läuft genau 1:1 so, wie er das erste Mal veröffentlicht wurde. Momentan ist das in der Prio für mich recht weit unten. Sorry.

              Vielleicht findet sich ja jemand, der den Adapter um den XML-Parser erweitert 😉 `

              Naja, direkt erweitern kann ich es aufgrund eines dauerhaften Zeitmangels nicht, aber vielleicht kann ich einen kleinen, möglichen Ansatz liefern?

              Gestern habe ich mal ein wenig mit dem NPM-Modul https://github.com/hendrikw01/tr-064 rumgespielt und siehe da, das Telefonbuch lässt sich relativ leicht auslesen. Die Hauptarbeit wäre nun - sofern jemand die Zeit zur Integration findet 8-) - dieses Telefonbuch irgendwie in den Adapter einzulesen.

              Hier mein Javascript-Adapter-Kurztest … ohne Anspruch auf Schönheit und Völlständigkeit :

              var tr          = require("tr-064");
              var xml2js		= require("xml2js");
              
              var tr064 = new tr.TR064();
              
              var address = 'fritz.box';
              var user = '<username>';
              var password = '<password>';
              
              var phonenumbers = []; // create an empty array for fetching all configured phone numbers from fritzbox
              
              tr064.initTR064Device(address, 49000, function (err, device) {
                  if (!err) {
                      log(address + ' found!');
                      device.startEncryptedCommunication(function (err, sslDev) {
                          if (!err) {
                              sslDev.login(user, password);
                              var wanppp = sslDev.services["urn:dslforum-org:service:X_AVM-DE_OnTel:1"];
              
                              // get call list from last day
                              wanppp.actions.GetCallList({}, function (err, ret) {
                                  if (err) {
                                      log(err);
                                  } else if (ret.NewCallListURL && ret.NewCallListURL.length > 0) {
                                      var url = ret.NewCallListURL + '&days=1';
                                      console.log(url);
                                      request(url, function (error, response, body) {
                                          if (response.statusCode == 200) {
                                              var parser = new xml2js.Parser();
                                              parser.parseString(body, function (err, result) {
                                                  log(JSON.stringify(result));
                                              });  
                                          }
                                      });
                                  }
                              });
              
                              // get complete phonebook
                              wanppp.actions.GetPhonebook({
                                  NewPhonebookID: '0'
                              }, function (err, ret) {
                                  if (err) {
                                      log(err);
                                  } else if (ret.NewPhonebookURL && ret.NewPhonebookURL.length > 0) {
                                      var url = ret.NewPhonebookURL;
                                      log(url);
                                      request(url, function (error, response, body) {
                                          if (response.statusCode == 200) {
                                              var parser = new xml2js.Parser();
                                              parser.parseString(body, function (err, result) {
                                                  var phonebook = result.phonebooks.phonebook[0];
                                                  for (var c = 0; c <= phonebook.contact.length; c++) {
                                                      var contact = phonebook.contact[c];
                                                      if (typeof contact != 'undefined') {
                                                          var entryName = contact.person[0].realName;
                                                          for (var t = 0; t <= contact.telephony.length; t++) {
                                                              var telephony = contact.telephony[t];
                                                              if (typeof telephony != 'undefined') {
                                                                  for (var n = 0; n <= telephony.number.length; n++) {
                                                                      var number = telephony.number[n];
                                                                      if (typeof number != 'undefined') {
                                                                          var entryNumber = number._;
                                                                          var entryType = number.$.type;
                                                                          if (entryNumber.startsWith('0') || entryNumber.startsWith('+')) {
                                                                              log('#' + c + ': ' + entryName + ' -> ' + entryNumber + ' -> ' + entryType);
                                                                              phonenumbers.push({
                                                                                  key:   entryNumber,
                                                                                  value: {name: entryName, type: entryType}
                                                                              });
                                                                          }
                                                                      }
                                                                  }                                                    
                                                              }
                                                          }
                                                      }
                                                  }
                                              });
              
                                              log(JSON.stringify(phonenumbers));
                                          }
                                      });
                                  }
                              });
                          } else {
                              log(err);
                          }
                      });
                  }
              });</password></username> 
              
              1 Reply Last reply Reply Quote 0
              • D
                Daniel81 last edited by

                Hallo ich weiß die Beiträge sind schon etwas älter aber ich komme hier nicht so richtig weiter.

                Ich habe das Skript zur Ansage des Anrufer Namen sehr gut zum laufen gebracht. Nun hätte ich gerne, wenn mich jemand anruft, dessen Name nicht im Telefonbuch gespeichert ist nicht die Ansage das die Nummer nicht im Telefonbuch ist, sondern ich würde gerne dessen Rufnummer ansagen lassen. Wie z.B Eingehender Anruf von: 0170…...

                Wie bekomme ich diese hin? Habe hier schon ein paar Sachen probiert komme damit aber nicht weiter.

                var telefonbuchRufnummerNichtBekannt = "Rufnummer nicht im Telefonbuch";
                
                var telefonbuchRufnummer = {
                    "01701234567":
                    {
                        "name":         "Daniel Handy",    // name zur Rufnummer
                        "bemerkung":    "Reserve"           // optional
                    },
                    "051147110815":     {"name":"Hänschen Klein"},
                    "07114711471":      {"name":"Gustav Gans Handy"},
                    "089123456789":     {"name":"Vanessa Müller"},
                    "030200020001":     {"name":"Gabi Kösters"},
                
                    "### ? ###":        {"name":"Rufnummer unterdrückt"}
                };
                
                function rufnummer2name (rufnummer) {
                    var name = "";
                
                    //rufnummer = rufnummer.replace("#","");
                    //rufnummer = rufnummer.replace("*","");
                
                    if (!telefonbuchRufnummer[rufnummer]) {                                     // undefinierte Rufnummern
                        name = telefonbuchRufnummerNichtBekannt;                                // undefinierte Rufnummern
                    } else {
                        name = telefonbuchRufnummer[rufnummer].name;
                    }
                    return name;
                }
                
                var Anrufer = "fritzbox.0.calls.ringActualNumber"; // actual last ringing number
                
                on ({id: Anrufer, valGe: 1}, AusgabeAnrufer);
                
                function AusgabeAnrufer(){
                    //setState("sayit.0.tts.text", "Anruf von. " + getState(Anrufer).val);
                    setState("sayit.0.tts.text", "Anruf von. " + rufnummer2name(getState(Anrufer).val)); 
                }
                
                

                Ich hoffe ihr könnt mir hier weiterhelfen bin in dieser Materie noch recht neu!

                Vielen Dank schon einmal im Voraus

                Daniel

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

                  ungetestet.

                  Füg bitte folgende Funktion vor der Funktion rufnummer2name() ein:

                  function rnrMitSpace(rufnummer) {
                      var i;
                      var rnrNeu = "";
                      for (i=0;i<rufnummer.length;i++) {/rnrneu="rnrNeu" +/rufnummer.charat(i)+"/";/}/return/rnrneu;/}<e=""></rufnummer.length;i++)>
                  

                  Und rufnummer2name() austauschen (nur eine Zeile ist anders):

                  function rufnummer2name (rufnummer) {
                      var name = "";
                  
                      if (!telefonbuchRufnummer[rufnummer]) {                                     // undefinierte Rufnummern
                          name = rnrMitSpace(rufnummer);                                // undefinierte Rufnummern
                      } else {
                          name = telefonbuchRufnummer[rufnummer].name;
                      }
                      return name;
                  }
                  

                  Aus 017047110815 sollte dann 0 1 7 0 4 7 1 1 0 8 1 5 werden. Dies sollte so ausgesprochen werden, wie Du es Dir wünschst.

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

                    @Daniel81:

                    Hallo ich weiß die Beiträge sind schon etwas älter aber ich komme hier nicht so richtig weiter. `

                    siehe Skript ein Post höher

                    1 Reply Last reply Reply Quote 0
                    • D
                      Daniel81 last edited by

                      😄 Super Vielen vielen Dank! jetzt funktioniert es so wie ich es mir Vorstelle.

                      Dieses Forum ist echt total SUPER! 😄 😄 😄 😄 😄 Danke!

                      1 Reply Last reply Reply Quote 0
                      • D
                        Daniel81 last edited by

                        Hallo zusammen,

                        nachdem die Ansage meiner Anrufer schon seit einiger Zeit richtig gut funktioniert, würde ich nun gern das Skript so erweitern, dass ich nur Ansagen bekomme, die auf eine bestimmten Festnetznummer eingehen.

                        Derzeit werden mir auch die Anrufe angesagt, die auf meiner Faxnummer eingehen.

                        Lässt sich dies mit dem vorhanden Skript erweitern?

                        Ich habe auf der ersten Seite schon gelesen, dass es mit der Funktion Message funktionier.

                        Ich bin mir aber nicht sicher, wie und ob ich es auf diesem Skript anwenden kann

                        Ich hoffe, ihr könnt mir hier weiterhelfen!

                        Grüße Daniel

                        Hier mein verwendetes Skript.

                        ! var telefonbuchRufnummerNichtBekannt = "Rufnummer nicht im Telefonbuch";
                        ! var telefonbuchRufnummer = {
                        ! "xxxx":
                        ! {
                        ! "name": "xxx", // name zur Rufnummer
                        ! "bemerkung": "Reserve" // optional
                        ! },
                        ! "05xxx39": {"name":"xxxx"},
                        ! "01xxx2436": {"name":" xxx"},
                        ! "016xx7573": {"name":"xxxx"},
                        ! "016xxx2890": {"name":"xxx"},
                        ! "05xx864160": {"name":"xxx"},
                        ! "017xx1248": {"name":"xxx"},
                        ! "08xx3316": {"name":"xxx"},
                        ! "0043xx60950": {"name":"xxx "},
                        ! "004xxxxx0": {"name":"xxx"},
                        ! "05xxxxxx2": {"name":"test"},
                        ! "### ? ###": {"name":"Rufnummer unterdrückt"}
                        ! };
                        ! function rnrMitSpace(rufnummer) {
                        ! var i;
                        ! var rnrNeu = "";
                        ! for (i=0;i <rufnummer.length;i++) {<br="">rnrNeu = rnrNeu + rufnummer.charAt(i)+" ";
                        ! }
                        ! return rnrNeu;
                        ! }
                        ! function rufnummer2name (rufnummer) {
                        ! var name = "";
                        ! if (!telefonbuchRufnummer[rufnummer]) { // undefinierte Rufnummern
                        ! name = rnrMitSpace(rufnummer); // undefinierte Rufnummern
                        ! } else {
                        ! name = telefonbuchRufnummer[rufnummer].name;
                        ! }
                        ! return name;
                        ! }
                        ! var Anrufer = "fritzbox.0.calls.ringActualNumber"; // actual last ringing number
                        ! on ({id: Anrufer, valGe: 1}, AusgabeAnrufer);
                        ! function AusgabeAnrufer(){
                        ! //setState("sayit.2.tts.text", "de;15;Eingehender Anruf von. " + getState(Anrufer).val);
                        ! setState("sayit.2.tts.text", "de;15;Eingehender Anruf von" + rufnummer2name(getState(Anrufer).val));
                        ! }</rufnummer.length;i++)>

                        1 Reply Last reply Reply Quote 0
                        • L
                          loi83 last edited by

                          Hallo, ich bekomme seit längerem diesen Log Eintrag wenn jemand anruft. Wie kann ich es lösen?

                          2020-04-30 18:09:24.111 - warn: javascript.0 (20107) You are assigning a array to the state "sayit.0.tts.volume" which expects a number. Please fix your code to use a number or change the state type to array. This warning might become an error in future versions.
                          2020-04-30 18:09:24.114 - warn: javascript.0 (20107) at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1404:20)
                          2020-04-30 18:09:24.117 - warn: javascript.0 (20107) at Object.AusgabeAnrufer (script.js.Test.Anrufansage:54:5)
                          2020-04-30 18:09:24.117 - warn: javascript.0 (20107) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1101:38)
                          2020-04-30 18:09:24.118 - warn: javascript.0 (20107) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:439:25)
                          2020-04-30 18:09:24.118 - warn: javascript.0 (20107) at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:4848:37)
                          2020-04-30 18:09:24.118 - warn: javascript.0 (20107) at processImmediate (internal/timers.js:456:21)
                          

                          Gruß Loi

                          paul53 1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 @loi83 last edited by

                            @loi83 sagte:

                            You are assigning a array to the state "sayit.0.tts.volume" which expects a number

                            Hier ist alles gesagt. Es passiert im Script "Test.Anrufansage" in Zeile 54.

                            L 1 Reply Last reply Reply Quote 0
                            • L
                              loi83 @paul53 last edited by

                              @paul53 hey ja das ist mir durchaus bewusst, nur weiß ich leider nicht was ich dort ändern soll.
                              Hier mal ein Bild von der besagten Zeile:
                              8151e469-efb4-444b-8a04-1125eae3ef9b-image.png

                              paul53 1 Reply Last reply Reply Quote 0
                              • paul53
                                paul53 @loi83 last edited by

                                @loi83 Richtig: 70 ohne eckige Klammer.

                                L 1 Reply Last reply Reply Quote 0
                                • L
                                  loi83 @paul53 last edited by

                                  @paul53 Das habe ich geändert. Der Fehler ist weg, allerdings wird die Lautstärke auch nicht verändert 🙄

                                  paul53 1 Reply Last reply Reply Quote 0
                                  • paul53
                                    paul53 @loi83 last edited by

                                    @loi83 sagte:

                                    allerdings wird die Lautstärke auch nicht verändert

                                    Mit "sayit" kenne ich mich nicht aus.

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

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    808
                                    Online

                                    31.6k
                                    Users

                                    79.5k
                                    Topics

                                    1.3m
                                    Posts

                                    14
                                    36
                                    8323
                                    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