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

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

Community Forum

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

NEWS

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

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

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

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.
  • wollerosekaufeW wollerosekaufe

    wow, ein service hier :) :)

    €
    FB läuft auf 7.57, 6660 Cable

    @ichderarnd
    hab mal das draus gemacht
    (das log level vom JS adapter ist auf error gestellt, da kommen sonst schnell paar 100mb log zusammen)

    log(JSON.stringify(tableData), 'error');   /** debug **/
    

    hier der JSON dazu - steht ja nix geheimes drin, so haben alle was davon

    script.js.fritzbox: {"pid":"docInfo","hide":{"mobile":true,"liveTv":true,"ssoSet":true,"shareUsb":true,"rrd":true},"timeTillLogout":"1142","time":[],"data":{"channelDs":{"docsis31":[{"powerLevel":"5.6","nonCorrErrors":74899,"modulation":"4096QAM","plc":"264","mer":"44","fft":"4K","channelID":193,"frequency":"134.975 - 324.975"}],"docsis30":[{"powerLevel":"4.2","nonCorrErrors":0,"modulation":"256QAM","corrErrors":211,"latency":0.32,"mse":"-40.4","channelID":11,"frequency":"642.000"},{"powerLevel":"4.2","nonCorrErrors":0,"modulation":"256QAM","corrErrors":310,"latency":0.32,"mse":"-40.4","channelID":3,"frequency":"570.000"},{"powerLevel":"4.0","nonCorrErrors":0,"modulation":"256QAM","corrErrors":300,"latency":0.32,"mse":"-40.9","channelID":4,"frequency":"578.000"},{"powerLevel":"3.8","nonCorrErrors":0,"modulation":"256QAM","corrErrors":347,"latency":0.32,"mse":"-40.9","channelID":5,"frequency":"586.000"},{"powerLevel":"3.6","nonCorrErrors":0,"modulation":"256QAM","corrErrors":347,"latency":0.32,"mse":"-40.9","channelID":6,"frequency":"594.000"},{"powerLevel":"3.5","nonCorrErrors":0,"modulation":"256QAM","corrErrors":270,"latency":0.32,"mse":"-40.9","channelID":7,"frequency":"602.000"},{"powerLevel":"3.5","nonCorrErrors":0,"modulation":"256QAM","corrErrors":318,"latency":0.32,"mse":"-40.4","channelID":8,"frequency":"618.000"},{"powerLevel":"3.5","nonCorrErrors":13,"modulation":"256QAM","corrErrors":330,"latency":0.32,"mse":"-40.4","channelID":9,"frequency":"626.000"},{"powerLevel":"3.7","nonCorrErrors":0,"modulation":"256QAM","corrErrors":271,"latency":0.32,"mse":"-40.9","channelID":10,"frequency":"634.000"},{"powerLevel":"4.5","nonCorrErrors":0,"modulation":"256QAM","corrErrors":173,"latency":0.32,"mse":"-40.9","channelID":12,"frequency":"650.000"},{"powerLevel":"4.8","nonCorrErrors":0,"modulation":"256QAM","corrErrors":159,"latency":0.32,"mse":"-40.4","channelID":13,"frequency":"658.000"},{"powerLevel":"4.9","nonCorrErrors":0,"modulation":"256QAM","corrErrors":130,"latency":0.32,"mse":"-40.4","channelID":14,"frequency":"666.000"},{"powerLevel":"4.9","nonCorrErrors":0,"modulation":"256QAM","corrErrors":116,"latency":0.32,"mse":"-40.4","channelID":15,"frequency":"674.000"},{"powerLevel":"5.0","nonCorrErrors":0,"modulation":"256QAM","corrErrors":77,"latency":0.32,"mse":"-40.9","channelID":16,"frequency":"682.000"},{"powerLevel":"5.1","nonCorrErrors":0,"modulation":"256QAM","corrErrors":34,"latency":0.32,"mse":"-40.9","channelID":17,"frequency":"690.000"},{"powerLevel":"-1.2","nonCorrErrors":0,"modulation":"64QAM","corrErrors":17,"latency":0.32,"mse":"-37.6","channelID":67,"frequency":"714.000"},{"powerLevel":"-1.7","nonCorrErrors":1716,"modulation":"64QAM","corrErrors":3372,"latency":0.32,"mse":"-37.3","channelID":68,"frequency":"722.000"},{"powerLevel":"-2.6","nonCorrErrors":1200,"modulation":"64QAM","corrErrors":2945,"latency":0.32,"mse":"-37.3","channelID":69,"frequency":"730.000"},{"powerLevel":"-4.0","nonCorrErrors":0,"modulation":"64QAM","corrErrors":19,"latency":0.32,"mse":"-36.3","channelID":70,"frequency":"738.000"},{"powerLevel":"-4.2","nonCorrErrors":0,"modulation":"64QAM","corrErrors":20,"latency":0.32,"mse":"-36.6","channelID":71,"frequency":"746.000"},{"powerLevel":"-2.5","nonCorrErrors":0,"modulation":"64QAM","corrErrors":13,"latency":0.32,"mse":"-37.3","channelID":72,"frequency":"754.000"},{"powerLevel":"-1.4","nonCorrErrors":0,"modulation":"64QAM","corrErrors":8,"latency":0.32,"mse":"-37.6","channelID":73,"frequency":"762.000"},{"powerLevel":"-1.0","nonCorrErrors":0,"modulation":"64QAM","corrErrors":7,"latency":0.32,"mse":"-37.6","channelID":74,"frequency":"770.000"},{"powerLevel":"-0.9","nonCorrErrors":0,"modulation":"64QAM","corrErrors":10,"latency":0.32,"mse":"-37.6","channelID":75,"frequency":"778.000"},{"powerLevel":"-0.8","nonCorrErrors":0,"modulation":"64QAM","corrErrors":7,"latency":0.32,"mse":"-38.6","channelID":76,"frequency":"786.000"},{"powerLevel":"-0.9","nonCorrErrors":0,"modulation":"64QAM","corrErrors":5,"latency":0.32,"mse":"-37.6","channelID":77,"frequency":"794.000"},{"powerLevel":"-1.0","nonCorrErrors":0,"modulation":"64QAM","corrErrors":6,"latency":0.32,"mse":"-37.6","channelID":78,"frequency":"802.000"},{"powerLevel":"-1.1","nonCorrErrors":0,"modulation":"64QAM","corrErrors":3,"latency":0.32,"mse":"-38.9","channelID":79,"frequency":"810.000"}]},"oem":"avm","readyState":"ready","channelUs":{"docsis31":[{"powerLevel":"37.5","modulation":"32QAM","activesub":"640","fft":"2K","channelID":41,"frequency":"29.775 - 64.775"}],"docsis30":[{"powerLevel":"42.5","modulation":"16QAM","multiplex":"ATDMA","channelID":3,"frequency":"37.201"},{"powerLevel":"43.5","modulation":"16QAM","multiplex":"ATDMA","channelID":4,"frequency":"30.801"},{"powerLevel":"43.5","modulation":"16QAM","multiplex":"ATDMA","channelID":1,"frequency":"51.001"},{"powerLevel":"42.5","modulation":"16QAM","multiplex":"ATDMA","channelID":2,"frequency":"44.601"}]}},"sid":"0123456789"}
    

    (SID rausgenommen)

    @martinp said in Pegelwerte Fritzbox 6490 Cable auslesen?:

    da scheinen die Kanäle nicht fortlaufend nummeriert zu sein ..
    nicht mal im ansatz - aber reihenfolge ist genau so wie im menü der FB, bekomm's nur nicht sinnvoll auf einen screenshot
    kann ich morgen aber gern nachreichen, wenn da doch was wichtiges zu sehen ist....?

    die kanalnummern waren hier btw "schon immer" so, auch ohne fehler... wüsst zumindest nicht dass die jemals durchgängig nummeriert gewesen wären

    und die datenpunkte kann ich alle nochmal löschen und herumtesten, wenn das hilfreich ist
    bin noch nicht im produktivbetrieb :P ;)

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

    @wollerosekaufe
    Damit kann ich heute Abend testen. Ich denke auch, dass es an der Kanal-Nummerierung liegt.
    Ich verstehe leider nicht viel von den dargestellten Werten, denke aber, dass Du sie mal im vodafonekabelforum.de vorstellen und diskutieren lassen solltest. Die Downstream-Kanäle sind teilweise nur auf 64QAM, der Upstream nur auf 16QAM. Die Powerlevel driften zu weit auseinander.
    Auch der DOCSIS 3.1 Upstream hat nicht die volle Leistung.
    Die nicht behebbaren Fehler sollten alle auf 0 sein.

    S wollerosekaufeW 2 Antworten Letzte Antwort
    0
    • I ichderarnd

      @wollerosekaufe
      Damit kann ich heute Abend testen. Ich denke auch, dass es an der Kanal-Nummerierung liegt.
      Ich verstehe leider nicht viel von den dargestellten Werten, denke aber, dass Du sie mal im vodafonekabelforum.de vorstellen und diskutieren lassen solltest. Die Downstream-Kanäle sind teilweise nur auf 64QAM, der Upstream nur auf 16QAM. Die Powerlevel driften zu weit auseinander.
      Auch der DOCSIS 3.1 Upstream hat nicht die volle Leistung.
      Die nicht behebbaren Fehler sollten alle auf 0 sein.

      S Offline
      S Offline
      sugram
      schrieb am zuletzt editiert von sugram
      #116

      Nun ja, ich habe auch "einige" nicht korrigierbare Fehler, aber es läuft soweit bei mir ganz gut.

      Bild_2023-10-25_131943675.png

      Auch bei DOCSIS 3.0 hab ich da einige

      Bild_2023-10-25_132058140.png

      Wegen Werte usw, kann ich noch das Forum https://www.vodafonekabelforum.de/ empfehlen, dort wird einem auch weitergeholfen.
      Nun ja, nicht von Mitarbeitern, aber zumindest bekommt man hier einige Infos was am Anschluß nicht stimmt

      Mache alle 30 min mal einen speedtest, so schaut das bei mir aus.

      Upload
      Bild_2023-10-25_132646841.png

      Download
      Screenshot 2023-10-25 132500.jpg

      MartinPM 1 Antwort Letzte Antwort
      0
      • S sugram

        Nun ja, ich habe auch "einige" nicht korrigierbare Fehler, aber es läuft soweit bei mir ganz gut.

        Bild_2023-10-25_131943675.png

        Auch bei DOCSIS 3.0 hab ich da einige

        Bild_2023-10-25_132058140.png

        Wegen Werte usw, kann ich noch das Forum https://www.vodafonekabelforum.de/ empfehlen, dort wird einem auch weitergeholfen.
        Nun ja, nicht von Mitarbeitern, aber zumindest bekommt man hier einige Infos was am Anschluß nicht stimmt

        Mache alle 30 min mal einen speedtest, so schaut das bei mir aus.

        Upload
        Bild_2023-10-25_132646841.png

        Download
        Screenshot 2023-10-25 132500.jpg

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

        @sugram So meinte ich das nicht - Wenn die Kanalnummern verwürfelt sind aber dabei nur Zahlen bis zur Anzahl der Kanale vorkommen, ist ja alles in Ordnung

        Für meine vier Docsis 3.0 Upstreams werden von Vodafone die Nummern 7,8,9,10 gewürfelt. 3,2,4,1 würde hingegen passen ...

        Ich meine an irgendeiner Stelle wird die Kanalnummer später im Skript als Index genutzt, um die Werte in einem beim Start angelegten Array zu aktualisieren - was bei Kanalnummern außerhalb der Arraygröße nur schiefgehen kann ...

        NACHTRAG:

        Ich habe mal zwei Code-Schnipsel extrahiert die das Problem zeigen:

        Hier der Beginn der DOCSIS3.0 Downstream-Tabellen-Initialisierung - 30 Elemente für die Channels 1...30

        // Downstream DOCSIS 3.0
        for (var i = 1; i <= 30; 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'});
        ....
        

        Hier der Beginn der Auswertung einer aus der Fritzbox empfangenen Auslese-Zeile der DOCSIS3.0 Kanaltabelle - da wird die übergebene Kanalnummer in den String eingebaut, der dem setState Aufruf übergeben wird.

                      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);
        
        

        wenn die channelID außerhalb 1....30 liegt, geht das schief.
        Ich bastele an anderer Stelle anstatt der extrahierten Channel-ID einfach (i+1) in den setState String ein ...

        Bei den DOCSIS 3.0 Channels ist das bei mir aber (noch?) nicht nötig. Aktuell bewegen sich die von der Fritzbox gemeldeten DOCSIS 3.0 Channel-IDs alle im Bereich 1....30

        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
        • I ichderarnd

          @wollerosekaufe
          Damit kann ich heute Abend testen. Ich denke auch, dass es an der Kanal-Nummerierung liegt.
          Ich verstehe leider nicht viel von den dargestellten Werten, denke aber, dass Du sie mal im vodafonekabelforum.de vorstellen und diskutieren lassen solltest. Die Downstream-Kanäle sind teilweise nur auf 64QAM, der Upstream nur auf 16QAM. Die Powerlevel driften zu weit auseinander.
          Auch der DOCSIS 3.1 Upstream hat nicht die volle Leistung.
          Die nicht behebbaren Fehler sollten alle auf 0 sein.

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

          @MartinP @sugram
          @ichderarnd said in Pegelwerte Fritzbox 6490 Cable auslesen?:

          Die Downstream-Kanäle sind teilweise nur auf 64QAM, der Upstream nur auf 16QAM. Die Powerlevel driften zu weit auseinander.
          Auch der DOCSIS 3.1 Upstream hat nicht die volle Leistung.
          Die nicht behebbaren Fehler sollten alle auf 0 sein.

          ja die werte sind immer wieder katastrophal, drum will ich die mal mitloggen - so bin ich hier gelandet ;)

          hast du dir das script einmal ansehen können?
          habe von JS leider keinerlei ahnung. insofern verzeih(t) meine törichten gedanken :D
          aber was mich wundert, ist sozusagen dass das mit den IDs "überhaupt ein problem ist"...

          im JSON string sind doch alle channel IDs der fritzbox korrekt - die finde ich den objekten im iobroker aber nirgends. wird die ID denn nicht gelogged? damit wäre das problem doch erledigt, weil alle IDs eindeutig sind. (und man würde sich änderne IDs sauber tracken, wenn ein neues objekt erstellt wird)

          auch wenn nicht, vorher wird auch eine max.-anzahl definiert (die 30, oder?) und offenbar als "neuer index" genommen - ist das dann nicht wie in einem array dass ich von 1-30/0-29 durchgehe? ob die ursprünglichen IDs nun aufsteigend sind oder nicht, so lange insg. <30 alles gut........ nicht?
          (und on top könnte man alle IDs gleich wegwerfen wenn alle werte auf 0 sind)

          disclaimer: absolut alles als frage formuliert! hohe wahrscheinlichkeit dass ich völlig im dunklen tappe ;) ;)

          MartinPM 1 Antwort Letzte Antwort
          0
          • wollerosekaufeW wollerosekaufe

            @MartinP @sugram
            @ichderarnd said in Pegelwerte Fritzbox 6490 Cable auslesen?:

            Die Downstream-Kanäle sind teilweise nur auf 64QAM, der Upstream nur auf 16QAM. Die Powerlevel driften zu weit auseinander.
            Auch der DOCSIS 3.1 Upstream hat nicht die volle Leistung.
            Die nicht behebbaren Fehler sollten alle auf 0 sein.

            ja die werte sind immer wieder katastrophal, drum will ich die mal mitloggen - so bin ich hier gelandet ;)

            hast du dir das script einmal ansehen können?
            habe von JS leider keinerlei ahnung. insofern verzeih(t) meine törichten gedanken :D
            aber was mich wundert, ist sozusagen dass das mit den IDs "überhaupt ein problem ist"...

            im JSON string sind doch alle channel IDs der fritzbox korrekt - die finde ich den objekten im iobroker aber nirgends. wird die ID denn nicht gelogged? damit wäre das problem doch erledigt, weil alle IDs eindeutig sind. (und man würde sich änderne IDs sauber tracken, wenn ein neues objekt erstellt wird)

            auch wenn nicht, vorher wird auch eine max.-anzahl definiert (die 30, oder?) und offenbar als "neuer index" genommen - ist das dann nicht wie in einem array dass ich von 1-30/0-29 durchgehe? ob die ursprünglichen IDs nun aufsteigend sind oder nicht, so lange insg. <30 alles gut........ nicht?
            (und on top könnte man alle IDs gleich wegwerfen wenn alle werte auf 0 sind)

            disclaimer: absolut alles als frage formuliert! hohe wahrscheinlichkeit dass ich völlig im dunklen tappe ;) ;)

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

            @wollerosekaufe Die Schwierigkeit ist, dass das Skript voraussetzt, dass die Kanäle fortlaufend und bei 1 beginnend nummeriert sind.

            Danach legt das Skript im ersten Durchlauf Datenpunkte an!

            Will man nicht im Javascript herumbasteln, kann man wahrscheinlich am einfachsten einfach die Datenpunkte entsprechend umbenennen, dass es zu den von der Fritzbox gemeldeten Kanalnummern passt

            In den Docsis Down Kanälen würde ich C03 ... C17 so belassen

            Dann
            C01 nach C67 umbenennen
            C02 -> C68
            C03... C17 belassen
            C18 -> C69
            C19 -> C70
            usw
            C28 -> C79
            C29 und C30 sind anscheinend nicht belegt

            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

              @wollerosekaufe Die Schwierigkeit ist, dass das Skript voraussetzt, dass die Kanäle fortlaufend und bei 1 beginnend nummeriert sind.

              Danach legt das Skript im ersten Durchlauf Datenpunkte an!

              Will man nicht im Javascript herumbasteln, kann man wahrscheinlich am einfachsten einfach die Datenpunkte entsprechend umbenennen, dass es zu den von der Fritzbox gemeldeten Kanalnummern passt

              In den Docsis Down Kanälen würde ich C03 ... C17 so belassen

              Dann
              C01 nach C67 umbenennen
              C02 -> C68
              C03... C17 belassen
              C18 -> C69
              C19 -> C70
              usw
              C28 -> C79
              C29 und C30 sind anscheinend nicht belegt

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

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

              wollerosekaufeW MartinPM 2 Antworten Letzte Antwort
              0
              • I ichderarnd

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

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

                @ichderarnd
                vielen dank!
                wenn ich mit logs, testen etc. helfen kann, schreib einfach :)

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

                                          768

                                          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