Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Freie Definition von Tags und states für influxdb 2.0

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    Freie Definition von Tags und states für influxdb 2.0

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

      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 Berg 1 Reply Last reply Reply Quote 0
      • Marc Berg
        Marc Berg Most Active @Kamikaze last edited by

        @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
        
        1 Reply Last reply Reply Quote 0
        • K
          Kamikaze last edited by

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

          DJMarc75 1 Reply Last reply Reply Quote 0
          • DJMarc75
            DJMarc75 @Kamikaze last edited by

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

            1 Reply Last reply Reply Quote 0
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate

            396
            Online

            31.6k
            Users

            79.5k
            Topics

            1.3m
            Posts

            3
            4
            292
            Loading More Posts
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes
            Reply
            • Reply as topic
            Log in to reply
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
            The ioBroker Community 2014-2023
            logo