Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Praktische Anwendungen (Showcase)
    4. Anrufliste und Info der Fritzbox

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    Anrufliste und Info der Fritzbox

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      PeZi last edited by PeZi

      In diesem "Neben-Topic" möchte ich meine Infoseite zur Fritzbox zeigen und einige Details dazu beschreiben.
      Hier der Link zum Haupt-Topic:
      https://forum.iobroker.net/topic/70692/vorstellung-meiner-visualisierung

      Seite 'Info'.png

      Zu sehen ist die aktuelle Baustelle mit viel Platz für weitere Informationen. Rechts im Bild ein QR-Code für das Gast-WLAN.
      Die Anrufliste kommt vom Adapter "tr-064", Datenpunkt "tr-064.0.calllists.all.json"
      Die Symbole links in der Anrufliste haben mir ein wenig Kopfzerbrechen bereitet. Vom Adapter kommen an dieser Stelle nur Ziffern von 1 bis 4, welche den Anruftyp wie folgt kennzeichnen:
      1: Eingehend
      2: Verpasst
      3: Ausgehend
      4: Abgewiesen

      Um die Grafiken zu bekommen habe ich die JSON-Datei mit folgendem Skript modifiziert und in einen neuen Objekt abgelegt, welches dann VIS über das Widget "vis-inventwo - JSON Table" angezeigt wird.

      // Anrufliste modifizieren und ablegen
      on ({id: 'tr-064.0.calllists.all.json', change: 'ne'}, function(){ 
      var anruflisteJSON = (getState("tr-064.0.calllists.all.json").val);
      var myAnrufliste = anruflisteJSON.replace(/"type":"1"/g, '"type":"<img src=/vis.0/Hausautomation/Anruf_eingehend_32.png />"');
      myAnrufliste = myAnrufliste.replace(/"type":"2"/g, '"type":"<img src=/vis.0/Hausautomation/Anruf_verpasst_32.png />"');
      myAnrufliste = myAnrufliste.replace(/"type":"3"/g, '"type":"<img src=/vis.0/Hausautomation/Anruf_ausgehend_32.png />"');
      myAnrufliste = myAnrufliste.replace(/"type":"4"/g, '"type":"<img src=/vis.0/Hausautomation/Anruf_abgewiesen_32.png />"');
      myAnrufliste = myAnrufliste.replace(/SIP: /g, '');
      myAnrufliste = myAnrufliste.replace(/callednumber/g, 'eigeneNr');
      myAnrufliste = myAnrufliste.replace(/callernumber/g, 'eigeneNr');
      setState("0_userdata.0.Anrufliste",myAnrufliste, true);
       });
      

      Die Zeilen 8 - 10 modifizieren einige Feldnamen um eine einheitliche Abfrage zu ermöglichen.

      Für VoIP-Anschlüsse wird vor der eigentlichen Rufnummer der hier nicht benötigte Text "SIP:" übertragen. Zeile 8 eliminiert diesen Text.

      Zeile 9 und 10: In Abhängigkeit von der Anrufrichtung (eingehend oder ausgehend) wird die eigene Rufnummer entweder als "callednumber" oder als "callernumber" bezeichnet. Das erschwert eine spätere Auswertung (zumindest für meine Zwecke). Daher die Vereinheitlichung mit dem Feldnamen "eigeneNr".

      Bei eingehenden Anrufe wird für einige Sekunden eine Infoseite eingeblendet:

      Anruf.png

      Feld 1 zeigt die Telefonnummer des Anrufers (sofern übertragen)
      Feld 2 den Gerätenamen des angerufenen Telefons (Kommt aus der Fritzbox)
      Feld 3 Name des Anrufers (sofern im Telefonbuch der Fritzbox vorhanden)
      Das Bild des Anrufers kommt ebenfalls aus der Fritzbox, sofern es dort hinterlegt ist.

      Das Bild aus der Fritzbox zu bekommen ist ein wenig knifflig, da es nur für kurze Zeit mit einer Session-ID aus der Fritzbox abgerufen werden kann.

      Hier mein Skript dazu:

      var timeout, command;
      var AltBild = getState("vis.0.control.data").val; //zwischenspeichern des alten Fensters
      
      function helligkeit(Helligkeit, Kontrast){  //Helligkeit und Kontrast des Anzeigebildschirms einstellen
          var SSH = require('simple-ssh');
          var ssh = new SSH({
          host: '192.168.xx.xx',  //IP-Adresse des "Anzeige-Raspi" auf dem der Browser für den Anzeigemonitor läuft
          user: 'xxxxxxxxxx',
          pass: 'xxxxxxxxxx'
          });
          ssh.exec('sudo ddcutil setvcp 10 ' + Helligkeit).start();
          ssh.exec('sudo ddcutil setvcp 12 ' + Kontrast).start();
      }
      
      function zurueck() { //nach Beendigung der Anrufanzeige Bilschirm auf vorherigen Zustand zurücksetzen
          setState("vis.0.control.instance", "FFFFFFFF"); 
          setState("vis.0.control.data", AltBild); 
          setState("vis.0.control.command", 'changeView');  
      }
      
      on({ id: 'tr-064.0.callmonitor.ringing' /* ringing */, change: 'ne' }, async (obj) => { //bei eingehendem Anruf
          var SSH = require('simple-ssh');
          var ssh_Bild = new SSH({
              host: '192.168.xx.xx',  //IP-Adresse des Raspi auf den der tr-064 Adater läuft
              user: 'xxxxxxxxxx',
              pass: 'xxxxxxxxxx'
          });
           
      
          if ((obj.state ? obj.state.val : "")) {
              (() => { if (timeout) { clearTimeout(timeout); timeout = null; }})();
              timeout = setTimeout(async () => {
                  timeout = null;
                  var bildpfad = getAttr(getState('tr-064.0.callmonitor.inbound.json').val, 'imageurlcaller'); //Pfad einschließlich Session-ID zum Bild in der Fritzbox 
                  if(bildpfad === undefined){
                      command = ['cp /home/pi/kiosk/Unbekannt.jpg /home/pi/kiosk/Anruferbild.jpg'].join(''); //Wenn kein Bild vorhanden dann "Unbekanntbild" anzeigen ...
                  }else{
                      command = ['curl -sL "',bildpfad,'" >/home/pi/kiosk/Anruferbild.jpg'].join(''); // ... sonst Anruferbild runterladen  ... 
                  }
                  ssh_Bild.exec(command).start(); // ... und ausführen
                  var angerufenerName = getAttr(getState('tr-064.0.callmonitor.inbound.json').val, 'calleeName');
                  setState("0_userdata.0.Anrufziel", angerufenerName);    //Anrufziel des eigehenden Anrufs setzen
                  
                  timeout = setTimeout(async () => {
                      timeout = null;
                      helligkeit(50,50);
                      setState("vis.0.control.instance", "FFFFFFFF"); 
                      AltBild = getState("vis.0.control.data").val;
                      setState("vis.0.control.data", "Hausautomation/Anruf"); 
                      setState("vis.0.control.command", 'changeView');  
                      setTimeout(zurueck,20000);
                  }, 2000);   
              }, 1500);
      
          } else {
              (() => { if (timeout) { clearTimeout(timeout); timeout = null; }})();
          }    
      })
      

      Im Skript sind, obwohl es problemlos läuft, noch ein paar Unsauberkeiten enthalten:

      e1ee85ae-3e5a-4de3-8a12-2a20cb605d33-image.png

      oder auch

      3649d8e1-70cd-4cff-bb96-3c8c05171774-image.png

      Vielleicht kann mir ja jemand einen Tipp geben, wie das zu beheben ist...

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

      Support us

      ioBroker
      Community Adapters
      Donate

      848
      Online

      31.6k
      Users

      79.5k
      Topics

      1.3m
      Posts

      1
      1
      580
      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