NEWS
FLOT - Voreinstellungen sortieren
-
Ich hab mir für diesen Zweck ein kleines Script geschrieben, welches jede Nacht die Objekte unter flot.0 nach javascript.0 verschiebt, sortiert und dann wieder zurück schiebt. In der Javascript-Instanz muss dafür "setObject" und "exec" erlaubt sein.
In der Theorie würde es übrigens auch reichen, wenn man die Reihenfolge direkt in der object.json ändert. Dafür sind aber leider meine Linux-Json-Kenntnisse zu schwach.
Gruß
sten-torvar Liste, timeout, bakID, ID; var flotbackup = 'javascript.0.flotbackup.'; schedule("0 4 * * *", async function () { exec('egrep -o \'_id\":\"(flot.0.[^\"]*)\' /opt/iobroker/iobroker-data/objects.json | egrep -o \'[^\"]*$\'', async function (error, result, stderr) { Liste = result.split("\n"); Liste.pop(); Liste = Liste.sort(); // Liste sortieren // Objekte verschieben in den Backup-Ordner Liste.forEach(function(item) { bakID = flotbackup + item; //console.log(item + ' -> ' + bakID); setObject(bakID,getObject(item)); deleteObject(item); }); // Objekte zurück verschieben timeout = setTimeout(async function () { Liste.forEach(function(item) { bakID = flotbackup + item; //console.log(bakID + ' -> ' + item); setObject(item,getObject(bakID)); deleteObject(bakID); }); }, 3000); }); }); -
Ich hab mir für diesen Zweck ein kleines Script geschrieben, welches jede Nacht die Objekte unter flot.0 nach javascript.0 verschiebt, sortiert und dann wieder zurück schiebt. In der Javascript-Instanz muss dafür "setObject" und "exec" erlaubt sein.
In der Theorie würde es übrigens auch reichen, wenn man die Reihenfolge direkt in der object.json ändert. Dafür sind aber leider meine Linux-Json-Kenntnisse zu schwach.
Gruß
sten-torvar Liste, timeout, bakID, ID; var flotbackup = 'javascript.0.flotbackup.'; schedule("0 4 * * *", async function () { exec('egrep -o \'_id\":\"(flot.0.[^\"]*)\' /opt/iobroker/iobroker-data/objects.json | egrep -o \'[^\"]*$\'', async function (error, result, stderr) { Liste = result.split("\n"); Liste.pop(); Liste = Liste.sort(); // Liste sortieren // Objekte verschieben in den Backup-Ordner Liste.forEach(function(item) { bakID = flotbackup + item; //console.log(item + ' -> ' + bakID); setObject(bakID,getObject(item)); deleteObject(item); }); // Objekte zurück verschieben timeout = setTimeout(async function () { Liste.forEach(function(item) { bakID = flotbackup + item; //console.log(bakID + ' -> ' + item); setObject(item,getObject(bakID)); deleteObject(bakID); }); }, 3000); }); }); -
@sten-tor ich habe dein Skript mal importiert und in meiner Test-Umgebung laufen lassen.
Das skript tut auf jeden fall etwas (habe console.log aktiviert), aber das Ergebnis im FLot ist unverändert.
Auch ein neustart vom Flot Adapter brachte nichts
@kuddel sagte in FLOT - Voreinstellungen sortieren:
Das skript tut auf jeden fall etwas (habe console.log aktiviert), aber das Ergebnis im FLot ist unverändert.
@sten-tor sagte in FLOT - Voreinstellungen sortieren:
welches jede Nacht die Objekte unter flot.0 nach javascript.0 verschiebt, sortiert und dann wieder zurück schiebt
hast du mal drüber geschlafen?
-
@kuddel sagte in FLOT - Voreinstellungen sortieren:
Das skript tut auf jeden fall etwas (habe console.log aktiviert), aber das Ergebnis im FLot ist unverändert.
@sten-tor sagte in FLOT - Voreinstellungen sortieren:
welches jede Nacht die Objekte unter flot.0 nach javascript.0 verschiebt, sortiert und dann wieder zurück schiebt
hast du mal drüber geschlafen?
-
@homoran habe die Ausführung für den Test auf jede Minute geändert.
Sonst hätte ich ja im Log auch nichts gehesen ;-)
@kuddel sagte in FLOT - Voreinstellungen sortieren:
habe die Ausführung für den Test auf jede Minute geändert.
Warum lässt du uns an deinem Wissen nicht teilhaben?
Wahrscheinlich ist da eine Minute viel zu kurz. Dann wird wahrscheinlich der nächste Sortiervorgang angestoßen, bervor der letzte ferigt war@kuddel sagte in FLOT - Voreinstellungen sortieren:
Sonst hätte ich ja im Log auch nichts gehesen
und was hast du da gesehen?
-
@kuddel sagte in FLOT - Voreinstellungen sortieren:
habe die Ausführung für den Test auf jede Minute geändert.
Warum lässt du uns an deinem Wissen nicht teilhaben?
Wahrscheinlich ist da eine Minute viel zu kurz. Dann wird wahrscheinlich der nächste Sortiervorgang angestoßen, bervor der letzte ferigt war@kuddel sagte in FLOT - Voreinstellungen sortieren:
Sonst hätte ich ja im Log auch nichts gehesen
und was hast du da gesehen?
-
@homoran das Skript habt wie erwartet die Objekte verschoben in Richtung javascript.0.flotbackup und wieder zurück.
auf der Flot Seite ist die Sortierung danach aber immer noch nicht korrekt.
@kuddel sagte in FLOT - Voreinstellungen sortieren:
auf der Flot Seite ist die Sortierung danach aber immer noch nicht korrekt.
@homoran sagte in FLOT - Voreinstellungen sortieren:
Warum lässt du uns an deinem Wissen nicht teilhaben?
Auch nach forced reload?
und in den Objekten?
-
@kuddel sagte in FLOT - Voreinstellungen sortieren:
auf der Flot Seite ist die Sortierung danach aber immer noch nicht korrekt.
@homoran sagte in FLOT - Voreinstellungen sortieren:
Warum lässt du uns an deinem Wissen nicht teilhaben?
Auch nach forced reload?
und in den Objekten?
-
@homoran habe meine Testumgebung mal eben wieder gestartet.
Das Skript sieht bei mir so aus:
Und so sieht dann das Log aus:
Und so die letzten Einträge im Flot:
@kuddel sagte in FLOT - Voreinstellungen sortieren:
javascript.1 2021-12-22 13:10:00.005 info script.js.java.sonstige.flot_sortieren: +++ Flot wird sortiert +++
und dann ist Schluss?
da ist er wohl noch nicht fertig. -
@kuddel sagte in FLOT - Voreinstellungen sortieren:
javascript.1 2021-12-22 13:10:00.005 info script.js.java.sonstige.flot_sortieren: +++ Flot wird sortiert +++
und dann ist Schluss?
da ist er wohl noch nicht fertig.@homoran sagte in FLOT - Voreinstellungen sortieren:
javascript.1 2021-12-22 13:10:00.005 info script.js.java.sonstige.flot_sortieren: +++ Flot wird sortiert +++
Das ist der Erste Schritt im Prozess (Skript Zeile 5).
Danach fängt das Skript dann an zu sortieren
javascript.1 2021-12-22 13:10:00.920 info script.js.java.sonstige.flot_sortieren: flot.0.Anwesenheit-Daniel -> javascript.0.flotbackup.flot.0.Anwesenheit-Daniel javascript.1 2021-12-22 13:10:00.005 info script.js.java.sonstige.flot_sortieren: +++ Flot wird sortiert +++ -
@homoran sagte in FLOT - Voreinstellungen sortieren:
javascript.1 2021-12-22 13:10:00.005 info script.js.java.sonstige.flot_sortieren: +++ Flot wird sortiert +++
Das ist der Erste Schritt im Prozess (Skript Zeile 5).
Danach fängt das Skript dann an zu sortieren
javascript.1 2021-12-22 13:10:00.920 info script.js.java.sonstige.flot_sortieren: flot.0.Anwesenheit-Daniel -> javascript.0.flotbackup.flot.0.Anwesenheit-Daniel javascript.1 2021-12-22 13:10:00.005 info script.js.java.sonstige.flot_sortieren: +++ Flot wird sortiert +++@kuddel
Sieht so aus, als ob der sort-Befehl bei dir nicht richtig läuft.edit: Hab erst nicht richtig hingeschaut. Klappt doch.Kannst du mal den Log von folgendem Script hier posten?
var Liste = ['flot.0.ioBroker-PI-CPU','flot.0.ioBroker-FreeSpace','flot.0.ioBroker-DiskUsage']; console.log('unsortiert: ' + Liste); Liste = Liste.sort(); // Liste sortieren console.log('sortiert: ' + Liste);ansonsten probier doch mal, die Pause vor dem zurückschieben (Zeile 27) von 3000 auf z.B. 10000 zu setzen. Es könnte nämlich sein, dass dein iob zum Löschen der Ursprungs-Datenpunkte länger braucht als 3 Sekunden.
-
@kuddel
Sieht so aus, als ob der sort-Befehl bei dir nicht richtig läuft.edit: Hab erst nicht richtig hingeschaut. Klappt doch.Kannst du mal den Log von folgendem Script hier posten?
var Liste = ['flot.0.ioBroker-PI-CPU','flot.0.ioBroker-FreeSpace','flot.0.ioBroker-DiskUsage']; console.log('unsortiert: ' + Liste); Liste = Liste.sort(); // Liste sortieren console.log('sortiert: ' + Liste);ansonsten probier doch mal, die Pause vor dem zurückschieben (Zeile 27) von 3000 auf z.B. 10000 zu setzen. Es könnte nämlich sein, dass dein iob zum Löschen der Ursprungs-Datenpunkte länger braucht als 3 Sekunden.
@sten-tor habe dein Test-Skript soeben gestartet:
javascript.1 2021-12-23 06:54:42.079 info script.js.java.test.test: registered 0 subscriptions and 0 schedules javascript.1 2021-12-23 06:54:42.079 info script.js.java.test.test: sortiert: flot.0.ioBroker-DiskUsage,flot.0.ioBroker-FreeSpace,flot.0.ioBroker-PI-CPU javascript.1 2021-12-23 06:54:42.079 info script.js.java.test.test: unsortiert: flot.0.ioBroker-PI-CPU,flot.0.ioBroker-FreeSpace,flot.0.ioBroker-DiskUsage javascript.1 2021-12-23 06:54:42.049 info Start javascript script.js.java.test.testZeile 27 habe ich auf 10000 geändert. Das Skript sortiert laut Log auch wieder..
Auf der Flot seite sind aber leider immer noch die ioBroker Charts ganz unten. Auch nach einem Adapter-Neustart.
-
@sten-tor habe dein Test-Skript soeben gestartet:
javascript.1 2021-12-23 06:54:42.079 info script.js.java.test.test: registered 0 subscriptions and 0 schedules javascript.1 2021-12-23 06:54:42.079 info script.js.java.test.test: sortiert: flot.0.ioBroker-DiskUsage,flot.0.ioBroker-FreeSpace,flot.0.ioBroker-PI-CPU javascript.1 2021-12-23 06:54:42.079 info script.js.java.test.test: unsortiert: flot.0.ioBroker-PI-CPU,flot.0.ioBroker-FreeSpace,flot.0.ioBroker-DiskUsage javascript.1 2021-12-23 06:54:42.049 info Start javascript script.js.java.test.testZeile 27 habe ich auf 10000 geändert. Das Skript sortiert laut Log auch wieder..
Auf der Flot seite sind aber leider immer noch die ioBroker Charts ganz unten. Auch nach einem Adapter-Neustart.
@kuddel die Sortierung an sich scheint zu funktionieren, allerdings scheint sich deine objects.json nicht so leicht anpassen zu wollen, wie das bei mir der Fall ist.
Zum Hintergrund: In der objects.json sind auch die flot-Objekte drin. Die werden dann von Flot in der Reihenfolge des Auftretens aufgerufen und angezeigt. Meine Idee war es also, die Flot-Objekte neu anzulegen und damit die Sortierung zu erzwingen.
Deswegen ist es denkbar, auch direkt die objects.json mit der Holzhammermethode zu bearbeiten und die komplette Datei zu sortieren. Das kannst du gern mal probieren, aber bitte vorher unbedingt ein Backup machen!
Das wird auf dem Terminal ausgeführt:
- (optinal) den JSON-Parser jq installieren, falls es nicht vorhanden ist
sudo apt-get install jq- ins Verzeichnis wechseln, in dem die objects.json
cd /opt/iobroker/iobroker-data- iobroker stoppen
iobroker stop- Sicherheitskopie der objects.json
cp objects.json objects.backup- Sortieren der objects.json, Ergebnis in die Dateien objects.json und objects.json.bak schreiben
jq -S -c . objects.json > objects.tmp && cp objects.tmp objects.json.bak && mv objects.tmp objects.json- (optional) prüfen, ob die Sortierung geklappt hat
egrep -o '_id\":\"flot.0.[^\"]*' objects.json | egrep -o [^\"]*$- iobroker starten
iobroker startDas ganze kann natürlich auch eine sh gepackt werden und dann evtl. per exec-Befehl aus einem iobroker-Script aufgerufen werden.
-
@kuddel die Sortierung an sich scheint zu funktionieren, allerdings scheint sich deine objects.json nicht so leicht anpassen zu wollen, wie das bei mir der Fall ist.
Zum Hintergrund: In der objects.json sind auch die flot-Objekte drin. Die werden dann von Flot in der Reihenfolge des Auftretens aufgerufen und angezeigt. Meine Idee war es also, die Flot-Objekte neu anzulegen und damit die Sortierung zu erzwingen.
Deswegen ist es denkbar, auch direkt die objects.json mit der Holzhammermethode zu bearbeiten und die komplette Datei zu sortieren. Das kannst du gern mal probieren, aber bitte vorher unbedingt ein Backup machen!
Das wird auf dem Terminal ausgeführt:
- (optinal) den JSON-Parser jq installieren, falls es nicht vorhanden ist
sudo apt-get install jq- ins Verzeichnis wechseln, in dem die objects.json
cd /opt/iobroker/iobroker-data- iobroker stoppen
iobroker stop- Sicherheitskopie der objects.json
cp objects.json objects.backup- Sortieren der objects.json, Ergebnis in die Dateien objects.json und objects.json.bak schreiben
jq -S -c . objects.json > objects.tmp && cp objects.tmp objects.json.bak && mv objects.tmp objects.json- (optional) prüfen, ob die Sortierung geklappt hat
egrep -o '_id\":\"flot.0.[^\"]*' objects.json | egrep -o [^\"]*$- iobroker starten
iobroker startDas ganze kann natürlich auch eine sh gepackt werden und dann evtl. per exec-Befehl aus einem iobroker-Script aufgerufen werden.
@sten-tor ich glaube ich weiß wo der Fehler ist.
Alle Charts fangen mit einem Großbuchstaben an, außer die vom ioBroker.
Die Sortierung ist also korrekt.
Erst A-Z bei allen Charts mit großbuchstaben am Anfang und dann die ioBroker...
oh man, darauf muss man erst einmal kommen
-
@sten-tor ich glaube ich weiß wo der Fehler ist.
Alle Charts fangen mit einem Großbuchstaben an, außer die vom ioBroker.
Die Sortierung ist also korrekt.
Erst A-Z bei allen Charts mit großbuchstaben am Anfang und dann die ioBroker...
oh man, darauf muss man erst einmal kommen
-
@kuddel ha, so einfach kann es sein!
Falls du unabhängig von Groß-/Keinschreibung sortieren möchtest, kannst du die sort-Zeile wie folgt ändern:
Liste = Liste.sort(function (a, b) { return a.toLowerCase().localeCompare(b.toLowerCase()); });
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
