Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. täglich neu erstelltes Array mit Tagesinfos einer PV Anlage

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    täglich neu erstelltes Array mit Tagesinfos einer PV Anlage

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

      @maddm Ich würde keine Objekte A-G nehmen, sondern ein einfaches Array mit Objekten.

      Über den Index kannst Du auf die einzelnen Objekte zugreifen:

      var oRueckblick = [
          {
              "Datum":"16.07.23",
              "Ertrag":"40,4 kWh",
              "Einspeisung":"32,1 kWh",
              "Ladung":"3,6 kWh",
              "Deckung PV":"4,7 kWh",
              "Deckung Batterie":"1,6 kWh",
              "Deckung Netz":"0,2 kWh",
              "Gesamtverbrauch":"6,5 kWh"
          },
          {
              "Datum":"15.07.23",
              "Ertrag":"29,8 kWh",
              "Einspeisung":"23,0 kWh",
              "Ladung":"3,1 kWh",
              "Deckung PV":"3,7 kWh",
              "Deckung Batterie":"3,5 kWh",
              "Deckung Netz":"0,6 kWh",
              "Gesamtverbrauch":"7,8 kWh"
          },
          {},
          {},
          {},
          {},
          {}
      ]
      
      

      mit

      oRueckblick.shift();
      oRueckblick.push(newObj);
      

      mit shift - entfernst Du das erste Objekt mit push hängst Du ein neues dran. 😉

      Tabellen ARBEITEN grundsätzlich mit Arrays, die Objekte enthalten. Ein Arrayentrag entspricht einer Zeile, in den Objekten wird die Zuordnung zu den Spalten festgelegt.

      M 1 Reply Last reply Reply Quote 0
      • M
        Maddm @mickym last edited by

        @mickym
        Ok, Array of Objects statt Object macht Sinn, dann kann man mit Push + Shift einfach Objekte hinzufügen oder entfernen.
        Wobei statt shift (=Löschen erstes Element) eher pop (Löschen letztes Element) Sinn macht, ebenso fürs Hinzufügen eines neuen "ersten" Elements: unshift statt push.

        Meinst Du, dass das mit Blockly lösbar ist, oder schreibt man da nicht einfacher ein Script? Das habe ich bisher halt noch überhaupt nicht gemacht und ich kenne die ganzen iobroker-Spezifika nicht:
        (1) triggern um 23:59
        (2) lesen des aktuellen Datenpunkts (Array of objects)
        (3) dann löschen des letzten Elements im Array mit pop
        (4) Erstellung des Tages-Objekts und im Array an Position mit ushift
        (5) zurückschreiben des modifizierten Arrays

        Wie ich das Ganze dann in vis darstelle, da hab ich noch nicht geschaut, welches Widget dafür das Geeignete ist.

        mickym 1 Reply Last reply Reply Quote 0
        • mickym
          mickym Most Active @Maddm last edited by mickym

          @maddm Das dürfte gehen.

          42cc9e23-2763-4d6c-af95-a0e95fd9518c-image.png

          Und auch wenn Blockly nicht gut mit Objekten umgehen kann, kannst Du Arrays mit Blockly bearbeiten.

          Da ich kein Puzzle-Freund bin - musst Du selbst suchen - ansonsten würde ich halt mit JSONATA arbeiten. 😉

          M 1 Reply Last reply Reply Quote 0
          • M
            Maddm @mickym last edited by

            Ok, ich bin ein ganzes Stück weiter und glaube, dass das Blockly Script in Summe "fast" funktioniert.
            So sieht es aktuell aus (ist aktuell auf "alle 5 Minuten" zum Probieren gesetzt):
            4546cdf4-a905-49f4-9495-fe028687994c-image.png

            Der Output entspricht durchaus dem, wie ich es erwartet habe, allerdings kann das von @mickym genannte Widget die Daten noch nicht sauber als Tabelle darstellen. So sieht es aus, wenn ich nur die Objekt ID im Widget angebe:
            291deabe-2a37-40cb-a778-a4de15d1a657-image.png

            Gebe ich aber in den Eigenschaften den ersten Spaltenkopf an:
            dfdd4c4a-8865-42a9-820c-cfa727536dfb-image.png
            sieht es dann leider so aus:
            808a80db-1b4e-45fa-8468-2cba13e9830b-image.png

            Meine Vermutung ist, dass ich zu viele Hochkommas bei den Einträgen mache und dass damit das Ganze scheitert... wenn ich in den Datenpunkten drüber hovere sehe ich auch sehr viele escapte Hochkommas etc...
            fff12966-52ee-4274-82f9-1d8a75bd2e16-image.png

            Sieht jemand, wo ich noch nen Fehler mache?

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

              @maddm
              Vorschlag: Wandle das JSON in ein Objekt und arbeite mit Listen-Funktionen. Zum Schluss Wandlung der Liste in eine JSON-Liste.

              Blockly_temp.JPG

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

                Danke @paul53 , die Idee gefällt mir - da spare ich mir eine der Variablen (alteListe).

                Ich habs jetzt mal wie du gezeigt hast nachgebaut:
                9df81752-ce86-4995-85c4-0c399e8a4790-image.png
                aber im Datenpunkt (angelegt als Datenpunkt, Typ json) abgespeichert sind nur leere Objekte:
                0b9a9fff-d0ec-4107-983a-37372b4084b8-image.png
                Was aber geht: der Datenpunkt hat nie mehr als 7 Objekte.

                Das Log zeigt folgenden Output an:

                
                19:53:16.856	info	javascript.0 (1447) Stop script script.js.PV.PVRueckblick
                19:53:16.860	info	javascript.0 (1447) Start javascript script.js.PV.PVRueckblick
                19:53:16.873	info	javascript.0 (1447) script.js.PV.PVRueckblick: getState(id=0_userdata.0.PV.Rueckblick.pvrueckblick, timerId=undefined) => {"val":"[{},{},{},{},{},{},{}]","ack":true,"ts":1689616361712,"q":0,"c":"script.js.PV.PVRueckblick","from":"system.adapter.javascript.0","user":"system.user.admin","lc":1689616232866}
                19:53:16.873	info	javascript.0 (1447) script.js.PV.PVRueckblick: konvertierte neue Liste: [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]7
                19:53:16.873	info	javascript.0 (1447) script.js.PV.PVRueckblick: getState(id=modbus.0.inputRegisters.13001_Daily_PV_Generation, timerId=undefined) => {"val":43.4,"ack":true,"ts":1689616330375,"q":0,"from":"system.adapter.modbus.0","user":"system.user.admin","lc":1689616330375}
                19:53:16.873	info	javascript.0 (1447) script.js.PV.PVRueckblick: getState(id=modbus.0.inputRegisters.13004_Daily_export__energy_from_PV, timerId=undefined) => {"val":30.4,"ack":true,"ts":1689614099904,"q":0,"from":"system.adapter.modbus.0","user":"system.user.admin","lc":1689614099904}
                19:53:16.874	info	javascript.0 (1447) script.js.PV.PVRueckblick: getState(id=modbus.0.inputRegisters.13039_Daily_Charge_Energy, timerId=undefined) => {"val":5.6,"ack":true,"ts":1689604060863,"q":0,"from":"system.adapter.modbus.0","user":"system.user.admin","lc":1689604060863}
                19:53:16.874	info	javascript.0 (1447) script.js.PV.PVRueckblick: getState(id=modbus.0.inputRegisters.13016_Daily_direct__Energy_Consumption, timerId=undefined) => {"val":7.4,"ack":true,"ts":1689616330380,"q":0,"from":"system.adapter.modbus.0","user":"system.user.admin","lc":1689616330380}
                19:53:16.874	info	javascript.0 (1447) script.js.PV.PVRueckblick: getState(id=modbus.0.inputRegisters.13025_Daily_battery_discharge_Energy, timerId=undefined) => {"val":3.3,"ack":true,"ts":1689615277304,"q":0,"from":"system.adapter.modbus.0","user":"system.user.admin","lc":1689615277304}
                19:53:16.874	info	javascript.0 (1447) script.js.PV.PVRueckblick: getState(id=modbus.0.inputRegisters.13035_Daily_Import_Energy, timerId=undefined) => {"val":0.2,"ack":true,"ts":1689575875353,"q":0,"from":"system.adapter.modbus.0","user":"system.user.admin","lc":1689575875353}
                19:53:16.874	info	javascript.0 (1447) script.js.PV.PVRueckblick: getState(id=0_userdata.0.PV.Rueckblick.hausverbrauch, timerId=undefined) => {"val":10.9,"ack":true,"ts":1689616330388,"q":0,"c":"script.js.PV.Hausverbrauch","from":"system.adapter.javascript.0","user":"system.user.admin","lc":1689616330388}
                19:53:16.874	info	javascript.0 (1447) script.js.PV.PVRueckblick: aktueller Tag: [object Object]
                19:53:16.874	info	javascript.0 (1447) script.js.PV.PVRueckblick: neue Liste: [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]7
                19:53:16.874	info	javascript.0 (1447) script.js.PV.PVRueckblick: setForeignState(id=0_userdata.0.PV.Rueckblick.pvrueckblick, state={"val":"[{},{},{},{},{},{},{}]","ack":true,"ts":1689616396874,"q":0,"from":"system.adapter.javascript.0","lc":1689616232866,"c":"script.js.PV.PVRueckblick"})
                19:53:16.874	info	javascript.0 (1447) script.js.PV.PVRueckblick: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                
                

                Hinweis
                Da ich nicht weiß, wie der offiziell richtige Weg ist: da sich hier Blockly als tauglich erwiesen hat, wäre es schön, wenn ein Moderator den Thread ins Unterforum von Blockly schieben könnte.

                paul53 2 Replies Last reply Reply Quote 0
                • paul53
                  paul53 @Maddm last edited by

                  @maddm sagte: im Datenpunkt (angelegt als Datenpunkt, Typ json) abgespeichert sind nur leere Objekte:

                  Wenn man die Liste aus dem Datenpunkt erstellt, muss der Datenpunkt eine gültige JSON-Liste enthalten, was wahrscheinlich nicht der Fall ist. Deshalb lösche den Inhalt vom Datenpunkt und fange mit einer leeren Liste an.

                  Blockly_temp.JPG

                  Blockly_temp.JPG
                  Du verwendest "erstelle Text aus" mit einem Objekt. Das funktioniert nicht [object Object]. Man kann entweder nur das blanke Objekt ausgeben oder man muss das Objekt in ein JSON wandeln.

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

                    @maddm sagte: nur leere Objekte:

                    Habe es mal getestet: Das Problem ist, dass das Datum nicht JSON-konform eingetragen wird. So funktioniert es:

                    Blockly_temp.JPG

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

                      @paul53 said in täglich neu erstelltes Array mit Tagesinfos einer PV Anlage:

                      @maddm sagte: nur leere Objekte:

                      Habe es mal getestet: Das Problem ist, dass das Datum nicht JSON-konform eingetragen wird. So funktioniert es:

                      Blockly_temp.JPG

                      Richtig, das war der Fehler - ich muss auch die Werte in Hochkommas setzten, jetzt passt es und sieht auch in Summe schön aus.
                      Danke für alle die geholfen haben 🙂

                      3b3ae106-c3d8-42f5-9d45-3c255a59e629-image.png

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

                        @maddm sagte: ich muss auch die Werte in Hochkommas setzten

                        Wenn es Zahlen sind, ist es nicht nötig.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        790
                        Online

                        31.7k
                        Users

                        79.8k
                        Topics

                        1.3m
                        Posts

                        blockly
                        3
                        11
                        381
                        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