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. Frage : Migrate MySQL nach Influxdb

NEWS

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

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

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

Frage : Migrate MySQL nach Influxdb

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
151 Beiträge 31 Kommentatoren 26.2k Aufrufe 25 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.
  • JackGruberJ JackGruber

    @marco-mh Verschiedene kennwörter für den user iobroker je nach dem von wo er kommt, oder das kennwort in der Json falsch?
    Meld dich mal im phpMyAdmin mit dem iobrokeran.

    K Offline
    K Offline
    Kueppert
    schrieb am zuletzt editiert von Kueppert
    #116

    @jackgruber sagte in Frage : Migrate MySQL nach Influxdb:

    @marco-mh Verschiedene kennwörter für den user iobroker je nach dem von wo er kommt, oder das kennwort in der Json falsch?
    Meld dich mal im phpMyAdmin mit dem iobrokeran.

    Ich hab mir jetzt auch ne InfluxDB auf einer LXC aufgesetzt, Datenbank angelegt, User etc, was halt sein muss. Ich habe den User für MySQL eben via phpMyAdmin geprüft (user & Passwort), diese auch in der JSON eingetragen, IP & Ports geprüft, ich erhalte trotzdem folgende Fehlermeldung:

    C:\GitHub>migrate.py ALL
    (1045, "Access denied for user 'admin'@'Houston-OLD.fritz.box' (using password: YES)")
    

    Die Requirements hab ich installiert wie in der Readme steht, Python 3.8.10 hab ich drauf. Hab mich jetzt mehrere Stunden damit befasst und komm nicht weiter :(

    Das Skript will ich auf meinem Windows10-PC ausführen, MySQL = VM Proxmox, InfluxDB = LXC Proxmox unpriviligiert

    Die Eingabeaufforderung unter Win10 hab ich als Admin ausgeführt.

    Und hier das, was ich auf dem Win-PC in der Eingabeaufforderung alles gemacht hab:

    C:\GitHub>dir
     Volume in Laufwerk C: hat keine Bezeichnung.
     Volumeseriennummer: 507A-0C37
    
     Verzeichnis von C:\GitHub
    
    08.06.2021  20:25    <DIR>          .
    08.06.2021  20:25    <DIR>          ..
    08.06.2021  20:25                38 .gitignore
    08.06.2021  20:25               353 database.json.example
    08.06.2021  20:24             4.038 iobroker_mysql_2_influxdb-master.zip
    08.06.2021  20:25             6.811 migrate.py
    08.06.2021  20:25             1.143 README.md
    08.06.2021  20:25                33 requirements.txt
                   6 Datei(en),         12.416 Bytes
                   2 Verzeichnis(se), 34.135.502.848 Bytes frei
    
    C:\GitHub>python --version
    Python 3.8.10
    
    C:\GitHub>python -m pip install -U pip
    Requirement already satisfied: pip in c:\users\thorsten\appdata\local\programs\python\python38\lib\site-packages (21.1.1)
    Collecting pip
      Downloading pip-21.1.2-py3-none-any.whl (1.5 MB)
         |████████████████████████████████| 1.5 MB 3.3 MB/s
    Installing collected packages: pip
      Attempting uninstall: pip
        Found existing installation: pip 21.1.1
        Uninstalling pip-21.1.1:
          Successfully uninstalled pip-21.1.1
    Successfully installed pip-21.1.2
    
    C:\GitHub>pip install -r requirements.txt
    Collecting influxdb>=5.3.1
      Downloading influxdb-5.3.1-py2.py3-none-any.whl (77 kB)
         |████████████████████████████████| 77 kB 1.2 MB/s
    Collecting PyMySQL>=1.0.2
      Downloading PyMySQL-1.0.2-py3-none-any.whl (43 kB)
         |████████████████████████████████| 43 kB 709 kB/s
    Collecting requests>=2.17.0
      Downloading requests-2.25.1-py2.py3-none-any.whl (61 kB)
         |████████████████████████████████| 61 kB 3.8 MB/s
    Collecting six>=1.10.0
      Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
    Collecting pytz
      Downloading pytz-2021.1-py2.py3-none-any.whl (510 kB)
         |████████████████████████████████| 510 kB 6.8 MB/s
    Collecting msgpack
      Downloading msgpack-1.0.2-cp38-cp38-win_amd64.whl (69 kB)
         |████████████████████████████████| 69 kB 2.0 MB/s
    Collecting python-dateutil>=2.6.0
      Downloading python_dateutil-2.8.1-py2.py3-none-any.whl (227 kB)
         |████████████████████████████████| 227 kB 6.8 MB/s
    Collecting idna<3,>=2.5
      Downloading idna-2.10-py2.py3-none-any.whl (58 kB)
         |████████████████████████████████| 58 kB 3.0 MB/s
    Collecting urllib3<1.27,>=1.21.1
      Downloading urllib3-1.26.5-py2.py3-none-any.whl (138 kB)
         |████████████████████████████████| 138 kB 6.8 MB/s
    Collecting chardet<5,>=3.0.2
      Downloading chardet-4.0.0-py2.py3-none-any.whl (178 kB)
         |████████████████████████████████| 178 kB 6.8 MB/s
    Collecting certifi>=2017.4.17
      Downloading certifi-2021.5.30-py2.py3-none-any.whl (145 kB)
         |████████████████████████████████| 145 kB ...
    Installing collected packages: urllib3, six, idna, chardet, certifi, requests, pytz, python-dateutil, msgpack, PyMySQL, influxdb
    Successfully installed PyMySQL-1.0.2 certifi-2021.5.30 chardet-4.0.0 idna-2.10 influxdb-5.3.1 msgpack-1.0.2 python-dateutil-2.8.1 pytz-2021.1 requests-2.25.1 six-1.16.0 urllib3-1.26.5
    
    C:\GitHub>migrate.py ALL
    (1045, "Access denied for user 'iobroker'@'Houston-OLD.fritz.box' (using password: YES)")
    
    C:\GitHub>migrate.py ALL
    (1045, "Access denied for user 'admin'@'Houston-OLD.fritz.box' (using password: YES)")
    
    C:\GitHub>migrate.py ALL
    (1045, "Access denied for user 'admin'@'Houston-OLD.fritz.box' (using password: YES)")
    
    C:\GitHub>
    

    UDM Pro, Intel NUC - ioBroker in Proxmox-VM, PiHole+Grafana&Influx+TasmoAdmin in LXCs, Raspberry Pi3 (als CCU), Zigbee-Stick Sonoff, Synology DS918+

    1 Antwort Letzte Antwort
    0
    • K Offline
      K Offline
      Kueppert
      schrieb am zuletzt editiert von
      #117

      LÄÄÄÄÄÄÄÄÄÄÄÄUFT, ich werd bekloppt...hab nen anderen User genommen. Habe bei diesem User unter phpMyAdmin => Benutzerkonten => Anmeldeinformationen unter "Hostname" = Jeder Host % eingetragen:
      566a059b-defd-462d-90e4-abf99b475734-image.png

      Falls jmd mal das gleiche Problem haben sollte :)

      UDM Pro, Intel NUC - ioBroker in Proxmox-VM, PiHole+Grafana&Influx+TasmoAdmin in LXCs, Raspberry Pi3 (als CCU), Zigbee-Stick Sonoff, Synology DS918+

      1 Antwort Letzte Antwort
      0
      • K Offline
        K Offline
        Kueppert
        schrieb am zuletzt editiert von Kueppert
        #118

        Hmmmm....hab nur jetzt, wo ich in die InfluxDB schreiben will, echt bei jedem Objekt, das ich logge, Fehlermeldungen im LOG :(

        influxdb.0 2021-06-08 22:11:28.416	warn	Add alias.0.Spritpreise.JETDiesel to conflicting Points (4 now)
        influxdb.0 2021-06-08 22:11:28.413	warn	Error on writePoint("{"value":"1,29","time":"2021-06-08T20:11:28.392Z","from":"system.adapter.tankerkoenig.0","q":0,"ack":true}): Error: {"error":"partial write: field type conflict: input field \"value\" on measurement \"alias.0.Spritpreise.JETDiesel\" is type string, already exists as type float dropped=1"} / "{\"error\":\"partial write: field type conflict: input field \\\"value\\\" on measurement \\\"alias.0.Spritpreise.JETDiesel\\\" is type string, already exists as type float dropped=1\"}\n"
        influxdb.0 2021-06-08 22:11:28.310	warn	Add alias.0.Spritpreise.ESSODiesel to conflicting Points (4 now)
        influxdb.0 2021-06-08 22:11:28.308	warn	Error on writePoint("{"value":"1,32","time":"2021-06-08T20:11:28.238Z","from":"system.adapter.tankerkoenig.0","q":0,"ack":true}): Error: {"error":"partial write: field type conflict: input field \"value\" on measurement \"alias.0.Spritpreise.ESSODiesel\" is type string, already exists as type float dropped=1"} / "{\"error\":\"partial write: field type conflict: input field \\\"value\\\" on measurement \\\"alias.0.Spritpreise.ESSODiesel\\\" is type string, already exists as type float dropped=1\"}\n"
        influxdb.0 2021-06-08 22:10:16.094	warn	Add alias.0.Spritpreise.JETDiesel to conflicting Points (4 now)
        influxdb.0 2021-06-08 22:10:16.093	warn	Error on writePoint("{"value":"1,29","time":"2021-06-08T20:01:28.348Z","from":"system.adapter.tankerkoenig.0","q":0,"ack":true}): Error: {"error":"partial write: field type conflict: input field \"value\" on measurement \"alias.0.Spritpreise.JETDiesel\" is type string, already exists as type float dropped=1"} / "{\"error\":\"partial write: field type conflict: input field \\\"value\\\" on measurement \\\"alias.0.Spritpreise.JETDiesel\\\" is type string, already exists as type float dropped=1\"}\n"
        influxdb.0 2021-06-08 22:10:16.070	warn	Add alias.0.Spritpreise.JETDiesel to conflicting Points (4 now)
        influxdb.0 2021-06-08 22:10:16.069	warn	Error on writePoint("{"value":"1,29","time":"2021-06-08T19:56:28.376Z","from":"system.adapter.tankerkoenig.0","q":0,"ack":true}): Error: {"error":"partial write: field type conflict: input field \"value\" on measurement \"alias.0.Spritpreise.JETDiesel\" is type string, already exists as type float dropped=1"} / "{\"error\":\"partial write: field type conflict: input field \\\"value\\\" on measurement \\\"alias.0.Spritpreise.JETDiesel\\\" is type string, already exists as type float dropped=1\"}\n"
        influxdb.0 2021-06-08 22:10:16.039	warn	Add alias.0.Spritpreise.JETDiesel to conflicting Points (4 now)
        influxdb.0 2021-06-08 22:10:16.038	warn	Error on writePoint("{"value":"1,29","time":"2021-06-08T19:51:28.283Z","from":"system.adapter.tankerkoenig.0","q":0,"ack":true}): Error: {"error":"partial write: field type conflict: input field \"value\" on measurement \"alias.0.Spritpreise.JETDiesel\" is type string, already exists as type float dropped=1"} / "{\"error\":\"partial write: field type conflict: input field \\\"value\\\" on measurement \\\"alias.0.Spritpreise.JETDiesel\\\" is type string, already exists as type float dropped=1\"}\n"
        influxdb.0 2021-06-08 22:10:16.007	warn	Try to write 3 Points separate to find the conflicting one
        influxdb.0 2021-06-08 22:10:16.006	warn	Error on writePoints for alias.0.Spritpreise.JETDiesel: Error: {"error":"partial write: field type conflict: input field \"value\" on measurement \"alias.0.Spritpreise.JETDiesel\" is type string, already exists as type float dropped=3"}
        influxdb.0 2021-06-08 22:10:15.982	warn	Add alias.0.Spritpreise.ESSODiesel to conflicting Points (4 now)
        influxdb.0 2021-06-08 22:10:15.980	warn	Error on writePoint("{"value":"1,32","time":"2021-06-08T20:01:28.220Z","from":"system.adapter.tankerkoenig.0","q":0,"ack":true}): Error: {"error":"partial write: field type conflict: input field \"value\" on measurement \"alias.0.Spritpreise.ESSODiesel\" is type string, already exists as type float dropped=1"} / "{\"error\":\"partial write: field type conflict: input field \\\"value\\\" on measurement \\\"alias.0.Spritpreise.ESSODiesel\\\" is type string, already exists as type float dropped=1\"}\n"
        influxdb.0 2021-06-08 22:10:15.952	warn	Add alias.0.Spritpreise.ESSODiesel to conflicting Points (4 now)
        influxdb.0 2021-06-08 22:10:15.945	warn	Error on writePoint("{"value":"1,32","time":"2021-06-08T19:56:28.229Z","from":"system.adapter.tankerkoenig.0","q":0,"ack":true}): Error: {"error":"partial write: field type conflict: input field \"value\" on measurement \"alias.0.Spritpreise.ESSODiesel\" is type string, already exists as type float dropped=1"} / "{\"error\":\"partial write: field type conflict: input field \\\"value\\\" on measurement \\\"alias.0.Spritpreise.ESSODiesel\\\" is type string, already exists as type float dropped=1\"}\n"
        influxdb.0 2021-06-08 22:10:15.476	warn	Error on writePoint("{"value":true,"time":"2021-06-08T20:06:06.182Z","from":"system.adapter.sonoff.0","q":0,"ack":true}): Error: {"error":"partial write: field type conflict: input field \"value\" on measurement \"alias.0.Steckdosen.Serverschrank\" is type boolean, already exists as type float dropped=1"} / "{\"error\":\"partial write: field type conflict: input field \\\"value\\\" on measurement \\\"alias.0.Steckdosen.Serverschrank\\\" is type boolean, already exists as type float dropped=1\"}\n"
        

        Hab nur einige wenige gepostet...wie bekomm ich das behoben?

        UDM Pro, Intel NUC - ioBroker in Proxmox-VM, PiHole+Grafana&Influx+TasmoAdmin in LXCs, Raspberry Pi3 (als CCU), Zigbee-Stick Sonoff, Synology DS918+

        JackGruberJ 1 Antwort Letzte Antwort
        0
        • K Kueppert

          Hmmmm....hab nur jetzt, wo ich in die InfluxDB schreiben will, echt bei jedem Objekt, das ich logge, Fehlermeldungen im LOG :(

          influxdb.0 2021-06-08 22:11:28.416	warn	Add alias.0.Spritpreise.JETDiesel to conflicting Points (4 now)
          influxdb.0 2021-06-08 22:11:28.413	warn	Error on writePoint("{"value":"1,29","time":"2021-06-08T20:11:28.392Z","from":"system.adapter.tankerkoenig.0","q":0,"ack":true}): Error: {"error":"partial write: field type conflict: input field \"value\" on measurement \"alias.0.Spritpreise.JETDiesel\" is type string, already exists as type float dropped=1"} / "{\"error\":\"partial write: field type conflict: input field \\\"value\\\" on measurement \\\"alias.0.Spritpreise.JETDiesel\\\" is type string, already exists as type float dropped=1\"}\n"
          influxdb.0 2021-06-08 22:11:28.310	warn	Add alias.0.Spritpreise.ESSODiesel to conflicting Points (4 now)
          influxdb.0 2021-06-08 22:11:28.308	warn	Error on writePoint("{"value":"1,32","time":"2021-06-08T20:11:28.238Z","from":"system.adapter.tankerkoenig.0","q":0,"ack":true}): Error: {"error":"partial write: field type conflict: input field \"value\" on measurement \"alias.0.Spritpreise.ESSODiesel\" is type string, already exists as type float dropped=1"} / "{\"error\":\"partial write: field type conflict: input field \\\"value\\\" on measurement \\\"alias.0.Spritpreise.ESSODiesel\\\" is type string, already exists as type float dropped=1\"}\n"
          influxdb.0 2021-06-08 22:10:16.094	warn	Add alias.0.Spritpreise.JETDiesel to conflicting Points (4 now)
          influxdb.0 2021-06-08 22:10:16.093	warn	Error on writePoint("{"value":"1,29","time":"2021-06-08T20:01:28.348Z","from":"system.adapter.tankerkoenig.0","q":0,"ack":true}): Error: {"error":"partial write: field type conflict: input field \"value\" on measurement \"alias.0.Spritpreise.JETDiesel\" is type string, already exists as type float dropped=1"} / "{\"error\":\"partial write: field type conflict: input field \\\"value\\\" on measurement \\\"alias.0.Spritpreise.JETDiesel\\\" is type string, already exists as type float dropped=1\"}\n"
          influxdb.0 2021-06-08 22:10:16.070	warn	Add alias.0.Spritpreise.JETDiesel to conflicting Points (4 now)
          influxdb.0 2021-06-08 22:10:16.069	warn	Error on writePoint("{"value":"1,29","time":"2021-06-08T19:56:28.376Z","from":"system.adapter.tankerkoenig.0","q":0,"ack":true}): Error: {"error":"partial write: field type conflict: input field \"value\" on measurement \"alias.0.Spritpreise.JETDiesel\" is type string, already exists as type float dropped=1"} / "{\"error\":\"partial write: field type conflict: input field \\\"value\\\" on measurement \\\"alias.0.Spritpreise.JETDiesel\\\" is type string, already exists as type float dropped=1\"}\n"
          influxdb.0 2021-06-08 22:10:16.039	warn	Add alias.0.Spritpreise.JETDiesel to conflicting Points (4 now)
          influxdb.0 2021-06-08 22:10:16.038	warn	Error on writePoint("{"value":"1,29","time":"2021-06-08T19:51:28.283Z","from":"system.adapter.tankerkoenig.0","q":0,"ack":true}): Error: {"error":"partial write: field type conflict: input field \"value\" on measurement \"alias.0.Spritpreise.JETDiesel\" is type string, already exists as type float dropped=1"} / "{\"error\":\"partial write: field type conflict: input field \\\"value\\\" on measurement \\\"alias.0.Spritpreise.JETDiesel\\\" is type string, already exists as type float dropped=1\"}\n"
          influxdb.0 2021-06-08 22:10:16.007	warn	Try to write 3 Points separate to find the conflicting one
          influxdb.0 2021-06-08 22:10:16.006	warn	Error on writePoints for alias.0.Spritpreise.JETDiesel: Error: {"error":"partial write: field type conflict: input field \"value\" on measurement \"alias.0.Spritpreise.JETDiesel\" is type string, already exists as type float dropped=3"}
          influxdb.0 2021-06-08 22:10:15.982	warn	Add alias.0.Spritpreise.ESSODiesel to conflicting Points (4 now)
          influxdb.0 2021-06-08 22:10:15.980	warn	Error on writePoint("{"value":"1,32","time":"2021-06-08T20:01:28.220Z","from":"system.adapter.tankerkoenig.0","q":0,"ack":true}): Error: {"error":"partial write: field type conflict: input field \"value\" on measurement \"alias.0.Spritpreise.ESSODiesel\" is type string, already exists as type float dropped=1"} / "{\"error\":\"partial write: field type conflict: input field \\\"value\\\" on measurement \\\"alias.0.Spritpreise.ESSODiesel\\\" is type string, already exists as type float dropped=1\"}\n"
          influxdb.0 2021-06-08 22:10:15.952	warn	Add alias.0.Spritpreise.ESSODiesel to conflicting Points (4 now)
          influxdb.0 2021-06-08 22:10:15.945	warn	Error on writePoint("{"value":"1,32","time":"2021-06-08T19:56:28.229Z","from":"system.adapter.tankerkoenig.0","q":0,"ack":true}): Error: {"error":"partial write: field type conflict: input field \"value\" on measurement \"alias.0.Spritpreise.ESSODiesel\" is type string, already exists as type float dropped=1"} / "{\"error\":\"partial write: field type conflict: input field \\\"value\\\" on measurement \\\"alias.0.Spritpreise.ESSODiesel\\\" is type string, already exists as type float dropped=1\"}\n"
          influxdb.0 2021-06-08 22:10:15.476	warn	Error on writePoint("{"value":true,"time":"2021-06-08T20:06:06.182Z","from":"system.adapter.sonoff.0","q":0,"ack":true}): Error: {"error":"partial write: field type conflict: input field \"value\" on measurement \"alias.0.Steckdosen.Serverschrank\" is type boolean, already exists as type float dropped=1"} / "{\"error\":\"partial write: field type conflict: input field \\\"value\\\" on measurement \\\"alias.0.Steckdosen.Serverschrank\\\" is type boolean, already exists as type float dropped=1\"}\n"
          

          Hab nur einige wenige gepostet...wie bekomm ich das behoben?

          JackGruberJ Offline
          JackGruberJ Offline
          JackGruber
          schrieb am zuletzt editiert von
          #119

          @kueppert
          Es schaut so aus, als ob system.adapter.tankerkoenig mal strings und mal float values enthält und dies natürlich nicht in ein schema passen.

          Du könntest mir einen export aus der MySQL zukommen lassen. Die ID (Angezeigt beim start des jeweiligen imports) kannst du für eine WHERE bedingung beim Datenexport nutzen.

          K 1 Antwort Letzte Antwort
          0
          • JackGruberJ JackGruber

            @kueppert
            Es schaut so aus, als ob system.adapter.tankerkoenig mal strings und mal float values enthält und dies natürlich nicht in ein schema passen.

            Du könntest mir einen export aus der MySQL zukommen lassen. Die ID (Angezeigt beim start des jeweiligen imports) kannst du für eine WHERE bedingung beim Datenexport nutzen.

            K Offline
            K Offline
            Kueppert
            schrieb am zuletzt editiert von Kueppert
            #120

            @jackgruber hab vermutlich den Fehler gefunden. Ich hab im Alias den "." zu einem "," konvertiert und den Typ auf string stehen gehabt...hab die Konvertierung jetzt rausgenommen und auf number umgestellt. Sollte das reichen? Entspricht das einem float?
            Wenn nein, lösche ich wieder die InfluxDB (das measurement) und importiere nochmal alles neu...
            Danke dir und vG. Thorsten :)

            NACHTRAG: Tankerkönig schreibt wirklich nen String in seine Objekte beim Spritpreis, ich konvertiere zu number im Alias :/ Kann ich dir "einfach" aus phpMyAdmin einen Export zukommen lassen? Ich weiß nur nicht, wie ich zB nur die Spritpreise da raus bekomme ^^ Hab aktuell 3Mio Datensätze, viele wollte ich in der Influx nach "Migration" löschen. Aber den string vom Tankerkönig bekomm ich ja nicht mit meinen ALias-Werten (number) gemerged so ohne weiteres...

            UDM Pro, Intel NUC - ioBroker in Proxmox-VM, PiHole+Grafana&Influx+TasmoAdmin in LXCs, Raspberry Pi3 (als CCU), Zigbee-Stick Sonoff, Synology DS918+

            JackGruberJ 1 Antwort Letzte Antwort
            0
            • K Kueppert

              @jackgruber hab vermutlich den Fehler gefunden. Ich hab im Alias den "." zu einem "," konvertiert und den Typ auf string stehen gehabt...hab die Konvertierung jetzt rausgenommen und auf number umgestellt. Sollte das reichen? Entspricht das einem float?
              Wenn nein, lösche ich wieder die InfluxDB (das measurement) und importiere nochmal alles neu...
              Danke dir und vG. Thorsten :)

              NACHTRAG: Tankerkönig schreibt wirklich nen String in seine Objekte beim Spritpreis, ich konvertiere zu number im Alias :/ Kann ich dir "einfach" aus phpMyAdmin einen Export zukommen lassen? Ich weiß nur nicht, wie ich zB nur die Spritpreise da raus bekomme ^^ Hab aktuell 3Mio Datensätze, viele wollte ich in der Influx nach "Migration" löschen. Aber den string vom Tankerkönig bekomm ich ja nicht mit meinen ALias-Werten (number) gemerged so ohne weiteres...

              JackGruberJ Offline
              JackGruberJ Offline
              JackGruber
              schrieb am zuletzt editiert von
              #121

              @Kueppert

              Ersetz das XYZ durch die ID aus der python ausgabe und führ beide Querys unter SQL im PhPMyAdmin aus.

              SELECT * FROM ts_string WHERE id = XYZ LIMIT 0, 100
              
              SELECT * FROM datapoints WHERE id = XYZ
              

              Dann für beide abfragen ganz unten auf der Seite Operationen für das Abfrageergebnis > Exportieren wählen.

              Dann kann ich es mir anschauen und evtl. ne Option reinbauen um Datensätze zu konvertieren.

              1 Antwort Letzte Antwort
              1
              • K Offline
                K Offline
                Kueppert
                schrieb am zuletzt editiert von Kueppert
                #122

                @jackgruber danke dir für deine Rückmeldung. Ich habe herausgefunden, dass die Fehlermeldungen "nur" kamen bei neuen Eintragungen in die InfluxDB, die ich im Alias-DP falsch konvertiert hatte. Hab im ALias auf Zahl umgestellt und voila, InfluxDB schmeißt keine Fehler mehr :)
                Bin gerade dabei in der Konsole alle Maisurements zusammenzuführen, die zusammen gehören (hab zu oft die Bezeichnungen gewechselt). Werde zukünftig nur noch die Alias-Objekte loggen und dahinterliegende Geräte, sofern nötig, austauschen. Dann bleibt es immer bei der gleichen Bezeichnung.
                DANKE für dein tolles Skript für den Import in InfluxDB :+1: :+1: :+1: :+1:

                UDM Pro, Intel NUC - ioBroker in Proxmox-VM, PiHole+Grafana&Influx+TasmoAdmin in LXCs, Raspberry Pi3 (als CCU), Zigbee-Stick Sonoff, Synology DS918+

                1 Antwort Letzte Antwort
                0
                • S Offline
                  S Offline
                  schweigel
                  schrieb am zuletzt editiert von
                  #123

                  Hallo,

                  erstmal vielen Dank für das Skript.

                  ts_numeric lässt sich ohne Probleme überführen, aber mit bool gibt es Probleme. Scheinbar sind die Daten in der Quelle nicht als bool sondern als float abgelegt. Daher wird eine Konvertierung nach boolean benötigt. Was muss an dem Skript angepasst werden, damit ts_bool vor der Überführung entsprechen konvertiert wird?

                  Total metrics in ts_bool: 1
                  wolf.0.cwl.158(ID: 98) (1/1)
                  Processing row 1 to 1,000 from LIMIT 0 / 100,000 ts_bool - wolf.0.cwl.158 (1/1)
                  InfluxDB error
                  400: {"error":"partial write: field type conflict: input field \"value\" on measurement \"wolf.0.cwl.158\" is type float, already exists as type boolean dropped=200"}
                  

                  Grüße

                  JackGruberJ 1 Antwort Letzte Antwort
                  0
                  • S schweigel

                    Hallo,

                    erstmal vielen Dank für das Skript.

                    ts_numeric lässt sich ohne Probleme überführen, aber mit bool gibt es Probleme. Scheinbar sind die Daten in der Quelle nicht als bool sondern als float abgelegt. Daher wird eine Konvertierung nach boolean benötigt. Was muss an dem Skript angepasst werden, damit ts_bool vor der Überführung entsprechen konvertiert wird?

                    Total metrics in ts_bool: 1
                    wolf.0.cwl.158(ID: 98) (1/1)
                    Processing row 1 to 1,000 from LIMIT 0 / 100,000 ts_bool - wolf.0.cwl.158 (1/1)
                    InfluxDB error
                    400: {"error":"partial write: field type conflict: input field \"value\" on measurement \"wolf.0.cwl.158\" is type float, already exists as type boolean dropped=200"}
                    

                    Grüße

                    JackGruberJ Offline
                    JackGruberJ Offline
                    JackGruber
                    schrieb am zuletzt editiert von JackGruber
                    #124

                    @schweigel was für float werte stehen in der ts_bool für den Datenpunkt?

                    SELECT * FROM ts_bool WHERE id = 98 AND val != 0 AND val != 1 LIMIT 0, 10;
                    
                    1 Antwort Letzte Antwort
                    0
                    • S Offline
                      S Offline
                      schweigel
                      schrieb am zuletzt editiert von
                      #125

                      @JackGruber Es sind nur 0 und 1 enthalten, deine Abfrage liefert also keine Zeilen zurück.

                      JackGruberJ 1 Antwort Letzte Antwort
                      0
                      • S schweigel

                        @JackGruber Es sind nur 0 und 1 enthalten, deine Abfrage liefert also keine Zeilen zurück.

                        JackGruberJ Offline
                        JackGruberJ Offline
                        JackGruber
                        schrieb am zuletzt editiert von
                        #126

                        @schweigel
                        Du hast in der InfluxDB bereits daten vom selben messpunkt, die float (Zahlen mit nachkommastellen) sind. Diese in bool (Wahrheitswerte) zu konvertieren macht eigentlich kein Sin.

                        Aber du kannst versuchen das Script für dich anzupassen.
                        Füge soetwas wie fields["value"] = float(record["value"]),nach Zeile 108 ein, dann wird versucht alle Werte in float zu wandeln.

                        1 Antwort Letzte Antwort
                        0
                        • S Offline
                          S Offline
                          schweigel
                          schrieb am zuletzt editiert von
                          #127

                          @JackGruber
                          Mmh, das hat nicht ganz geklappt.
                          Habe es versucht, dann kam folgende Fehlermeldung:

                          wolf.0.cwl.158(ID: 98) (1/1)
                          Processing row 1 to 1,000 from LIMIT 0 / 100,000 ts_bool - wolf.0.cwl.158 (1/1)
                          InfluxDB error
                          400: {"error":"partial write: field type conflict: input field \"value\" on measurement \"wolf.0.cwl.158\" is type float, already exists as type boolean dropped=219"}
                          

                          Dachte auch das die Daten in MySQL in float sind und ich diese nach InfluxDB als boolean überführen muss, also habe ich die Zeile angepasst:

                          fields["value"] = bool(record["value"])
                          

                          Zu meiner Überraschung bekam ich dann folgende Meldung:

                          wolf.0.cwl.158(ID: 98) (1/1)
                          Processing row 1 to 1,000 from LIMIT 0 / 100,000 ts_bool - wolf.0.cwl.158 (1/1)
                          InfluxDB error
                          400: {"error":"partial write: field type conflict: input field \"value\" on measurement \"wolf.0.cwl.158\" is type boolean, already exists as type float dropped=148"}
                          

                          Nun war ich verwundert, ist value nun ein float oder ein boolean in InfluxDB? Also habe ich mir den Aufbau in Influx angesehen mit folgendem Ergebnis:

                          name: wolf.0.cwl.158
                          fieldKey fieldType
                          -------- ---------
                          ack      boolean
                          from     string
                          q        float
                          value    boolean
                          value    float
                          

                          value gibt es zweimal. Für mein Verständnis sollte es nur einmal da sein. Muss ich da die InfluxDB erst fixen?

                          1 Antwort Letzte Antwort
                          0
                          • S Offline
                            S Offline
                            schweigel
                            schrieb am zuletzt editiert von
                            #128

                            Habe den Messwert nun aus der DB gelöscht und ihn über den Adapter in iobroker neu angelegt. Nun hat er nur noch einen value als boolean. Damit war der Datentransfer nun möglich.

                            1 Antwort Letzte Antwort
                            0
                            • S Offline
                              S Offline
                              schweigel
                              schrieb am zuletzt editiert von
                              #129

                              Hatte nun noch weitere Probleme:

                              Daten waren in MySQL und in InfluxDB als unterschiedliche Formate gespeichert und teilweise hatten sich in MySQL die Datentypen über die Zeit geändert, sodass ein Messwert in mehreren Datentabellen (z.B. ts_number & ts_string) vorhanden war.
                              Da das Skript den Datentyp über die Quelltabelle ermittelt (ts_number => Zahl, ts_bool => Wahrheitswert, ts_string => Zeichenfolge) führt dieses zu Problemen.
                              In der Übersichtstabelle (datapoints) gibt es nur eine Angabe des Datentypes. Diese ist in meinen Auge der aktuell gewünschte Datentyp. Daher habe ich das Skript um eine Abfrage des Datentypes aus datapoints erweitert und eine Konvertierung in diesen Datentyp eingebaut.
                              Nun können Daten z.B. in den Tabellen ts_string und ts_number vorliegen. Bei der Migration werden die Daten dann in den Datentyp konvertiert, der in datapoints angegeben ist.
                              Damit reicht es das InfluxDB und MySQL für jeden Wert den gleichen Datentypen verwenden.

                              Da ich früher meist als Datentyp "Automatisch" angegeben hatte, konnte dieses hier zu Problemen führen. Nach dem ich alle Datentypen händisch gerade gezogen habe, teilweise direkt in der MySQL-Datenbank, funktionierte die Migration mit der Skriptanpassung problemlos.

                              Meine Änderungen des Skriptes sind in einem Fork abgelegt und einen Pull request habe ich gestellt.

                              Aus meiner Sicht könnte man nun noch als Anpassung vornehmen, das er den gewünschten Datentypen nicht aus der MySQL-Datenbank bezieht, sondern aus der InfluxDB, wenn man vorher den Wert dort bereits über iobroker eingefügt hat.

                              In Summe nochmal danke für das Skript, es hat mir sehr weiter geholfen.

                              1 Antwort Letzte Antwort
                              1
                              • JackGruberJ JackGruber

                                @UlliJ danke für die Idee mit dem Script.
                                Hab das script etwas angepasst, damit alle Daten übernommen werden und diese auch auf einem leistungsschwachen Rasperry Pi ausgelesen werden können.
                                Hab so ca. 22 Millionen Datensätze in die InfluxDB gepackt.

                                GitHub iobroker_mysql_2_influxdb

                                umbmU Offline
                                umbmU Offline
                                umbm
                                schrieb am zuletzt editiert von
                                #130

                                @jackgruber sagte in Frage : Migrate MySQL nach Influxdb:

                                Hab das script etwas angepasst, damit alle Daten übernommen werden und diese auch auf einem leistungsschwachen Rasperry Pi ausgelesen werden können.

                                Frage:
                                Läuft das Script auch mit influxdb v2.x?
                                Hintergrund:
                                Der externe Zugriff wird ab v2 ja über Token abgesichert.
                                In der database.json sind aber nur username/password für influxdb hinterlegt.

                                B 1 Antwort Letzte Antwort
                                0
                                • N Offline
                                  N Offline
                                  nureinbenutzer
                                  schrieb am zuletzt editiert von nureinbenutzer
                                  #131

                                  Hallo @JackGruber

                                  Erstmal Danke für das Script :)

                                  Ich habe versucht, nach der Anleitung über das Script die Daten von MySQL nach InfluxDB zu migrieren.

                                  Leider lässt sich das Script migrate.py bei mir nicht ohne Fehlermeldung ausführen.

                                  Es erscheint:

                                  File "migrate.py", line 177
                                    print(f"Processing row {processed_rows + 1:,} to {processed_rows + len(selected_rows):,} from LIMIT {start_row:,} / {start_row + query_max_rows:,} " +
                                                                                                                                                                                       ^
                                  SyntaxError: invalid syntax
                                  

                                  Wo da in Zeile 177 der Fehler steckt, verschließt sich mir ...

                                  Hat jemand eine Idee, woran das liegen könnte?

                                  JackGruberJ 1 Antwort Letzte Antwort
                                  0
                                  • N nureinbenutzer

                                    Hallo @JackGruber

                                    Erstmal Danke für das Script :)

                                    Ich habe versucht, nach der Anleitung über das Script die Daten von MySQL nach InfluxDB zu migrieren.

                                    Leider lässt sich das Script migrate.py bei mir nicht ohne Fehlermeldung ausführen.

                                    Es erscheint:

                                    File "migrate.py", line 177
                                      print(f"Processing row {processed_rows + 1:,} to {processed_rows + len(selected_rows):,} from LIMIT {start_row:,} / {start_row + query_max_rows:,} " +
                                                                                                                                                                                         ^
                                    SyntaxError: invalid syntax
                                    

                                    Wo da in Zeile 177 der Fehler steckt, verschließt sich mir ...

                                    Hat jemand eine Idee, woran das liegen könnte?

                                    JackGruberJ Offline
                                    JackGruberJ Offline
                                    JackGruber
                                    schrieb am zuletzt editiert von
                                    #132

                                    @nureinbenutzer Update dein Python auf eine aktuelle Python 3 version!
                                    Ich vermute du nutzt eine alte 2.x version.

                                    N 1 Antwort Letzte Antwort
                                    0
                                    • JackGruberJ JackGruber

                                      @nureinbenutzer Update dein Python auf eine aktuelle Python 3 version!
                                      Ich vermute du nutzt eine alte 2.x version.

                                      N Offline
                                      N Offline
                                      nureinbenutzer
                                      schrieb am zuletzt editiert von nureinbenutzer
                                      #133

                                      @jackgruber Python liegt in Version 3.7.3 vor ...

                                      Das war auch der Grund.

                                      Der Aufruf muss lauten

                                      python3 migrate.py ALL
                                      

                                      Danke für den Denkanstoss :)

                                      1 Antwort Letzte Antwort
                                      0
                                      • N Offline
                                        N Offline
                                        neunteufels
                                        schrieb am zuletzt editiert von
                                        #134

                                        Hallo.

                                        Ich habe gestern das Script von @JackGruber probiert und es lief auch an.
                                        Habe gedacht ich lasse es über Nacht laufen, aber heute Früh habe ich folgenden Fehler gesehen:

                                        Processing row 600,001 to 601,000 from LIMIT 600,000 / 700,000 ts_number - Wetter Luftdruck hPa (53/81)
                                        InfluxDB error
                                        HTTPConnectionPool(host='localhost', port=8086): Max retries exceeded with url: /write?db=iobroker&rp=autogen (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x74d52778>: Failed to establish a new connection: [Errno 111] Connection refused'))
                                        
                                        

                                        Jemand eine Idee?

                                        Danke!

                                        1 Antwort Letzte Antwort
                                        0
                                        • U UlliJ

                                          Moin zusammen,

                                          mein erster post in diesem Forum...
                                          Zu aller erst vielen Dank für diese tolle Plattform und den vielen die mit enormem Aufwand das smarte home nach vorne treiben, tolle Ideen weiter geben, absolut geile Visualisierungen bauen usw. Ich habe bislang selten ein Forum gesehen, in dem so konstruktiv und freundlich miteinander umgegangen wird...weiter so :+1:

                                          Seit ca 2 Jahren betreibe ich Iobroker und habe bislang die Daten zuerst in MySQL und später dann in PostgreSQL abgelegt. Über die Zeit wurden die ganzen Abfragen und Diagramme mit Grafana nach und nach deutlich träger. Nach kurzer Testphase mit InfluxDB war die Frage geklärt:sunglasses:
                                          Mit dem Wechsel auf InfluxDB stellt sich die Frage für den nicht Programmierer wie die Daten von alt nach neu...

                                          Die genannten Lösungen haben bei mir nicht zuverlässig funktioniert also die nächste Klappe

                                          1. In einem SQL GUI (phpmyadmin, HeidiSQL oder DBeaver, etc) oder auf der SQL-Konsole die zu exportierenden Daten in einem View zur Verfügung stellen
                                            Der View enthält alles was Influx benötigt
                                          create view xxx as
                                          SELECT datapoints.name,
                                          	ts_number.ack    as "ack",
                                              (ts_number.q*1.0)       as "q",
                                          	sources.name as "from",
                                              (ts_number.val*1.0)     as "value",
                                              (ts_number.ts*1000000) as "time"
                                          from ts_number 
                                          left join datapoints
                                          on ts_number.id=datapoints.id
                                          left join sources
                                          on ts_number._from=sources.id
                                          where datapoints.id>=70 and datapoints.id<=73 and q=0
                                          order by ts_number.ts desc;
                                          

                                          "xxx" Name des View anpassen
                                          in der WHERE Klausel die Datenpunkte entsprechend anpassen, einen Bereich wie hier oder auch eine einzelne id
                                          Für kleine Datenbestände kann die WHERE Klausel auch auf "WHERE q=0" gesetzt werden und über den View in einem Rutsch in Influx übertragen werden.
                                          Beispiel:
                                          59cd61b2-aab9-4cf5-8c14-f16d1e595125-grafik.png

                                          1. Python installieren und ggf. die Zusätze installieren
                                          • psycopg2 für PostgreSQL bzw. MySQLdb für MySQL
                                          • influxdb-client und influxdb.
                                          1. das Skript von Muntazir Fadhel "Easily Migrate Postgres/MySQL Records to InfluxDB" nehmen (modifizierte Variante hier)
                                          ### MySQL DB info ###
                                          #import MySQLdb
                                          #conn = MySQLdb.connect(host="localhost",  # your host, usually localhost
                                          #                     user="john",         # your username
                                          #                     passwd="megajonhy",  # your password
                                          #                     db="jonhydb")        # name of the data base
                                          
                                          
                                          ### PostgreSQL DB info ###
                                          import psycopg2
                                          import psycopg2.extras
                                          
                                          #####
                                          # connection data for PostgreSQL
                                          conn = psycopg2.connect("dbname=xxx user=xxx password=xxx host=xxx.xxx.xxx.xxx port =5432")
                                          #####
                                          
                                          # InfluxDB info #
                                          from influxdb import InfluxDBClient
                                          #
                                          #####connection data for InfluxDB#####
                                          influxClient = InfluxDBClient(host='xxx.xxx.xxx.xxx', port=8086, username='xxx', password='xxx', database='xxx')
                                          #####
                                          #influxClient.delete_database(influx_db_name)
                                          #influxClient.create_database(influx_db_name)
                                          
                                          # dictates how columns will be mapped to key/fields in InfluxDB
                                          schema = {
                                              "time_column": "time", # the column that will be used as the time stamp in influx
                                              "columns_to_fields" : ["ack","q", "from","value"], # columns that will map to fields 
                                              # "columns_to_tags" : ["",...], # columns that will map to tags
                                              "table_name_to_measurement" : "name", # table name that will be mapped to measurement
                                              }
                                          
                                          '''
                                          Generates an collection of influxdb points from the given SQL records
                                          '''
                                          def generate_influx_points(records):
                                              influx_points = []
                                              for record in records:
                                                  #tags = {}, 
                                                  fields = {}
                                                  #for tag_label in schema['columns_to_tags']:
                                                  #   tags[tag_label] = record[tag_label]
                                                  for field_label in schema['columns_to_fields']:
                                                      fields[field_label] = record[field_label]
                                                  influx_points.append({
                                                      "measurement": record[schema['table_name_to_measurement']],
                                                      #"tags": tags,
                                                      "time": record[schema['time_column']],
                                                      "fields": fields
                                                  })
                                              return influx_points
                                          
                                          
                                          
                                          # query relational DB for all records
                                          curr = conn.cursor('cursor', cursor_factory=psycopg2.extras.RealDictCursor)
                                          # curr = conn.cursor(dictionary=True)
                                          #####
                                          # SQL query for PostgreSQL, syntax for MySQL differs
                                          # query provide desired columns as a view on the sql server
                                          
                                          # request data from SQL, adjust ...from <view name>
                                          curr.execute("Select * from xxx;")
                                          #####
                                          row_count = 0
                                          # process 1000 records at a time
                                          while True:
                                              print("Processing row #" + str(row_count + 1))
                                              selected_rows = curr.fetchmany(1000)
                                              influxClient.write_points(generate_influx_points(selected_rows))
                                              row_count += 1000
                                              if len(selected_rows) < 1000:
                                                  break
                                          conn.close()
                                          
                                          

                                          Im Skript sind

                                          • in Zeile 15 die Datenbankverbindung für Postgre anzupassen,
                                          • in Zeile 22 die Datenbankverbindung für Influx
                                          • weiter unten Zeile 65 statt xxx ist der Name des Views einzutragen der auf der Datenbank mit der Abfrage aus 1 erzeugt wurde
                                            curr.execute("Select * from xxx;")
                                          • der Abschnitt "schema" gibt das mapping der Spalten vor und muss nur angepasst werden wenn die Spaltenbezeichner in der Abfrage aus 1 geändert werden
                                          • für die MySQL user sind die Verbindungsdaten in den Zeilen 2-6 auskommentiert und an eure Umgebung anzupassen.
                                          1. In der Python Umgebung das Skript starten...alle 1000 Zeilen/Datensätze kommt eine Fortschrittsmeldung. Während die Abfrage auf der SQL Seite läuft steht da "Processing row # 1"

                                          Bei umfangreichen Abfragen und je nach Umgebung kann das Ganze ein wenig dauern. Teilweise dauerten bei mir die SQL Abfragen bis zu 20min bei 20Mio Datensätzen (Nuc i3 mit 12GB für die SQL VM unter proxmox). Das Skript läuft zuverlässig und mehrere 10 Mio Datensätze von A nach B wurden migriert. Vielleicht kann es jemand brauchen und nochmals Danke für das tolle Projekt und die hilfsbereiten Menschen hier
                                          VG
                                          Ulli

                                          Thomas HerrmannT Offline
                                          Thomas HerrmannT Offline
                                          Thomas Herrmann
                                          schrieb am zuletzt editiert von
                                          #135

                                          @ullij Erstmal vielen Dank..

                                          Ich musste das Skript leicht anpassen auf sqlite, hab jetzt aber einen Fehler, der mit der Anpassung selbst eigentlich nichts zu tun hat:

                                          ### MySQL DB info ###
                                          #import MySQLdb
                                          #conn = MySQLdb.connect(host="localhost",  # your host, usually localhost
                                          #                     user="john",         # your username
                                          #                     passwd="megajonhy",  # your password
                                          #                     db="jonhydb")        # name of the data base
                                           
                                           
                                          ### PostgreSQL DB info ###
                                          #import psycopg2
                                          #import psycopg2.extras
                                          import sqlite3
                                           
                                          #####
                                          # connection data for PostgreSQL
                                          #conn = psycopg2.connect("dbname=xxx user=xxx password=xxx host=xxx.xxx.xxx.xxx port =5432")
                                          #####
                                          
                                          conn = sqlite3.connect('/opt/iobroker/iobroker-data/sqlite/sqlite.db')
                                          
                                          # InfluxDB info #
                                          from influxdb import InfluxDBClient
                                          #
                                          #####connection data for InfluxDB#####
                                          influxClient = InfluxDBClient(host='localhost', port=8086, username='xxxx', password='xxxx!', database='xxxx')
                                          #####
                                          #influxClient.delete_database(influx_db_name)
                                          #influxClient.create_database(influx_db_name)
                                           
                                          # dictates how columns will be mapped to key/fields in InfluxDB
                                          schema = {
                                              "time_column": "time", # the column that will be used as the time stamp in influx
                                              "columns_to_fields" : ["ack","q", "from","value"], # columns that will map to fields 
                                              # "columns_to_tags" : ["",...], # columns that will map to tags
                                              "table_name_to_measurement" : "name", # table name that will be mapped to measurement
                                              }
                                           
                                          '''
                                          Generates an collection of influxdb points from the given SQL records
                                          '''
                                          def generate_influx_points(records):
                                              influx_points = []
                                              for record in records:
                                                  #tags = {}, 
                                                  fields = {}
                                                  #for tag_label in schema['columns_to_tags']:
                                                  #   tags[tag_label] = record[tag_label]
                                                  for field_label in schema['columns_to_fields']:
                                                      if field_label == "ack":
                                                          record[field_label] = bool(record[field_label])
                                                      fields[field_label] = record[field_label]
                                                  influx_points.append({
                                                      "measurement": record[schema['table_name_to_measurement']],
                                                      #"tags": tags,
                                                      "time": record[schema['time_column']],
                                                      "fields": fields
                                                  })
                                              return influx_points
                                           
                                          # query relational DB for all records
                                          curr = conn.cursor()
                                          # curr = conn.cursor(dictionary=True)
                                          #####
                                          # SQL query for PostgreSQL, syntax for MySQL differs
                                          # query provide desired columns as a view on the sql server
                                           
                                          # request data from SQL, adjust ...from <view name>
                                          curr.execute("Select * from xxx;")
                                          #####
                                          row_count = 0
                                          # process 1000 records at a time
                                          while True:
                                              print("Processing row #" + str(row_count + 1))
                                              selected_rows = curr.fetchmany(1000)
                                              influxClient.write_points(generate_influx_points(selected_rows))
                                              row_count += 1000
                                              if len(selected_rows) < 1000:
                                                  break
                                          conn.close()
                                          

                                          Fehler:

                                          user@UbuntuHomeAutomation2:~$ python3 sql2influx3.py
                                          Processing row #1
                                          Traceback (most recent call last):
                                            File "sql2influx3.py", line 75, in <module>
                                              influxClient.write_points(generate_influx_points(selected_rows))
                                            File "sql2influx3.py", line 50, in generate_influx_points
                                              record[field_label] = bool(record[field_label])
                                          TypeError: tuple indices must be integers or slices, not str
                                          user@UbuntuHomeAutomation2:~$
                                          
                                          

                                          Vielleicht hat ja jemand ne Lösung.

                                          U 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

                                          694

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          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