Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Pegelwerte Fritzbox 6490 Cable auslesen?

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Pegelwerte Fritzbox 6490 Cable auslesen?

    This topic has been deleted. Only users with topic management privileges can see it.
    • MartinP
      MartinP @wollerosekaufe last edited by MartinP

      @wollerosekaufe Die Kanalnummer wird in den Namen des Knoten mit einkodiert...

      Hier Kanal "1" (mit einer führenden "0")

      441f32c6-167b-4329-a9d9-c33b11401357-grafik.png

      Die Kanalnummer NICHT in die Knoten mit hereinzunehmen hat den Nachteil, dass man ggfs. Probleme kriegt, wenn die Fritzbox nach einem Neustart die Kanalnummern verwürfelt ...

      wollerosekaufe 1 Reply Last reply Reply Quote 0
      • wollerosekaufe
        wollerosekaufe @MartinP last edited by wollerosekaufe

        @martinp said in Pegelwerte Fritzbox 6490 Cable auslesen?:

        @wollerosekaufe Die Kanalnummer wird in den Namen des Knoten mit einkodiert...

        Hier Kanal "1" (mit einer führenden "0")

        441f32c6-167b-4329-a9d9-c33b11401357-grafik.png

        ne eben nicht, drum frag ich ja 🙂
        die sind genauso wie sie im script angelegt werden -> 01-30

        fb.jpg

        und diejenigen bei denen die nr. vom JSON string abweicht bleiben dadurch leer (?)
        fb.jpg

        MartinP 1 Reply Last reply Reply Quote 0
        • MartinP
          MartinP @wollerosekaufe last edited by MartinP

          @wollerosekaufe Da wäre aber Händische Korrektur durchaus möglich.
          Oben im ioBroker auf Administrator schalten
          92efc5c0-8364-4bbf-8ed1-5719a21cbd81-grafik.png

          Dann kann man die Datenpunkte umbenennen ...

          Eine Liste, wie ich das machen würde, habe ich irgendwo hier im Thread angelegt ...

          7e73c4e0-6bd8-46ba-be96-50bc65b1e68f-grafik.png

          wollerosekaufe 1 Reply Last reply Reply Quote 0
          • wollerosekaufe
            wollerosekaufe @MartinP last edited by

            @martinp
            joar das wäre ein möglicher workaround, so lange die channel ids noch nicht richtig angelegt/übernommen werden 🙂

            I 1 Reply Last reply Reply Quote 0
            • I
              ichderarnd @wollerosekaufe last edited by

              Bitte nicht die Kanäle umbenennen.
              Die Änderungen im Script sind fast fertig. Das Ganze läuft für meine Fritzbox gerade im Test.

              I 1 Reply Last reply Reply Quote 0
              • I
                ichderarnd @ichderarnd last edited by

                Das Script ist nun angepasst und läuft seit zwei Tagen bei mir im Test mit einer Fritzbox 6690 Cable mit Fritz OS 7.57.
                Ich bin wie gesagt bei der durchgehenden Nummerierung der Kanäle geblieben:

                • DOCSIS 3.1 Downstream: Bis 2 Kanäle C01 - C02
                • DOCSIS 3.0 Downstream: Bis 31 Kanäle C01 - C31
                • DOCSIS 3.1 Upstream: 1 Kanal C00
                • DOCSIS 3.0 Upstream: Bis 5 Kanäle C01 - C05

                Die Kanäle zählen ab 01 aufwärts mit einer Ausnahme: Der DOCSIS 3.1 Upstream läuft weiterhin als C00. Ich stelle ihn in Grafana zusammen mit den DOCSIS 3.0 Upstream Kanälen dar. So ist schön zu sehen, dass seit Wochen wieder der Rückkanal gestört ist:

                Screenshot 2023-11-12 083720.png

                Für die Darstellung der korrigierbaren und nicht korrigierbaren Fehler in Grafana verwende ich sowieso nicht die Kanalnummern sondern die Frequenzen. Das sieht dann z.B. wie folgt aus:

                Screenshot 2023-11-12 083340.png

                Die Kanalnummern, die in der Fritzbox angezeigt werden, übernehme ich nun ebenfalls in den Datenpunkt ChannelID für jeden Kanal. Sie können dann auch für die Darstellung in einer Auswertung verwendet werden. Allerdings scheinen sich diese ja gelegentlich je nach Fritz OS Version zu ändern.

                DOCSISinfoV2.zip

                MartinP 2 Replies Last reply Reply Quote 0
                • MartinP
                  MartinP @ichderarnd last edited by

                  @ichderarnd said in Pegelwerte Fritzbox 6490 Cable auslesen?:

                  Die Kanalnummern, die in der Fritzbox angezeigt werden, übernehme ich nun ebenfalls in den Datenpunkt ChannelID für jeden Kanal. Sie können dann auch für die Darstellung in einer Auswert

                  Danke für die Arbeit - ich habe (an meinem Anschluss) noch ein Problem festgestellt: Irgendwie scheint zwischendurch in einem der DOCSIS-3.1 Down Kanäle eine "0" gemeldet zu werden:

                  Im nächsten Durchlauf schlägt das Pendel dann wieder auf den Ursprungswert zurück...

                  0e4d32d9-c094-42eb-91bf-40adb3e93f97-grafik.png

                  Ist eigentlich kein Drama, aber die automatische Skalierung der Achsen lässt dann kein Urteil mehr über die "wahren" Fehler zu, weil der Maßstab kaputt ist..

                  Hat das Problem noch jemand?

                  I 1 Reply Last reply Reply Quote 0
                  • I
                    ichderarnd @MartinP last edited by

                    @MartinP
                    Bei meiner Fritzbox schwankt der Wert zwischen 0, 1 und 2 Fehlern pro Minute.
                    Er kann auf keinen Fall negativ werden. Welche Werte werden denn in der Fritzbox angezeigt? Dort muss die nicht korrigierbaren Fehleranzahl kontinuierlich steigen wenn es Fehler gibt. Aber niemals fallen, es sei denn, Du startest die Fritzbox neu.

                    MartinP 1 Reply Last reply Reply Quote 0
                    • W
                      Wolfshunter last edited by

                      Hallo,

                      ich habe das script mal bei mir eingesetzt, aber bisher wird scheinbar nur der Kanal C22
                      geloggt alle anderen werden nicht abgefragt. Muß ich noch irgendwas eintragen damit er
                      auch alle Kanäle überwacht und mitloggt?

                      Scheint so das man ja so mal seine Fritte gut überwachen kann so das man auch sehen
                      kann wie der aktuelle Zustand der Internet-Leitung ist.

                      Achja, ich habe das folgende Script genutzt:

                      
                      
                      var logging = true;
                      
                      const iconv = require('iconv-lite');
                      
                      const crypto = require('crypto');
                      
                       
                      
                      var DOCSIS30DSChannels = 0;
                      
                      var DOCSIS31DSChannels = 0;
                      
                      var DOCSIS30USChannels = 0;
                      
                      var DOCSIS31USChannels = 0;
                      
                       
                      
                      var sid;
                      
                      var fritzBenutzer = 'ioBroker';
                      
                      var fritzPasswort = '**********';
                      
                      var loginURL = 'http://192.168.178.1/login_sid.lua?username=';
                      
                      var docsisURL = 'http://192.168.178.1/data.lua';
                      
                       
                      
                      // Downstream DOCSIS 3.0
                      
                      for (var i = 1; i <= 31; i++){
                      
                          var Channel = 'C' + (i < 10 ? '0' + i.toString() : i.toString());
                      
                          createState('Internet.Docsis.DS.' + Channel + '.Frequency',                    0, false, {name: 'Frequency',  unit: 'MHz',      type: 'mixed', role: 'state'});
                      
                          createState('Internet.Docsis.DS.' + Channel + '.Modulation',                   0, false, {name: 'Modulation', unit: 'QAM',      type: 'mixed', role: 'state'});
                      
                          createState('Internet.Docsis.DS.' + Channel + '.PowerLevel',                   0, false, {name: 'PowerLevel', unit: 'dBmV',     type: 'mixed', role: 'state'});
                      
                          createState('Internet.Docsis.DS.' + Channel + '.MSE',                          0, false, {name: 'MSE',        unit: 'dB',       type: 'mixed', role: 'state'});
                      
                          createState('Internet.Docsis.DS.' + Channel + '.Latency',                      0, false, {name: 'Latency',    unit: 'ms',       type: 'mixed', role: 'state'});
                      
                          createState('Internet.Docsis.DS.' + Channel + '.CorrectableErrors',            0, false, {name: 'CorrectableErrors',            type: 'mixed', role: 'state'});
                      
                          createState('Internet.Docsis.DS.' + Channel + '.CorrectableErrorsPerMinute',   0, false, {name: 'CorrectableErrorsPerMinute',   type: 'mixed', role: 'state'});
                      
                          createState('Internet.Docsis.DS.' + Channel + '.UncorrectableErrors',          0, false, {name: 'UncorrectableErrors',          type: 'mixed', role: 'state'});
                      
                          createState('Internet.Docsis.DS.' + Channel + '.UncorrectableErrorsPerMinute', 0, false, {name: 'UncorrectableErrorsPerMinute', type: 'mixed', role: 'state'});
                      
                      }
                      
                       
                      
                      // Upstream DOCSIS 3.0
                      
                      for (var i = 0; i <= 5; i++){
                      
                          var Channel = 'C0' + i.toString();
                      
                          createState('Internet.Docsis.US.' + Channel + '.Frequency',       0, false, {name: 'Frequency',  unit: 'MHz',  type: 'mixed', role: 'state'});
                      
                          createState('Internet.Docsis.US.' + Channel + '.Modulation',      0, false, {name: 'Modulation', unit: 'QAM',  type: 'mixed', role: 'state'});
                      
                          createState('Internet.Docsis.US.' + Channel + '.MultiplexMethod', 0, false, {name: 'MultiplexMethod',          type: 'mixed', role: 'state'});
                      
                          createState('Internet.Docsis.US.' + Channel + '.PowerLevel',      0, false, {name: 'PowerLevel', unit: 'dBmV', type: 'mixed', role: 'state'});
                      
                      }
                      
                       
                      
                      // Downstream DOCSIS 3.1
                      
                      createState('Internet.Docsis31.DS.C01.Frequency',      0, false, {name: 'Frequency',  unit: 'MHz',    type: 'mixed', role: 'state'});
                      
                      createState('Internet.Docsis31.DS.C01.Type',           0, false, {name: 'Modulation', unit: 'K',      type: 'mixed', role: 'state'});
                      
                      createState('Internet.Docsis31.DS.C01.PowerLevel',     0, false, {name: 'PowerLevel', unit: 'dBmV',   type: 'mixed', role: 'state'});
                      
                       
                      
                      // Upstream DOCSIS 3.1
                      
                      createState('Internet.Docsis31.US.C00.Frequency',      0, false, {name: 'Frequency',  unit: 'MHz',    type: 'mixed', role: 'state'});
                      
                      createState('Internet.Docsis31.US.C00.Type',           0, false, {name: 'Modulation', unit: 'K',      type: 'mixed', role: 'state'});
                      
                      createState('Internet.Docsis31.US.C00.MultiplexMethod',0, false, {name: 'MultiplexMethod',            type: 'mixed', role: 'state'});
                      
                      createState('Internet.Docsis31.US.C00.PowerLevel',     0, false, {name: 'PowerLevel', unit: 'dBmV',   type: 'mixed', role: 'state'});
                      
                       
                      
                      /**
                      
                       * Simple XML parser
                      
                       * @param {String} xml
                      
                       * @return {Object}
                      
                       */
                      
                      function parseXML(xml) {
                      
                       
                      
                          var beg = -1;
                      
                          var end = 0;
                      
                          var tmp = 0;
                      
                          var current = [];
                      
                          var obj = {};
                      
                          var from = -1;
                      
                       
                      
                          while (true) {
                      
                       
                      
                              beg = xml.indexOf('<', beg + 1);
                      
                              if (beg === -1)
                      
                                  break;
                      
                       
                      
                              end = xml.indexOf('>', beg + 1);
                      
                              if (end === -1)
                      
                                  break;
                      
                       
                      
                              var el = xml.substring(beg, end + 1);
                      
                              var c = el[1];
                      
                       
                      
                              if (c === '?' || c === '/') {
                      
                       
                      
                                  var o = current.pop();
                      
                       
                      
                                  if (from === -1 || o !== el.substring(2, el.length - 1))
                      
                                      continue;
                      
                       
                      
                                  var path = current.join('.') + '.' + o;
                      
                                  var value = xml.substring(from, beg);
                      
                       
                      
                                  if (typeof(obj[path]) === 'undefined')
                      
                                      obj[path] = value;
                      
                                  else if (obj[path] instanceof Array)
                      
                                      obj[path].push(value);
                      
                                  else
                      
                                      obj[path] = [obj[path], value];
                      
                       
                      
                                  from = -1;
                      
                                  continue;
                      
                              }
                      
                       
                      
                              tmp = el.indexOf(' ');
                      
                              var hasAttributes = true;
                      
                       
                      
                              if (tmp === -1) {
                      
                                  tmp = el.length - 1;
                      
                                  hasAttributes = false;
                      
                              }
                      
                       
                      
                              from = beg + el.length;
                      
                       
                      
                              var isSingle = el[el.length - 2] === '/';
                      
                              var name = el.substring(1, tmp);
                      
                       
                      
                              if (!isSingle)
                      
                                  current.push(name);
                      
                       
                      
                              if (!hasAttributes)
                      
                                  continue;
                      
                       
                      
                              var match = el.match(/\w+\=\".*?\"/g);
                      
                              if (match === null)
                      
                                  continue;
                      
                       
                      
                              var attr = {};
                      
                              var length = match.length;
                      
                       
                      
                              for (var i = 0; i < length; i++) {
                      
                                  var index = match[i].indexOf('"');
                      
                                  attr[match[i].substring(0, index - 1)] = match[i].substring(index + 1, match[i].length - 1);
                      
                              }
                      
                       
                      
                              obj[current.join('.') + (isSingle ? '.' + name : '') + '[]'] = attr;
                      
                          }
                      
                       
                      
                          return obj;
                      
                      };
                      
                       
                      
                      function loginAndGetSID(){
                      
                       
                      
                          sid = null;
                      
                       
                      
                          // Challenge holen
                      
                          var options = {
                      
                              url: loginURL + fritzBenutzer,
                      
                              method: 'GET'
                      
                          };
                      
                          request(options, function(error, response, body) {
                      
                          if (!error && response.statusCode == 200) {
                      
                              //if (logging) log('error: ' + error + ', response: ' + JSON.stringify(response) + ', body: ' + body, 'info');
                      
                              var result = parseXML(body);
                      
                              var challenge = result['SessionInfo.Challenge'];
                      
                       
                      
                              // Einloggen und SID holen
                      
                              var utf16le_encoded = iconv.encode(challenge + '-' + fritzPasswort, 'UTF-16LE', {addBOM: false});
                      
                              var challengeResponse = crypto.createHash('md5').update(utf16le_encoded).digest('hex');
                      
                       
                      
                              options = {
                      
                                  url: loginURL + fritzBenutzer + '&response=' + challenge + '-' + challengeResponse,
                      
                                  method: 'GET'
                      
                              };
                      
                              request(options, function(error, response, body) {
                      
                                  if (!error && response.statusCode == 200) {
                      
                                      var result = parseXML(body);
                      
                                      sid = result['SessionInfo.SID'];
                      
                                      if (logging) log('Logged in. SID = ' + sid, 'info');
                      
                                  }
                      
                                  else {
                      
                                      log('error: ' + error + ', response: ' + response.statusCode.toString(), 'info');
                      
                                  }
                      
                              });
                      
                          }
                      
                          else {
                      
                              log('error: ' + error + ', response: ' + response.statusCode.toString(), 'info');
                      
                          }
                      
                          });
                      
                      }
                      
                       
                      
                      // Wenn keine Daten abgerufen werden konnten, werden die States auf NULL gesetzt
                      
                      function setStates2NullValues(){
                      
                       
                      
                          var NullValue = null;
                      
                       
                      
                          // DOCSIS 3.0 Downstream Channels
                      
                          for (i = 0; i < DOCSIS30DSChannels; i++) {
                      
                              setState('Internet.Docsis.DS.C' + (i < 10 ? '0' : '') + i.toString() + '.Frequency', NullValue, true);
                      
                              setState('Internet.Docsis.DS.C' + (i < 10 ? '0' : '') + i.toString() + '.Modulation', NullValue, true);
                      
                              setState('Internet.Docsis.DS.C' + (i < 10 ? '0' : '') + i.toString() + '.PowerLevel', NullValue, true);
                      
                              setState('Internet.Docsis.DS.C' + (i < 10 ? '0' : '') + i.toString() + '.MSE', NullValue, true);
                      
                              setState('Internet.Docsis.DS.C' + (i < 10 ? '0' : '') + i.toString() + '.Latency', NullValue, true);
                      
                              setState('Internet.Docsis.DS.C' + (i < 10 ? '0' : '') + i.toString() + '.CorrectableErrors', NullValue, true);
                      
                              setState('Internet.Docsis.DS.C' + (i < 10 ? '0' : '') + i.toString() + '.CorrectableErrorsPerMinute', NullValue, true);
                      
                              setState('Internet.Docsis.DS.C' + (i < 10 ? '0' : '') + i.toString() + '.UncorrectableErrors', NullValue, true);
                      
                              setState('Internet.Docsis.DS.C' + (i < 10 ? '0' : '') + i.toString() + '.UncorrectableErrorsPerMinute', NullValue, true);
                      
                          }
                      
                       
                      
                          // DOCSIS 3.1 Downstream Channel
                      
                          setState('Internet.Docsis31.DS.C01.PowerLevel', NullValue, true);
                      
                          setState('Internet.Docsis31.DS.C01.Type', NullValue, true);
                      
                          setState('Internet.Docsis31.DS.C01.Frequency', NullValue, true);
                      
                       
                      
                          // DOCSIS 3.0 Upstream Channels
                      
                          for (i = 0; i < DOCSIS30USChannels; i++) {
                      
                              setState('Internet.Docsis.US.C' + (i < 10 ? '0' : '') + i.toString() + '.Frequency', NullValue, true);
                      
                              setState('Internet.Docsis.US.C' + (i < 10 ? '0' : '') + i.toString() + '.Modulation', NullValue, true);
                      
                              setState('Internet.Docsis.US.C' + (i < 10 ? '0' : '') + i.toString() + '.MultiplexMethod', NullValue, true);
                      
                              setState('Internet.Docsis.US.C' + (i < 10 ? '0' : '') + i.toString() + '.PowerLevel', NullValue, true);
                      
                          }
                      
                       
                      
                          // DOCSIS 3.1 Upstream Channel
                      
                          setState('Internet.Docsis31.US.C00.PowerLevel', NullValue, true);
                      
                          setState('Internet.Docsis31.US.C00.Type', NullValue, true);
                      
                          setState('Internet.Docsis31.US.C00.MultiplexMethod', NullValue, true);
                      
                          setState('Internet.Docsis31.US.C00.Frequency', NullValue, true);
                      
                      }
                      
                       
                      
                      // Holt die Informationen von der Fritzbox Benutzeroberfläche. Ab fritz.OS Version 7.2x werden die Informationen als JSON-String übermittelt (getCableModemChannelInfos Version 2)
                      
                      function getCableModemChannelInfosV2(){
                      
                       
                      
                          var NullValue = null;
                      
                          var tableData;
                      
                       
                      
                          var options = {
                      
                              url: docsisURL,
                      
                              method: 'POST',
                      
                              headers: {
                      
                                  'Content-Type': 'application/x-www-form-urlencoded'
                      
                              },
                      
                              body: 'xhr=1&sid=' + sid + '&lang=de&page=docInfo&xhrId=all&no_sidrenew='
                      
                          };
                      
                          request(options, function(error, response, body) {
                      
                              if (!error && response.statusCode == 200) {
                      
                                  tableData = JSON.parse(body);
                      
                                  if(tableData){
                      
                                      //log(JSON.stringify(tableData), 'info');
                      
                                      
                      
                                      // DOCSIS 3.0 Downstream Channels
                      
                                      DOCSIS30DSChannels = Object.entries(tableData.data.channelDs.docsis30).length;
                      
                                      for (i = 0; i < DOCSIS30DSChannels; i++) {
                      
                       
                      
                                          var channelID = parseInt(tableData.data.channelDs.docsis30[i].channelID);
                      
                       
                      
                                          setState('Internet.Docsis.DS.C' + (channelID < 10 ? '0' : '') + tableData.data.channelDs.docsis30[i].channelID + '.Frequency', parseInt(tableData.data.channelDs.docsis30[i].frequency), true);
                      
                                          setState('Internet.Docsis.DS.C' + (channelID < 10 ? '0' : '') + tableData.data.channelDs.docsis30[i].channelID + '.Modulation', parseInt(tableData.data.channelDs.docsis30[i].type.replace('QAM', '')), true);
                      
                                          setState('Internet.Docsis.DS.C' + (channelID < 10 ? '0' : '') + tableData.data.channelDs.docsis30[i].channelID + '.PowerLevel', parseFloat(tableData.data.channelDs.docsis30[i].powerLevel), true);
                      
                                          setState('Internet.Docsis.DS.C' + (channelID < 10 ? '0' : '') + tableData.data.channelDs.docsis30[i].channelID + '.MSE', parseFloat(tableData.data.channelDs.docsis30[i].mse), true);
                      
                                          setState('Internet.Docsis.DS.C' + (channelID < 10 ? '0' : '') + tableData.data.channelDs.docsis30[i].channelID + '.Latency', parseFloat(tableData.data.channelDs.docsis30[i].latency), true);
                      
                       
                      
                                          var correctableErrors = getState('Internet.Docsis.DS.C' + (channelID < 10 ? '0' : '') + tableData.data.channelDs.docsis30[i].channelID + '.CorrectableErrors');
                      
                                          var lastValue = correctableErrors.val;
                      
                                          var ts_diff = new Date().getTime() - correctableErrors.ts;
                      
                                          var newValue = parseInt(tableData.data.channelDs.docsis30[i].corrErrors);
                      
                                          setState('Internet.Docsis.DS.C' + (channelID < 10 ? '0' : '') + tableData.data.channelDs.docsis30[i].channelID + '.CorrectableErrors', newValue, true);
                      
                                          // Die Differenz zum letzten Wert nur dann speichern, wenn dieser ca. 1 Min. alt ist
                      
                                          if (ts_diff > 50000 && ts_diff < 70000){
                      
                                              if (newValue > lastValue){
                      
                                                  setState('Internet.Docsis.DS.C' + (channelID < 10 ? '0' : '') + tableData.data.channelDs.docsis30[i].channelID + '.CorrectableErrorsPerMinute', newValue - lastValue, true);
                      
                                              }
                      
                                          }
                      
                                          else {
                      
                                              setState('Internet.Docsis.DS.C' + (channelID < 10 ? '0' : '') + tableData.data.channelDs.docsis30[i].channelID + '.CorrectableErrorsPerMinute', NullValue, true);
                      
                                          }
                      
                       
                      
                                          var uncorrectableErrors = getState('Internet.Docsis.DS.C' + (channelID < 10 ? '0' : '') + tableData.data.channelDs.docsis30[i].channelID + '.UncorrectableErrors');
                      
                                          var lastValue = uncorrectableErrors.val;
                      
                                          var ts_diff = new Date().getTime() - uncorrectableErrors.ts;
                      
                                          var newValue = parseInt(tableData.data.channelDs.docsis30[i].nonCorrErrors);
                      
                                          setState('Internet.Docsis.DS.C' + (channelID < 10 ? '0' : '') + tableData.data.channelDs.docsis30[i].channelID + '.UncorrectableErrors', newValue, true);
                      
                                          // Die Differenz zum letzten Wert nur dann speichern, wenn dieser ca. 1 Min. alt ist
                      
                                          if (ts_diff > 50000 && ts_diff < 70000){
                      
                                              if (newValue > lastValue){
                      
                                                  setState('Internet.Docsis.DS.C' + (channelID < 10 ? '0' : '') + tableData.data.channelDs.docsis30[i].channelID + '.UncorrectableErrorsPerMinute', newValue - lastValue, true);
                      
                                              }
                      
                                          }
                      
                                          else {
                      
                                              setState('Internet.Docsis.DS.C' + (channelID < 10 ? '0' : '') + tableData.data.channelDs.docsis30[i].channelID + '.UncorrectableErrorsPerMinute', NullValue, true);
                      
                                          }
                      
                                      }
                      
                       
                      
                                      // DOCSIS 3.1 Downstream Channel
                      
                                      if (tableData.data.channelDs.docsis31 != null){
                      
                                          DOCSIS31DSChannels = 1;
                      
                                          setState('Internet.Docsis31.DS.C01.PowerLevel', parseFloat(tableData.data.channelDs.docsis31[0].powerLevel), true);
                      
                                          setState('Internet.Docsis31.DS.C01.Type', parseInt(tableData.data.channelDs.docsis31[0].type.replace('K', '')), true);
                      
                                          setState('Internet.Docsis31.DS.C01.Frequency', tableData.data.channelDs.docsis31[0].frequency, true);
                      
                                      }
                      
                       
                      
                                      // DOCSIS 3.0 Upstream Channels
                      
                                      DOCSIS30USChannels = Object.entries(tableData.data.channelUs.docsis30).length;
                      
                                      for (i = 0; i < DOCSIS30USChannels; i++) {
                      
                                          var channelID = parseInt(tableData.data.channelUs.docsis30[i].channelID);
                      
                                          setState('Internet.Docsis.US.C' + (channelID < 10 ? '0' : '') + tableData.data.channelUs.docsis30[i].channelID + '.Frequency', parseInt(tableData.data.channelUs.docsis30[i].frequency), true);
                      
                                          setState('Internet.Docsis.US.C' + (channelID < 10 ? '0' : '') + tableData.data.channelUs.docsis30[i].channelID + '.Modulation', parseInt(tableData.data.channelUs.docsis30[i].type.replace('QAM', '')), true);
                      
                                          setState('Internet.Docsis.US.C' + (channelID < 10 ? '0' : '') + tableData.data.channelUs.docsis30[i].channelID + '.MultiplexMethod', tableData.data.channelUs.docsis30[i].multiplex, true);
                      
                                          setState('Internet.Docsis.US.C' + (channelID < 10 ? '0' : '') + tableData.data.channelUs.docsis30[i].channelID + '.PowerLevel', parseFloat(tableData.data.channelUs.docsis30[i].powerLevel), true);
                      
                                      }
                      
                       
                      
                                      // DOCSIS 3.1 Upstream Channel
                      
                                      if (tableData.data.channelUs.docsis31 != null){
                      
                                          DOCSIS31USChannels = 1;
                      
                                          setState('Internet.Docsis31.US.C00.PowerLevel', parseFloat(tableData.data.channelUs.docsis31[0].powerLevel), true);
                      
                                          setState('Internet.Docsis31.US.C00.Type', parseInt(tableData.data.channelUs.docsis31[0].type.replace('K', '')), true);
                      
                                          setState('Internet.Docsis31.US.C00.MultiplexMethod', tableData.data.channelUs.docsis31[0].multiplex, true);
                      
                                          setState('Internet.Docsis31.US.C00.Frequency', parseInt(tableData.data.channelUs.docsis31[0].frequency), true);
                      
                                      }
                      
                       
                      
                                  }
                      
                                  else{
                      
                                      log('Empty response', 'error');
                      
                                      setStates2NullValues();
                      
                                      loginAndGetSID();
                      
                                  }
                      
                              }
                      
                              else {
                      
                                  log('error: ' + error + ', response: ' + response.statusCode.toString(), 'error');
                      
                                  setStates2NullValues();
                      
                                  loginAndGetSID();
                      
                              }
                      
                          });
                      
                       
                      
                      }
                      
                       
                      
                      if (logging) log('DocsisInfo starting', 'info');
                      
                       
                      
                      // SID holen und merken (User Token)
                      
                      loginAndGetSID();
                      
                      var getSIDinterval = setInterval(loginAndGetSID, 900000);   // Alle 15 Minuten neue SID holen
                      
                       
                      
                      schedule("* * * * *", function() {                          // Zu jeder vollen Minute die Fritzbox DOCSIS-Daten abfragen
                      
                          getCableModemChannelInfosV2();
                      
                      });
                      
                       
                      
                      

                      Würde mich freuen wenn ich vielleicht noch das eine oder andere zusätzlich ins script einbauen kann so das ich vielleicht auch mal in regelmäßigen Abständen einen Speedtest machen kann. Habe schon bischen gelesen das hier im Posting dazu was geschrieben wurde.

                      Doch erstmal möchte ich das das Grundscript läuft und über alle Kanäle auch dann aufzeichnet bzw loggt.

                      S 1 Reply Last reply Reply Quote 0
                      • S
                        sugram @Wolfshunter last edited by

                        @wolfshunter

                        Das mit dem Speedtest habe ich von hier. https://www.kreyenborg.koeln/speedtest-fuer-iobroker/
                        Läuft einwandfrei

                        W 1 Reply Last reply Reply Quote 0
                        • W
                          Wolfshunter @sugram last edited by Wolfshunter

                          @sugram

                          Danke Dir, werde ich mirspäter mal anschauen. Doch erstmal hoffe ich das das Script richtig
                          läuft. Immer ein schritt nach dem anderen 🙂

                          Das zeigt er unter den Objekten an:

                          76f90714-f62a-458d-8782-4eaf8aa69a34-grafik.png

                          Da scheint es auch noch etwas arbeit zu geben 😞

                          I 1 Reply Last reply Reply Quote 0
                          • I
                            ichderarnd @Wolfshunter last edited by

                            @wolfshunter

                            Welche Fritzbox mit welcher Fritz OS Version ist das?

                            Guck bitte mal in meinen Beitrag weiter oben: https://forum.iobroker.net/post/1066896

                            W 1 Reply Last reply Reply Quote 0
                            • MartinP
                              MartinP @ichderarnd last edited by

                              @ichderarnd Die Fritzbox SELBER meldet ja gar nicht die Fehler pro Minute, sondern da läuft für jeden Kanal ein Zähler rauf, den das Skript Minütlich abfragt. Der Minutenwert ist dann die Differenz zwischen vorigem Zähler-Wert und aktuellem Wert.
                              Wenn da bei der Abfrage dann zwischendurch mal eine 0 statt des korrekten Standes gemeldet wird, gibt es dieses -/+ Muster ...

                              I 1 Reply Last reply Reply Quote 0
                              • I
                                ichderarnd @MartinP last edited by

                                @martinp
                                Verstehe…
                                Negative Werte muss ich im Script dann ignorieren. Kann ich einbauen.
                                Aber es scheint zu einem Fehler bei der Abfrage der Werte zu kommen. Das gilt es , herauszufinden. Ich überlege mir was.

                                MartinP 1 Reply Last reply Reply Quote 0
                                • W
                                  Wolfshunter @ichderarnd last edited by Wolfshunter

                                  @ichderarnd
                                  Ich habe eine Fritz 6591 mit der IOS Version 7.57

                                  Habe gerade das Script mal im Debug-Modus gestartet und bekomme dann folgendes Angezeigt in den logs:

                                  25b42919-469a-4ea1-a5c4-4021c5ef790c-grafik.png

                                  I 1 Reply Last reply Reply Quote 0
                                  • MartinP
                                    MartinP @ichderarnd last edited by

                                    @ichderarnd Ja, stattdessen eine "0" als Differenz wegschreiben wäre wahrscheinlich die pragmatischste Lösung.

                                    1 Reply Last reply Reply Quote 0
                                    • I
                                      ichderarnd @Wolfshunter last edited by

                                      @wolfshunter
                                      Hast Du die Version auf 2 stehen?
                                      Diese Meldung kommt eigentlich nur dann, wenn im Script Version 1 eingestellt ist.
                                      Nutzt Du das aktuellste Script (siehe ein paar Einträge weiter vorher)?

                                      MartinP W 2 Replies Last reply Reply Quote 1
                                      • MartinP
                                        MartinP @ichderarnd last edited by

                                        @ichderarnd Gibt es eigentlich Deine aktuelle Skript-Version nur hier im Thread, oder hast Du Die auch anderswo? Z. B. Github o. Ä.

                                        I 1 Reply Last reply Reply Quote 0
                                        • W
                                          Wolfshunter @ichderarnd last edited by

                                          @ichderarnd

                                          Danke für deine Antwort. Also ich nutze das Script aus der Datei:

                                          DOCSISinfoV2.zip

                                          Habe dort nur die IP eingetragen für meine Fritzbox und das Password meines ioBroker-Users
                                          auf der Fritzbox.

                                          Kann später nochmal das Script nehmen und es dann schauen ob ich dort noch irgendwas falsch
                                          drin habe. Aktuell bin ich nicht im Homeoffice. Zur Not werde ich einfach nochmal das Script neu
                                          machen und die Werte löschen die bisher gefunden wurden.

                                          W 1 Reply Last reply Reply Quote 0
                                          • MartinP
                                            MartinP @ichderarnd last edited by

                                            @ichderarnd said in Pegelwerte Fritzbox 6490 Cable auslesen?:

                                            ... ChannelID für jeden Kanal.... Allerdings scheinen sich diese ja gelegentlich je nach Fritz OS Version zu ändern.

                                            Das ist eher eine Frage des "Kabelsegments" und des darin eingesetzten "CMTS". Als in meinem "Kabelsegment" der Casa-CMTS durch einen von "Harmonic" ersetzt wurde, wurden auch die Kanalnummern durcheinandergewürfelt, ohne dass die Fritzbox eine neue Firmware bekommen hätte ...

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

                                            Support us

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

                                            1.0k
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            20
                                            199
                                            26068
                                            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