Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [gelöst] Json mit Unterwerten in Datenpunkt schreiben

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    1.6k

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    672

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    1.2k

[gelöst] Json mit Unterwerten in Datenpunkt schreiben

Geplant Angeheftet Gesperrt Verschoben JavaScript
8 Beiträge 3 Kommentatoren 707 Aufrufe 2 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • R Offline
    R Offline
    Ralf 8
    schrieb am zuletzt editiert von Ralf 8
    #1

    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 paul53P 2 Antworten Letzte Antwort
    0
    • R 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 Online
      M Online
      MCU
      schrieb am zuletzt editiert von
      #2

      @ralf-8

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

      NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
      Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

      1 Antwort Letzte Antwort
      0
      • R 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.

        paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von paul53
        #3

        @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?

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: Asus PN 42 / N100 / 8 GB / 500 GB

        R 1 Antwort Letzte Antwort
        0
        • paul53P 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 Offline
          R Offline
          Ralf 8
          schrieb am zuletzt editiert von Ralf 8
          #4

          @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 Antwort Letzte Antwort
          0
          • R Offline
            R Offline
            Ralf 8
            schrieb am zuletzt editiert von Ralf 8
            #5

            @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 paul53P 2 Antworten Letzte Antwort
            0
            • R 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 Online
              M Online
              MCU
              schrieb am zuletzt editiert von
              #6

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

              NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
              Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

              1 Antwort Letzte Antwort
              0
              • R 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  }
                  ]
                }
                
                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #7

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

                Dort fehlen die Kommata zwischen den Objekten.

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: Asus PN 42 / N100 / 8 GB / 500 GB

                R 1 Antwort Letzte Antwort
                0
                • paul53P paul53

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

                  Dort fehlen die Kommata zwischen den Objekten.

                  R Offline
                  R Offline
                  Ralf 8
                  schrieb am zuletzt editiert von
                  #8

                  @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 Antwort Letzte Antwort
                  0

                  Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                  Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                  Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                  Registrieren Anmelden
                  Antworten
                  • In einem neuen Thema antworten
                  Anmelden zum Antworten
                  • Älteste zuerst
                  • Neuste zuerst
                  • Meiste Stimmen


                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  503

                  Online

                  32.9k

                  Benutzer

                  83.0k

                  Themen

                  1.3m

                  Beiträge
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                  ioBroker Community 2014-2025
                  logo
                  • Anmelden

                  • Du hast noch kein Konto? Registrieren

                  • Anmelden oder registrieren, um zu suchen
                  • Erster Beitrag
                    Letzter Beitrag
                  0
                  • Home
                  • Aktuell
                  • Tags
                  • Ungelesen 0
                  • Kategorien
                  • Unreplied
                  • Beliebt
                  • GitHub
                  • Docu
                  • Hilfe