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. http post tagkeys und fieldkeys

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

http post tagkeys und fieldkeys

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascriptcommunication
5 Beiträge 2 Kommentatoren 225 Aufrufe 2 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.
  • D Offline
    D Offline
    DET
    schrieb am zuletzt editiert von
    #1

    Moin Zusammen,
    nutzte das Script von @haus-automatisierung zur Befühlung der influxDB

    // v0.1
    const axios = require('axios').default; 
    
    const token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx==';
    const measurement = 'PV-Anlage';
    const protocol = 'http';
    const host = 'xx.yy.zz.ww';
    const port = '8086';
    const org = 'SmartHome';
    const bucket = 'Energieversorgung';
    
    const loggingTemplate = {
        'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT1-West3.ELECTRIC_POWER': 'Leistung-West3',
        'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT1-West3.VOLTAGE': 'Spannung-West3',
        'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT2-Süd1.ELECTRIC_POWER': 'Leistung-Süd1',
        'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT2-Süd1.VOLTAGE': 'Spannung-Süd1',
        'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT3-Ost3.ELECTRIC_POWER': 'Leistung-Ost3',
        'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT3-Ost3.VOLTAGE': 'Spannung-Ost3',
        'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT4-Ost4.ELECTRIC_POWER': 'Leistung-Ost4',
        'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT4-Ost4.VOLTAGE': 'Spannung-Ost4',
        'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT1-Ost1.ELECTRIC_POWER': 'Leistung-Ost1',
        'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT1-Ost1.VOLTAGE': 'Spannung-Ost1',
        'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT2-Ost2.ELECTRIC_POWER': 'Leistung-Ost2',
        'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT2-Ost2.VOLTAGE': 'Spannung-Ost2',
        'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT3-West1.ELECTRIC_POWER': 'Leistung-West1',
        'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT3-West1.VOLTAGE': 'Spannung-West1',
        'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT4-West2.ELECTRIC_POWER': 'Leistung-West2',
        'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT4-West2.VOLTAGE': 'Spannung-West2',
    };
    
    const loggingObj = {};
    
    async function start() {
    
        console.log(`Starting "${measurement}" logging to ${protocol}://${host}:${port} into bucket "${bucket}" by org ${org}`);
    
        // Init loggingObj with current values
        for (let [objId, key] of Object.entries(loggingTemplate)) {
            const state = await getStateAsync(objId);
            if (state && !isNaN(state.val)) {
                loggingObj[key] = state.val;
            } else {
                loggingObj[key] = 0;
            }
        }
    
        on({ id: Object.keys(loggingTemplate), change: 'ne' }, async (obj) => {
            // Update value in loggingObj
            const key = loggingTemplate[obj.id];
            loggingObj[key] = obj.state.val;
    
            // Save Data
            const data = `${measurement} ${Object.keys(loggingObj)
                .filter(key => !isNaN(loggingObj[key]))
                .map((key) => `${key}=${loggingObj[key]}`)
                .join(',')}`;
    
            if (data) {
                // console.log(`Saving "${data}" to InfluxDB @ ${protocol}://${host}:${port}/`);
                // console.dir(data);
    
                const options = {
                    url: `${protocol}://${host}:${port}/api/v2/write?org=${org}&bucket=${bucket}`,
                    method: 'POST',
                    headers: {
                        'Authorization': `Token ${token}`,
                        'Content-Type': "text/plain; charset=utf-8"
                    },
                    timeout: 0,
                    data
                }
                
                axios(options).catch(error=>console.log(error))
                
                //axios.post(`${protocol}://${host}:${port}/api/v2/write?bucket=${bucket}&org=${org}`, data, {
                //    headers: {
                //        'Content-Type': 'text/plain',
                //        'Authorization': `Token ${token}`
                //    }
                //}).catch(err => {
                //    console.error(err);
                //});
            }
        });
    }
    start();
    

    Hier werden leider tagkey Informationen in fieldkeys mitverarbeitet. Was für die weitere Verarbeitung sehr hinderlich ist.

    Z.B. Leistung-West1 als fieldkey.
    Besser wären tagkeys: Ausrichtung=West,MPPT=1
    und als fieldkey: Leistung=500.00

    So könnten man mit der Filterfunktion in influxDB besser weiterarbeiten, zum Beispiel alle Leistungswerte einer bestimmten Ausrichtung addieren oder alle Leistungswerte eines Solarladeregler adieren.

    Nun müssen aber auch alle Daten den gleichen timestamp bekommen um sie dann sinnvoll zuverarbeiten.

    Im Line Protokoll von influxDB gibt es die Möglichkeit folgende Syntax anzuwenden:

    meassurment,tagkey1=tagvalue1,tagkey2=tagvalue2 fieldkey=fieldvalue timestamp
    meassurment,tagkey3=tagvalue3,tagkey4=tagvalue4 fieldkey=fieldvalue timestamp

    alles in einer Zeile und soweiter.
    Ich würde gern den timestamp weglassen, damit der Server den timestamp setzen kann.

    Da ich ein Newbie im programmieren bin und versuche mir, mit dieser Aufgabe, gerade JavaScript beizubringen überfordert mich das Ganze. Vielleich kann mir jemand auf die Sprünge helfen.
    Am besten wäre das ganze dynamisch zuhalten und nur im loggingTemplate zubestimmen welche und wielviel tags genutzt werden.

    Gruß DET

    haus-automatisierungH 1 Antwort Letzte Antwort
    0
    • D DET

      Moin Zusammen,
      nutzte das Script von @haus-automatisierung zur Befühlung der influxDB

      // v0.1
      const axios = require('axios').default; 
      
      const token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx==';
      const measurement = 'PV-Anlage';
      const protocol = 'http';
      const host = 'xx.yy.zz.ww';
      const port = '8086';
      const org = 'SmartHome';
      const bucket = 'Energieversorgung';
      
      const loggingTemplate = {
          'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT1-West3.ELECTRIC_POWER': 'Leistung-West3',
          'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT1-West3.VOLTAGE': 'Spannung-West3',
          'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT2-Süd1.ELECTRIC_POWER': 'Leistung-Süd1',
          'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT2-Süd1.VOLTAGE': 'Spannung-Süd1',
          'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT3-Ost3.ELECTRIC_POWER': 'Leistung-Ost3',
          'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT3-Ost3.VOLTAGE': 'Spannung-Ost3',
          'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT4-Ost4.ELECTRIC_POWER': 'Leistung-Ost4',
          'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT4-Ost4.VOLTAGE': 'Spannung-Ost4',
          'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT1-Ost1.ELECTRIC_POWER': 'Leistung-Ost1',
          'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT1-Ost1.VOLTAGE': 'Spannung-Ost1',
          'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT2-Ost2.ELECTRIC_POWER': 'Leistung-Ost2',
          'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT2-Ost2.VOLTAGE': 'Spannung-Ost2',
          'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT3-West1.ELECTRIC_POWER': 'Leistung-West1',
          'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT3-West1.VOLTAGE': 'Spannung-West1',
          'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT4-West2.ELECTRIC_POWER': 'Leistung-West2',
          'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT4-West2.VOLTAGE': 'Spannung-West2',
      };
      
      const loggingObj = {};
      
      async function start() {
      
          console.log(`Starting "${measurement}" logging to ${protocol}://${host}:${port} into bucket "${bucket}" by org ${org}`);
      
          // Init loggingObj with current values
          for (let [objId, key] of Object.entries(loggingTemplate)) {
              const state = await getStateAsync(objId);
              if (state && !isNaN(state.val)) {
                  loggingObj[key] = state.val;
              } else {
                  loggingObj[key] = 0;
              }
          }
      
          on({ id: Object.keys(loggingTemplate), change: 'ne' }, async (obj) => {
              // Update value in loggingObj
              const key = loggingTemplate[obj.id];
              loggingObj[key] = obj.state.val;
      
              // Save Data
              const data = `${measurement} ${Object.keys(loggingObj)
                  .filter(key => !isNaN(loggingObj[key]))
                  .map((key) => `${key}=${loggingObj[key]}`)
                  .join(',')}`;
      
              if (data) {
                  // console.log(`Saving "${data}" to InfluxDB @ ${protocol}://${host}:${port}/`);
                  // console.dir(data);
      
                  const options = {
                      url: `${protocol}://${host}:${port}/api/v2/write?org=${org}&bucket=${bucket}`,
                      method: 'POST',
                      headers: {
                          'Authorization': `Token ${token}`,
                          'Content-Type': "text/plain; charset=utf-8"
                      },
                      timeout: 0,
                      data
                  }
                  
                  axios(options).catch(error=>console.log(error))
                  
                  //axios.post(`${protocol}://${host}:${port}/api/v2/write?bucket=${bucket}&org=${org}`, data, {
                  //    headers: {
                  //        'Content-Type': 'text/plain',
                  //        'Authorization': `Token ${token}`
                  //    }
                  //}).catch(err => {
                  //    console.error(err);
                  //});
              }
          });
      }
      start();
      

      Hier werden leider tagkey Informationen in fieldkeys mitverarbeitet. Was für die weitere Verarbeitung sehr hinderlich ist.

      Z.B. Leistung-West1 als fieldkey.
      Besser wären tagkeys: Ausrichtung=West,MPPT=1
      und als fieldkey: Leistung=500.00

      So könnten man mit der Filterfunktion in influxDB besser weiterarbeiten, zum Beispiel alle Leistungswerte einer bestimmten Ausrichtung addieren oder alle Leistungswerte eines Solarladeregler adieren.

      Nun müssen aber auch alle Daten den gleichen timestamp bekommen um sie dann sinnvoll zuverarbeiten.

      Im Line Protokoll von influxDB gibt es die Möglichkeit folgende Syntax anzuwenden:

      meassurment,tagkey1=tagvalue1,tagkey2=tagvalue2 fieldkey=fieldvalue timestamp
      meassurment,tagkey3=tagvalue3,tagkey4=tagvalue4 fieldkey=fieldvalue timestamp

      alles in einer Zeile und soweiter.
      Ich würde gern den timestamp weglassen, damit der Server den timestamp setzen kann.

      Da ich ein Newbie im programmieren bin und versuche mir, mit dieser Aufgabe, gerade JavaScript beizubringen überfordert mich das Ganze. Vielleich kann mir jemand auf die Sprünge helfen.
      Am besten wäre das ganze dynamisch zuhalten und nur im loggingTemplate zubestimmen welche und wielviel tags genutzt werden.

      Gruß DET

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

      @det Ursprünglich war das Script ja mal so gedacht, dass man immer "alle Werte gemeinsam" loggt, damit diese alle den gleichen Zeitstempel haben. Siehe https://www.youtube.com/watch?v=rTLQ15Fy85U

      Jetzt nutzt Du das Script aber komplett anders und gar nicht mehr so wie vorgesehen. Die Leistung und Spannung der einzelnen Strings (?) hat ja nichts miteinander zu tun. Also warum sollten die Daten immer alle gleichzeitig gespeichert werden?

      Das könnte man über die normalen Objekt-Eigenschaften des InfluxDB-Adapters lösen. Also ganz ohne Script.

      Oder übersehe ich etwas.

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

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

        @det Ursprünglich war das Script ja mal so gedacht, dass man immer "alle Werte gemeinsam" loggt, damit diese alle den gleichen Zeitstempel haben. Siehe https://www.youtube.com/watch?v=rTLQ15Fy85U

        Jetzt nutzt Du das Script aber komplett anders und gar nicht mehr so wie vorgesehen. Die Leistung und Spannung der einzelnen Strings (?) hat ja nichts miteinander zu tun. Also warum sollten die Daten immer alle gleichzeitig gespeichert werden?

        Das könnte man über die normalen Objekt-Eigenschaften des InfluxDB-Adapters lösen. Also ganz ohne Script.

        Oder übersehe ich etwas.

        D Offline
        D Offline
        DET
        schrieb am zuletzt editiert von DET
        #3

        @haus-automatisierung Du hast recht, es wird etwas anders genutzt. Die Spannungswerte sind nicht so wichtig und müssen auch nicht unbedingt gemeinsam geloggt werden. aber die Powerwerte müssen schon gemeinsam geloggt werden, oder? Sonst bekomme ich doch keine saubere Summenkurve der Power über die Zeit hin. Jetzt sind sie unter verschiedenen Fieldkeys, die würde ich gern unter dem Fieldkey 'Power' speichern wollen um dann mit Hilfe der Tagvalues unterschiedliche Auswertungen durchzuführen. In dem Script sind noch nicht alle Powerwerte vorhanden sondern es kommen noch 3 weiter Wechselrichter mit weiteren MPPT's Power werten dazu.
        Ich benutze auch nicht den InfluxDB Adapter, die InfluxDB liegt in einem eigenen Docker-Container und nur über dein Script schreibe ich dort dorten rein.

        haus-automatisierungH 1 Antwort Letzte Antwort
        0
        • D DET

          @haus-automatisierung Du hast recht, es wird etwas anders genutzt. Die Spannungswerte sind nicht so wichtig und müssen auch nicht unbedingt gemeinsam geloggt werden. aber die Powerwerte müssen schon gemeinsam geloggt werden, oder? Sonst bekomme ich doch keine saubere Summenkurve der Power über die Zeit hin. Jetzt sind sie unter verschiedenen Fieldkeys, die würde ich gern unter dem Fieldkey 'Power' speichern wollen um dann mit Hilfe der Tagvalues unterschiedliche Auswertungen durchzuführen. In dem Script sind noch nicht alle Powerwerte vorhanden sondern es kommen noch 3 weiter Wechselrichter mit weiteren MPPT's Power werten dazu.
          Ich benutze auch nicht den InfluxDB Adapter, die InfluxDB liegt in einem eigenen Docker-Container und nur über dein Script schreibe ich dort dorten rein.

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

          @det Teste mal so:

          // v0.2
          const token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx==';
          const measurement = 'PV-Anlage';
          const protocol = 'http';
          const host = 'xx.yy.zz.ww';
          const port = '8086';
          const org = 'SmartHome';
          const bucket = 'Energieversorgung';
          
          const loggingTemplate = {
              // West
              'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT3-West1.ELECTRIC_POWER': {
                  field: 'Leistung',
                  tags: 'Ausrichtung=West1,MPPT=3',
              },
              'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT3-West1.VOLTAGE': {
                  field: 'Spannung',
                  tags: 'Ausrichtung=West1,MPPT=3',
              },
              'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT4-West2.ELECTRIC_POWER': {
                  field: 'Leistung',
                  tags: 'Ausrichtung=West2,MPPT=4',
              },
              'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT4-West2.VOLTAGE': {
                  field: 'Spannung',
                  tags: 'Ausrichtung=West2,MPPT=4',
              },
              'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT1-West3.ELECTRIC_POWER': {
                  field: 'Leistung',
                  tags: 'Ausrichtung=West3,MPPT=1',
              },
              'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT1-West3.VOLTAGE': {
                  field: 'Spannung',
                  tags: 'Ausrichtung=West3,MPPT=1',
              },
              // Süd
              'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT2-Süd1.ELECTRIC_POWER': {
                  field: 'Leistung',
                  tags: 'Ausrichtung=Sued1,MPPT=2',
              },
              'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT2-Süd1.VOLTAGE': {
                  field: 'Spannung',
                  tags: 'Ausrichtung=Sued1,MPPT=2',
              },
              // Ost
              'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT1-Ost1.ELECTRIC_POWER': {
                  field: 'Leistung',
                  tags: 'Ausrichtung=Ost1,MPPT=1',
              },
              'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT1-Ost1.VOLTAGE': {
                  field: 'Spannung',
                  tags: 'Ausrichtung=Ost1,MPPT=1',
              },
              'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT2-Ost2.ELECTRIC_POWER': {
                  field: 'Leistung',
                  tags: 'Ausrichtung=Ost2,MPPT=2',
              },
              'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT2-Ost2.VOLTAGE': {
                  field: 'Spannung',
                  tags: 'Ausrichtung=Ost2,MPPT=2',
              },
              'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT3-Ost3.ELECTRIC_POWER': {
                  field: 'Leistung',
                  tags: 'Ausrichtung=Ost3,MPPT=3',
              },
              'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT3-Ost3.VOLTAGE': {
                  field: 'Spannung',
                  tags: 'Ausrichtung=Ost3,MPPT=3',
              },
              'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT4-Ost4.ELECTRIC_POWER': {
                  field: 'Leistung',
                  tags: 'Ausrichtung=Ost4,MPPT=4',
              },
              'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT4-Ost4.VOLTAGE': {
                  field: 'Spannung',
                  tags: 'Ausrichtung=Ost4,MPPT=4',
              },
          };
          
          const loggingObj = {};
          
          async function start() {
           
              console.log(`Starting "${measurement}" logging to ${protocol}://${host}:${port} into bucket "${bucket}" by org ${org}`);
           
              // Init loggingObj with current values
              for (const objId of Object.keys(loggingTemplate)) {
                  const state = await getStateAsync(objId);
                  if (state && !isNaN(state.val)) {
                      loggingObj[objId] = state.val;
                  } else {
                      loggingObj[objId] = 0;
                  }
              }
           
              on({ id: Object.keys(loggingTemplate), change: 'ne' }, async (obj) => {
                  // Update value in loggingObj
                  loggingObj[obj.id] = obj.state.val;
           
                  // Save Data
                  const data = Object.keys(loggingTemplate)
                      .filter(objId => !isNaN(loggingObj[objId]))
                      .map(objId => `${measurement},${loggingTemplate[objId].tags} ${loggingTemplate[objId].field}=${loggingObj[objId]}`)
                      .join('\n');
           
                  if (data) {
                      // console.log(`Saving "${data}" to InfluxDB @ ${protocol}://${host}:${port}/`);
           
                      httpPost(
                          `${protocol}://${host}:${port}/api/v2/write?org=${org}&bucket=${bucket}`,
                          data,
                          {
                              headers: {
                                  'Authorization': `Token ${token}`,
                                  'Content-Type': 'text/plain; charset=utf-8'
                              },
                              timeout: 0,
                          }
                      );
                  }
              });
          }
          start();
          

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

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

            @det Teste mal so:

            // v0.2
            const token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx==';
            const measurement = 'PV-Anlage';
            const protocol = 'http';
            const host = 'xx.yy.zz.ww';
            const port = '8086';
            const org = 'SmartHome';
            const bucket = 'Energieversorgung';
            
            const loggingTemplate = {
                // West
                'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT3-West1.ELECTRIC_POWER': {
                    field: 'Leistung',
                    tags: 'Ausrichtung=West1,MPPT=3',
                },
                'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT3-West1.VOLTAGE': {
                    field: 'Spannung',
                    tags: 'Ausrichtung=West1,MPPT=3',
                },
                'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT4-West2.ELECTRIC_POWER': {
                    field: 'Leistung',
                    tags: 'Ausrichtung=West2,MPPT=4',
                },
                'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT4-West2.VOLTAGE': {
                    field: 'Spannung',
                    tags: 'Ausrichtung=West2,MPPT=4',
                },
                'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT1-West3.ELECTRIC_POWER': {
                    field: 'Leistung',
                    tags: 'Ausrichtung=West3,MPPT=1',
                },
                'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT1-West3.VOLTAGE': {
                    field: 'Spannung',
                    tags: 'Ausrichtung=West3,MPPT=1',
                },
                // Süd
                'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT2-Süd1.ELECTRIC_POWER': {
                    field: 'Leistung',
                    tags: 'Ausrichtung=Sued1,MPPT=2',
                },
                'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT2-Süd1.VOLTAGE': {
                    field: 'Spannung',
                    tags: 'Ausrichtung=Sued1,MPPT=2',
                },
                // Ost
                'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT1-Ost1.ELECTRIC_POWER': {
                    field: 'Leistung',
                    tags: 'Ausrichtung=Ost1,MPPT=1',
                },
                'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT1-Ost1.VOLTAGE': {
                    field: 'Spannung',
                    tags: 'Ausrichtung=Ost1,MPPT=1',
                },
                'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT2-Ost2.ELECTRIC_POWER': {
                    field: 'Leistung',
                    tags: 'Ausrichtung=Ost2,MPPT=2',
                },
                'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT2-Ost2.VOLTAGE': {
                    field: 'Spannung',
                    tags: 'Ausrichtung=Ost2,MPPT=2',
                },
                'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT3-Ost3.ELECTRIC_POWER': {
                    field: 'Leistung',
                    tags: 'Ausrichtung=Ost3,MPPT=3',
                },
                'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT3-Ost3.VOLTAGE': {
                    field: 'Spannung',
                    tags: 'Ausrichtung=Ost3,MPPT=3',
                },
                'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT4-Ost4.ELECTRIC_POWER': {
                    field: 'Leistung',
                    tags: 'Ausrichtung=Ost4,MPPT=4',
                },
                'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT4-Ost4.VOLTAGE': {
                    field: 'Spannung',
                    tags: 'Ausrichtung=Ost4,MPPT=4',
                },
            };
            
            const loggingObj = {};
            
            async function start() {
             
                console.log(`Starting "${measurement}" logging to ${protocol}://${host}:${port} into bucket "${bucket}" by org ${org}`);
             
                // Init loggingObj with current values
                for (const objId of Object.keys(loggingTemplate)) {
                    const state = await getStateAsync(objId);
                    if (state && !isNaN(state.val)) {
                        loggingObj[objId] = state.val;
                    } else {
                        loggingObj[objId] = 0;
                    }
                }
             
                on({ id: Object.keys(loggingTemplate), change: 'ne' }, async (obj) => {
                    // Update value in loggingObj
                    loggingObj[obj.id] = obj.state.val;
             
                    // Save Data
                    const data = Object.keys(loggingTemplate)
                        .filter(objId => !isNaN(loggingObj[objId]))
                        .map(objId => `${measurement},${loggingTemplate[objId].tags} ${loggingTemplate[objId].field}=${loggingObj[objId]}`)
                        .join('\n');
             
                    if (data) {
                        // console.log(`Saving "${data}" to InfluxDB @ ${protocol}://${host}:${port}/`);
             
                        httpPost(
                            `${protocol}://${host}:${port}/api/v2/write?org=${org}&bucket=${bucket}`,
                            data,
                            {
                                headers: {
                                    'Authorization': `Token ${token}`,
                                    'Content-Type': 'text/plain; charset=utf-8'
                                },
                                timeout: 0,
                            }
                        );
                    }
                });
            }
            start();
            
            D Offline
            D Offline
            DET
            schrieb am zuletzt editiert von
            #5

            @haus-automatisierung Ja, es funktioniert für meine Bedürfnisse hervorragend, da es große Flexibiliät beinhaltet. Es müssen nur im loggingTemplate die benötigten tags und fields eingetragen werden.
            Vielen Dank für Deine Unterstützung.
            Gruß DET

            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

            732

            Online

            32.6k

            Benutzer

            82.1k

            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