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

  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Pegelwerte Fritzbox 6490 Cable auslesen?

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.4k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.6k

Pegelwerte Fritzbox 6490 Cable auslesen?

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
199 Beiträge 20 Kommentatoren 44.8k Aufrufe 20 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.
  • I ichderarnd

    Ich werde das im Script anpassen. Aufgrund mehrerer Familienfeiern verzögert sich das noch etwas…

    MartinPM Online
    MartinPM Online
    MartinP
    schrieb am zuletzt editiert von
    #122

    @ichderarnd Vielleicht wären zwei Skripte sinnvoller - eines, was die Datenpunkte anlegt, und eines, was sie dann später zyklisch aktualisiert ...

    Eine andere Möglichkeit wäre ggfs. das Ignorieren der gemeldeten Kanalnummer, und stattdessen das Suchen nach dem passenden Datenpunkt über die Frequenz

    Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
    Virtualization : unprivileged lxc container (debian 12 on Proxmox 8.4.13)
    kernel Linux pve 6.8.12-15-pve
    6 GByte RAM für den Container
    Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
    Remote-Access über Wireguard der Fritzbox

    wollerosekaufeW 1 Antwort Letzte Antwort
    0
    • MartinPM MartinP

      @ichderarnd Vielleicht wären zwei Skripte sinnvoller - eines, was die Datenpunkte anlegt, und eines, was sie dann später zyklisch aktualisiert ...

      Eine andere Möglichkeit wäre ggfs. das Ignorieren der gemeldeten Kanalnummer, und stattdessen das Suchen nach dem passenden Datenpunkt über die Frequenz

      wollerosekaufeW Offline
      wollerosekaufeW Offline
      wollerosekaufe
      schrieb am zuletzt editiert von
      #123

      für mich zum verständnis, kann man in JS nicht "einfach" die channelIDs aus dem string nehmen?

      {"powerLevel":"3.5","nonCorrErrors":0,"modulation":"256QAM","corrErrors":318,"latency":0.32,"mse":"-40.4","channelID":8,"frequency":"618.000"}
      
      "channelID":8,"
      

      die stehen doch auch nirgends in den objekten - wird die denn nicht übernommen?
      oder bin ich blind? :)

      I MartinPM 2 Antworten Letzte Antwort
      0
      • wollerosekaufeW wollerosekaufe

        für mich zum verständnis, kann man in JS nicht "einfach" die channelIDs aus dem string nehmen?

        {"powerLevel":"3.5","nonCorrErrors":0,"modulation":"256QAM","corrErrors":318,"latency":0.32,"mse":"-40.4","channelID":8,"frequency":"618.000"}
        
        "channelID":8,"
        

        die stehen doch auch nirgends in den objekten - wird die denn nicht übernommen?
        oder bin ich blind? :)

        I Offline
        I Offline
        ichderarnd
        schrieb am zuletzt editiert von
        #124

        @wollerosekaufe
        Eigentlich ist die aktuelle Variante die allgemeinere Lösung. Denn selbst wenn die Kanäle mit der nächsten FritzOS Version anders nummeriert werden, passen die History-Einstellungen noch. Ich werd‘s mir noch ansehen.

        1 Antwort Letzte Antwort
        0
        • wollerosekaufeW wollerosekaufe

          für mich zum verständnis, kann man in JS nicht "einfach" die channelIDs aus dem string nehmen?

          {"powerLevel":"3.5","nonCorrErrors":0,"modulation":"256QAM","corrErrors":318,"latency":0.32,"mse":"-40.4","channelID":8,"frequency":"618.000"}
          
          "channelID":8,"
          

          die stehen doch auch nirgends in den objekten - wird die denn nicht übernommen?
          oder bin ich blind? :)

          MartinPM Online
          MartinPM Online
          MartinP
          schrieb am zuletzt editiert von MartinP
          #125

          @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 ...

          Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
          Virtualization : unprivileged lxc container (debian 12 on Proxmox 8.4.13)
          kernel Linux pve 6.8.12-15-pve
          6 GByte RAM für den Container
          Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
          Remote-Access über Wireguard der Fritzbox

          wollerosekaufeW 1 Antwort Letzte Antwort
          0
          • MartinPM 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 ...

            wollerosekaufeW Offline
            wollerosekaufeW Offline
            wollerosekaufe
            schrieb am zuletzt editiert von wollerosekaufe
            #126

            @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

            MartinPM 1 Antwort Letzte Antwort
            0
            • wollerosekaufeW 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

              MartinPM Online
              MartinPM Online
              MartinP
              schrieb am zuletzt editiert von MartinP
              #127

              @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

              Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
              Virtualization : unprivileged lxc container (debian 12 on Proxmox 8.4.13)
              kernel Linux pve 6.8.12-15-pve
              6 GByte RAM für den Container
              Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
              Remote-Access über Wireguard der Fritzbox

              wollerosekaufeW 1 Antwort Letzte Antwort
              0
              • MartinPM 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

                wollerosekaufeW Offline
                wollerosekaufeW Offline
                wollerosekaufe
                schrieb am zuletzt editiert von
                #128

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

                I 1 Antwort Letzte Antwort
                0
                • wollerosekaufeW wollerosekaufe

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

                  I Offline
                  I Offline
                  ichderarnd
                  schrieb am zuletzt editiert von
                  #129

                  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 Antwort Letzte Antwort
                  0
                  • I ichderarnd

                    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 Offline
                    I Offline
                    ichderarnd
                    schrieb am zuletzt editiert von
                    #130

                    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

                    MartinPM 2 Antworten Letzte Antwort
                    0
                    • I ichderarnd

                      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

                      MartinPM Online
                      MartinPM Online
                      MartinP
                      schrieb am zuletzt editiert von
                      #131

                      @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?

                      Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                      Virtualization : unprivileged lxc container (debian 12 on Proxmox 8.4.13)
                      kernel Linux pve 6.8.12-15-pve
                      6 GByte RAM für den Container
                      Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
                      Remote-Access über Wireguard der Fritzbox

                      I 1 Antwort Letzte Antwort
                      0
                      • MartinPM MartinP

                        @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 Offline
                        I Offline
                        ichderarnd
                        schrieb am zuletzt editiert von
                        #132

                        @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.

                        MartinPM 1 Antwort Letzte Antwort
                        0
                        • W Offline
                          W Offline
                          Wolfshunter
                          schrieb am zuletzt editiert von
                          #133

                          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 Antwort Letzte Antwort
                          0
                          • W Wolfshunter

                            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 Offline
                            S Offline
                            sugram
                            schrieb am zuletzt editiert von
                            #134

                            @wolfshunter

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

                            W 1 Antwort Letzte Antwort
                            0
                            • S sugram

                              @wolfshunter

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

                              W Offline
                              W Offline
                              Wolfshunter
                              schrieb am zuletzt editiert von Wolfshunter
                              #135

                              @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 Antwort Letzte Antwort
                              0
                              • W 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 Offline
                                I Offline
                                ichderarnd
                                schrieb am zuletzt editiert von
                                #136

                                @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 Antwort Letzte Antwort
                                0
                                • I ichderarnd

                                  @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.

                                  MartinPM Online
                                  MartinPM Online
                                  MartinP
                                  schrieb am zuletzt editiert von
                                  #137

                                  @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 ...

                                  Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                                  Virtualization : unprivileged lxc container (debian 12 on Proxmox 8.4.13)
                                  kernel Linux pve 6.8.12-15-pve
                                  6 GByte RAM für den Container
                                  Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
                                  Remote-Access über Wireguard der Fritzbox

                                  I 1 Antwort Letzte Antwort
                                  0
                                  • MartinPM MartinP

                                    @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 Offline
                                    I Offline
                                    ichderarnd
                                    schrieb am zuletzt editiert von
                                    #138

                                    @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.

                                    MartinPM 1 Antwort Letzte Antwort
                                    0
                                    • I ichderarnd

                                      @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 Offline
                                      W Offline
                                      Wolfshunter
                                      schrieb am zuletzt editiert von Wolfshunter
                                      #139

                                      @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 Antwort Letzte Antwort
                                      0
                                      • I ichderarnd

                                        @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.

                                        MartinPM Online
                                        MartinPM Online
                                        MartinP
                                        schrieb am zuletzt editiert von
                                        #140

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

                                        Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                                        Virtualization : unprivileged lxc container (debian 12 on Proxmox 8.4.13)
                                        kernel Linux pve 6.8.12-15-pve
                                        6 GByte RAM für den Container
                                        Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
                                        Remote-Access über Wireguard der Fritzbox

                                        1 Antwort Letzte Antwort
                                        0
                                        • W 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 Offline
                                          I Offline
                                          ichderarnd
                                          schrieb am zuletzt editiert von
                                          #141

                                          @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)?

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


                                          Support us

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

                                          708

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          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