Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. iobroker und telegraf [gelöst]

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    iobroker und telegraf [gelöst]

    This topic has been deleted. Only users with topic management privileges can see it.
    • jahnbes
      jahnbes last edited by Homoran

      Kann mir jemand einen Tipp geben, in welche Richtung ich forschen und denken soll, für folgendes Problem, an dem ich schon seit einigen Stunden sitze:

      Telegraf läuft auf einem Windows-PC, der iobroker mit mqtt auf einem Raspberry.

      Ich will mit Telegraf auf dem Windows-PC Systemdaten sammeln und über mqtt an den iobroker senden, dort dann mit HaBPanel visualisieren. Das Ganze ohne InfluxDB.
      Es geht auch soweit alles, die Daten laufen, nur stimmt das Format der im iobroker ankommenden Daten nicht.

      Frage ist, welches Outputformat in telegraf ich für den iobroker einstellen muss. Ich habe in Telegraf alle vorgeschlagenen Formate ausprobiert laut
      https://docs.influxdata.com/telegraf/v1.20/data_formats/output/
      aber nichts hat geholfen.

      Ich erwarte z.B. im Feld [mem] des iobrokers auf dem Raspberry EINEN Wert für die Speicherauslastung, es steht aber ein Sammelsurium von Werten drin:

      "mem.available" 24441704448.000000 1636128710 source="PC-Bert"
      "mem.used" 9856364544.000000 1636128710 source="PC-Bert"
      "mem.used.percent" 28.737375 1636128710 source="PC-Bert"
      "mem.available.percent" 71.262625 1636128710 source="PC-Bert"
      "mem.total" 34298068992.000000 1636128710 source="PC-Bert"
      

      MOD-Edit: Code in code-tags gesetzt!

      Was tun?

      liv-in-sky 3 Replies Last reply Reply Quote 0
      • liv-in-sky
        liv-in-sky @jahnbes last edited by

        @jahnbes

        kenne das nicht - aber es scheint, du bekommst deine daten immer mit einem timestamp (1636128710 = 6.11.2021 um 7:57)
        mem.total ist wohl 32 GB ?

        ich könnte mir vorstellen, dass du die daten noch verwandeln musst. ich würde das json format wählen und ein script machen, welches die daten dann im richtigen format in einen neuen dp schreibt. mit json geht das am besten

        jahnbes 1 Reply Last reply Reply Quote 0
        • jahnbes
          jahnbes @liv-in-sky last edited by jahnbes

          @liv-in-sky

          Vielen Dank, Du hast mich auf die richtige Spur gesetzt!
          Ich hatte nicht auf dem Radar, dass es im iobroker-blockly Funktionen gibt, um json-Strings zu parsen. Habe dann ein wenig geforscht und im Netz folgendes gefunden:

          https://www.machs-smart.de/json-blockly-einlesen-parsen-verarbeiten/

          Ich bin mir sicher, damit geht es und werde mich kommende Woche an die Arbeit machen.

          Ein schönes Wochenende, Gruß, Bert.

          liv-in-sky 1 Reply Last reply Reply Quote 0
          • liv-in-sky
            liv-in-sky @jahnbes last edited by

            @jahnbes

            du kannst ja mal das json posten - das sollte kein großes thema sein, dass zu parsen und in die einzelnen dp zu schreiben

            jahnbes 1 Reply Last reply Reply Quote 0
            • jahnbes
              jahnbes @liv-in-sky last edited by Homoran

              @liv-in-sky
              Hier das json, wie es in Firefox angezeigt wird. Es ist nur ein Teil der von Telegraf auf Windows über MQTT gesendeten Daten, nur die Daten des Memory.

              fields:	
                       available:	24707244032
                       available_percent:	72.03683693610549
                       total:	34298068992
                       used:	9590824960
                       used_percent:	27.96316306389451
              name:	"mem"
              tags:
                       host:	"PC-Bert"
              timestamp:	1636305330
              
              Und hier, wie es im String im iobroker gespeichert ist:
              
              {"fields":{"available":24707244032,"available_percent":72.03683693610549,"total":34298068992,"used":9590824960,"used_percent":27.96316306389451},"name":"mem","tags":{"host":"PC-Bert"},"timestamp":1636305330}
              

              MOD-Edit: Code in code-tags gesetzt!

              Es sieht gut aus, ich glaube, ich habe es verstanden. morgen geht es weiter. Gruß Bert.

              jahnbes 1 Reply Last reply Reply Quote 0
              • jahnbes
                jahnbes @jahnbes last edited by jahnbes

                @jahnbes
                Es hat geklappt, das Problem
                Windows-Systemdaten -> Telegraf (Windows-PC) -> MQTT -> iobroker (Raspberry)
                ist gelöst!

                telegraf-iobroker.jpg

                Unter [1.] sind die json-Daten zu sehen, wie sie Telegraf auf dem Windows-PC sammelt und über MQTT an den iobroker schickt, hier nur die Memory-Daten.
                Unter [2.] das Testscript, mit dem der angekommene json-String im iobroker geparst und so in seine Bestandteile aufgeteilt wird.
                Unter [3.] steht das Ergebnis, die einzelnen Memory-Werte, wie sie nun im iobroker zur Verfügung stehen.

                Das weitere ist Handarbeit, die unter [3.] stehenden einzelnen Werte werden in zuvor angelegte Datenpunkte im ioboker geschrieben und stehen nun zur Verfügung, zum Beispiel zur Visualisierung.

                liv-in-sky 3 Replies Last reply Reply Quote 0
                • liv-in-sky
                  liv-in-sky @jahnbes last edited by

                  @jahnbes

                  cool - arbeite gerade an einer version, die das einlesen und erstellen selbstständig macht - danke für den tipp mit telegraf - kannte ich nicht

                  1 Reply Last reply Reply Quote 0
                  • liv-in-sky
                    liv-in-sky @jahnbes last edited by

                    @jahnbes

                    sieht dann so aus:

                    Image 2.png

                    jahnbes 1 Reply Last reply Reply Quote 0
                    • jahnbes
                      jahnbes @liv-in-sky last edited by jahnbes

                      @liv-in-sky

                      Hier der Vollständigkeit halber der Ausschnitt aus dem telegraf.conf-file, der die MQTT-Einstellungen betrifft:

                      # # Configuration for MQTT server to send metrics to
                       [[outputs.mqtt]]
                          servers = ["192.xxx.xxx.xx:1883"] # required.
                      # Bert
                      #   ## MQTT outputs send metrics to this topic format
                      #   ##    "<topic_prefix>/<hostname>/<pluginname>/"
                      #   ##   ex: prefix/web01.example.com/mem
                          topic_prefix = "Telegraf"
                      #
                      #   ## QoS policy for messages
                      #   ##   0 = at most once
                      #   ##   1 = at least once
                      #   ##   2 = exactly once
                          qos = 1
                      #
                      #   ## username and password to connect MQTT server.
                      #   # username = "telegraf"
                      #   # password = "metricsmetricsmetricsmetrics"
                      #
                      #   ## client ID, if not set a random ID is generated
                      #   # client_id = ""
                      #
                      #   ## Timeout for write operations. default: 5s
                      #   # timeout = "5s"
                      #
                      #   ## Optional TLS Config
                      #   # tls_ca = "/etc/telegraf/ca.pem"
                      #   # tls_cert = "/etc/telegraf/cert.pem"
                      #   # tls_key = "/etc/telegraf/key.pem"
                      #   ## Use TLS but skip chain & host verification
                      #   # insecure_skip_verify = false
                      #
                      #   ## When true, metrics will be sent in one MQTT message per flush.  Otherwise,
                      #   ## metrics are written one metric per MQTT message.
                      #    batch = false
                      #
                      #   ## When true, metric will have RETAIN flag set, making broker cache entries until someone
                      #   ## actually reads it
                          retain = true
                      #
                      #   ## Defines the maximum length of time that the broker and client may not communicate.
                      #   ## Defaults to 0 which turns the feature off. For version v2.0.12 of eclipse/mosquitto there is a
                      #   ## [bug](https://github.com/eclipse/mosquitto/issues/2117) which requires keep_alive to be set.
                      #   ## As a reference eclipse/paho.mqtt.golang v1.3.0 defaults to 30.
                      #   # keep_alive = 0
                      #
                      #   ## Data format to output.
                      #   ## Each data format has its own unique set of configuration options, read
                      #   ## more about them here:
                      #   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
                          data_format = "json"
                      
                      dnadlinger created this issue in eclipse/mosquitto

                      closed No keepalive (0) still allowed with max_keepalive set #2117

                      liv-in-sky 2 Replies Last reply Reply Quote 0
                      • liv-in-sky
                        liv-in-sky @jahnbes last edited by

                        @jahnbes wie gewußt 🙂 bin kein profi mit mqtt - die settings wollte ich noch bei dir fragen

                        1 Reply Last reply Reply Quote 0
                        • liv-in-sky
                          liv-in-sky @jahnbes last edited by liv-in-sky

                          @jahnbes

                          falls es dich interessiert:

                          das script (evtl muss das angeglichen werden)

                          • erstellt ordner "0_userdata.0.TELEGRAF"
                          • holt alles was unter "mqtt.0.telegraf.." ist
                          • schreibt die werte daraus - jede minute

                          let myScheduleTelegraf='* * * * * '
                          
                          schedule(myScheduleTelegraf,  function () {
                          //iter(helper)
                          $('mqtt.0.telegraf.NUC7FX.*').each(function(id, i) { 
                          //log(helper.fields.MB_frei)
                          let helper=JSON.parse(getState(id).val)
                          //log(helper.name+"ID: "+id)
                          let derName=helper.name
                          let derHostname=helper.tags.host
                          var keys = Object.keys(helper.fields);
                           
                           //  log(keys.toString())
                          
                          
                          for(let u=0;u<keys.length;u++){
                            let theVal=helper.fields[keys[u]]
                            let einheit=""
                            if(keys[u].includes("ercent")  ) {theVal=Math.round(theVal);einheit="%"}
                            if(theVal>100 && derName=="mem" ) {theVal=Math.round(theVal/1024/1024/1024);einheit="GB"}
                            if(theVal>100 && derName.includes("disk") ) {theVal=Math.round(theVal/1024);einheit="GB"}
                            // log(helper.fields[keys[u]])
                             if(existsState('0_userdata.0.TELEGRAF.'+derHostname+'.'+derName+'.'+keys[u])) setState('0_userdata.0.TELEGRAF.'+derHostname+'.'+derName+'.'+keys[u],theVal);
                                  else createState('0_userdata.0.TELEGRAF.'+derHostname+'.'+derName+'.'+keys[u], theVal, { name: derHostname+'-'+keys[u],unit: einheit}); // type: "mixed"
                          }
                          
                          
                          });
                          
                          });
                          

                          meine konfig für die festplatten (für jede festplatte ein eintrag, eintrag in Messurement erzeugt den dp):

                             [[inputs.win_perf_counters.object]]
                              #  Disk times and queues
                               ObjectName = "LogicalDisk"
                               Instances = ["E:"]
                               Counters = [
                                 "% Idle Time",
                                 "% Free Space",
                                 "Free Megabytes",
                               ]
                               Measurement = "win_disk-E"	
                          
                          jahnbes 1 Reply Last reply Reply Quote 1
                          • jahnbes
                            jahnbes @liv-in-sky last edited by jahnbes

                            @liv-in-sky

                            Danke für den Tipp mit den Platten, der hat mir sehr geholfen, die erste ist schon drin.

                            Weißt Du, was unter "cpu" die Felder "usage_idle" und insbesondere "usage_system" und "usage_user" bedeuten?

                            Viele Grüße, Bert.

                            liv-in-sky 2 Replies Last reply Reply Quote 0
                            • liv-in-sky
                              liv-in-sky @jahnbes last edited by

                              @jahnbes

                              schau mal da:

                              https://bobcares.com/blog/perfmon-counters-for-cpu-usage/

                              1 Reply Last reply Reply Quote 0
                              • liv-in-sky
                                liv-in-sky @jahnbes last edited by

                                @jahnbes

                                in deutsch habe ich nur das gefunden

                                Prozessorauslastung messen und Vorlage speichern
                                Um die Auslastung des Prozessors zu messen, wird am besten der Menüpunkt „Performance Monitor“ aufgerufen. Mit „Blank workspace“ wird ein neuer Workspace zur Überwachung erstellt. Danach wird mit „Add Counter“ das Objekt „Prozessor“ ausgewählt, als „Instance“ wählt man idealerweise alle Prozessoren im System. Hier kann auch nach einzelnen Kernen gefiltert werden. Als „Counter“ wird „Prozessorzeit“ aktiviert.

                                Es sollte darauf geachtet werden, dass die Auslastung des Prozessors auf verschiedene Prozesse verteilt wird. Bei „Graphy Type“ kann zwischen grafischer Ansicht und einer Tabelle unterschieden werden. Der Prozessor sollte nur maximal bis 70% ausgelastet werden, idealerweise deutlich darunter.

                                Parallel lassen sich weitere Counter hinzufügen, zum Beispiel „Priviligerte Zeit (%)“. Hier wird die Gesamtzeit in Prozenten angezeigt, die der Prozessor benötigt, um Windows-Kernel-Befehle auszuführen. Auch hier sollten die Werte nicht zu hoch liegen.

                                Ebenfalls wichtig ist noch „Prozessor: Benutzerzeit (%)“. Dieser Wert gibt den prozentualen Zeitanteil an der Gesamtzeit an, die der Prozessor benötigt, um Benutzerprozesse auszuführen. Dabei kann es sich zum Beispiel um Prozesse für Microsoft SQL-Server handeln.

                                Über „System: Prozessor-Warteschlangenlänge“, beziehungsweise „Processor Queue Length“ lassen sich die Threads messen, die auf Prozessorzeit warten. Wenn die Threads eines Prozesses mehr Zyklen benötigen als zur Verfügung stehen, kann es zu Problemen kommen. Wenn bei dieser Messung viele Prozesse versuchen, Prozessorzeit zu beanspruchen, sollten schnellere Prozessoren verbaut werden.

                                jahnbes 1 Reply Last reply Reply Quote 0
                                • jahnbes
                                  jahnbes @liv-in-sky last edited by jahnbes

                                  @liv-in-sky

                                  Nun ist es geschafft, die Systemdaten des Windows-PC werden auf diesem mittels Telegraf gesammelt und mit MQTT an den iobroker gesandt, der auf einem Raspberry Pi läuft.
                                  Von dort aus erfolgt u.a. die Visualisierung mit HABpanel:

                                  dashboard_PC.jpg

                                  Die Daten der Netzwerkplatte, ein Synology-NAS, kommen über den Adapter "Synology NAS" in den iobroker.

                                  Die Temperaturen im PC würde ich auch gern darstellen, da bin ich aber auch mit Telegraf noch nicht rangekommen.

                                  liv-in-sky 3 Replies Last reply Reply Quote 1
                                  • liv-in-sky
                                    liv-in-sky @jahnbes last edited by

                                    @jahnbes die temp sache check ich auch nicht

                                    mache das so (etwas umständlich):

                                    https://forum.iobroker.net/topic/27520/cpu-temperatur-win-pc-in-iobroker-darstellen

                                    1 Reply Last reply Reply Quote 0
                                    • liv-in-sky
                                      liv-in-sky @jahnbes last edited by

                                      @jahnbes

                                      bin etwas weiter mit temp in telegraf

                                      Image 4.png

                                      Image 5.png

                                      1 Reply Last reply Reply Quote 0
                                      • liv-in-sky
                                        liv-in-sky @jahnbes last edited by

                                        @jahnbes

                                        das hier downloaden und laufen lassen - als service oder beim startup - zum testen einfach aufrufen

                                        https://openhardwaremonitor.org/

                                        das in conf:

                                        
                                         
                                        [[inputs.exec]]
                                           interval = "30s"
                                           commands = ['powershell -executionpolicy bypass -File "C:/Program Files/telegraf/ohm.ps1"']
                                           #data_format = "influx"
                                        

                                        das hier in den ordner, wo telegraf läuft - muss als file dort liegen:

                                        ohm.ps1

                                        im mqtt setting auf influx umstellen !

                                        data_format = "influx"
                                        
                                        
                                        

                                        das hier enablen - darunter steht nix - nur diese zeile - ist die temp des motherboards

                                        [[inputs.temp]]
                                        
                                        1 Reply Last reply Reply Quote 0
                                        • liv-in-sky
                                          liv-in-sky @jahnbes last edited by

                                          @jahnbes

                                          falls du mit meinem script arbeitest: - alle dp löschen und dieses script starten

                                          update

                                          let myScheduleTelegraf='*/30 * * * * * '
                                          
                                          schedule(myScheduleTelegraf,  function () {
                                          //iter(helper)
                                          $('mqtt.0.telegraf.*.*').each(function(id, i) { 
                                          //log(helper.fields.MB_frei)
                                          let helper=JSON.parse(getState(id).val)
                                          //log(helper.name+"ID: "+id)
                                          let derName=helper.name
                                          let derHostname=helper.tags.host
                                          var keys = Object.keys(helper.fields);
                                           
                                           //  log(keys.toString())
                                          
                                          
                                          for(let u=0;u<keys.length;u++){
                                            let theVal=helper.fields[keys[u]]
                                            let einheit=""
                                            if(keys[u].includes("ercent")  ) {theVal=Math.round(theVal);einheit="%"}
                                            if(theVal>100 && derName=="mem" ) {theVal=Math.round(theVal/1024/1024/1024);einheit="GB"}
                                            if(theVal>100 && derName.includes("disk") ) {theVal=Math.round(theVal/1024);einheit="GB"}
                                             if(theVal<=100 && derName.includes("temp") ) {einheit="°C"}
                                            //log(helper.fields[keys[u]])
                                             if(existsState('0_userdata.0.TELEGRAF.'+derHostname+'.'+derName+'.'+keys[u])) setState('0_userdata.0.TELEGRAF.'+derHostname+'.'+derName+'.'+keys[u],theVal);
                                                  else createState('0_userdata.0.TELEGRAF.'+derHostname+'.'+derName+'.'+keys[u], theVal, { name: derHostname+'-'+keys[u],unit: einheit}); // type: "mixed"
                                          }
                                          
                                          
                                          });
                                          
                                          });
                                          

                                          jahnbes 1 Reply Last reply Reply Quote 0
                                          • jahnbes
                                            jahnbes @liv-in-sky last edited by

                                            @liv-in-sky

                                            Ich habe es mir angesehen und eine Frage. Du setzt an einer Stelle

                                            data_format = "influx"
                                            

                                            Für meine Anwendung muss ich aber

                                            data_format = "json"
                                            

                                            setzen. Beißt sich das nicht, oder habe ich etwas falsch verstanden?

                                            Gruß Bert.

                                            liv-in-sky 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

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

                                            908
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            2
                                            24
                                            2478
                                            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