NEWS
[gelöst] Hilfe bei der Verwendung von JSON
-
Hallo zusammen,
ich habe mir für die Übersicht meiner Shellys ein kurzes Skript geschrieben, dass die Infos aus dem Shelly-Adapter in DPs schreibt, die ich dann in meiner VIS anzeigen kann:
Kleiner Auszug:
Skript:
Jetzt geht es ein Bisschen tiefer in javascript, wobei ich Hilfe benötige.
Da die Geräte im Shelly-Adapter nach der Seriennummer sortiert sind, wollte ich jetzt einen kurzen Zwischenschritt über ein JSON Array machen, um die Geräte zu sortieren (nach Name oder IP oder ...).
Frage 1: Wie füge ich die Daten in ein bestehendes JSON hinzu?
Mein Versuch funzt leider nicht, da "push" nicht erkannt wird:Frage 2: Wie kann ich die Daten im JSON sortieren?
Per VIS möchte ich das Attribut zur Sortierung auswählen. Daher steht im DP "0_userdata.0.shelly-devices.Sortierung" ein Wert 0 bis X, worüber das Attribut ausgewählt werden sollBeispiel: 0 = Name, somit sollen die Werte nach dem Attribut "Device-Name" sortiert werden
Wenn die Werte sortiert sind, werden die einzelnen Attribute aus dem JSON in den jeweiligen DP geschrieben:
Vielen Dank schon einmal
-
Zu 1)
die richtige form wärelet json = []; json.push({"Device-Name": geraetename, "Uptime": uptime, "Status": status, "Version": version, "IP": ip, "Gereat": gereat, "Power": power, "Update": update};
So wie du es aufgeschrieben hast würdest du direkt ein Array mit einem Objekt definieren, aber ohne das Push.
Push wäre hier ein property des Objekts json was aber nicht gibt, Da ja oben abgefragt wird ob null oder undefined
Das Komma nach der letzten geschweiften Klammer würde ebenfalls noch zu einem Fehler führen.Zu 2)
https://www.javascripttutorial.net/array/javascript-sort-an-array-of-objects/ -
@oliverio die Sortierung vernachlässige ich erst einmal noch.
Aktuell macht die Schleife zur Erstellung / zum Schreiben der DPs Probleme, weil sie die Variable json nicht finden kann
Skript
Error:
EDIT:
Fehler gefunden:
Das
let json = [];
muss nach oben an den Anfang. Jetzt wird auch die Schleife abgearbeitet
-
@oliverio ich habe jetzt mit der Sortierung angefangen:
console.log("Test Sortierung"); json.forEach((e) => { console.log(`${e.DeviceName}`); });
Ergebnis:
javascript.1 2022-07-25 11:32:20.009 info script.js.java.abfragen.shelly_infos_neu: Shelly-1-Plus-Test javascript.1 2022-07-25 11:32:20.009 info script.js.java.abfragen.shelly_infos_neu: RA_SZ_Front javascript.1 2022-07-25 11:32:20.009 info script.js.java.abfragen.shelly_infos_neu: RA_KZ_Front javascript.1 2022-07-25 11:32:20.009 info script.js.java.abfragen.shelly_infos_neu: LS_BZ_Lichtschalter javascript.1 2022-07-25 11:32:20.009 info script.js.java.abfragen.shelly_infos_neu: HA_GA_Ventil-5 javascript.1 2022-07-25 11:32:20.009 info script.js.java.abfragen.shelly_infos_neu: SD_GA_Poolthermometer javascript.1 2022-07-25 11:32:20.009 info script.js.java.abfragen.shelly_infos_neu: Shelly1-Test javascript.1 2022-07-25 11:32:20.009 info script.js.java.abfragen.shelly_infos_neu: LS_BR_Deckenlampe javascript.1 2022-07-25 11:32:20.009 info script.js.java.abfragen.shelly_infos_neu: LS_AZ_Lichtschalter javascript.1 2022-07-25 11:32:20.009 info script.js.java.abfragen.shelly_infos_neu: LA_BR_3D-Drucker javascript.1 2022-07-25 11:32:20.009 info script.js.java.abfragen.shelly_infos_neu: SD_BR_Ladegereat javascript.1 2022-07-25 11:32:20.009 info script.js.java.abfragen.shelly_infos_neu: SD_BR_PCs javascript.1 2022-07-25 11:32:20.009 info script.js.java.abfragen.shelly_infos_neu: SD_BR_Monitore javascript.1 2022-07-25 11:32:20.009 info script.js.java.abfragen.shelly_infos_neu: SD_BR_ESX-NUC javascript.1 2022-07-25 11:32:20.009 info script.js.java.abfragen.shelly_infos_neu: SD_FL_Lichterkette javascript.1 2022-07-25 11:32:20.009 info script.js.java.abfragen.shelly_infos_neu: SD_SZ_Kommode javascript.1 2022-07-25 11:32:20.009 info script.js.java.abfragen.shelly_infos_neu: SD_BR_3D-Drucker
-
@kuddel
schade, du hast dir den link nicht durchgelesen. Nicht mit forEach, geht zwar auch ist aber
aufwändigerjson.sort((a, b) => { return a.name.localeCompare(b.name)); });
als anfänger erst mal alle befehle in der referenz nachlesen
mdn hat viele Beschreibungen auch auf deutsch
https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
bei google einfachmdn <javascriptbefehl>
eingeben
noch ein Tip, nenne die variable nicht json, da sie ggfs. mit dem eingebauten Befehlsobjekt
JSON kollidieren könnte. -
@oliverio vielen Dank für deine Hilfe.
Habe es jetzt genau so hinbekommen, wie ich wollte
-
@oliverio sagte: nenne die variable nicht json
Sie enthält auch kein JSON, sondern ein Array.
-
Eine Frage habe ich dann doch noch:
Aktuell läuft das Skript ja alle 10 Sekunden.
Wie bekomme ich es hin, dass es zusätzlich zum schedule auch ausgeführt wird, wenn es gestartet wird und wenn der DP zur Sortierung sich ändert?
EDIT:
Habe es schon selber hinbekommen.
Das ganze Skript in eine Funktion, die dann aufgerufen wird