Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. DET

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    D
    • Profile
    • Following 0
    • Followers 0
    • Topics 2
    • Posts 4
    • Best 0
    • Groups 1

    DET

    @DET

    Starter

    0
    Reputation
    6
    Profile views
    4
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    DET Follow
    Starter

    Latest posts made by DET

    • RE: http post tagkeys und fieldkeys

      @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

      posted in JavaScript
      D
      DET
    • RE: http post tagkeys und fieldkeys

      @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.

      posted in JavaScript
      D
      DET
    • http post tagkeys und fieldkeys

      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

      posted in JavaScript
      D
      DET
    • nodeRED KNX Kopplung "On duty"

      Moin,
      ich bekomme nach der Installation von NodeRED und der "node-red-contrib-knx-ultimade" Palette keine Infos von den KNX Devices.
      Das KNX-Device ist wohl connected und meldet "On duty".
      Ich finde keine Information was es bedeutet und vor allem nicht wie ich den Zustand ändern kann. Hier ein Screenshot meines Test flows.
      NodeRED_on_duty.PNG
      Wenn noch weitere Infos benötigt werden um mir zu helfen, würde ich sie gern zur Verfügung stellen. Vielen Dank für die Unterstützung.
      MfG DET

      posted in Node-Red
      D
      DET
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo