Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. InfluxDB Adapter und Photovoltaik-Leistung

    NEWS

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    InfluxDB Adapter und Photovoltaik-Leistung

    This topic has been deleted. Only users with topic management privileges can see it.
    • SKB
      SKB Developer Most Active last edited by

      Hallo,
      ich habe mal eine Frage zu dem Speichern der Werte, die von meiner PV Anlage kommen - diese müssen via "Timer" alle 100ms syncrhon gelesen werden, damit der Skalierungsfaktor zu dem Wert passt. Dies geschieht via Javascript.

      Leider werden somit jede Sekunde Werte in die influxDB geschrieben - dies würde ich gerne auf 10 Sekunden ändern, da es hier nur um die aktuelle Produktion geht.

      Hier sieht man, wie die Werte Richtung influxDB "fliegen".
      893e8987-2c19-4ff8-93bb-10b160aaa4b0-image.png

      Ich dachte, ich käme mit "log changes minimal delta" weiter - aber der Adapter schreibt munter die Werte weiter.

      Hat hier jemand einen Tipp?

      Vielen Dank!

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @SKB last edited by

        @skb sagte: müssen via "Timer" alle 100ms syncrhon gelesen werden, damit der Skalierungsfaktor zu dem Wert passt. Dies geschieht via Javascript.

        ?? Bitte erläutern. Skript?

        @skb sagte in InfluxDB Adapter und Photovoltaik-Leistung:

        dies würde ich gerne auf 10 Sekunden ändern

        Datenpunkt, der alle 10 s mit dem Mittelwert der letzten 10 s geschrieben wird.

        SKB 1 Reply Last reply Reply Quote 0
        • SKB
          SKB Developer Most Active @paul53 last edited by

          @paul53
          Das Skript sieht so aus:

          // Aktuelle Leistung der Anlage
          createState('Solar.Wechselrichter.PVLeistungAktuell', {
              name: 'Aktuelle Leistung der Anlage in W',
              unit: 'W',
              min: 0,
              type: 'number',
              role: 'value.energy'
          }, function () {
          
              on('modbus.0.holdingRegisters.40083_I_AC_Leistung'/*AC-Leistungswert*/, function (obj) {
                  var timeout = setTimeout(function () {
                      clearTimeout(timeout);
                      var factorState = getState('modbus.0.holdingRegisters.40084_I_AC_Leistung_SF'/*AC-Leistung Skalierungsfaktor*/);
                      convertValue(obj.state.val, factorState ? factorState.val : 0, 'PVLeistungAktuell');
                  }, 100);
              });
          
              var factorState = getState('modbus.0.holdingRegisters.40084_I_AC_Leistung_SF'/*AC-Leistung Skalierungsfaktor*/);
              var valueState = getState('modbus.0.holdingRegisters.40083_I_AC_Leistung'/*AC-Leistungswert*/);
              convertValue(valueState ? valueState.val : null, factorState ? factorState.val : 0, 'PVLeistungAktuell');
          });
          

          Und nun? 😉

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @SKB last edited by paul53

            @skb sagte in: Das Skript sieht so aus:

            Es fehlt die Funktion convertValue().
            Außerdem wird nicht alle 100 ms eingelesen, sondern 100 ms nach dem Trigger die Konvertierung durchgeführt.
            Ist der Wert von "AC-Leistung Skalierungsfaktor" konstant oder variabel?

            SKB 1 Reply Last reply Reply Quote 0
            • SKB
              SKB Developer Most Active @paul53 last edited by

              @paul53 Danke für die Rückmeldung. Natürlich wird der Wert nicht alle 100ms neu gelesen, sondern neu berechnet.

              Hier nochmal die komplette Funktion:

              // Funktion, um Werte mit Skalierung zu berechnen
              function convertValue(value, factor, destination) {
                  if (value === null) return;
                  if (factor === null) factor = 0;
                  let num = value * Math.pow(10, factor);
                  setState('Solar.Wechselrichter.' + destination, Number(num.toFixed(2)), true);
              }
              // Aktuelle Leistung der Anlage
              createState('Solar.Wechselrichter.PVLeistungAktuell', {
                  name: 'Aktuelle Leistung der Anlage in W',
                  unit: 'W',
                  min: 0,
                  type: 'number',
                  role: 'value.energy'
              }, function () {
              
                  on('modbus.0.holdingRegisters.40083_I_AC_Leistung'/*AC-Leistungswert*/, function (obj) {
                      var timeout = setTimeout(function () {
                          clearTimeout(timeout);
                          var factorState = getState('modbus.0.holdingRegisters.40084_I_AC_Leistung_SF'/*AC-Leistung Skalierungsfaktor*/);
                          convertValue(obj.state.val, factorState ? factorState.val : 0, 'PVLeistungAktuell');
                      }, 100);
                  });
              
                  var factorState = getState('modbus.0.holdingRegisters.40084_I_AC_Leistung_SF'/*AC-Leistung Skalierungsfaktor*/);
                  var valueState = getState('modbus.0.holdingRegisters.40083_I_AC_Leistung'/*AC-Leistungswert*/);
                  convertValue(valueState ? valueState.val : null, factorState ? factorState.val : 0, 'PVLeistungAktuell');
              });
              

              @paul53 said in InfluxDB Adapter und Photovoltaik-Leistung:

              Ist der Wert von "AC-Leistung Skalierungsfaktor" konstant oder variabel?

              Der Skalierungsfaktor pro Wert ist immer gleich. Ich verwende die Funktion aber für mehrere Skalierungen. Daher unterscheidet er sich. Bei der Leistung ist er "-1" - bei der Temperatur "-2".

              Das Skript hatte ich hier im Forum gefunden und etwas modifiziert.

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @SKB last edited by paul53

                @skb Vorschlag für ein Skript, das nur alle 10 s den Mittelwert in einen Datenpunkt schreibt:

                const idAC_Leistung = 'modbus.0.holdingRegisters.40083_I_AC_Leistung';
                const idSF = 'modbus.0.holdingRegisters.40084_I_AC_Leistung_SF'; // Exponent
                const idPV_Leistung = '0_userdata.0.Solar.Wechselrichter.PVLeistung';
                
                createState(idPV_Leistung, 0, {
                    name: 'Aktuelle Leistung der Anlage in W',
                    unit: 'W',
                    min: 0,
                    type: 'number',
                    read: true,
                    write: false,
                    role: 'value.energy'
                });
                
                const factor = Math.pow(10, getState(idSF).val);
                var arr = [];
                
                on({id: idAC_Leistung}, function(dp) {
                    arr.push(dp.state.val);
                });
                
                schedule('*/10 * * * * *', function() {
                    if(arr.length) {
                        let sum = 0;
                        for(let i = 0; i < arr.length; i++) {
                            sum += arr[i];
                        }
                        setState(idPV_Leistung, Math.round(10 * factor * sum / arr.length) / 10, true);
                        arr.length = 0;
                    }
                });
                
                SKB 1 Reply Last reply Reply Quote 0
                • SKB
                  SKB Developer Most Active @paul53 last edited by

                  @paul53 Dake für den Vorschlag.

                  Gibt es nicht die Möglichkeit, bei influx "einfach" den Wert nur alle 10 Sekunden schreiben zu lassen bzw. bei Änderung von meh als 10W bspw?

                  Danke!

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate
                  FAQ Cloud / IOT
                  HowTo: Node.js-Update
                  HowTo: Backup/Restore
                  Downloads
                  BLOG

                  959
                  Online

                  32.1k
                  Users

                  80.7k
                  Topics

                  1.3m
                  Posts

                  2
                  7
                  377
                  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