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. JavaScript
  5. Freie Definition von Tags und states für influxdb 2.0

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.2k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    758

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

Freie Definition von Tags und states für influxdb 2.0

Geplant Angeheftet Gesperrt Verschoben JavaScript
4 Beiträge 3 Kommentatoren 472 Aufrufe 3 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.
  • K Offline
    K Offline
    Kamikaze
    schrieb am zuletzt editiert von
    #1

    Nach längere Zeit bin ich wieder aktiv an meiner iobroker Installation. In diesem Zusammenhang habe ich die influxdb von 1.0 auf 2.0 umgestellt und möchte nun die volle Funktionalität der Tags in influx nutzen.

    Da ich bei dem sendto keine Möglichkeit gefunden habe, diese Parameter selbst zu setzen, habe ich folgendes Script entwickelt (Einbindung von @influxdata/influxdb-client-apis und @influxdata/influxdb-client im javascript Adapter vorausgesetzt):

    const { InfluxDB, Point } = require('@influxdata/influxdb-client')
    
    const token = "MEIN TOKEN";
    const url = 'MEINE URL;
    let org = `MEINE ORGANISATION`;
    let bucket = `iobroker`;
    const client = new InfluxDB({ url, token });
    let writeClient = client.getWriteApi(org, bucket, 'ns')
    //
    // Messwerte in Influx-DB schreiben, alle 10 Sekunden
    //
    function write2influxDB() {
        //
        // Interface zu Solaranzeige
        //
        function writeSolaranzeige2Influx(location, device, typ) {
            let datum = Date.now() * 1000000;
            let BatSpannung = getState('mqtt-client.0.solaranzeige.laderegler.batteriespannung').val;
            let BatTemp = getState('mqtt-client.0.solaranzeige.laderegler.batterietemperatur').val;
            let BatStatus = getState('mqtt-client.0.solaranzeige.laderegler.batteriesoc').val;
            let BatMinVoltHeute = getState('mqtt-client.0.solaranzeige.laderegler.batterieminvoltheute').val;
            let BatMaxVoltHeute = getState('mqtt-client.0.solaranzeige.laderegler.batteriemaxvoltheute').val;
            let BatLadeStrom = getState('mqtt-client.0.solaranzeige.laderegler.batterieladestrom').val;
            let BatEndladeStrom = getState('mqtt-client.0.solaranzeige.laderegler.batterieentladestrom').val;
            let BatEntladeLeistung = getState('mqtt-client.0.solaranzeige.laderegler.batterieentladeleistung').val;
            let BatSolarLeistung = getState('mqtt-client.0.solaranzeige.laderegler.solarleistung').val;
            let BatSolarSpannung = getState('mqtt-client.0.solaranzeige.laderegler.solarspannung').val;
            let BatSolarSpannungMaxHeute = getState('mqtt-client.0.solaranzeige.laderegler.solarspannungmaxheute').val;
            let BatSolarStrom = getState('mqtt-client.0.solaranzeige.laderegler.solarstrom').val;
            let BatLadereglerTemp = getState('mqtt-client.0.solaranzeige.laderegler.temperatur').val;
            let BatVerbrauchGesamt = getState('mqtt-client.0.solaranzeige.laderegler.verbrauchgesamt').val;
            let BatVerbrauchGesamtHeute = getState('mqtt-client.0.solaranzeige.laderegler.verbrauchgesamtheute').val;
            let BatWattStundenGesamt = getState('mqtt-client.0.solaranzeige.laderegler.wattstundengesamt').val;
            let BatWattStundenGesamtHeute = getState('mqtt-client.0.solaranzeige.laderegler.wattstundengesamtheute').val;
            let BatTimeStamp = getState('mqtt-client.0.solaranzeige.laderegler.zentralertimestamp').val;
    
            let point = new Point('Solaranzeige')
                .tag('Location', location)
                .tag('Device', device)
                .tag('Element', 'Batterie')
                .tag('Typ', typ)
                .floatField('Spannung', BatSpannung)
                .floatField('Ladestrom', BatLadeStrom)
                .floatField('Entladestrom', BatEndladeStrom)
                .floatField('Entladeleistung', BatEntladeLeistung)
                .floatField('Temperatur', BatLadereglerTemp)
                .floatField('SpannungMaxHeute', BatMaxVoltHeute)
                .floatField('SpannungMinHeute', BatMinVoltHeute)
                .floatField('BatterieTemp', BatTemp)
    
                .floatField('SolarLeistung', BatSolarLeistung)
                .floatField('SolarSpannung', BatSolarSpannung)
                .floatField('SolarSpannungHeuteMax', BatSolarSpannungMaxHeute)
                .floatField('SolarStrom', BatSolarStrom)
                .floatField('Verbrauch', BatVerbrauchGesamt)
                .floatField('VerbrauchGesamtHeute', BatMaxVoltHeute)
                .floatField('SpannungMinHeute', BatVerbrauchGesamtHeute)
                .floatField('WattStundenGesamt', BatWattStundenGesamt)
    
                .floatField('Zeitstempel', BatTimeStamp)
                .floatField('WattStundenGesamtheute', BatWattStundenGesamtHeute)
                .floatField('Ladezustand', BatStatus)
                .timestamp(datum)
            writeClient.writePoint(point)
        }
        //
        // Hauptfunktion 
        //
        // Schreiben Homematic Steckdosen
        //
        
        // 
        // Schreiben Solarzeige 
        //
        writeSolaranzeige2Influx('Garage', 'Solaranzeige', 'GesamteAnlage');
        //
        // alle 5 Sekunden Zwischenspeicher übertragen
        //
        void setTimeout(() => {
            writeClient.flush()
        }, 5000)
    
    }
    
    let scheduler = schedule('*/10 * * * * *', write2influxDB); // alle 10 Sekunden
    

    Ergebnis:
    Dieser Abaluf inkl. der Datenspeicherung in der Datenbank scheint korrekt zu sein und alle Daten sind vorhanden. Außerdem hat dieser Vorgang die positive Nebenwirkung, dass ich beim Austausch von Geräten nur die entsprechenden Objekte hier ändern muss.

    Jetzt zu meinem Problem:
    Von Zeit zu Zeit kommt im iobroker-Log eine Fehlermedung.

    2023-12-09 13:34:55.008 - error: javascript.0 (1261) An error happened which is most likely from one of your scripts, but the originating script could not be detected.
    2023-12-09 13:34:55.008 - error: javascript.0 (1261) Error: Request timed out
    2023-12-09 13:34:55.008 - error: javascript.0 (1261) RequestTimedOutError: Request timed outcode_text
    

    Diese Fehlermeldung kommt manchmal 2 * täglich, manchmal häufig, zeitlich absolut unvorhersehbar.

    Gibt es einen Experten, der sich dies einmal ansehen kann und mir einen Tip geben kann?
    Eine instabile Netzwerkverbindung kann ich ausschließen.

    Marc BergM 1 Antwort Letzte Antwort
    0
    • K Kamikaze

      Nach längere Zeit bin ich wieder aktiv an meiner iobroker Installation. In diesem Zusammenhang habe ich die influxdb von 1.0 auf 2.0 umgestellt und möchte nun die volle Funktionalität der Tags in influx nutzen.

      Da ich bei dem sendto keine Möglichkeit gefunden habe, diese Parameter selbst zu setzen, habe ich folgendes Script entwickelt (Einbindung von @influxdata/influxdb-client-apis und @influxdata/influxdb-client im javascript Adapter vorausgesetzt):

      const { InfluxDB, Point } = require('@influxdata/influxdb-client')
      
      const token = "MEIN TOKEN";
      const url = 'MEINE URL;
      let org = `MEINE ORGANISATION`;
      let bucket = `iobroker`;
      const client = new InfluxDB({ url, token });
      let writeClient = client.getWriteApi(org, bucket, 'ns')
      //
      // Messwerte in Influx-DB schreiben, alle 10 Sekunden
      //
      function write2influxDB() {
          //
          // Interface zu Solaranzeige
          //
          function writeSolaranzeige2Influx(location, device, typ) {
              let datum = Date.now() * 1000000;
              let BatSpannung = getState('mqtt-client.0.solaranzeige.laderegler.batteriespannung').val;
              let BatTemp = getState('mqtt-client.0.solaranzeige.laderegler.batterietemperatur').val;
              let BatStatus = getState('mqtt-client.0.solaranzeige.laderegler.batteriesoc').val;
              let BatMinVoltHeute = getState('mqtt-client.0.solaranzeige.laderegler.batterieminvoltheute').val;
              let BatMaxVoltHeute = getState('mqtt-client.0.solaranzeige.laderegler.batteriemaxvoltheute').val;
              let BatLadeStrom = getState('mqtt-client.0.solaranzeige.laderegler.batterieladestrom').val;
              let BatEndladeStrom = getState('mqtt-client.0.solaranzeige.laderegler.batterieentladestrom').val;
              let BatEntladeLeistung = getState('mqtt-client.0.solaranzeige.laderegler.batterieentladeleistung').val;
              let BatSolarLeistung = getState('mqtt-client.0.solaranzeige.laderegler.solarleistung').val;
              let BatSolarSpannung = getState('mqtt-client.0.solaranzeige.laderegler.solarspannung').val;
              let BatSolarSpannungMaxHeute = getState('mqtt-client.0.solaranzeige.laderegler.solarspannungmaxheute').val;
              let BatSolarStrom = getState('mqtt-client.0.solaranzeige.laderegler.solarstrom').val;
              let BatLadereglerTemp = getState('mqtt-client.0.solaranzeige.laderegler.temperatur').val;
              let BatVerbrauchGesamt = getState('mqtt-client.0.solaranzeige.laderegler.verbrauchgesamt').val;
              let BatVerbrauchGesamtHeute = getState('mqtt-client.0.solaranzeige.laderegler.verbrauchgesamtheute').val;
              let BatWattStundenGesamt = getState('mqtt-client.0.solaranzeige.laderegler.wattstundengesamt').val;
              let BatWattStundenGesamtHeute = getState('mqtt-client.0.solaranzeige.laderegler.wattstundengesamtheute').val;
              let BatTimeStamp = getState('mqtt-client.0.solaranzeige.laderegler.zentralertimestamp').val;
      
              let point = new Point('Solaranzeige')
                  .tag('Location', location)
                  .tag('Device', device)
                  .tag('Element', 'Batterie')
                  .tag('Typ', typ)
                  .floatField('Spannung', BatSpannung)
                  .floatField('Ladestrom', BatLadeStrom)
                  .floatField('Entladestrom', BatEndladeStrom)
                  .floatField('Entladeleistung', BatEntladeLeistung)
                  .floatField('Temperatur', BatLadereglerTemp)
                  .floatField('SpannungMaxHeute', BatMaxVoltHeute)
                  .floatField('SpannungMinHeute', BatMinVoltHeute)
                  .floatField('BatterieTemp', BatTemp)
      
                  .floatField('SolarLeistung', BatSolarLeistung)
                  .floatField('SolarSpannung', BatSolarSpannung)
                  .floatField('SolarSpannungHeuteMax', BatSolarSpannungMaxHeute)
                  .floatField('SolarStrom', BatSolarStrom)
                  .floatField('Verbrauch', BatVerbrauchGesamt)
                  .floatField('VerbrauchGesamtHeute', BatMaxVoltHeute)
                  .floatField('SpannungMinHeute', BatVerbrauchGesamtHeute)
                  .floatField('WattStundenGesamt', BatWattStundenGesamt)
      
                  .floatField('Zeitstempel', BatTimeStamp)
                  .floatField('WattStundenGesamtheute', BatWattStundenGesamtHeute)
                  .floatField('Ladezustand', BatStatus)
                  .timestamp(datum)
              writeClient.writePoint(point)
          }
          //
          // Hauptfunktion 
          //
          // Schreiben Homematic Steckdosen
          //
          
          // 
          // Schreiben Solarzeige 
          //
          writeSolaranzeige2Influx('Garage', 'Solaranzeige', 'GesamteAnlage');
          //
          // alle 5 Sekunden Zwischenspeicher übertragen
          //
          void setTimeout(() => {
              writeClient.flush()
          }, 5000)
      
      }
      
      let scheduler = schedule('*/10 * * * * *', write2influxDB); // alle 10 Sekunden
      

      Ergebnis:
      Dieser Abaluf inkl. der Datenspeicherung in der Datenbank scheint korrekt zu sein und alle Daten sind vorhanden. Außerdem hat dieser Vorgang die positive Nebenwirkung, dass ich beim Austausch von Geräten nur die entsprechenden Objekte hier ändern muss.

      Jetzt zu meinem Problem:
      Von Zeit zu Zeit kommt im iobroker-Log eine Fehlermedung.

      2023-12-09 13:34:55.008 - error: javascript.0 (1261) An error happened which is most likely from one of your scripts, but the originating script could not be detected.
      2023-12-09 13:34:55.008 - error: javascript.0 (1261) Error: Request timed out
      2023-12-09 13:34:55.008 - error: javascript.0 (1261) RequestTimedOutError: Request timed outcode_text
      

      Diese Fehlermeldung kommt manchmal 2 * täglich, manchmal häufig, zeitlich absolut unvorhersehbar.

      Gibt es einen Experten, der sich dies einmal ansehen kann und mir einen Tip geben kann?
      Eine instabile Netzwerkverbindung kann ich ausschließen.

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

      @kamikaze

      Die Timeouts kommen mit einiger Wahrscheinlichkeit beim Schreiben in die Influxdb. Du könntest mal versuchen, den Wert hochzusetzen.

      const client = new InfluxDB({ url , token, org, timeout: 30000 }); // Timeout in milliseconds
      

      NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+EMQX+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
      • K Offline
        K Offline
        Kamikaze
        schrieb am zuletzt editiert von
        #3

        @kamikaze Hello Marc,
        sorry for my late answer. This tip work. I do not get any error message.
        Thank you very much.

        DJMarc75D 1 Antwort Letzte Antwort
        0
        • K Kamikaze

          @kamikaze Hello Marc,
          sorry for my late answer. This tip work. I do not get any error message.
          Thank you very much.

          DJMarc75D Offline
          DJMarc75D Offline
          DJMarc75
          schrieb am zuletzt editiert von
          #4

          @kamikaze
          super wenn Dir geholfen wurde - aber warum plötzlich in englisch schreiben ? ;)

          Lehrling seit 1975 !!!
          Beitrag geholfen ? dann gerne ein upvote rechts unten im Beitrag klicken ;)
          https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge

          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

          595

          Online

          32.6k

          Benutzer

          82.0k

          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