Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. SQL Beschreiben mit Blockly

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    SQL Beschreiben mit Blockly

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      sectorchan last edited by

      Hallo Gemeinde,

      ich habe anscheinend eine Gedankenblockade. Mit der suche konnte ich diese ebenfalls nicht lösen.

      Ich möchte mein Stromverbrauch in meine SQL Tabelle schreiben. Aber welche Blockly Aktion nehme ich her? sendTo? Hätte da jemand ein Beispiel für mich, so das ich aus der Misere herausfinde?

      David G. Codierknecht BananaJoe 3 Replies Last reply Reply Quote 0
      • David G.
        David G. @sectorchan last edited by

        @sectorchan

        Schreib die Werte doch in einen Datenpunkt und aktiviere die Protokollierung mit dem SQL-Adapter.

        1 Reply Last reply Reply Quote 0
        • Codierknecht
          Codierknecht Developer Most Active @sectorchan last edited by Codierknecht

          @sectorchan
          Wie @David-G schon schrieb: Installiere den SQL-Adapter und schreibe den Stromverbrauch in einen DP (soweit es den nicht schon gibt).
          Dann aktivierst Du an dem DP die Protokollierung.

          Ein Bild sagt mehr als tausend Worte:
          aeeee105-0773-49a1-818d-e918ffd0cf4e-image.png

          So mache ich das mit meinem Gasverbrauch:
          Den laufenden Verbrauch am Tag schreibe ich in einen DP "verbrauch".
          Jede Nacht schreibe ich den dort aufgelaufenen Wert in einen DP "tagesverbrauch" und setze "verbrauch" wieder auf 0.

          1 Reply Last reply Reply Quote 0
          • BananaJoe
            BananaJoe Most Active @sectorchan last edited by BananaJoe

            @sectorchan ja, sendTo und dann die passenden Parameter. Ist aber so Tricky gewesen die Parameter richtig zu übergeben das ich mir eine Javascript-Funktion gebaut habe (vermutlich mit Hilfe hier aus dem Forum):

            2ac62472-4c06-4bb2-9301-99d2711fc21b-image.png 36f7819d-85ed-4b77-970a-91b6da1d257b-image.png

            sendTo("sql.0", "storeState", {
                "id": myId,
                "state": { 
                    "val": myVAL, 
                    "ts": myTS,
                    "ack": true
                }
            }, async function (result) {
                //console.log(result);
            });
            

            Die verbesserte version die ich zur Zeit einsetze hat den Vorteil das man damit auch Werte überschreiben kann (Wenn es der gleiche Zeitstempel ist:
            2f0f2747-1c8f-4695-9f68-ed9c6cc7f44d-image.png

            let statement = `
                REPLACE INTO iobroker.ts_number 
                    (id, ts, val, ack, _from, q) 
                    VALUES ((SELECT id FROM iobroker.datapoints WHERE name = "${id}"), ${ts}, ${value}, ${ack}, ${from}, ${q})
            `
            //log(statement)
            sendTo("sql.0", "query", statement, e => {
                if (e && e.error) {
                    log(e.error)
                } else {
                    // log("Done!")
                }
            })
            

            Hier als Blockly-Export:

            <block xmlns="https://developers.google.com/blockly/xml" type="procedures_defcustomnoreturn" id="ppt|ajrQncolYtqyk1q1" x="238" y="-587">
              <mutation statements="false">
                <arg name="id" varid="RtPM2%k{F`%!q{Rk]|a."></arg>
                <arg name="ts" varid=";!)T*gf?`G!J~iZ#4,CG"></arg>
                <arg name="value" varid="epT$}5hcYx3b^`jz:~#d"></arg>
                <arg name="ack" varid="GAGtL,+-C3?x`s;u1nsR"></arg>
                <arg name="from" varid="rHJp6FCFj,U],$ysF[xX"></arg>
                <arg name="q" varid="p~yp5Fejp5Y|*K$i[(u%"></arg>
              </mutation>
              <field name="NAME">InsertToHistory</field>
              <field name="SCRIPT">bGV0IHN0YXRlbWVudCA9IGANCiAgICBSRVBMQUNFIElOVE8gaW9icm9rZXIudHNfbnVtYmVyIA0KICAgICAgICAoaWQsIHRzLCB2YWwsIGFjaywgX2Zyb20sIHEpIA0KICAgICAgICBWQUxVRVMgKChTRUxFQ1QgaWQgRlJPTSBpb2Jyb2tlci5kYXRhcG9pbnRzIFdIRVJFIG5hbWUgPSAiJHtpZH0iKSwgJHt0c30sICR7dmFsdWV9LCAke2Fja30sICR7ZnJvbX0sICR7cX0pDQpgDQovL2xvZyhzdGF0ZW1lbnQpDQpzZW5kVG8oInNxbC4wIiwgInF1ZXJ5Iiwgc3RhdGVtZW50LCBlID0+IHsNCiAgICBpZiAoZSAmJiBlLmVycm9yKSB7DQogICAgICAgIGxvZyhlLmVycm9yKQ0KICAgIH0gZWxzZSB7DQogICAgICAgIC8vIGxvZygiRG9uZSEiKQ0KICAgIH0NCn0p</field>
              <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
            </block>
            

            Einsatz:
            4060e046-45bb-4a3c-8a82-e6098c716f03-image.png

            Die Funktion habe ich aus dem Forum: https://forum.iobroker.net/topic/55463/sql-sendto-problem-storestate-vs-update/8?_=1666164726503

            Beides setzt voraus das du einen Datenpunkt mit aktivierter SQL Protokollierung hast.
            Der Vorteil bei diesen beiden Funktionen ist das du den Zeitstempel mitgeben kannst. Du kannst also um Mitternacht auch noch den Wert für 08:00 Uhr schreiben

            S 1 Reply Last reply Reply Quote 0
            • S
              sectorchan @BananaJoe last edited by sectorchan

              Hi, Danke für euren Input.

              Ja einen Datenpunkt mit dem Täglichen Verbrauch gibt es tatsächlich, da ich damit den Verbrauch berechne.
              Danke an @BananaJoe für das Blockly, aber ich werde mit der Idee von @David-G und @Codierknecht gehen, das geht einfacher, simpler und wahrscheinlich weniger Fehleranfällig.

              Aber ich kann da nicht auswählen, das eine eigene Tabelle verwendet wird oder?

              BananaJoe 1 Reply Last reply Reply Quote 0
              • BananaJoe
                BananaJoe Most Active @sectorchan last edited by BananaJoe

                @sectorchan sagte in SQL Beschreiben mit Blockly:

                Aber ich kann da nicht auswählen, das eine eigene Tabelle verwendet wird oder?

                Nein. Dazu könntest du aber halt wie im 2. Beispiel ein SQL Statement setzen, In dem kannst du natürlich dann eine andere Tabelle und/oder Datenbank nutzen.
                Mit den Daten wird dann aber float oder ECharts nicht umgehen können denke ich ... falls das mal wichtig wird

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

                Support us

                ioBroker
                Community Adapters
                Donate

                764
                Online

                31.7k
                Users

                79.8k
                Topics

                1.3m
                Posts

                blockly
                4
                6
                621
                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