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. Skripten / Logik
  4. Aus influxDB 2 lesen und schreiben JS oder node.js

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.2k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.5k

Aus influxDB 2 lesen und schreiben JS oder node.js

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
blocklyjavascript
15 Beiträge 5 Kommentatoren 871 Aufrufe 4 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.
  • XxJooOX Offline
    XxJooOX Offline
    XxJooO
    schrieb am zuletzt editiert von
    #1

    Liebe Freunde,

    ich habe jetzt sehr viele Stunden damit verbracht, im Netz nach Hinweisen zu suchen und gebe offiziell zu, auch ChatGPT zu bemühen - aber es geht nicht.

    Folgendes ist das Ziel:
    Seit Anfang 2020 hat der ioBroker brav Werte meiner Wetterstation erhoben und dokumentiert vom Wetter-WLAN-Skript in meine influxDB 2.x geloggt und geschrieben. Das sehe ich mit Grafana.
    Längere Zeit darauf nicht geschaut habe ich jetzt festgestellt, dass vier Werte (DPs) teilweise unplausibel geloggt wurden. Möglicherweise, weil die Batterie der Wetterstation leer war. Beispielsweise steht im vom Skript erzeugten Wert Tiefsttemperatur_Spitzenwert -5572,xx°C. Und leider betrifft das noch drei andere DPs, in denen unplausible Werte sind.
    Meine Vorstellung war jetzt, ich lese die Werte DP: Temperatur, filtere sie, dass wenn der value größer als -50 und kleiner als 50 sind in einen anderen DP: Temperatur_clean schreibe. Dann lösche ich den Inhalt von DP: Temperatur, lese alle Werte aus DP: Temperatur_clean ein und schreibe sie zurück in DP: Temperatur. Für alle vier Werte muss ich das hoffentlich nur einmal machen. Und dann habe ich nur noch plausible Werte. Und eine neue Wetterstation, die mir früh genug zeigt, wenn die Batterie zur Neige geht.

    Aber alles, was ich versucht habe (Blockly geht wohl gar nicht, weil man keine großen Datenmengen schreiben kann, JavaScript aus ioBroker ging nicht, JavaScript über node.js mit einem Script), nichts hat tausende Werte in einen neuen DP schreiben wollen. Meine Kenntnisse in JavaScript sind auch so beschränkt, dass ich mir von Chat GPT habe Vorschläge unterbreiten lassen müssen, wie das gehen könnte.
    Dabei waren auch Beispiele, die von fünf definitiv in einem array vorgegebenen Zahlen zwei wegfiltern und drei in den DP schreiben sollten. Aufgetaucht ist aber immer nur der letzte Wert und der Wert ader aktuellen Zeit der Auslösung des Skriptes mit einem value von 0.

    Und da die Fragen kommen werden: ja, das logging des neuen DP: Temperatur_clean ist eingeschaltet und der Typ steht auf Zahl. Die Scripte zeigen auch immer, wie beim letzten z.B. dass drei Werte geschrieben wurden. Die finden sich aber nicht im DP.

    Kann mir bitte jemand einen Hinweis geben, warum das nicht funktioniert? An influxDB scheint es ja nicht zu liegen, denn ich sehe tausende geloggte Werte in verschiedenen DPs, aber nicht in dem, der von mir beschrieben werden soll.

    Gibt es dafür vielleicht von jemandem ein Skript, das dieser als sicher funktionierend mal zeigen könnte?

    Ich bin Euch sehr dankbar.

    Jo

    ioBroker auf Intel NUC - Homematic CCU3/pivCCU auf Raspi 3B+

    haus-automatisierungH arteckA 2 Antworten Letzte Antwort
    0
    • XxJooOX XxJooO

      Liebe Freunde,

      ich habe jetzt sehr viele Stunden damit verbracht, im Netz nach Hinweisen zu suchen und gebe offiziell zu, auch ChatGPT zu bemühen - aber es geht nicht.

      Folgendes ist das Ziel:
      Seit Anfang 2020 hat der ioBroker brav Werte meiner Wetterstation erhoben und dokumentiert vom Wetter-WLAN-Skript in meine influxDB 2.x geloggt und geschrieben. Das sehe ich mit Grafana.
      Längere Zeit darauf nicht geschaut habe ich jetzt festgestellt, dass vier Werte (DPs) teilweise unplausibel geloggt wurden. Möglicherweise, weil die Batterie der Wetterstation leer war. Beispielsweise steht im vom Skript erzeugten Wert Tiefsttemperatur_Spitzenwert -5572,xx°C. Und leider betrifft das noch drei andere DPs, in denen unplausible Werte sind.
      Meine Vorstellung war jetzt, ich lese die Werte DP: Temperatur, filtere sie, dass wenn der value größer als -50 und kleiner als 50 sind in einen anderen DP: Temperatur_clean schreibe. Dann lösche ich den Inhalt von DP: Temperatur, lese alle Werte aus DP: Temperatur_clean ein und schreibe sie zurück in DP: Temperatur. Für alle vier Werte muss ich das hoffentlich nur einmal machen. Und dann habe ich nur noch plausible Werte. Und eine neue Wetterstation, die mir früh genug zeigt, wenn die Batterie zur Neige geht.

      Aber alles, was ich versucht habe (Blockly geht wohl gar nicht, weil man keine großen Datenmengen schreiben kann, JavaScript aus ioBroker ging nicht, JavaScript über node.js mit einem Script), nichts hat tausende Werte in einen neuen DP schreiben wollen. Meine Kenntnisse in JavaScript sind auch so beschränkt, dass ich mir von Chat GPT habe Vorschläge unterbreiten lassen müssen, wie das gehen könnte.
      Dabei waren auch Beispiele, die von fünf definitiv in einem array vorgegebenen Zahlen zwei wegfiltern und drei in den DP schreiben sollten. Aufgetaucht ist aber immer nur der letzte Wert und der Wert ader aktuellen Zeit der Auslösung des Skriptes mit einem value von 0.

      Und da die Fragen kommen werden: ja, das logging des neuen DP: Temperatur_clean ist eingeschaltet und der Typ steht auf Zahl. Die Scripte zeigen auch immer, wie beim letzten z.B. dass drei Werte geschrieben wurden. Die finden sich aber nicht im DP.

      Kann mir bitte jemand einen Hinweis geben, warum das nicht funktioniert? An influxDB scheint es ja nicht zu liegen, denn ich sehe tausende geloggte Werte in verschiedenen DPs, aber nicht in dem, der von mir beschrieben werden soll.

      Gibt es dafür vielleicht von jemandem ein Skript, das dieser als sicher funktionierend mal zeigen könnte?

      Ich bin Euch sehr dankbar.

      Jo

      haus-automatisierungH Online
      haus-automatisierungH Online
      haus-automatisierung
      Developer Most Active
      schrieb am zuletzt editiert von
      #2

      @xxjooo Das kannst Du doch direkt mit Flux machen

      🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
      🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
      📚 Meine inoffizielle ioBroker Dokumentation

      XxJooOX 1 Antwort Letzte Antwort
      1
      • XxJooOX XxJooO

        Liebe Freunde,

        ich habe jetzt sehr viele Stunden damit verbracht, im Netz nach Hinweisen zu suchen und gebe offiziell zu, auch ChatGPT zu bemühen - aber es geht nicht.

        Folgendes ist das Ziel:
        Seit Anfang 2020 hat der ioBroker brav Werte meiner Wetterstation erhoben und dokumentiert vom Wetter-WLAN-Skript in meine influxDB 2.x geloggt und geschrieben. Das sehe ich mit Grafana.
        Längere Zeit darauf nicht geschaut habe ich jetzt festgestellt, dass vier Werte (DPs) teilweise unplausibel geloggt wurden. Möglicherweise, weil die Batterie der Wetterstation leer war. Beispielsweise steht im vom Skript erzeugten Wert Tiefsttemperatur_Spitzenwert -5572,xx°C. Und leider betrifft das noch drei andere DPs, in denen unplausible Werte sind.
        Meine Vorstellung war jetzt, ich lese die Werte DP: Temperatur, filtere sie, dass wenn der value größer als -50 und kleiner als 50 sind in einen anderen DP: Temperatur_clean schreibe. Dann lösche ich den Inhalt von DP: Temperatur, lese alle Werte aus DP: Temperatur_clean ein und schreibe sie zurück in DP: Temperatur. Für alle vier Werte muss ich das hoffentlich nur einmal machen. Und dann habe ich nur noch plausible Werte. Und eine neue Wetterstation, die mir früh genug zeigt, wenn die Batterie zur Neige geht.

        Aber alles, was ich versucht habe (Blockly geht wohl gar nicht, weil man keine großen Datenmengen schreiben kann, JavaScript aus ioBroker ging nicht, JavaScript über node.js mit einem Script), nichts hat tausende Werte in einen neuen DP schreiben wollen. Meine Kenntnisse in JavaScript sind auch so beschränkt, dass ich mir von Chat GPT habe Vorschläge unterbreiten lassen müssen, wie das gehen könnte.
        Dabei waren auch Beispiele, die von fünf definitiv in einem array vorgegebenen Zahlen zwei wegfiltern und drei in den DP schreiben sollten. Aufgetaucht ist aber immer nur der letzte Wert und der Wert ader aktuellen Zeit der Auslösung des Skriptes mit einem value von 0.

        Und da die Fragen kommen werden: ja, das logging des neuen DP: Temperatur_clean ist eingeschaltet und der Typ steht auf Zahl. Die Scripte zeigen auch immer, wie beim letzten z.B. dass drei Werte geschrieben wurden. Die finden sich aber nicht im DP.

        Kann mir bitte jemand einen Hinweis geben, warum das nicht funktioniert? An influxDB scheint es ja nicht zu liegen, denn ich sehe tausende geloggte Werte in verschiedenen DPs, aber nicht in dem, der von mir beschrieben werden soll.

        Gibt es dafür vielleicht von jemandem ein Skript, das dieser als sicher funktionierend mal zeigen könnte?

        Ich bin Euch sehr dankbar.

        Jo

        arteckA Offline
        arteckA Offline
        arteck
        Developer Most Active
        schrieb am zuletzt editiert von arteck
        #3

        @xxjooo zeig doch mal den Query

        zigbee hab ich, zwave auch, nuc's genauso und HA auch

        1 Antwort Letzte Antwort
        0
        • haus-automatisierungH haus-automatisierung

          @xxjooo Das kannst Du doch direkt mit Flux machen

          XxJooOX Offline
          XxJooOX Offline
          XxJooO
          schrieb am zuletzt editiert von
          #4

          @haus-automatisierung ,

          soweit ich gelesen habe, kann man mit der Flux-Sprache von InfluxDB Daten lesen, filtern und transformieren – aber nicht direkt in andere Datenpunkte schreiben.

          Ich kann leider erst am Nachmittag eines meiner Beispiele einstellen.

          ioBroker auf Intel NUC - Homematic CCU3/pivCCU auf Raspi 3B+

          haus-automatisierungH 1 Antwort Letzte Antwort
          0
          • XxJooOX XxJooO

            @haus-automatisierung ,

            soweit ich gelesen habe, kann man mit der Flux-Sprache von InfluxDB Daten lesen, filtern und transformieren – aber nicht direkt in andere Datenpunkte schreiben.

            Ich kann leider erst am Nachmittag eines meiner Beispiele einstellen.

            haus-automatisierungH Online
            haus-automatisierungH Online
            haus-automatisierung
            Developer Most Active
            schrieb am zuletzt editiert von haus-automatisierung
            #5

            @xxjooo Klar kannst Du das. Mit > to(). Macht man doch z.B. mit Tasks genauso. Kann man natürlich auch nur einmalig manuell ausführen, um einen bestehenden Datenbestand einzuschränken und das Ergebnis wieder zu speichern.

            https://docs.influxdata.com/flux/v0/stdlib/influxdata/influxdb/to/

            🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
            🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
            📚 Meine inoffizielle ioBroker Dokumentation

            XxJooOX 1 Antwort Letzte Antwort
            0
            • haus-automatisierungH haus-automatisierung

              @xxjooo Klar kannst Du das. Mit > to(). Macht man doch z.B. mit Tasks genauso. Kann man natürlich auch nur einmalig manuell ausführen, um einen bestehenden Datenbestand einzuschränken und das Ergebnis wieder zu speichern.

              https://docs.influxdata.com/flux/v0/stdlib/influxdata/influxdb/to/

              XxJooOX Offline
              XxJooOX Offline
              XxJooO
              schrieb am zuletzt editiert von
              #6

              @haus-automatisierung ,

              also hier ein JavaScript aus ioBroker:

              const rangeStart = '2024-06-19T00:00:00.000Z';
              const rangeStop = '2025-06-19T00:00:00.000Z';
              
              function loeschen() {
                  sendTo('influxdb.0', 'deleteAll', [
                      { id: '0_userdata.0.Wetterstation.Aussenfeuchtigkeit_clean' }
                  ], result => console.log('deleted'));
              }
              
              function holen() {
                  sendTo('influxdb.0', 'getHistory', {
                      id: '0_userdata.0.Wetterstation.Aussenfeuchtigkeit',
                      options: {
                          start: new Date(rangeStart).getTime(), 
                          end: new Date(rangeStop).getTime(),
                          aggregate: 'onchange',
                          addId: true
                      }
                  }, function (result) {
                      if (!result || !result.result || !Array.isArray(result.result)) {
                          console.error('Fehlerhafte Rückgabe:', JSON.stringify(result));
                          return;
                      }
              
                      for (let i = 0; i < result.result.length; i++) {
                          const entry = result.result[i];
                          const val = entry.val;
              
                          if (val >= 30 && val <= 60) {
                              setState('0_userdata.0.Wetterstation.Aussenfeuchtigkeit_clean', {
                                  val: val,
                                  ts: entry.ts,
                                  ack: true,
                                  q: entry.q || 0,
                                  from: entry.from || 'system.adapter.javascript.0'
                              }, true);
                          }
                      }
                  });
              }
              
              //loeschen(); // optional
              holen();      // Daten abrufen
              

              In 0_userdata.0.Wetterstation.Aussenfeuchtigkeit sind für den Zeitraum tausende an Daten. Angekommen ist das:

              aecbf77c-29c6-43e6-ab2f-cf2fdd15b890-image.png

              ioBroker auf Intel NUC - Homematic CCU3/pivCCU auf Raspi 3B+

              haus-automatisierungH 1 Antwort Letzte Antwort
              0
              • XxJooOX XxJooO

                @haus-automatisierung ,

                also hier ein JavaScript aus ioBroker:

                const rangeStart = '2024-06-19T00:00:00.000Z';
                const rangeStop = '2025-06-19T00:00:00.000Z';
                
                function loeschen() {
                    sendTo('influxdb.0', 'deleteAll', [
                        { id: '0_userdata.0.Wetterstation.Aussenfeuchtigkeit_clean' }
                    ], result => console.log('deleted'));
                }
                
                function holen() {
                    sendTo('influxdb.0', 'getHistory', {
                        id: '0_userdata.0.Wetterstation.Aussenfeuchtigkeit',
                        options: {
                            start: new Date(rangeStart).getTime(), 
                            end: new Date(rangeStop).getTime(),
                            aggregate: 'onchange',
                            addId: true
                        }
                    }, function (result) {
                        if (!result || !result.result || !Array.isArray(result.result)) {
                            console.error('Fehlerhafte Rückgabe:', JSON.stringify(result));
                            return;
                        }
                
                        for (let i = 0; i < result.result.length; i++) {
                            const entry = result.result[i];
                            const val = entry.val;
                
                            if (val >= 30 && val <= 60) {
                                setState('0_userdata.0.Wetterstation.Aussenfeuchtigkeit_clean', {
                                    val: val,
                                    ts: entry.ts,
                                    ack: true,
                                    q: entry.q || 0,
                                    from: entry.from || 'system.adapter.javascript.0'
                                }, true);
                            }
                        }
                    });
                }
                
                //loeschen(); // optional
                holen();      // Daten abrufen
                

                In 0_userdata.0.Wetterstation.Aussenfeuchtigkeit sind für den Zeitraum tausende an Daten. Angekommen ist das:

                aecbf77c-29c6-43e6-ab2f-cf2fdd15b890-image.png

                haus-automatisierungH Online
                haus-automatisierungH Online
                haus-automatisierung
                Developer Most Active
                schrieb am zuletzt editiert von
                #7

                @xxjooo Oha, Du rufst also extrem oft setState auf, und hoffst auf die Logik dahinter? Wenn Du es schon so extrem umständlich mit einem Script machen möchtest (statt mit Flux-Funktionen direkt in der Datenbank), dann schau wenigstens die sendTo Funktion storeState für die Datenbank an:

                https://github.com/ioBroker/ioBroker.influxdb?tab=readme-ov-file#storestate

                🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                📚 Meine inoffizielle ioBroker Dokumentation

                XxJooOX 1 Antwort Letzte Antwort
                0
                • haus-automatisierungH haus-automatisierung

                  @xxjooo Oha, Du rufst also extrem oft setState auf, und hoffst auf die Logik dahinter? Wenn Du es schon so extrem umständlich mit einem Script machen möchtest (statt mit Flux-Funktionen direkt in der Datenbank), dann schau wenigstens die sendTo Funktion storeState für die Datenbank an:

                  https://github.com/ioBroker/ioBroker.influxdb?tab=readme-ov-file#storestate

                  XxJooOX Offline
                  XxJooOX Offline
                  XxJooO
                  schrieb am zuletzt editiert von
                  #8

                  @haus-automatisierung ,

                  also mit dem Script:

                  const rangeStart = '2024-06-19T00:00:00.000Z';
                  const rangeStop = '2025-06-19T00:00:00.000Z';
                  
                  function loeschen() {
                      sendTo('influxdb.0', 'deleteAll', [
                          { id: '0_userdata.0.Wetterstation.Aussenfeuchtigkeit_clean' }
                      ], result => console.log('deleted'));
                  }
                  
                  function holen() {
                      sendTo('influxdb.0', 'getHistory', {
                          id: '0_userdata.0.Wetterstation.Aussenfeuchtigkeit',
                          options: {
                              start: new Date(rangeStart).getTime(),
                              end: new Date(rangeStop).getTime(),
                              aggregate: 'onchange',
                              addId: true
                          }
                      }, function (result) {
                          if (!result || !result.result || !Array.isArray(result.result)) {
                              console.error('Fehlerhafte Rückgabe:', JSON.stringify(result));
                              return;
                          }
                  
                          for (let i = 0; i < result.result.length; i++) {
                              const entry = result.result[i];
                              const val = entry.val;
                  
                              if (val >= 30 && val <= 60) {
                                  sendTo('influxdb.0', 'storeState', {
                                      id: '0_userdata.0.Wetterstation.Aussenfeuchtigkeit_clean',
                                      state: {
                                          val: val,
                                          ts: entry.ts,
                                          ack: true,
                                          q: entry.q || 0,
                                          from: entry.from || 'system.adapter.javascript.0'
                                      }
                                  });
                              }
                          }
                      });
                  }
                  //loeschen(); // optional
                  holen();      // Daten abrufen
                  

                  ergibt sich leider exakt das gleiche Ergebnis, nur zwei Werte...

                  Dann muss ich mich doch mit der Flux-Sprache beschäftigen. Interessanterweise hatte ich vor der Umstellung auf influxDB 2.x mit influxDB 1.8x schon mal so ein Problem und konnte aber mit einem JavaScript alle Daten in einen anderen DP schreiben...

                  Gut, dann schau ich mal auf Flux...

                  ioBroker auf Intel NUC - Homematic CCU3/pivCCU auf Raspi 3B+

                  Marc BergM 1 Antwort Letzte Antwort
                  0
                  • XxJooOX XxJooO

                    @haus-automatisierung ,

                    also mit dem Script:

                    const rangeStart = '2024-06-19T00:00:00.000Z';
                    const rangeStop = '2025-06-19T00:00:00.000Z';
                    
                    function loeschen() {
                        sendTo('influxdb.0', 'deleteAll', [
                            { id: '0_userdata.0.Wetterstation.Aussenfeuchtigkeit_clean' }
                        ], result => console.log('deleted'));
                    }
                    
                    function holen() {
                        sendTo('influxdb.0', 'getHistory', {
                            id: '0_userdata.0.Wetterstation.Aussenfeuchtigkeit',
                            options: {
                                start: new Date(rangeStart).getTime(),
                                end: new Date(rangeStop).getTime(),
                                aggregate: 'onchange',
                                addId: true
                            }
                        }, function (result) {
                            if (!result || !result.result || !Array.isArray(result.result)) {
                                console.error('Fehlerhafte Rückgabe:', JSON.stringify(result));
                                return;
                            }
                    
                            for (let i = 0; i < result.result.length; i++) {
                                const entry = result.result[i];
                                const val = entry.val;
                    
                                if (val >= 30 && val <= 60) {
                                    sendTo('influxdb.0', 'storeState', {
                                        id: '0_userdata.0.Wetterstation.Aussenfeuchtigkeit_clean',
                                        state: {
                                            val: val,
                                            ts: entry.ts,
                                            ack: true,
                                            q: entry.q || 0,
                                            from: entry.from || 'system.adapter.javascript.0'
                                        }
                                    });
                                }
                            }
                        });
                    }
                    //loeschen(); // optional
                    holen();      // Daten abrufen
                    

                    ergibt sich leider exakt das gleiche Ergebnis, nur zwei Werte...

                    Dann muss ich mich doch mit der Flux-Sprache beschäftigen. Interessanterweise hatte ich vor der Umstellung auf influxDB 2.x mit influxDB 1.8x schon mal so ein Problem und konnte aber mit einem JavaScript alle Daten in einen anderen DP schreiben...

                    Gut, dann schau ich mal auf Flux...

                    Marc BergM Offline
                    Marc BergM Offline
                    Marc Berg
                    Most Active
                    schrieb am zuletzt editiert von Marc Berg
                    #9

                    @xxjooo sagte in Aus influxDB 2 lesen und schreiben JS oder node.js:

                    Gut, dann schau ich mal auf Flux...

                    from(bucket: "dein_bucket")
                      |> range(start: -10y)
                      |> filter(fn: (r) => 
                          r._measurement == "0_userdata.0.Wetterstation.Aussenfeuchtigkeit" and
                          r._field == "value"
                      )
                      |> filter(fn: (r) => r._value >= 30.0 and r._value <= 60.0)
                      |> set(key: "_measurement", value: "0_userdata.0.Wetterstation.Aussenfeuchtigkeit_clean")
                      |> to(bucket: "dein_bucket")
                    
                    

                    EDIT: indem du die letzte Zeile (mit "to") erstmal weglässt, kannst du sehen, ob das Ergebnis das gewünschte ist.

                    NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+RabbitMQ+Grafana

                    Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

                    Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

                    XxJooOX 2 Antworten Letzte Antwort
                    2
                    • Marc BergM Marc Berg

                      @xxjooo sagte in Aus influxDB 2 lesen und schreiben JS oder node.js:

                      Gut, dann schau ich mal auf Flux...

                      from(bucket: "dein_bucket")
                        |> range(start: -10y)
                        |> filter(fn: (r) => 
                            r._measurement == "0_userdata.0.Wetterstation.Aussenfeuchtigkeit" and
                            r._field == "value"
                        )
                        |> filter(fn: (r) => r._value >= 30.0 and r._value <= 60.0)
                        |> set(key: "_measurement", value: "0_userdata.0.Wetterstation.Aussenfeuchtigkeit_clean")
                        |> to(bucket: "dein_bucket")
                      
                      

                      EDIT: indem du die letzte Zeile (mit "to") erstmal weglässt, kannst du sehen, ob das Ergebnis das gewünschte ist.

                      XxJooOX Offline
                      XxJooOX Offline
                      XxJooO
                      schrieb am zuletzt editiert von
                      #10

                      @marc-berg ,

                      vielen Dank, sieht sehr einfach aus. Mal sehen.

                      ioBroker auf Intel NUC - Homematic CCU3/pivCCU auf Raspi 3B+

                      1 Antwort Letzte Antwort
                      0
                      • Marc BergM Marc Berg

                        @xxjooo sagte in Aus influxDB 2 lesen und schreiben JS oder node.js:

                        Gut, dann schau ich mal auf Flux...

                        from(bucket: "dein_bucket")
                          |> range(start: -10y)
                          |> filter(fn: (r) => 
                              r._measurement == "0_userdata.0.Wetterstation.Aussenfeuchtigkeit" and
                              r._field == "value"
                          )
                          |> filter(fn: (r) => r._value >= 30.0 and r._value <= 60.0)
                          |> set(key: "_measurement", value: "0_userdata.0.Wetterstation.Aussenfeuchtigkeit_clean")
                          |> to(bucket: "dein_bucket")
                        
                        

                        EDIT: indem du die letzte Zeile (mit "to") erstmal weglässt, kannst du sehen, ob das Ergebnis das gewünschte ist.

                        XxJooOX Offline
                        XxJooOX Offline
                        XxJooO
                        schrieb am zuletzt editiert von
                        #11

                        @marc-berg, @arteck und @haus-automatisierung

                        Ok, ich bestätige: Der Weg funktioniert auf Anhieb. Sogar so, dass in einen anderen bucket geschrieben werden kann, der den DP noch gar nicht kannte. Vielen Dank dafür!

                        Dann möchte ich das jetzt gerne noch etwas weiter spinnen:

                        Ich bin ja grundsätzlich skeptisch, dass das nicht noch mal passiert. Jetzt habe ich ja inzwischen unter den Einstellungen der DPs Grenzen gesetzt, damit nur reale Werte durchkommen. Sollte das aber aus irgendeinem Grund noch mal passieren, dann würde ich gerne einfach diese Flux-Abfrage automatisiert ausführen lassen.

                        Da muss ich aber mal noch ein wenig drüber nachdenken, denn nach dem Lesen der readme des influx Adapters auf github kommt mir noch eine andere Idee: es müsste doch möglich sein, eine Abfrage mit JavaScript im ioBroker zu programmieren, unter den tausenden Werten die weniger als 10 zu finden, die weg müssen und diese mit dem delete state Befehl des Adapters einfach zu löschen.

                        Ich könnte dann den ersten Weg einmalig mit Zurückschreiben der Werte komplett durchgehen und dann, wenn letzteres funktionieren würde, das in das Wetter Skript von @SBorg integrieren oder zeitlich davor starten lassen.

                        Haltet Ihr das grundsätzlich für möglich? Ich setze es mal noch nicht auf gelöst, da ich sicher noch Fragen dazu habe.

                        Besten Dank Euch!

                        Jo

                        ioBroker auf Intel NUC - Homematic CCU3/pivCCU auf Raspi 3B+

                        Marc BergM 1 Antwort Letzte Antwort
                        0
                        • XxJooOX XxJooO

                          @marc-berg, @arteck und @haus-automatisierung

                          Ok, ich bestätige: Der Weg funktioniert auf Anhieb. Sogar so, dass in einen anderen bucket geschrieben werden kann, der den DP noch gar nicht kannte. Vielen Dank dafür!

                          Dann möchte ich das jetzt gerne noch etwas weiter spinnen:

                          Ich bin ja grundsätzlich skeptisch, dass das nicht noch mal passiert. Jetzt habe ich ja inzwischen unter den Einstellungen der DPs Grenzen gesetzt, damit nur reale Werte durchkommen. Sollte das aber aus irgendeinem Grund noch mal passieren, dann würde ich gerne einfach diese Flux-Abfrage automatisiert ausführen lassen.

                          Da muss ich aber mal noch ein wenig drüber nachdenken, denn nach dem Lesen der readme des influx Adapters auf github kommt mir noch eine andere Idee: es müsste doch möglich sein, eine Abfrage mit JavaScript im ioBroker zu programmieren, unter den tausenden Werten die weniger als 10 zu finden, die weg müssen und diese mit dem delete state Befehl des Adapters einfach zu löschen.

                          Ich könnte dann den ersten Weg einmalig mit Zurückschreiben der Werte komplett durchgehen und dann, wenn letzteres funktionieren würde, das in das Wetter Skript von @SBorg integrieren oder zeitlich davor starten lassen.

                          Haltet Ihr das grundsätzlich für möglich? Ich setze es mal noch nicht auf gelöst, da ich sicher noch Fragen dazu habe.

                          Besten Dank Euch!

                          Jo

                          Marc BergM Offline
                          Marc BergM Offline
                          Marc Berg
                          Most Active
                          schrieb am zuletzt editiert von
                          #12

                          @xxjooo sagte in Aus influxDB 2 lesen und schreiben JS oder node.js:

                          Da muss ich aber mal noch ein wenig drüber nachdenken, denn nach dem Lesen der readme des influx Adapters auf github kommt mir noch eine andere Idee: es müsste doch möglich sein, eine Abfrage mit JavaScript im ioBroker zu programmieren, unter den tausenden Werten die weniger als 10 zu finden, die weg müssen und diese mit dem delete state Befehl des Adapters einfach zu löschen.
                          Ich könnte dann den ersten Weg einmalig mit Zurückschreiben der Werte komplett durchgehen und dann, wenn letzteres funktionieren würde, das in das Wetter Skript von @SBorg integrieren oder zeitlich davor starten lassen.
                          Haltet Ihr das grundsätzlich für möglich? Ich setze es mal noch nicht auf gelöst, da ich sicher noch Fragen dazu habe.

                          Möglich, aber warum nicht an der Wurzel packen und die Werte vor dem Schreiben plausibilisieren und filtern?

                          NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+RabbitMQ+Grafana

                          Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

                          Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

                          XxJooOX 1 Antwort Letzte Antwort
                          0
                          • Marc BergM Marc Berg

                            @xxjooo sagte in Aus influxDB 2 lesen und schreiben JS oder node.js:

                            Da muss ich aber mal noch ein wenig drüber nachdenken, denn nach dem Lesen der readme des influx Adapters auf github kommt mir noch eine andere Idee: es müsste doch möglich sein, eine Abfrage mit JavaScript im ioBroker zu programmieren, unter den tausenden Werten die weniger als 10 zu finden, die weg müssen und diese mit dem delete state Befehl des Adapters einfach zu löschen.
                            Ich könnte dann den ersten Weg einmalig mit Zurückschreiben der Werte komplett durchgehen und dann, wenn letzteres funktionieren würde, das in das Wetter Skript von @SBorg integrieren oder zeitlich davor starten lassen.
                            Haltet Ihr das grundsätzlich für möglich? Ich setze es mal noch nicht auf gelöst, da ich sicher noch Fragen dazu habe.

                            Möglich, aber warum nicht an der Wurzel packen und die Werte vor dem Schreiben plausibilisieren und filtern?

                            XxJooOX Offline
                            XxJooOX Offline
                            XxJooO
                            schrieb am zuletzt editiert von
                            #13

                            @marc-berg,

                            ja, sehr gut, das habe ich beim ersten Mal auch gedacht, als mir das Problem unplausibler Werte aufgefallen ist. Das Problem, mit dem ich nicht umgehen konnte, war, dass die Werte von der Wetterstation über das Skript und den Adapter Simple RESTful API Adapter von der Station geholt und direkt in die DPs geschrieben und damit auch geloggt werden. Das bedeutete für mich, dass eine Überprüfung auf Plausibilität für mich nicht möglich war, denn ich konnte nicht herausfinden, wie ich mit dem Simple RESTful API Adapter einen Wert filtern kann, bevor er einem DP zugeordnet und geloggt wird.

                            Siehst Du da eine Möglichkeit?

                            ioBroker auf Intel NUC - Homematic CCU3/pivCCU auf Raspi 3B+

                            Marc BergM 1 Antwort Letzte Antwort
                            0
                            • XxJooOX XxJooO

                              @marc-berg,

                              ja, sehr gut, das habe ich beim ersten Mal auch gedacht, als mir das Problem unplausibler Werte aufgefallen ist. Das Problem, mit dem ich nicht umgehen konnte, war, dass die Werte von der Wetterstation über das Skript und den Adapter Simple RESTful API Adapter von der Station geholt und direkt in die DPs geschrieben und damit auch geloggt werden. Das bedeutete für mich, dass eine Überprüfung auf Plausibilität für mich nicht möglich war, denn ich konnte nicht herausfinden, wie ich mit dem Simple RESTful API Adapter einen Wert filtern kann, bevor er einem DP zugeordnet und geloggt wird.

                              Siehst Du da eine Möglichkeit?

                              Marc BergM Offline
                              Marc BergM Offline
                              Marc Berg
                              Most Active
                              schrieb am zuletzt editiert von
                              #14

                              @xxjooo sagte in Aus influxDB 2 lesen und schreiben JS oder node.js:

                              Das bedeutete für mich, dass eine Überprüfung auf Plausibilität für mich nicht möglich war, denn ich konnte nicht herausfinden, wie ich mit dem Simple RESTful API Adapter einen Wert filtern kann, bevor er einem DP zugeordnet und geloggt wird.
                              Siehst Du da eine Möglichkeit?

                              Eine einfäche Möglichkeit wäre, dies über einen Alias zu lösen, aber leider kann man mit einem Write Converter nicht "nichts" schreiben.

                              Also bleibt wohl nur die Variante, die Daten in einen weiteren DP zu schreiben und auf diesen DP ein Script/Blockly/Node RED zu triggern, um zu filtern und in den eigentlichen DP zu schreiben.

                              NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+RabbitMQ+Grafana

                              Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

                              Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

                              1 Antwort Letzte Antwort
                              0
                              • SBorgS Offline
                                SBorgS Offline
                                SBorg
                                Forum Testing Most Active
                                schrieb am zuletzt editiert von
                                #15

                                @xxjooo sagte in Aus influxDB 2 lesen und schreiben JS oder node.js:

                                Beispielsweise steht im vom Skript erzeugten Wert Tiefsttemperatur_Spitzenwert -5572,xx°C. Und leider betrifft das noch drei andere DPs, in denen unplausible Werte sind

                                [OT]: du kannst auch einfach den Fix per wetterstation.conf aktivieren ;)

                                #Fix aktivieren bei fehlerhafter Außentemperatur [true/false] / default: false
                                #Bei unplausiblem Messwert wird kein Datenpaket an den ioB geschickt
                                FIX_AUSSENTEMP=false

                                Einige Stationen senden gelegentlich einen "NULL"-Wert. Durch die Umrechnung von Fahrenheit in Celsius kommt dann die -5572°C zu stande. Durch setzen auf "true" werden diese unplausiblen Datenpakete schon direkt nach dem Empfang verworfen.
                                Die alten Daten in der InfluxDB musst du dann aber doch noch säubern.

                                LG SBorg ( SBorg auf GitHub)
                                Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                                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

                                746

                                Online

                                32.5k

                                Benutzer

                                81.7k

                                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