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] JSON erstellen und filtern

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] JSON erstellen und filtern

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

      Hallo,
      wieder mal sitzt das Problem vor dem Bildschirm.
      Ich ermittle jeden Tag um 00.01 den Zählerstand meines Discovergy-Zählers und ermittle den Verbrauch des Vortages durch Differenzbildung. Das Ergebnis schreibe ich dann jeden Tag um 00.10 Uhr auf einen Datenpunkt Täglicher Verbrauch. Der wird bei Änderung auch in die SQL-Datenbank (MariaDb) geschrieben. Aus der MariaDb hole ich mir die Werte des täglichen Verbrauchs mittels Blockly wieder zurück.

      Hier das Blockly:
      5d22ecb6-8cf9-4598-ad13-093aa95ce10a-image.png

      und hier der Blockly-Export:

      <xml xmlns="https://developers.google.com/blockly/xml">
        <variables>
          <variable id="/a.frbr+lSz-sv9itJ(m">obj</variable>
          <variable id="%,uKx.``R8Wb=f]P9h`.">result</variable>
        </variables>
        <block type="comment" id="GVW732OFexZ9HP[q]B3," x="-412" y="-262">
          <field name="COMMENT">Send query to SQL adapter</field>
          <next>
            <block type="sendto_custom" id="84lYloO4o+RvLszPVHZ5">
              <mutation xmlns="http://www.w3.org/1999/xhtml" items="" with_statement="true"></mutation>
              <field name="INSTANCE">sql.0</field>
              <field name="COMMAND">query</field>
              <field name="LOG">log</field>
              <field name="WITH_STATEMENT">TRUE</field>
              <value name="ARG0">
                <shadow type="text" id=")faamoSD,nGPXawY4|(Z">
                  <field name="TEXT">SELECT Date_Format(FROM_UNIXTIME(Substr(TS,1,10)), '%d.%c.%Y') as Datum ,val Verbrauch FROM iobroker.ts_number where id = '159' and val &lt;&gt; '0' group by val order by Datum</field>
                </shadow>
              </value>
              <statement name="STATEMENT">
                <block type="debug" id="Q#UJl]^_g/VHzM*G/a:f">
                  <field name="Severity">log</field>
                  <value name="TEXT">
                    <shadow xmlns="http://www.w3.org/1999/xhtml" type="text" id="#!NJS43!0z@}z:6~_,9(">
                      <field name="TEXT">test</field>
                    </shadow>
                    <block type="procedures_callcustomreturn" id="0E2fmQQduf4)-({z(om|">
                      <mutation name="JSON.stringify">
                        <arg name="obj"></arg>
                      </mutation>
                      <value name="ARG0">
                        <block type="variables_get" id=",^2E2eT#598hI^TvABD9">
                          <field name="VAR" id="%,uKx.``R8Wb=f]P9h`.">result</field>
                        </block>
                      </value>
                    </block>
                  </value>
                </block>
              </statement>
            </block>
          </next>
        </block>
        <block type="procedures_defcustomreturn" id="lm*.n3kQXll8o9X^*m,k" x="-412" y="13">
          <mutation statements="false">
            <arg name="obj" varid="/a.frbr+lSz-sv9itJ(m"></arg>
          </mutation>
          <field name="NAME">JSON.stringify</field>
          <field name="SCRIPT">cmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7</field>
          <comment pinned="false" h="80" w="160">Describe this function...</comment>
        </block>
      </xml>
      

      Als Ergebnis erhalte ich aus diesem Blockly den folgenden Block:

      javascript.0 (30863) script.js.Energie.Verbrauch_tabelle: {"error":null,"result":[{"Datum":"07.2.2021","Verbrauch":9.001},{"Datum":"07.2.2021","Verbrauch":10},{"Datum":"07.2.2021","Verbrauch":1},{"Datum":"07.2.2021","Verbrauch":2},{"Datum":"07.2.2021","Verbrauch":4},{"Datum":"10.2.2021","Verbrauch":44.43},{"Datum":"11.2.2021","Verbrauch":12.695},{"Datum":"12.2.2021","Verbrauch":13.905},{"Datum":"13.2.2021","Verbrauch":14.605},{"Datum":"14.2.2021","Verbrauch":14.989},{"Datum":"15.2.2021","Verbrauch":35.61},{"Datum":"16.2.2021","Verbrauch":16.162},{"Datum":"17.2.2021","Verbrauch":12.552},{"Datum":"18.2.2021","Verbrauch":11.776},{"Datum":"19.2.2021","Verbrauch":11.801},{"Datum":"20.2.2021","Verbrauch":15.435},{"Datum":"20.2.2021","Verbrauch":15.635},{"Datum":"20.2.2021","Verbrauch":16.958},{"Datum":"20.2.2021","Verbrauch":15.935},{"Datum":"20.2.2021","Verbrauch":15.735},{"Datum":"20.2.2021","Verbrauch":16.968},{"Datum":"20.2.2021","Verbrauch":15.835},{"Datum":"20.2.2021","Verbrauch":15},{"Datum":"20.2.2021","Verbrauch":15.135},{"Datum":"20.2.2021","Verbrauch":15.235},{"Datum":"20.2.2021","Verbrauch":15.335},{"Datum":"20.2.2021","Verbrauch":15.535},{"Datum":"21.2.2021","Verbrauch":14.467},{"Datum":"22.2.2021","Verbrauch":14.052},{"Datum":"23.2.2021","Verbrauch":12.648}]}
      

      Jetzt möchte mit diesem Ergebnis einen Datenpunkt
      cf9e031c-971b-44e4-ae15-a40b00290f46-image.png
      aktualisieren. Der DP ist als Objekt angelegt.
      Speichere ich den Block für result [ ... ] in diesen Datenpunkt, ist alles schick und ich kann in der VIS mittels json-table die Werte anzeigen.
      Es gelingt mir in dem Blockly nicht, diesen Datenpunkt zu aktualisieren.
      Kann mich da bitte jemand sehend machen? Vielen Dank.

      E paul53 2 Replies Last reply Reply Quote 0
      • E
        ente34 @opossum last edited by

        @opossum
        Etwa so:
        (Ich bin mir nicht sicher, ob Du das JSON.stringify benötigst, habe es mal weggelassen)

        dp.PNG

        opossum 1 Reply Last reply Reply Quote 1
        • opossum
          opossum @ente34 last edited by

          Hallo, @ente34 ,
          vielen Dank für die Antwort. Das ist es leider nicht. Der Zieldatenpunkt ist als Objekt definiert. Das JSON.stringify liefert mir ja schon im Objekt "result" die Struktur, die besteht aus "error" und "result", wenn ich das korrekt interpretiere.

          {"error":null,"result":[{"Datum":"07.2.2021","Verbrauch":4},{"Datum":"07.2.2021","Verbrauch":9.001},{"Datum":"07.2.2021","Verbrauch":10},{"Datum":"07.2.202 ...
          ]}
          

          Ich müsste aus dem Objekt result halt den Ausdruck für result [ ... ] auf das Objekt schreiben. Aber da steige ich zur Zeit leider noch aus. 🤷

          E 1 Reply Last reply Reply Quote 0
          • E
            ente34 @opossum last edited by

            @opossum
            Das ist doch dieser Block:

            dp1.PNG

            opossum 1 Reply Last reply Reply Quote 1
            • opossum
              opossum @ente34 last edited by

              Hallo, @ente34 ,

              ja, das ist auch ok, ich bekomme aber im Log eine Fehlermeldung:

              You are assigning a array to the state "0_userdata.0.Verbrauch.Strom.Taeglich_Tabelle" which expects a object. Please fix your code to use a object or change the state type to array
              

              Ich möchte aber den DP nicht ändern, da ich diesen DP in einem JSON-Table-Widget weiter verwurste.

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

                @opossum sagte: Der DP ist als Objekt angelegt ... ich kann in der VIS mittels json-table die Werte anzeigen.

                json-table erwartet ein JSON, was ein String ist - kein Objekt.
                Für JSON.stringify wird keine eigene Funktion benötigt.

                Bild_2021-02-23_173940.png

                opossum 1 Reply Last reply Reply Quote 1
                • opossum
                  opossum @paul53 last edited by opossum

                  Hallo, @paul53 und @ente34,

                  danke für Eure Hilfe. Die Formatierung des Datenpunktes war es. Ich habe den DP nun als Zeichenkette deklariert, dann den Schnipsel von @paul53 eingebaut, jetzt funktioniert es super. Vielen Dank.
                  Der Vollständigkeit halber, so sieht jetzt das Blockly aus:

                  37ea056c-6380-4385-8215-5849a2ef115f-image.png

                  Hier der Export:

                  <xml xmlns="https://developers.google.com/blockly/xml">
                    <variables>
                      <variable id="_9w^*C.,pz-_]#);pLqt">result1</variable>
                      <variable id="%,uKx.``R8Wb=f]P9h`.">result</variable>
                    </variables>
                    <block type="comment" id="GVW732OFexZ9HP[q]B3," x="-1087" y="-562">
                      <field name="COMMENT">Send query to SQL adapter</field>
                      <next>
                        <block type="sendto_custom" id="84lYloO4o+RvLszPVHZ5">
                          <mutation xmlns="http://www.w3.org/1999/xhtml" items="" with_statement="true"></mutation>
                          <field name="INSTANCE">sql.0</field>
                          <field name="COMMAND">query</field>
                          <field name="LOG">log</field>
                          <field name="WITH_STATEMENT">TRUE</field>
                          <value name="ARG0">
                            <shadow type="text" id=")faamoSD,nGPXawY4|(Z">
                              <field name="TEXT">SELECT Date_Format(FROM_UNIXTIME(Substr(TS,1,10)), '%d.%c.%Y') as Datum ,val Verbrauch FROM iobroker.ts_number where id = '159' and val &lt;&gt; '0' group by val order by Datum</field>
                            </shadow>
                          </value>
                          <statement name="STATEMENT">
                            <block type="variables_set" id="#j{ptC/1U{n|w}:y`sXg">
                              <field name="VAR" id="_9w^*C.,pz-_]#);pLqt">result1</field>
                              <value name="VALUE">
                                <block type="get_attr" id="h1hyT~m|}c4;yxvEe5ht">
                                  <value name="PATH">
                                    <shadow type="text" id="EZjX8*xOU*Em@lGGK75`">
                                      <field name="TEXT">result</field>
                                    </shadow>
                                  </value>
                                  <value name="OBJECT">
                                    <block type="variables_get" id="?P(h@_ciuiSWot]W{%ri">
                                      <field name="VAR" id="%,uKx.``R8Wb=f]P9h`.">result</field>
                                    </block>
                                  </value>
                                </block>
                              </value>
                              <next>
                                <block type="update" id="C@BG5KVmqY4_tm!bgfuV">
                                  <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                  <field name="OID">0_userdata.0.Verbrauch.Strom.Taeglich_Tabelle</field>
                                  <field name="WITH_DELAY">FALSE</field>
                                  <value name="VALUE">
                                    <block type="convert_object2json" id="Cpr{,!|mMLnNFv:v2xc)">
                                      <field name="PRETTIFY">FALSE</field>
                                      <value name="VALUE">
                                        <block type="variables_get" id="9@c3]rm1avZwA4)8XHs|">
                                          <field name="VAR" id="_9w^*C.,pz-_]#);pLqt">result1</field>
                                        </block>
                                      </value>
                                    </block>
                                  </value>
                                </block>
                              </next>
                            </block>
                          </statement>
                        </block>
                      </next>
                    </block>
                  </xml>
                  

                  opossum 1 Reply Last reply Reply Quote 0
                  • opossum
                    opossum @opossum last edited by opossum

                    Hallo,
                    ich benötige noch einmal Hilfe. Ich habe jetzt ein json-file, in das ich via o.g. Blockly die täglichen Verbräuche speichere. Dieses File lasse ich mir in meiner Vis mittels json-Widget anzeigen. Ich habe das json etwas erweitert, so dass ich eine Spalte nur mit der Monatsnummer erhalte. Ich möchte nun in der Vis nur die Datensätze anzeigen, die für den laufenden Monat vorhanden sind. Aus der SQL-Datenbank hole ich mir mit folgendem Select die Werte:

                    SELECT Date_Format(FROM_UNIXTIME(Substr(TS,1,10)), '%d.%c.%Y') as Datum ,Date_Format(FROM_UNIXTIME(Substr(TS,1,10)), '%c') as Monat,val Verbrauch FROM iobroker.ts_number where id = '159' and val <> '0' group by val order by Monat Desc, Datum
                    

                    Das file sieht so aus:

                    [{"Datum":"01.3.2021","Monat":"3","Verbrauch":14.423},{"Datum":"02.3.2021","Monat":"3","Verbrauch":14.343},{"Datum":"03.3.2021","Monat":"3","Verbrauch":11.819},{"Datum":"04.3.2021","Monat":"3","Verbrauch":13.901},{"Datum":"05.3.2021","Monat":"3","Verbrauch":13.543},{"Datum":"06.3.2021","Monat":"3","Verbrauch":13.106},{"Datum":"07.3.2021","Monat":"3","Verbrauch":13.326},{"Datum":"08.3.2021","Monat":"3","Verbrauch":13.045},{"Datum":"09.3.2021","Monat":"3","Verbrauch":12.573},{"Datum":"10.3.2021","Monat":"3","Verbrauch":12.507},{"Datum":"11.3.2021","Monat":"3","Verbrauch":11.441},{"Datum":"12.3.2021","Monat":"3","Verbrauch":14.06},{"Datum":"07.2.2021","Monat":"2","Verbrauch":4},{"Datum":"07.2.2021","Monat":"2","Verbrauch":9.001},{"Datum":"07.2.2021","Monat":"2","Verbrauch":10},{"Datum":"07.2.2021","Monat":"2","Verbrauch":1},{"Datum":"07.2.2021","Monat":"2","Verbrauch":2},{"Datum":"10.2.2021","Monat":"2","Verbrauch":44.43},{"Datum":"11.2.2021","Monat":"2","Verbrauch":12.695},{"Datum":"12.2.2021","Monat":"2","Verbrauch":13.905},{"Datum":"13.2.2021","Monat":"2","Verbrauch":14.605},{"Datum":"14.2.2021","Monat":"2","Verbrauch":14.989},{"Datum":"15.2.2021","Monat":"2","Verbrauch":35.61},{"Datum":"16.2.2021","Monat":"2","Verbrauch":16.162},{"Datum":"17.2.2021","Monat":"2","Verbrauch":12.552},{"Datum":"18.2.2021","Monat":"2","Verbrauch":11.776},{"Datum":"19.2.2021","Monat":"2","Verbrauch":11.801},{"Datum":"20.2.2021","Monat":"2","Verbrauch":15.435},{"Datum":"20.2.2021","Monat":"2","Verbrauch":16.968},{"Datum":"20.2.2021","Monat":"2","Verbrauch":15.735},{"Datum":"20.2.2021","Monat":"2","Verbrauch":15.935},{"Datum":"20.2.2021","Monat":"2","Verbrauch":15},{"Datum":"20.2.2021","Monat":"2","Verbrauch":15.835},{"Datum":"20.2.2021","Monat":"2","Verbrauch":15.235},{"Datum":"20.2.2021","Monat":"2","Verbrauch":15.135},{"Datum":"20.2.2021","Monat":"2","Verbrauch":15.535},{"Datum":"20.2.2021","Monat":"2","Verbrauch":15.335},{"Datum":"20.2.2021","Monat":"2","Verbrauch":16.958},{"Datum":"20.2.2021","Monat":"2","Verbrauch":15.635},{"Datum":"21.2.2021","Monat":"2","Verbrauch":14.467},{"Datum":"22.2.2021","Monat":"2","Verbrauch":14.052},{"Datum":"23.2.2021","Monat":"2","Verbrauch":12.648},{"Datum":"24.2.2021","Monat":"2","Verbrauch":12.135},{"Datum":"24.2.2021","Monat":"2","Verbrauch":12.003},{"Datum":"25.2.2021","Monat":"2","Verbrauch":12.369},{"Datum":"26.2.2021","Monat":"2","Verbrauch":48.003},{"Datum":"27.2.2021","Monat":"2","Verbrauch":12.12},{"Datum":"28.2.2021","Monat":"2","Verbrauch":13.628}]
                    


                    Das Ergebnis in der Vis sieht dann wie folgt aus:

                    38bab1ba-b919-4599-beef-d29a57750f15-image.png

                    Nun möchte ich, dass mir im Monat März nur die Datensätze des laufenden Monats angezeigt werden, zum Beispiel in Abhängigkeit vom Tagesdatum, wo man dann die Monatsnummer vergleichen kann. Eventuell geht ja auch was schon im Select, eventuell über ein Unterselect? Im json würden auch die Datensätze des lfd. Monats reichen. Das file wird täglich um 00:30 Uhr aktualisiert. Wäre schön, wenn Ihr mir da mal behilflich sein könntet, wenn es bei Euch zeitlich passt. Vielen Dank.

                    Der Ausreisser am 26.02.2021 ist der Tesla, der am Strom genuckelt hat 😁

                    opossum 1 Reply Last reply Reply Quote 0
                    • opossum
                      opossum @opossum last edited by opossum

                      Hallo,

                      ich mache das jetzt über das SQL-Statement:

                      SELECT Date_Format(FROM_UNIXTIME(Substr(TS,1,10)), '%d.%c.%Y') as Datum ,Date_Format(FROM_UNIXTIME(Substr(TS,1,10)), '%m') as Monat,val Verbrauch FROM iobroker.ts_number where id = '159' and val <> '0' AND Date_Format(FROM_UNIXTIME(Substr(TS,1,10)), '%m') = (SELECT MONTH(CURRENT_DATE())) group by val order by Monat Desc, Datum
                      

                      Das klappt jetzt. Im json sind nur noch die Werte des aktuellen Monats.

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      851
                      Online

                      31.9k
                      Users

                      80.2k
                      Topics

                      1.3m
                      Posts

                      3
                      9
                      1237
                      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