Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. [gelöst] Integral in Query bilden und Result verarbeiten?

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Integral in Query bilden und Result verarbeiten?

    This topic has been deleted. Only users with topic management privileges can see it.
    • ?
      A Former User last edited by A Former User

      Hallo
      ich baue derzeit an einer influxDB Abfrage um damit Datenpunkte zu beschreiben. Hier als ersten Versuch ein Integral über einen Leistungswert (Watt) um daraus die elektr. Arbeit (kwh) zu ermitteln.
      Das Query lautet:

      SELECT integral("value") /3600000 FROM "shelly.0.SHBDUO-1#D0CE26#1.lights.Power" WHERE time >='2020-11-20T00:00:00Z' AND time<'2020-11-21T22:35:50Z'
      

      Grob erscheint mir die Funktion des Blocklys für eine Abfrage für den Zeitbereich Gestern 0h bis Jetzt zu funktionieren.

      80481edc-809d-48ce-926f-6676de7d74db-grafik.png

      Zu dieser Aussage komme ich, da die Query Abfrage über einen GUI-Client mir folgendes Ergebnis liefert:
      9e2b5b68-4836-4813-a561-cf79f011e73a-grafik.png

      Der Debug Eintrag im Log liefert:

      
      			
      javascript.0	2020-11-21 23:51:00.080	info	(1155) script.js.Testen.InfluxTest: {"result":[[{"integral":44718.38777000003,"ts":0}]],"ts":1605999060072,"error":null}
      

      Der Timestamp passt zum Client Ergebnis für den 1.1.1970 (UnixTimeStamp) aber mir fällt nichts ein, warum und wie das Ergebnis des Integrals formatiert ist.

      Habt ihr eine Idee?
      Client: 0,0124217743805556 kwh
      Blockly: 44718.38777000003 ???

      Vielen Dank!

      ? 1 Reply Last reply Reply Quote 0
      • ?
        A Former User @Guest last edited by A Former User

        mit frischen Augen sieht man mehr......

        Im Text des Blocklys zur Abfrage fehlt die Umrechnung von Ws auf kwh also /3600000

        jetzt funktioniert es 🙂

        Nun geht es an das Zerlegen der Ausgabe um das Ergebnis des Intergrals als Zahl/Datenpunkt zu haben.

        Leider verzweifel ich gerade daran diese JSON Funktion Stringify mit Blockly Text Funktionen zu zerlegen.

        5916de44-9026-4b24-9536-5a36be52beb2-grafik.png

        Egal welches "grüne Text Blockly" ich verwende, es gibt für JSON.stringify einen error im Log.

        Diese Funktion habe ich mir auch aus der Dokumentation kopiert und mehr als dass es eine Umwandlung zu Text bedeutet /bedeuten kann, ist mir nicht bewusst. Denk hier liegt mein Problem...

        Habt Ihr einen Tip wie ich das (0.012931285780555562) in einen Datenpunkt "Zahl" auswerten kann?

        2020-11-22 12:33:30.082 - info: javascript.0 (30275) script.js.Testen.InfluxTest: {"result":[[{"integral":0.012931285780555562,"ts":0}]],"ts":1606044810076,"error":null}
        

        Thx!

        ? 1 Reply Last reply Reply Quote 0
        • ?
          A Former User @Guest last edited by A Former User

          Soooo.... lange probiert und falls es jemand auch versucht hier wie ich es jetzt gelöst habe.

          Also zuerst die Antwort des Query aus der Datenbank nicht in den Debug geschrieben, sondern mal in einen String Datenpunkt. Dort herausgefunden, dass es wirklich so zurück kommt:

          {"result":[[{"integral":0.011766770013888896,"ts":0}]],"ts":1606062090132,"error":null}
          

          Also nun daran gemacht diesen String in eine Liste aus Text mit Trennzeichen ":" zu zerlegen und das 3te Element wieder in eine Liste aus Text geschrieben. Diesmal mit dem Trennzeichen "," und das 1. Element genommen.
          Bleibt der String aus Zahlen 0.011766770013888896.
          Diesen noch nach Zahl konvertiert und in einen Datenpunkt vom Typ Zahl geschrieben.

          e83d812c-2e95-43b5-ae47-06377898f525-grafik.png

          Somit klappt es. Mit einer definierbaren Zeitspanne z.B. heute eine Datenbankabfrage auf influxdB machen und in einem das Integral der gewählten Datenpunkte bilden lassen. Das Ergebnis wiederum in einen Datenpunkt schreiben.

          F 1 Reply Last reply Reply Quote 0
          • F
            fastfoot @Guest last edited by

            @Pete0815 Du benötigst keine extra JS-Funktion. Dein Ergebnis ist bereits entweder ein Objekt oder ein JSON(ich kenne Influx-DB nicht). Aber egal welches es ist, Blockly erledigt das bereits.

            Hier mal ein auf deine Daten zugeschnittenes Beispiel, die erste Zeile simuliert lediglich deine Abfrage, ab dort kannst du es einsetzen. Ist übersichtlicher und universeller
            Integral.PNG

            ? 1 Reply Last reply Reply Quote 0
            • ?
              A Former User @fastfoot last edited by

              @fastfoot vielen Dank. Das sieht übersichtlicher aus und die Nutzung von "Attribut" im Blockly kenne ich noch nicht. Vereinfacht es aber erheblich.

              Ist es Absicht, dass Du zweimal Daten setzt? Liegt das an den 2 eckigen Klammern im result?

              Deine Info bzgl. JS-Funktion verstehe ich noch nicht, da ich Objekt oder JSON erst auch noch (grob) verstehen muß. Bleibt spannend, macht aber Spaß.

              Vielen Dank und Grüße!

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

              Support us

              ioBroker
              Community Adapters
              Donate

              834
              Online

              32.0k
              Users

              80.4k
              Topics

              1.3m
              Posts

              2
              5
              924
              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