Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Influxdb, python csv export, unauthorized

    NEWS

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    Influxdb, python csv export, unauthorized

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

      Hallo zusammen,
      nutze bei meinem Smarthome System (KNX, IOBroker, InfluxDB, Grafana) die influxdb in einem docker-container zum data-logging. Nun möchte ich die Daten zum weiter exportieren in ein .csv-file haben. ChatGPT leistet da auch gute Dienste für ein Script:

      # manuell ausführen mit
      # /bin/python3 /volume1/Christof/Daten/Organisation/030_Infrastruktur/020_Devices/Smart-Home/Logging/csv-export/export_influxdb_to_csv.py
      
      from influxdb import InfluxDBClient
      import csv
      
      # InfluxDB connection details
      host = 'localhost'
      port = 8086
      database = 'logging1'
      user = 'iobroker'
      password = 'meinpasswort'
      
      # Output CSV file
      csv_file_path = '/volume1/Christof/Daten/Organisation/030_Infrastruktur/020_Devices/Smart-Home/Logging/influx_output.csv'
      
      # Query to select all data from all measurements
      query = 'SELECT * FROM /.*/'
      
      # Connect to InfluxDB
      client = InfluxDBClient(host, port, user, password, database)
      
      # Get the query result
      result = client.query(query)
      
      # Extract data points from the result
      data_points = [point for series in result for point in series]
      
      # Write data to CSV file
      with open(csv_file_path, 'w', newline='') as csv_file:
          csv_writer = csv.writer(csv_file)
      
          # Write header
          csv_writer.writerow(data_points[0].keys())
      
          # Write data
          for point in data_points:
              csv_writer.writerow(point.values())
      
      print(f'Data exported to {csv_file_path}')
      

      Allerdings bekomme ich:

       File "/usr/lib/python3.8/site-packages/influxdb/client.py", line 378, in request
          raise InfluxDBClientError(err_msg, response.status_code)
      influxdb.exceptions.InfluxDBClientError: 401: {"code":"unauthorized","message":"Unauthorized"}
      

      User/Passwort müssten passen, allerdings bin ich mir beim Namen der Datenbank nicht ganz sicher, ist das der Bucketname oder wo finde ich den?

      Oder was könnte noch Ursache für Fehler sein?

      Vielen DAnk im voraus.

      Marc Berg ? 2 Replies Last reply Reply Quote 0
      • Marc Berg
        Marc Berg Most Active @Chrisham last edited by

        @chrisham
        ChatGPT hat dir leider verschwiegen, dass es Unterschiede bei den Anmeldeparametern zwischen InfluxDB 1.x und 2.x gibt.

        1 Reply Last reply Reply Quote 0
        • ?
          A Former User @Chrisham last edited by A Former User

          @chrisham sagte in Influxdb, python csv export, unauthorized:

          Oder was könnte noch Ursache für Fehler sein?

          Moin,

          Dokumentation nicht gelesen 😉
          Die Hersteller geben sich da echt Mühe und viel Geld aus 🙂

          Da Du ja von Bucket sprichst, gehe ich davon aus, das Du influxDB >V2 nutzt, dann ist das nicht user, password, sondern org und token!
          Und ja, ein Bucket ist die Datenbank im influxDB V2 Sprachgebrauch.

          VG
          Bernd

          P.S.: @Marc-Berg moin, Du tippst schneller als ich 🙂

          Marc Berg C 2 Replies Last reply Reply Quote 0
          • Marc Berg
            Marc Berg Most Active @Guest last edited by

            @dp20eic sagte in Influxdb, python csv export, unauthorized:

            P.S.: @Marc-Berg moin, Du tippst schneller als ich 🙂

            Ne, ich schreibe weniger! 🙂

            1 Reply Last reply Reply Quote 0
            • C
              Chrisham @Guest last edited by Chrisham

              @dp20eic stimmt, ChatGPT ist einfach schneller als doku lesen (rtfm ist oldschool im zeitalter von KI), heute geht man auch nicht mehr in die Bibliothek, sondern fragt das Internet, ebenso kann man ChatGPt alles auf einmal machen lassen:

              • doku für mich lesen
              • das relevante davon extrahieren
              • und gleich für meinen use-case anwenden und das script schreiben.

              ... nach ein paar weiteren Iterationen wars dann auch schon perfekt:

              # manuell ausführen mit
              # /bin/python3 /volume1/Christof/Daten/Organisation/030_Infrastruktur/020_Devices/Smart-Home/Logging/csv-export/export_influxdb_to_csv_tmp-ist-wohn_6.py
              
              
              from influxdb_client import InfluxDBClient, Point, WriteOptions
              import pandas as pd
              import csv
              import warnings
              from influxdb_client.client.warnings import MissingPivotFunction
              from pathlib import Path
              
              # InfluxDB credentials
              url = "http://10.ab.xy.rs:8086/"
              token = "Rea..."
              myorg = "smarthome"
              mybucket = "logging1"
              
              # Output file path
              output_file_path = "/volume1/Christof/Daten/Organisation/030_Infrastruktur/020_Devices/Smart-Home/Logging/influx_output_tmp-ist-wohn_2.csv"
              
              # Create InfluxDB client
              client = InfluxDBClient(url=url, token=token)
              
              # Suppress the warning about the missing pivot function
              warnings.simplefilter("ignore", MissingPivotFunction)
              
              # Check connection
              try:
                  health = client.health()
                  if health.message == 'ready for queries and writes':
                      print("Connection successful.")
              
                      # Specify your InfluxDB query here
                      query = 'from(bucket: "logging1") |> range(start: -1d)'
              
                      # Run the query
                      tables = client.query_api().query(org=myorg, query=query)
                      
                      # Specify the values you want to filter for
                      filter_measurement = "knx.0.Heizung__Klima__Lüftung.EG.Heiz-Wohn-Ess_Temp-IST"
                      filter_field = "value"
              
                      # Extract and export data to CSV
                      with open(output_file_path, 'w', newline='') as csvfile:
                          csv_writer = csv.writer(csvfile)
              
                          # Write header
                          csv_writer.writerow(["_time", "_value", "_field", "_measurement"])
              
                          # Print all measurement names for debugging
                          measurement_names = set()
                          for table in tables:
                              for record in table.records:
                                  measurement_names.add(record.get_measurement())
                          print(f"All measurement names: {measurement_names}")
              
                          # Write data with filters
                          for table in tables:
                              for record in table.records:
                                  # Check if both conditions are met
                                  if record.get_measurement() == filter_measurement and record.get_field() == filter_field:
                                      csv_writer.writerow([record.get_time(), record.get_value(), record.get_field(), record.get_measurement()])
                              
                          print(f"Data exported to {output_file_path}")
                  else:
                      print(f"Connection failed. InfluxDB status: {health.message}")
              except Exception as e:
                  print(f"An error occurred: {e}")
              

              KI ist echt ein Gamechanger.... 🙂

              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

              588
              Online

              32.0k
              Users

              80.5k
              Topics

              1.3m
              Posts

              3
              5
              358
              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