Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JSON Tabelle - Clients aus Fritzbox auslesen

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    15
    1
    503

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    616

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.9k

JSON Tabelle - Clients aus Fritzbox auslesen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
4 Beiträge 3 Kommentatoren 619 Aufrufe 5 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • liv-in-skyL Offline
    liv-in-skyL Offline
    liv-in-sky
    schrieb am zuletzt editiert von liv-in-sky
    #1

    danke an @MCU für die vorlage - kommt von: https://forum.iobroker.net/post/949240

    das script erzeugt eine json tabelle (z.b json inventwo widget) für die vis aus der Fritzbox ausgelesen (active Clients)

    • im javascript setting muss xml-js als zusätzliche node angegeben werden
    • es muss der tr064 adapter für die fritzbbox installiert sein
    • datenpunkt(zeichenkette) muss selber angelegt und im script eingetragen werden

    Image 217.png

    
    //@liv-in-sky 18.02.2023-17:13
    //dank an @MCU für die Vorlage
    var convert = require('xml-js');
    let wlan = '1'; // 1 -> 2.4GHz ( für diesen Fall missverständlich )
    let fritzCommandDP = 'tr-064.0.states.command';
    let fritzResultDP = 'tr-064.0.states.commandResult';
    let ipFritzBox='192.168.178.1'
    let dataPoint='0_userdata.0.FritzBoxDevices' 
    let cmdHostListPath     = {'service': 'urn:dslforum-org:service:Hosts:'+wlan,'action': 'X_AVM-DE_GetHostListPath','params': {}};
    
    sendCMD(JSON.stringify(cmdHostListPath));
    
    schedule("*/5 * * * *", async function () {
                                              sendCMD(JSON.stringify(cmdHostListPath));
                                               });
    
    
    async function sendCMD(cmd) {
       setState(fritzCommandDP, cmd);
       const obj = await once({ id: fritzResultDP });
       // log("Erg: " + obj.state.val);
       let erg = JSON.parse(obj.state.val);
       // log(erg["NewX_AVM-DE_HostListPath"]);
       const request = require('request');
    
       request('http://'+ipFritzBox+':49000'+erg["NewX_AVM-DE_HostListPath"], { json: true }, (err, res, body) => {
       if (err) { return console.log(err); } else{}
           //console.log(body.url);
           //console.log(body.explanation);
           //console.log(res);
          // console.log(body);
           var result2 = JSON.parse(convert.xml2json(body, {compact: true, spaces: 2, ignoreAttributes:true}));
             //  console.log(result2); 
           let myJsonResult=[]
           let myJsonBest=result2.List ;
           let theNameDate="NAME (Last Update: "+formatDate(getDateObject((new Date().getTime())), "SS:mm - TT.MM.")+")";
           for (let i=0;i<myJsonBest.Item.length;i++){
               if(myJsonBest.Item[i].Active["_text"]==1){
               myJsonResult.push({
                   [theNameDate]:myJsonBest.Item[i].HostName["_text"],
                   "IP":myJsonBest.Item[i].IPAddress["_text"],
                   "MAC":myJsonBest.Item[i].MACAddress["_text"] })
               }
           }
            //log(JSON.stringify(myJsonResult))
               setState(dataPoint,JSON.stringify(myJsonResult))
       });  
    }
    
    
    
    
    
    
    
    
    

    nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

    1 Antwort Letzte Antwort
    4
    • falke69F Offline
      falke69F Offline
      falke69
      schrieb am zuletzt editiert von
      #2

      Hallo @liv-in-sky, ich weiß nicht ,ob Du oder jemand anders noch das Script nutzt.
      Wäre es vielleicht möglich, (falls es Deine Zeit erlaubt) dass Du es auf "httpGet" umstellen kannst?
      Ich habe alles versucht, leider ohne Erfolg.

      Vielen Dank

      haus-automatisierungH 1 Antwort Letzte Antwort
      0
      • falke69F falke69

        Hallo @liv-in-sky, ich weiß nicht ,ob Du oder jemand anders noch das Script nutzt.
        Wäre es vielleicht möglich, (falls es Deine Zeit erlaubt) dass Du es auf "httpGet" umstellen kannst?
        Ich habe alles versucht, leider ohne Erfolg.

        Vielen Dank

        haus-automatisierungH Offline
        haus-automatisierungH Offline
        haus-automatisierung
        Developer Most Active
        schrieb am zuletzt editiert von haus-automatisierung
        #3

        Das Script ist ja wild. Hier eine überarbeitete Version (nicht getestet mangels Hardware):

        // @liv-in-sky 18.02.2023-17:13
        // @haus-automatisierung.com 07.11.2024-12:12
        // dank an @MCU für die Vorlage
        const convert = require('xml-js');
        
        const wlan = '1'; // 1 -> 2.4GHz (für diesen Fall missverständlich)
        const fritzCommandDP = 'tr-064.0.states.command';
        const fritzResultDP = 'tr-064.0.states.commandResult';
        const ipFritzBox = '192.168.178.1';
        const dataPoint = '0_userdata.0.FritzBoxDevices';
        const cmdHostListPath = {
            service: `urn:dslforum-org:service:Hosts:${wlan}`,
            action: 'X_AVM-DE_GetHostListPath',
            params: {}
        };
         
        async function sendCMD() {
            setState(fritzCommandDP, JSON.stringify(cmdHostListPath));
        
            const obj = await once({ id: fritzResultDP });
            const erg = JSON.parse(obj.state.val);
        
            httpGet(`http://${ipFritzBox}:49000${erg['NewX_AVM-DE_HostListPath']}`, { timeout: 3000 }, (err, response) => {
                if (!err) {
                    const theNameDate = `NAME (Last Update: ${formatDate(Date.now(), 'SS:mm - TT.MM.')})`;
        
                    const result = JSON.parse(convert.xml2json(response.data, { compact: true, spaces: 2, ignoreAttributes:true }));
        
                    const tableData = [];
                    const resultList = result.List;
        
                    for (let i = 0; i < resultList.Item.length; i++) {
                        if (resultList.Item[i].Active['_text'] == 1) {
                            tableData.push({
                                [theNameDate]: resultList.Item[i].HostName['_text'],
                                IP: resultList.Item[i].IPAddress['_text'],
                                MAC: resultList.Item[i].MACAddress['_text'],
                            });
                        }
                    }
        
                    setState(dataPoint, { val: JSON.stringify(tableData), ack: true });
                } else {
                    console.log(err);
                }
            });
        }
        
        schedule('*/5 * * * *', sendCMD);
        sendCMD();
        

        🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
        🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
        📚 Meine inoffizielle ioBroker Dokumentation

        falke69F 1 Antwort Letzte Antwort
        1
        • haus-automatisierungH haus-automatisierung

          Das Script ist ja wild. Hier eine überarbeitete Version (nicht getestet mangels Hardware):

          // @liv-in-sky 18.02.2023-17:13
          // @haus-automatisierung.com 07.11.2024-12:12
          // dank an @MCU für die Vorlage
          const convert = require('xml-js');
          
          const wlan = '1'; // 1 -> 2.4GHz (für diesen Fall missverständlich)
          const fritzCommandDP = 'tr-064.0.states.command';
          const fritzResultDP = 'tr-064.0.states.commandResult';
          const ipFritzBox = '192.168.178.1';
          const dataPoint = '0_userdata.0.FritzBoxDevices';
          const cmdHostListPath = {
              service: `urn:dslforum-org:service:Hosts:${wlan}`,
              action: 'X_AVM-DE_GetHostListPath',
              params: {}
          };
           
          async function sendCMD() {
              setState(fritzCommandDP, JSON.stringify(cmdHostListPath));
          
              const obj = await once({ id: fritzResultDP });
              const erg = JSON.parse(obj.state.val);
          
              httpGet(`http://${ipFritzBox}:49000${erg['NewX_AVM-DE_HostListPath']}`, { timeout: 3000 }, (err, response) => {
                  if (!err) {
                      const theNameDate = `NAME (Last Update: ${formatDate(Date.now(), 'SS:mm - TT.MM.')})`;
          
                      const result = JSON.parse(convert.xml2json(response.data, { compact: true, spaces: 2, ignoreAttributes:true }));
          
                      const tableData = [];
                      const resultList = result.List;
          
                      for (let i = 0; i < resultList.Item.length; i++) {
                          if (resultList.Item[i].Active['_text'] == 1) {
                              tableData.push({
                                  [theNameDate]: resultList.Item[i].HostName['_text'],
                                  IP: resultList.Item[i].IPAddress['_text'],
                                  MAC: resultList.Item[i].MACAddress['_text'],
                              });
                          }
                      }
          
                      setState(dataPoint, { val: JSON.stringify(tableData), ack: true });
                  } else {
                      console.log(err);
                  }
              });
          }
          
          schedule('*/5 * * * *', sendCMD);
          sendCMD();
          
          falke69F Offline
          falke69F Offline
          falke69
          schrieb am zuletzt editiert von
          #4

          @haus-automatisierung

          Vielen herzlichen Dank für Deine Bemühungen.
          Es scheint aktuell zu laufen!

          Danke!

          1 Antwort Letzte Antwort
          0
          Antworten
          • In einem neuen Thema antworten
          Anmelden zum Antworten
          • Älteste zuerst
          • Neuste zuerst
          • Meiste Stimmen


          Support us

          ioBroker
          Community Adapters
          Donate

          372

          Online

          32.6k

          Benutzer

          81.9k

          Themen

          1.3m

          Beiträge
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
          ioBroker Community 2014-2025
          logo
          • Anmelden

          • Du hast noch kein Konto? Registrieren

          • Anmelden oder registrieren, um zu suchen
          • Erster Beitrag
            Letzter Beitrag
          0
          • Home
          • Aktuell
          • Tags
          • Ungelesen 0
          • Kategorien
          • Unreplied
          • Beliebt
          • GitHub
          • Docu
          • Hilfe