Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Json mit Unterwerten in Datenpunkt schreiben

    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 mit Unterwerten in Datenpunkt schreiben

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

      Hallo,

      ich versuche einen etwas komplizierteren Json in einen Datenpunkt zu schreiben
      (und wieder einzulesen. Soweit bin ich aber noch gar nicht gekommen).

      Hier topic/14699 wird gezeigt wie es mit einem Array geht. Ich glaube mein Problem ist ähnlich, ich komme aber nicht weiter.

      Immer wenn mein Ecoflow Delta mal wieder offline geht, soll die Uhrzeit und Dauer so geloggt werden. Das können natürlich ganz unterschiedliche Anzahl von Werte-Paaren sein:

      Ist offlineData ein Array ?. Ich behandle es aktuell wie einen String.

      Der ganze Json soll so aussehen.
      Mit den Klammern [] bin ich mir nicht sicher:

      {
        "pro3em_total_act": 251258.62,
        "pro3em_total_act_return": 251258.62,
        "delta-2-max-offline": [
             {"time":"14.08.2024, 17:16","minute":5},
             {"time":"15.08.2024, 07:59","minute":3},
             {"time":"16.08.2024, 21:01","minute":13},
        ]
      }
      

      Offline-Daten in Variable zwischenspeichern:

      var offlineData = "";
      var offlineTimeAsString = "";
      var offlineMinutes = "";
      offlineTimeAsString = new Intl.DateTimeFormat( "de-DE", { dateStyle: 'medium', timeStyle: 'short' }).format(new Date(offlineTime));
      offlineData = offlineData + ',' + ({'time': offlineTimeAsString, 'minute': offlineMinutes });            
      
      

      Den Datenpunkt einmal am Tag mit Werten füllen:

      var json_data = ('pro3em_total_act':        obj.total_act_ret,
                     'pro3em_total_act_return': obj.total_act_ret,
                     'delta-2-max-offline':   offlineData
          });
      
                     
          createState(id, JSON.stringify(data), {
              name: id,
              role: 'state',
              type: 'string',
              'read': true,
              'write': true
          },  true );
      

      Das Ergebnis sieht leider so aus:

      {
        "pro3em_total_act": 251258.62,
        "pro3em_total_act_return": 251258.62,
        "delta-2-max-offline": "[\"\"]"
      }
      

      Für eure Hilfe bin ich dankbar.

      M paul53 2 Replies Last reply Reply Quote 0
      • M
        MCU @Ralf 8 last edited by

        @ralf-8

        let offlineData = [];
        ...
        offlineData.push({'time': offlineTimeAsString, 'minute': offlineMinutes })
        
        
        1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @Ralf 8 last edited by paul53

          @ralf-8 sagte: Den Datenpunkt einmal am Tag mit Werten füllen:

          Wenn der Datenpunkt einmal erstellt wurde, schreibt man ihn nicht mit createState(), sondern mit setState().
          Damit das Objekt einen Skriptstart übersteht, schreibt man das Objekt bei jeder Änderung in den Datenpunkt und man liest diesen Datenpunkt beim Skriptstart wieder ein.

          Was beinhalten diese zwei Attribute?

            "pro3em_total_act": 251258.62,
            "pro3em_total_act_return": 251258.62,
          

          EDIT: Soll das Array mit den Offlinezeiten und -dauern unendlich groß oder begrenzt werden?

          R 1 Reply Last reply Reply Quote 0
          • R
            Ralf 8 @paul53 last edited by Ralf 8

            @paul53
            Hallo,
            die zwei Werte sind Energiedaten aus dem Shelly Pro 3 EM in Watt für Einspeisung und Netzbezug von Strom (kleine PV-Anlage).

            Ich speichere noch weitere Einzelwerte, wollte das aber nicht unnötig komplizieren.

            Der Unterschied von createState und setState ist mir klar. Tatsächlich wird jeden Tag um 06:00 Uhr aber ein neuer Datenpunkt erstellt, so dass ich eine History meiner Energiedaten bekomme.

            1 Reply Last reply Reply Quote 0
            • R
              Ralf 8 last edited by Ralf 8

              @mcu

              Vielen Dank, das war tatsächlich die Lösung:

              @mcu sagte in Json mit Unterwerten in Datenpunkt schreiben und lesen:

              @ralf-8

              let offlineData = [];
              ...
              offlineData.push({'time': offlineTimeAsString, 'minute': offlineMinutes })
              
              

              Hat man Einfluss auf die Darstellung beim Anzeigen der Werte im Datenpunkt?
              Mit role und string (bei createState) habe ich herumexperimentiert, aber keine bessere Darstellung gefunden.

              Aktuell wird es so dargestellt wie der erste Unterwert
              Am liebsten hätte ich die Unterwerte aber in einer Zeile so wie die 4 gleichen Zeilen unten.

              {
                "delta-2-max-offline": [
                  {
                    "time": "16.08.2024, 19:45",
                    "minute": 5
                  },
                  { "time": "16.08.2024, 19:45", "minute": 5  },
                  { "time": "16.08.2024, 19:45", "minute": 5  },
                  { "time": "16.08.2024, 19:45", "minute": 5  },
                  { "time": "16.08.2024, 19:45", "minute": 5  }
                ]
              }
              
              M paul53 2 Replies Last reply Reply Quote 0
              • M
                MCU @Ralf 8 last edited by

                @ralf-8 Das geht nicht, ist im Admin festgelegt.

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

                  @ralf-8 sagte: so wie die 4 gleichen Zeilen unten.

                  Dort fehlen die Kommata zwischen den Objekten.

                  R 1 Reply Last reply Reply Quote 0
                  • R
                    Ralf 8 @paul53 last edited by

                    @paul53
                    habe ich korrigiert. Ich wollte nur kurz zeigen, wie ich es meine.
                    Anscheinend ist die Darstellung tatsächlich festgelegt entweder so oder als fortlaufender Text.

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    945
                    Online

                    31.8k
                    Users

                    80.0k
                    Topics

                    1.3m
                    Posts

                    3
                    8
                    291
                    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