Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Off Topic
    4. [gelöst] - Zabbix (FritzBox etc.)

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] - Zabbix (FritzBox etc.)

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

      @codierknecht Welche Fritzbox soll denn ausgewertet werden?
      Das fritzinfluxdb Projekt ist nicht besonders Kabel-Fritzbox orientiert...

      Ich habe für meine Kabel-Fritzbox ein Javascript - Modul angepasst, das ich hier im Forum gefunden habe... Läuft direkt unter ioBroker und schreibt Datenpunkte für jeden verwendeten DOCSIS Kanal

      https://forum.iobroker.net/topic/38443/pegelwerte-fritzbox-6490-cable-auslesen

      Hier die neueste Version (ich arbeite aber noch mit einer älteren Version):

      https://forum.iobroker.net/assets/uploads/files/1699774964746-docsisinfov2.zip

      Codierknecht 1 Reply Last reply Reply Quote 0
      • Codierknecht
        Codierknecht Developer Most Active @MartinP last edited by Codierknecht

        @martinp sagte in Zabbix (FritzBox etc.):

        Welche Fritzbox soll denn ausgewertet werden?

        7590 als Router an Glasfaser und 'ne 7430 als zusätzlicher AccessPoint.

        @martinp sagte in Zabbix (FritzBox etc.):

        Läuft direkt unter ioBroker und schreibt Datenpunkte

        Mit dem ioBroker komme ich natürlich an die Daten ... über TR-064 und UpNP.
        Aber ich will ja idealerweise direkt in Zabbix ohne zusätzliche Komponenten an die Daten kommen.

        MartinP 1 Reply Last reply Reply Quote 0
        • Codierknecht
          Codierknecht Developer Most Active last edited by

          Das was hier in PHP gemacht ist, sollte doch eigentlich auch in Zabbix mit JS gehen, oder?

          https://github.com/suptimal/zabbix-fritz.box-collector/blob/master/bin/get_status.php

          Dafür reichen meine JS-Skills aber noch nicht aus 😞

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

            @codierknecht Da ist das Skript natürlich von geringem Nutzen...
            Für die Boxen sollte es schon ausreichend Lösungen von der Stange geben, sodass man nicht mit selbst gedengeltem Javascript die Diagnose-Seiten der Fritzbox crawlen und auswerten muss...

            Habe meine Signatur etwas erweitert - spart solche Rückfragen, wenn man seine Signatur etwas umfangreicher macht ...

            Codierknecht Thomas Braun 3 Replies Last reply Reply Quote 0
            • Codierknecht
              Codierknecht Developer Most Active @MartinP last edited by

              @martinp sagte in Zabbix (FritzBox etc.):

              Habe meine Signatur etwas erweitert - spart solche Rückfragen

              Könnte eng werden 😀

              MartinP 1 Reply Last reply Reply Quote 0
              • Thomas Braun
                Thomas Braun Most Active @MartinP last edited by

                @martinp sagte in Zabbix (FritzBox etc.):

                Habe meine Signatur etwas erweitert - spart solche Rückfragen

                Wenn die Signaturen denn immer aktuell gehalten würden... 😉

                1 Reply Last reply Reply Quote 0
                • Codierknecht
                  Codierknecht Developer Most Active @MartinP last edited by Codierknecht

                  @martinp sagte in Zabbix (FritzBox etc.):

                  Für die Boxen sollte es schon ausreichend Lösungen von der Stange geben, sodass man nicht mit selbst gedengeltem Javascript die Diagnose-Seiten der Fritzbox crawlen und auswerten muss...

                  Die sind lediglich in D-A-CH verbreitet.
                  Was fertiges für Zabbix habe ich nicht gefunden.

                  Außerdem bin ich ein Freund von nativen Lösungen.
                  Wenn ich dazu erst zig zusätzliche Tools, Scripte und Container brauche, habe ich zu viele "points of failure".

                  1 Reply Last reply Reply Quote 0
                  • T
                    Taddy81 @arteck last edited by

                    @arteck

                    Bei mir macht die Fritzbox auch nur "Internet", aber entweder ist Internet da, oder nicht da.

                    Ist halt die Frage, was Codierknecht gerne auswerten möchte.

                    Codierknecht 1 Reply Last reply Reply Quote 0
                    • Codierknecht
                      Codierknecht Developer Most Active @Taddy81 last edited by

                      @taddy81 sagte in Zabbix (FritzBox etc.):

                      Bei mir macht die Fritzbox auch nur "Internet", aber entweder ist Internet da, oder nicht da.

                      Internet und Telefonie

                      Ist halt die Frage, was Codierknecht gerne auswerten möchte.

                      Externe IP und Verbindungsstatus.
                      Vielleicht auch noch Up- und Downstream.

                      1 Reply Last reply Reply Quote 0
                      • Codierknecht
                        Codierknecht Developer Most Active last edited by

                        Man muss nur lange genug laut drüber nachdenken, dann klappt's auch 😀

                        3df60b18-2a97-488e-bbd5-26ad8fa30e6e-image.png

                        Das gieße ich dann noch in ein Template und hänge das später hier an.
                        Kann ja sein, dass das jemand brauchen kann 😉

                        arteck BananaJoe 2 Replies Last reply Reply Quote 0
                        • MartinP
                          MartinP @Codierknecht last edited by

                          @codierknecht said in [gelöst] - Zabbix (FritzBox etc.):

                          @martinp sagte in Zabbix (FritzBox etc.):

                          Habe meine Signatur etwas erweitert - spart solche Rückfragen

                          Könnte eng werden 😀

                          Im Gegensatz zur Thread-Überschrift gibt es für die Signatur anscheinend keine Längenbeschränkung.

                          Da habe ich manchmal Probleme, das [gelöst] davorzuklemmen, wenn es so weit ist...

                          Codierknecht 1 Reply Last reply Reply Quote 0
                          • arteck
                            arteck Developer Most Active @Codierknecht last edited by

                            @codierknecht jo machmal.. schau ich mir mal an

                            1 Reply Last reply Reply Quote 0
                            • BananaJoe
                              BananaJoe Most Active @Codierknecht last edited by

                              @codierknecht sagte in [gelöst] - Zabbix (FritzBox etc.):

                              Das gieße ich dann noch in ein Template und hänge das später hier an.

                              Da bin ich schon gespannt drauf 🙂
                              Sieht so aus als hättest du das http agent Item entdeckt und den Rest hast du vermutlich mit Dependent Items gelöst - sehr gut

                              Codierknecht 1 Reply Last reply Reply Quote 0
                              • Codierknecht
                                Codierknecht Developer Most Active @MartinP last edited by

                                @martinp sagte in [gelöst] - Zabbix (FritzBox etc.):

                                gibt es für die Signatur anscheinend keine Längenbeschränkung

                                Doch. 320 Zeichen 😞

                                1 Reply Last reply Reply Quote 0
                                • Codierknecht
                                  Codierknecht Developer Most Active @BananaJoe last edited by Codierknecht

                                  @bananajoe sagte in [gelöst] - Zabbix (FritzBox etc.):

                                  Sieht so aus als hättest du das http agent Item entdeckt und den Rest hast du vermutlich mit Dependent Items gelöst

                                  Exakt.
                                  Nur durch den SOAP-Kram zu steigen hat 'ne Weile gedauert.

                                  https://github.com/DEV2DEV-DE/zabbix-templates/blob/b86ec42e12d84657995fed390ddb7e5aea98f514/zbx_template_fritzbox.xml

                                  32fcc26d-7ab6-470d-a2af-71a4f4fb6bf2-image.png

                                  1 Reply Last reply Reply Quote 2
                                  • Codierknecht
                                    Codierknecht Developer Most Active last edited by Codierknecht

                                    Wenn jemand hierzu noch Input liefern kann: Jederzeit gerne!

                                    Unter der Adresse http://192.168.178.1:49000/tr64desc.xml lässt sich der Fritte eine Liste der unterstützten Services entlocken.
                                    Nur bei diesen bekomme ich allerdings ein Ergebnis:

                                    • urn:schemas-upnp-org:service:WANIPConnection:1#GetStatusInfo
                                    • urn:schemas-upnp-org:service:WANIPConnection:1#GetConnectionTypeInfo
                                    • urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress
                                    • urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1#GetCommonLinkProperties
                                    • urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1#GetTotalBytesReceived
                                    • urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1#GetTotalBytesSent

                                    Bei allen anderen Service bin ich bislang gescheitert und erhalte lediglich einen HTTP 500 - Internal server error zurück.
                                    Dabei ist es egal, ob ich das über http mit Port 49000 oder mit https über Port 49443 (langsamer) versuche.
                                    Auch muss der URL zu den Service mittlerweile /igdupnp/ lauten und nicht wie in fast allen Dokus /upnp/.

                                    Edit
                                    Scheint so, als käme man nicht so ohne Weiteres einfach nur mit Benutzername/Kennwort an die gewünschten Informationen.
                                    https://www.msxfaq.de/tools/prtg/getfritzmactable.htm
                                    Das Ganze muss dann in mehreren Schritten über Authenticate: Digest laufen.
                                    Habe ich allerdings bislang noch nicht zum Fliegen gebracht. Ich wüsste jetzt auch gar nicht wie ich Zabbix sowas beibringen könnte.

                                    BananaJoe 1 Reply Last reply Reply Quote 0
                                    • BananaJoe
                                      BananaJoe Most Active @Codierknecht last edited by

                                      @codierknecht Als Item kann man ein Script benutzen - das ist dann ein JavaScript wo du das dann so ähnlich wie in ioBroker machen kannst, also erst Anmelden und dann mit dem Token die daten holen.
                                      Irgendwo gibt es ein Beispiel dafür ... ich meine bei HPE Storage per API

                                      1 Reply Last reply Reply Quote 0
                                      • Codierknecht
                                        Codierknecht Developer Most Active last edited by Codierknecht

                                        @BananaJoe Der Tipp war Gold wert 😄

                                        Falls es jemanden interessiert:
                                        Ich hab's jetzt hinbekommen, über die TR-064 Schnittstelle der Fritte auch geschützte Daten auszulesen.

                                        const axios = require('axios');
                                        const crypto = require('crypto');
                                        const xml = require('xmldom');
                                        const parser = new xml.DOMParser();
                                        
                                        async function getForwardedPortsCount(username, password) {
                                        
                                            const requestHeader = {
                                                'Content-Type': 'text/xml; charset="utf-8"',
                                                'SoapAction': 'urn:dslforum-org:service:Layer3Forwarding:1' + '#' + 'GetForwardNumberOfEntries'
                                            };
                                            
                                            var requestBody = '<?xml version="1.0" encoding="utf-8"?>' +
                                            '<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">' +
                                            '    <s:Header>' +
                                            '        <h:InitChallenge xmlns:h="http://soap-authentication.org/digest/2001/10/" s:mustUnderstand="1">' +
                                            '            <UserID>' + username + '</UserID>' +
                                            '        </h:InitChallenge>' +
                                            '    </s:Header>' +
                                            '    <s:Body>' +
                                            '        <u:' + 'GetForwardNumberOfEntries' + ' xmlns:u="' + 'urn:dslforum-org:service:Layer3Forwarding:1' + '" />' +
                                            '    </s:Body>' +
                                            '</s:Envelope>';
                                        
                                            // Initialize challenge with Fritz!Box
                                            var uri = 'http://' + '192.168.178.1' + ':49000' + '/upnp/control/layer3forwarding';
                                            var response = await axios.post(uri, requestBody, { headers: requestHeader });
                                        
                                            // Calculate authentication
                                            var doc = parser.parseFromString(response.data, 'text/xml');
                                            const nonce = doc.getElementsByTagName('Nonce')[0].childNodes[0].nodeValue;
                                            const realm = doc.getElementsByTagName('Realm')[0].childNodes[0].nodeValue;
                                            const secret = crypto.createHash('md5').update(username + ':' + realm + ':' + password).digest('hex');
                                            const auth = crypto.createHash('md5').update(secret + ':' + nonce).digest('hex');
                                        
                                            // Get values with authentication
                                            requestBody = '<?xml version="1.0" encoding="utf-8"?>' +
                                            '<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">' +
                                            '    <s:Header>' +
                                            '        <h:ClientAuth xmlns:h="http://soap-authentication.org/digest/2001/10/" s:mustUnderstand="1">' +
                                            '            <Nonce>' + nonce + '</Nonce>' +
                                            '            <Auth>' + auth + '</Auth>' +
                                            '            <UserID>' + username + '</UserID>' +
                                            '            <Realm>' + realm + '</Realm>' +
                                            '        </h:ClientAuth>' +
                                            '    </s:Header>' +
                                            '    <s:Body>' +
                                            '        <u:' + 'GetForwardNumberOfEntries' + ' xmlns:u="' + 'urn:dslforum-org:service:Layer3Forwarding:1' + '" />' +
                                            '    </s:Body>' +
                                            '</s:Envelope>';
                                        
                                            response = await axios.post(uri, requestBody, { headers: requestHeader });
                                        
                                            // return result
                                            var doc = parser.parseFromString(response.data, 'text/xml');
                                            const ports = doc.getElementsByTagName('NewForwardNumberOfEntries')[0].childNodes[0].nodeValue;
                                            return(ports);
                                        
                                        }
                                        

                                        Allerdings erst einmal nur direkt im ioBroker und nicht als Zabbix-Script-Item.
                                        Das liefert mir blöderweise beim POST-Request einen 404 😞
                                        Alles was ich dort mit GET-Requests mache, funktioniert tadellos.
                                        Warum GET funktioniert und POST nicht, ist mir (noch) schleierhaft.

                                        Codierknecht 1 Reply Last reply Reply Quote 2
                                        • Codierknecht
                                          Codierknecht Developer Most Active @Codierknecht last edited by

                                          @codierknecht
                                          @Garfonso @fastfoot
                                          Ich hab' die Diskussion aus Discord mal hier weitergetrieben.
                                          Hier kriegen das mehr User mit ... falls es wen interessiert.

                                          Das "fehlerhafte" Script in Zabbix sieht so aus:

                                          const params = JSON.parse(value);
                                          
                                          const requestBody = '<?xml version="1.0" encoding="utf-8"?>' +
                                          '<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">' +
                                          '    <s:Header>' +
                                          '        <h:InitChallenge xmlns:h="http://soap-authentication.org/digest/2001/10/" s:mustUnderstand="1">' +
                                          '            <UserID>' + params.username + '</UserID>' +
                                          '        </h:InitChallenge>' +
                                          '    </s:Header>' +
                                          '    <s:Body>' +
                                          '        <u:' + params.action + ' xmlns:u="' + params.urn + '" />' +
                                          '    </s:Body>' +
                                          '</s:Envelope>';
                                          
                                          const action = params.urn + '#' + params.action;
                                          
                                          // Initialize challenge with Fritz!Box
                                          var url = 'http://' + params.ip + ':49000' + params.url;
                                          const request = new HttpRequest();
                                          request.addHeader('Content-Type', 'text/xml; charset="utf-8"');
                                          request.addHeader('SoapAction', action);
                                          var response = request.post(url, requestBody);
                                          
                                          return JSON.stringify(response);
                                          

                                          Der POST-Request liefert ein 404.
                                          Teste ich das mit einem GET gegen die Fritte (z.B. http://192.168.178.1:49000/tr64desc.xml), funktioniert das einwandfrei ... auch mit Port 49000.

                                          Wenn ich den hier verwendeten Header und den URL in Postman einsetze, funktioniert das auch problemlos.

                                          e6711c35-7202-40db-a29d-5648b80c557a-image.png

                                          1 Reply Last reply Reply Quote 0
                                          • Codierknecht
                                            Codierknecht Developer Most Active last edited by

                                            Ich habe mir mal einen kleinen Test-Service gebaut, der bei gleichem Endpunkt & Port sowohl auf GET als auch auf POST horcht.
                                            Ergebnis: Funktioniert einwandfrei.
                                            Es ist also nicht Zabbix, das hier das Problem verursacht, sondern die Fritte selbst.
                                            Irgend etwas fehlt bei meinem Request oder ist falsch.

                                            Bin für jede Idee zu haben ...

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            505
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            37
                                            2147
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo