NEWS
JSON Datensätze verbinden
-
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 -
@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.
-
@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}]']
-
@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:
- Stellst Du die Quell-Datenpunkte auf die Rolle
object
- Sorgst dafür, dass nur ein Objekt als Wert enthalten ist. Also keine eckigen Klammern irgendwo
- Arbeitest dann mit deinem bisherigen Code