Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Daten mit Blockly aus InfluxDB abrufen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Daten mit Blockly aus InfluxDB abrufen

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      tobidd @tobidd last edited by

      @tobidd

      wieso nur Schnipsel?
      Oben steht doch der gesamte Code?
      Und der Logoutput gibt nun mal nur diese wenigen Infos her. Wenn ich wüsste, wie ich da mehr Informationen rausbekomme, würde ich es ja tun. Der Adapter steht auch schon auf Debug.

      Homoran 1 Reply Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @tobidd last edited by

        @tobidd sagte in Daten mit Blockly aus InfluxDB abrufen:

        wieso nur Schnipsel?

        ehrlich jetzt?

        hat früher nichts im iobroker log gestanden?
        erst jetzt?

        T 1 Reply Last reply Reply Quote 0
        • T
          tobidd @Homoran last edited by

          @homoran

          nein, erst jetzt und immer wieder nur das:

          Error in received multiQuery: TypeError: queriesString.split is not a function
          
          K 1 Reply Last reply Reply Quote 0
          • W
            wolfi913 @tobidd last edited by

            @tobidd
            Nach langem Probieren würd' ich so was aus der influxDB rausbekommen:
            Screenshot 2024-05-30 131731.png
            Screenshot 2024-05-30 131754.png
            Inhalt der JS Funktion:

            var ergebnis;
            sendTo('influxdb.0', 'query', flux, function (result) {
                if (result.error) {
                    console.error(result.error);
                } else {
                    // show result
                    // console.log('Rows: ' + JSON.stringify(result));
                    ergebnis = JSON.stringify(result);
                }
            });
            await wait(1000);
            return ergebnis;
            

            Vielleicht kannst Du ja damit was anfangen.
            Mit dem sendTo-Block klappt's irgendwie gar nicht.

            Homoran S 2 Replies Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators @wolfi913 last edited by

              @wolfi913 sagte in Daten mit Blockly aus InfluxDB abrufen:

              würd' ich so was aus der influxDB rausbekommen:

              bitte als Text in code-tags posten

              @wolfi913 sagte in Daten mit Blockly aus InfluxDB abrufen:

              Mit dem sendTo-Block klappt's irgendwie gar nicht.

              wie gesagt kenne ich den nicht.

              W 1 Reply Last reply Reply Quote 0
              • W
                wolfi913 @Homoran last edited by

                @homoran

                {"result":[[{"result":"_result","table":0,"_start":"2024-05-30T10:16:41.25298107Z","_stop":"2024-05-30T11:16:41.25298107Z","_time":"2024-05-30T11:02:48.423Z","_value":74,"_field":"value","_measurement":"hmip.0.devices.3014F711A0000EDD89A1774D.channels.1.humidity","ts":1717066968423}]],"ts":1717067801258,"error":null}
                
                1 Reply Last reply Reply Quote 0
                • S
                  stenmic @wolfi913 last edited by

                  @wolfi913 falls du es noch brauchst, so bekommt man den "value" raus.

                  2024-06-21 13 07 12.jpg

                  S 1 Reply Last reply Reply Quote 0
                  • S
                    SpacerX @stenmic last edited by SpacerX

                    @stenmic mal eine Variante um Daten aus influxdb mit Blockly zu bekommen.

                    https://forum.iobroker.net/topic/56125/blockly-influxdb2-0-flux-abfrage

                    W S 2 Replies Last reply Reply Quote 0
                    • W
                      wolfi913 @SpacerX last edited by

                      @spacerx sagte in Daten mit Blockly aus InfluxDB abrufen:

                      @stenmic mal eine Variante um Daten aus influxdb mit Blockly zu bekommen.

                      https://forum.iobroker.net/topic/56125/blockly-influxdb2-0-flux-abfrage

                      Das ist der eingangs verlinkte Thread von @tobidd der ja bei ihm nicht funktioniert hatte.

                      @stenmic

                      falls du es noch brauchst, so bekommt man den "value" raus.

                      Danke. Aber ich hatte es ja nicht gebraucht. Und @tobidd hatte es ja oben schon korrekt in seinem Blockly drinnen wie der value zu extrahieren ist result.0.0._value. Daher bin ich darauf nicht extra eingegangen.

                      1 Reply Last reply Reply Quote 0
                      • S
                        stenmic @SpacerX last edited by

                        @spacerx ???
                        mit meiner Lösung gehts auch 🙂

                        S 1 Reply Last reply Reply Quote 0
                        • S
                          SpacerX @stenmic last edited by

                          @stenmic ja klar. Viele Wege führen nach Rom.

                          1 Reply Last reply Reply Quote 0
                          • K
                            kdtcat @tobidd last edited by

                            @tobidd Ich habe jetzt auch festgestellt, dass das Blockly "sendTo" nicht mehr funktioniert. Scheinbar ist durch ein Update die Query Funktion geändert worden. Blockly generiert jetzt immer ein Query Array, welches bei InfluxDb nicht erlaubt ist. Im Javascript Code erkennt man das am { Zeichen.

                            Meine bis jetzt einzige Lösung ist das Script als Native Script weiterzuführen.

                            T 1 Reply Last reply Reply Quote 0
                            • T
                              tobidd @kdtcat last edited by

                              @kdtcat
                              Hallo, kannst du mir eventuell ein Beispiel zeigen, wie du das gelöst hast.
                              Ich hatte jetzt lange keine Lust mehr dem Thema nachzugehen. Jetzt bin ich wieder etwas motivierter.

                              Grüße Tobi

                              K 1 Reply Last reply Reply Quote 0
                              • K
                                kdtcat @tobidd last edited by

                                @tobidd sagte in Daten mit Blockly aus InfluxDB abrufen:

                                @kdtcat
                                Hallo, kannst du mir eventuell ein Beispiel zeigen, wie du das gelöst hast.
                                Ich hatte jetzt lange keine Lust mehr dem Thema nachzugehen. Jetzt bin ich wieder etwas motivierter.

                                Grüße Tobi

                                Hier als Beispiel die beiden ersten Werte meines Scripts:

                                schedule("*/2 * * * *", async () => {
                                  result = !''.length;
                                  sendTo('influxdb.0', 'query', 'from(bucket: "solar")  |> range(start: -1m) |> filter(fn: (r) => r["_field"] == "Energy.Battery.Charge.Level") |> aggregateWindow(every: 2m, fn: mean)', async (result) => {
                                    test1 = (await jsonataExpression(result,'*[0]._value '));
                                    setStateDelayed('0_userdata.0.Enpal.BatteryLevel', Math.round(test1 * 100) / 100, true, parseInt(((0) || '').toString(), 10), false);
                                  });
                                  await wait(3000);
                                  result = !''.length;
                                  sendTo('influxdb.0', 'query', 'from(bucket: "solar")  |> range(start: -1m) |> filter(fn: (r) => r["_field"] == "Power.Consumption.Total") |> aggregateWindow(every: 2m, fn: mean)', async (result) => {
                                    test2 = (await jsonataExpression(result,'*[0]._value '));
                                    setStateDelayed('0_userdata.0.Enpal.PowerConsumptionTotal', test2, true, parseInt(((0) || '').toString(), 10), false);
                                  });
                                  await wait(3000);
                                });
                                
                                T 1 Reply Last reply Reply Quote 0
                                • T
                                  tobidd @kdtcat last edited by tobidd

                                  @kdtcat
                                  siehe nächster Post 🙂

                                  1 Reply Last reply Reply Quote 0
                                  • T
                                    tobidd last edited by tobidd

                                    @kdtcat

                                    ich habe das jetzt so gelöst:

                                    var flux, hausverbrauch, bezug;
                                    
                                    // Beschreibe diese Funktion …
                                    async function query_influx(flux) {
                                        var ergebnis;
                                        sendTo('influxdb.0', 'query', flux, function (result) {
                                            if (result.error) {
                                                console.error(result.error);
                                            } else {
                                                //show result
                                                //console.log('Rows: ' + JSON.stringify(result));
                                               ergebnis = JSON.stringify(result);
                                            }
                                        });
                                        await wait(1000);
                                        return ergebnis;
                                    }
                                    
                                    
                                    on({ id: 'mqtt.0.solaranzeige.sh10rt.hausverbrauch' /* solaranzeige/sh10rt/hausverbrauch */, change: 'any' }, async (obj) => {
                                      let value = obj.state.val;
                                      let oldValue = obj.oldState.val;
                                      hausverbrauch = await query_influx(['from(bucket: "solaranzeige2")',' |> range(start: today(), stop: now())','|> filter(fn: (r) => r["_measurement"] == "mqtt.0.solaranzeige.sh10rt.hausverbrauch")','|> filter(fn: (r) => r["_field"] == "value")','|> sum()',''].join(''));
                                      hausverbrauch = parseFloat(getAttr((() => { try { return JSON.parse(hausverbrauch); } catch (e) { return {}; }})(), 'result.0.0._value'));
                                      bezug = await query_influx(['from(bucket: "solaranzeige2")',' |> range(start: today(), stop: now())','|> filter(fn: (r) => r["_measurement"] == "mqtt.0.solaranzeige.sh10rt.bezug")','|> filter(fn: (r) => r["_field"] == "value")','|> sum()',''].join(''));
                                      bezug = parseFloat(getAttr((() => { try { return JSON.parse(bezug); } catch (e) { return {}; }})(), 'result.0.0._value'));
                                      setState('0_userdata.0.Solar.autarkiegrad_heute' /* autarkiegrad_heute */, ((1 - bezug / hausverbrauch) * 100), true);
                                    });
                                    

                                    Ich hoffe an Hand der Bilder ist klar was wo hin gehört.
                                    Vielleicht hilft es ja jemandem.
                                    Einen Herzlichen Dank an ALLE, die mir Hinweise zur Lösungsfindung gegeben haben.

                                    blockly.jpg
                                    js2.jpg
                                    js.jpg

                                    K 1 Reply Last reply Reply Quote 0
                                    • K
                                      kdtcat @tobidd last edited by

                                      @tobiddGute Idee mit der Function. Damit habe ich mein Script auch wieder "Blockly fähig" gemacht.

                                      K 1 Reply Last reply Reply Quote 0
                                      • K
                                        kdtcat @kdtcat last edited by

                                        @kdtcat 7d31e849-77bc-46aa-9735-7c2d68b5975d-image.png

                                        K 1 Reply Last reply Reply Quote 0
                                        • K
                                          kdtcat @kdtcat last edited by

                                          @kdtcat ```

                                          var parm1, parm2, result, BatteryLevel, PowerConsumptionTotal, PowerProductionTotal, EnergyProductionTotalDay, EnergyConsumptionTotalDay, EnergyExternalTotalOutDay, EnergyBatteryChargeDay, EnergyStorageTotalOutDay, StromverbrauchAnteilSolarTag, STromverbrauchAlleTag;
                                          
                                          // Beschreibe diese Funktion …
                                          async function iq(parm1, parm2) {
                                               // Beschreibe diese Funktion 
                                               var ergebnis, fparm, fparm2; 
                                                  fparm = 'from(bucket: "solar") |> range(start: -1m) |> filter(fn: (r) => r["_field"] == ' + parm1 + ') |> aggregateWindow(every: 2m, fn: mean)';
                                                  fparm2 = '0_userdata.0.Enpal.' + parm2;
                                                  sendTo('influxdb.0', 'query', fparm, async (result) => {
                                                  test0 = (await jsonataExpression(result,'*[0]._value '));
                                                  setStateDelayed(fparm2, test0, true, parseInt(((0) || '').toString(), 10), false);
                                                });
                                              return ergebnis;
                                              
                                          
                                          }
                                          
                                          
                                          schedule("*/2 * * * *", async () => {
                                            result = await iq('"Energy.Battery.Charge.Level"', 'BatteryLevel');
                                            await wait(3000);
                                            BatteryLevel = Math.round(getState('0_userdata.0.Enpal.BatteryLevel').val * 100) / 100;
                                            setStateDelayed('0_userdata.0.Enpal.BatteryLevel', { val: BatteryLevel, ack: false }, parseInt(((0) || '').toString(), 10), false);
                                            result = await iq('"Power.Consumption.Total"', 'PowerConsumptionTotal');
                                            await wait(3000);
                                            PowerConsumptionTotal = getState('0_userdata.0.Enpal.PowerConsumptionTotal').val;
                                            result = await iq('"Power.Production.Total"', 'PowerProductionTotal');
                                            await wait(3000);
                                            PowerProductionTotal = getState('0_userdata.0.Enpal.PowerProductionTotal').val;
                                            result = await iq('"Energy.Production.Total.Day"', 'EnergyProductionTotalDay');
                                            await wait(3000);
                                            EnergyProductionTotalDay = getState('0_userdata.0.Enpal.EnergyProductionTotalDay').val;
                                            result = await iq('"Energy.Consumption.Total.Day"', 'EnergyConsumptionTotalDay');
                                            await wait(3000);
                                            EnergyConsumptionTotalDay = getState('0_userdata.0.Enpal.EnergyConsumptionTotalDay').val;
                                            result = await iq('"Energy.External.Total.Out.Day"', 'EnergyExternalTotalOutDay');
                                            await wait(3000);
                                            EnergyExternalTotalOutDay = getState('0_userdata.0.Enpal.EnergyExternalTotalOutDay').val;
                                            result = await iq('"Energy.Battery.Charge.Day"', 'EnergyBatteryChargeDay');
                                            await wait(3000);
                                            EnergyBatteryChargeDay = getState('0_userdata.0.Enpal.EnergyBatteryChargeDay').val;
                                            result = await iq('"Energy.Storage.Total.Out.Day"', 'EnergyStorageTotalOutDay');
                                            await wait(3000);
                                            EnergyStorageTotalOutDay = getState('0_userdata.0.Enpal.EnergyStorageTotalOutDay').val;
                                            StromverbrauchAnteilSolarTag = EnergyProductionTotalDay - EnergyExternalTotalOutDay;
                                            StromverbrauchAnteilSolarTag = StromverbrauchAnteilSolarTag - EnergyBatteryChargeDay;
                                            setStateDelayed('0_userdata.0.Enpal.StromverbrauchAnteilSolarTag', { val: StromverbrauchAnteilSolarTag, ack: false }, parseInt(((0) || '').toString(), 10), false);
                                            STromverbrauchAlleTag = StromverbrauchAnteilSolarTag + EnergyStorageTotalOutDay + EnergyConsumptionTotalDay;
                                            setStateDelayed('0_userdata.0.Enpal.StromverbrauchAlleTag', { val: STromverbrauchAlleTag, ack: false }, parseInt(((0) || '').toString(), 10), false);
                                            console.info((['1: ',BatteryLevel,', 2: ',PowerConsumptionTotal,', 3: ',PowerProductionTotal,', 4: ',EnergyProductionTotalDay,', 5: ',EnergyConsumptionTotalDay,', 6: ',EnergyExternalTotalOutDay,', 7: ',EnergyBatteryChargeDay,', 8: ',EnergyStorageTotalOutDay,', 9: ',StromverbrauchAnteilSolarTag,', 10: ',STromverbrauchAlleTag].join('')));
                                          });
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • First post
                                            Last post

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          812
                                          Online

                                          31.7k
                                          Users

                                          79.7k
                                          Topics

                                          1.3m
                                          Posts

                                          6
                                          35
                                          1837
                                          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