Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. JSON Datensätze verbinden

    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

    JSON Datensätze verbinden

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

      Hallo zusammen,

      ich nutze das Wetterstationsscript von @SBorg um Daten meiner Wetterstation in ioBroker zu bekommen.
      Ich habe gerad mal wieder eine kreative Phase um alles etwas schöner in VIS darzustellen.
      Bei einem Thema benötige ich mal eure Hilfe.
      Durch das Script werden für jeden Monat die wichtigsten Daten in einem Datenpunkt abgelegt. Dieser sieht wie folgt aus:

      [
        {
          "Tiefstwert": 5.27,
          "Hoechstwert": 33,
          "Temp_Durchschnitt": 18.79,
          "Max_Windboe": 21.88,
          "Max_Regenmenge": 8.1,
          "Regenmenge_Monat": 31.2,
          "warme_Tage": 22,
          "Sommertage": 14,
          "heisse_Tage": 2,
          "Frost_Tage": 0,
          "kalte_Tage": 0,
          "Eistage": 0,
          "sehr_kalte_Tage": 0
        }
      ]
      

      Ich würde diese Datenpunkte jetzt gerne zu einem großen JSON zusammen bauen, damit ich ein großes JSON File habe und dieses dann in einem Tabellen Widget nutzen kann.

      Leider bekomme ich das nicht wirklich hin.
      Hat jemand eine Idee wie ich das in einem Script erledigen kann?

      Gruß
      Michael

      haus-automatisierung 1 Reply Last reply Reply Quote 0
      • haus-automatisierung
        haus-automatisierung Developer Most Active @mctom last edited by

        @mctom sagte in JSON Datensätze verbinden:

        Hat jemand eine Idee wie ich das in einem Script erledigen kann?

        Klar, Du hast ja ein Array aus Objekten. Du musst einfach nur ein weiteres Element an dein Array packen. Also lesen, Array Element (als Objekt) hinzufügen, speichern.

        Jetzt wäre es etwas sinnfrei, Dir ein Beispiel-Script zu schreiben ohne die Datenpunkte usw. zu kennen. Zeig doch mal woher die Daten kommen sollen und wohin sie geschrieben werden müssen. Dann ist das einfacher als wenn Du am Ende ein Beispiel übertragen musst.

        M 1 Reply Last reply Reply Quote 0
        • M
          mctom @haus-automatisierung last edited by

          @haus-automatisierung
          Danke für deine Hilfe.
          Ich habe jetzt folgendes Script erstellt:

           function arrayzusammen(){
          
              let daten1 = getState('0_userdata.0.wetter.wetterstation.statistik.Data.2023.04').val
              let daten2 = getState('0_userdata.0.wetter.wetterstation.statistik.Data.2023.05').val
          
              let myArray=[]
               myArray.push(daten1)
               myArray.push(daten2)
           log(myArray)
          
          
           }
           
          
           arrayzusammen()
          

          Das Problem hierbei ist, dass der 2.Datenpunkt falsch / mehrfach im Array hinzugefügt wird:

          script.js.Klima.wetterstation.tabelle_wetterstation_2: [[{'Tiefstwert':-0.8,'Hoechstwert':22,'Temp_Durchschnitt':8.68,'Max_Windboee':29.51,'Max_Regenmenge':0,'Regenmenge_Monat':0,'warme_Tage':2,'Sommertage':0,'heisse_Tage':0,'Frost_Tage':1,'kalte_Tage':0,'Eistage':0,'sehr_kalte_Tage':0,'Wuestentage':0,'Tropennaechte':0,'Regentage':0},'[{\'Tiefstwert\':4,\'Hoechstwert\':27,\'Temp_Durchschnitt\':15.75,\'Max_Windboee\':23.75,\'Max_Regenmenge\':15.011,\'Regenmenge_Monat\':55.86,\'warme_Tage\':19,\'Sommertage\':3,\'heisse_Tage\':0,\'Frost_Tage\':0,\'kalte_Tage\':0,\'Eistage\':0,\'sehr_kalte_Tage\':0,\'Wuestentage\':0,\'Tropennaechte\':0,\'Regentage\':24}]','[{\'Tiefstwert\':4,\'Hoechstwert\':27,\'Temp_Durchschnitt\':15.75,\'Max_Windboee\':23.75,\'Max_Regenmenge\':15.011,\'Regenmenge_Monat\':55.86,\'warme_Tage\':19,\'Sommertage\':3,\'heisse_Tage\':0,\'Frost_Tage\':0,\'kalte_Tage\':0,\'Eistage\':0,\'sehr_kalte_Tage\':0,\'Wuestentage\':0,\'Tropennaechte\':0,\'Regentage\':24}]','[{\'Tiefstwert\':4,\'Hoechstwert\':27,\'Temp_Durchschnitt\':15.75,\'Max_Windboee\':23.75,\'Max_Regenmenge\':15.011,\'Regenmenge_Monat\':55.86,\'warme_Tage\':19,\'Sommertage\':3,\'heisse_Tage\':0,\'Frost_Tage\':0,\'kalte_Tage\':0,\'Eistage\':0,\'sehr_kalte_Tage\':0,\'Wuestentage\':0,\'Tropennaechte\':0,\'Regentage\':24}]'],'[{\'Tiefstwert\':4,\'Hoechstwert\':27,\'Temp_Durchschnitt\':15.75,\'Max_Windboee\':23.75,\'Max_Regenmenge\':15.011,\'Regenmenge_Monat\':55.86,\'warme_Tage\':19,\'Sommertage\':3,\'heisse_Tage\':0,\'Frost_Tage\':0,\'kalte_Tage\':0,\'Eistage\':0,\'sehr_kalte_Tage\':0,\'Wuestentage\':0,\'Tropennaechte\':0,\'Regentage\':24}]']
          
          haus-automatisierung 1 Reply Last reply Reply Quote 0
          • haus-automatisierung
            haus-automatisierung Developer Most Active @mctom last edited by haus-automatisierung

            @mctom Welche Rolle haben denn die beiden Datenpunkte? Wenn die Rolle Objekt oder Array ist, dann wird automatisch ein JSON.parse durchgeführt (das scheint bei 2023.04 zu klappen). Der zweite Wert liefert allerdings einen JSON-String zurück und kein Objekt/Array. Dadurch wird alles escaped und landet als String im Array. Also:

            • Rollen der Datenpunkte kontrollieren und ggf. korrigieren
            • Je nach Rolle ist ggf. ein JSON.parse() nach dem Lesen nötig
            • Dein Problem ist aktuell, dass in den Datenpunkten schon jeweils ein Array mit nur einem Eintrag zurückkommt. Also
            [
              {
                ...
              }
            ]
            

            Daher müsstest Du mit concat arbeiten, um die Array zu verbinden. Oder dafür sorgen, dass in den anderen Datenpunkten nur ein Objekt steht (wozu das Array?).

            Idealerweise:

            1. Stellst Du die Quell-Datenpunkte auf die Rolle object
            2. Sorgst dafür, dass nur ein Objekt als Wert enthalten ist. Also keine eckigen Klammern irgendwo
            3. Arbeitest dann mit deinem bisherigen Code
            1 Reply Last reply Reply Quote 0
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate

            879
            Online

            31.8k
            Users

            80.0k
            Topics

            1.3m
            Posts

            2
            4
            183
            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