Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[v3.2.0-beta.X] Bitte kein pauschaler Reload (auf allen Geräten) beim Verlassen der Konfig mit "Abbrechen" #2716

Closed
Erwin40 opened this issue Jul 25, 2024 · 45 comments
Assignees
Labels
feature 🌟 Feature request or enhancement v3.2 Roadmap for v3.2

Comments

@Erwin40
Copy link

Erwin40 commented Jul 25, 2024

Sind Scripte in Jarvis eingetragen, wird beim Verlassen der Konfiguration immer pauschal ein Reload auf allen Geräten durchgeführt.
Das sollte aber wenn "Enable Scripts" auf false steht, nicht so sein. Hier sollte es so sein, als ob keine Scripte eingetragen wären.

Zweitens, sollte beim "Abbrechen" kein Reload durchgeführt werden, denn man hat ja nix geändert.
Das führt gerade in der Entwicklungsphase zu unnötigen Wartezeiten :-)

Ansonsten, so langsam wird die 3.2.0... richtig super :-)
Tolle Leistung die du da vollbringst 👍

@Zefau Zefau added bug 🐛 Something isn't working v3.2 Roadmap for v3.2 labels Jul 25, 2024
@github-project-automation github-project-automation bot moved this to ROADMAP in jarvis v3.2 Jul 25, 2024
@Erwin40
Copy link
Author

Erwin40 commented Jul 30, 2024

Hi.

Aktuell beta.49

Editieren Jarvis auf dem PC

Mit deaktivierten Jarvis-Scripte:
Beim Abbrechen wird immer noch ein Reload ausgelöst.
Beim Speichern (egal ob mit oder ohne Änderung, zwei Reloads auf dem PC und einer auf den iPads.
Hier ist anzumerken, dass jeder Reload etwas länger dauert und kurzfristig ein lila Hintergrundbild mit dem Jarvis-Logo in der Mitte, angezeigt wird. Bei zwei Reloads wird das dann schon ziemlich holprig und ist bei der Entwicklung mit vielen klenen Änderung etwas störend.
Übrigens, der Jarvis-DP (jarvis.0.settings.reload) hat keinen Einfluss, egal ob der auf true oder false steht.

Mit aktivierten Jarvis-Scripte:
dito, kein Unterschied feststellbar.

Ohne Script (gelöscht in den Einstellungen):
Beim Abbrechen kein Reload mehr!
Beim Speichern nur ein kurzer und unauffälliger Reload, auch nicht auf den iPads. Die Änderungen werden sauber gespeichert und auf allen Geräten aktualisiert! freu
Leider eben ohne Jarvis-Scripte heul

Übrigens: Wird Jarvis oder der Raspi, neu gestartet, reconnecten sich zwar die Clients, aber die Werte werden nicht mehr aktualisiert!
Das war in der 3.1.8 definitiv nicht so und hat immer super funktioniert. Das fand ich immer echt toll.

So, ich hoffe ich konnte dir für die "Fehler" Suche weitere Detailinfos liefern.

@Zefau
Copy link
Owner

Zefau commented Jul 30, 2024

Der Reload erfolgt wegen @import

@mcuiobroker
Copy link
Collaborator

mcuiobroker commented Jul 30, 2024

Kann man die nicht evtl. dynamisch Nachladen?

try {
    const module = await import('./additional-module.js');
    module.init(); 
    console.log('Module loaded successfully');
} catch (error) {
    console.error('Failed to load module', error);
}

// oder mit eval?
fetch('additional-script.js')
    .then(response => response.text())
    .then(scriptContent => {
         eval(scriptContent);
    })
    catch(error => console.error('Script failed to load', error));

Wäre komplizierter, da man prüfen muss was ist schon geladen und evtl noch andere Dinge?

@Erwin40
Copy link
Author

Erwin40 commented Jul 30, 2024

Ich wüsste nicht mal, wo ich den Auszug hinpacken sollte :-)

Das bei Import Jarvis noch einmal lädt kenne ich schon von der 3.1.8
Aber eben nur einmal und nicht zweimal ;-)

@Zefau Zefau added feature 🌟 Feature request or enhancement v4.0 Roadmap for v4.0 and removed bug 🐛 Something isn't working v3.2 Roadmap for v3.2 labels Jul 31, 2024
@github-project-automation github-project-automation bot moved this to ROADMAP in jarvis v4.0 Jul 31, 2024
@Zefau Zefau removed this from jarvis v3.2 Jul 31, 2024
@Zefau
Copy link
Owner

Zefau commented Jul 31, 2024

Kann man die nicht evtl. dynamisch Nachladen?

try {
    const module = await import('./additional-module.js');
    module.init(); 
    console.log('Module loaded successfully');
} catch (error) {
    console.error('Failed to load module', error);
}

// oder mit eval?
fetch('additional-script.js')
    .then(response => response.text())
    .then(scriptContent => {
         eval(scriptContent);
    })
    catch(error => console.error('Script failed to load', error));

Wäre komplizierter, da man prüfen muss was ist schon geladen und evtl noch andere Dinge?

Jo, finde ich gut. Ich nehme das mal für v4 auf die Roadmap.

@Erwin40
Copy link
Author

Erwin40 commented Jul 31, 2024

v4? 😱
Äh, gibt es da schon einen Zeitplan ☺️
Sorry wenn ich frage, aber ich kann ohne Jarvis nicht mehr leben 😉

@Zefau
Copy link
Owner

Zefau commented Jul 31, 2024

Gibt keinen Zeitplan. Ich bekomme ja nichtmal die v3.2 fertig.

Es sind ja 3 Dinge:

  • beim Verlassen der Konfiguration nicht pauschal einen Reload durchführen: Hierfür muss ich die Lösung von mcuiobroker umsetzen, was im Zweifel wieder zu Bugs führt, daher v4
  • wenn "Enable Scripts" auf false steht, sollte kein Reload ntowendig sein. Das ginge sicherlich noch in v3.2, aber stört dich wahrscheinlich nicht so stark?
  • beim "Abbrechen" kein Reload durchgeführen -> analog zu Nr- 1

@Erwin40
Copy link
Author

Erwin40 commented Jul 31, 2024

Ok, danke für die Info.

Am meisten eigentlich "Abbrechen".
Hier ist es so, dass ich oft einen zweiten Tab auf habe um dort Einstellungen von einem anderen Gerät / Widget anzuschauen und ggf. Daten/Einstellung dort herauskopiere. wenn ich dann in diesem zweiten Tab die Einstellungen verlasse, um das Layout zu begutachen, damit ich weiß was ich im ersten Tab vielleicht anders haben will, dann verhaut es mir die Seite im ersten Tab.
Das nervt etwas bei vielen kleinen Änderung in der Entwicklungsphase neuer Widgets :-)
Und früher habe ich Layout- und Änderungen an Geräten, auch auf dem iPad gegenkontrolliert.
Das geht jetzt mit aktivem und aktiviertem Script gar nicht mehr. Der Reload dauert da solang, dass du gar nicht mehr siehst was du geändert hast ;-)
Und genau hier wäre der funktionierende "Enable Script" Schalter, schon ganz geschickt.
Hört sich vielleicht alles etwas verwirrend an, aber ich mache "leider" gerade viel mit Jarvis. Und meine Seiten "Leben" ungemein.
Liegt vielleicht auch daran, dass "kreativ" nicht meine stärkste Seite ist und ich oft feststelle, dass ich noch etwas "optimieren" kann.
Das Teil (Raspi und insbesondere Jarvis) machen mir einfach zu viel Spaß.
Daher auch mein großes Interesse an der v4 :-)

Ach ja, und das da, ist halt einfach nur geil, und der eigentliche Auslöser für die beta.x
grafik

Ich könnte die ganze Zeit draufstarren 🤣

@mcuiobroker
Copy link
Collaborator

Schalte doch für die zeit Deiner Entwicklungsphase die Skripte aus.

@Erwin40
Copy link
Author

Erwin40 commented Jul 31, 2024

Kleiner Witzbold :-)
Wenn das denn mit dem "Enable Script" DP gehen würde.
Hmmm, oder ich bastle mir ein Java-Script und manipulieren den Jarvis-DP jarvis.0.scripts

@mcuiobroker
Copy link
Collaborator

Ja, wenn jarvis.0.settings.scriptsEnabled -> false jarvis.0.scripts in einen anderen DP sichern und ihn löschen, bei true aus dem anderen DP Sicherung holen.

@Zefau Zefau added the v3.2 Roadmap for v3.2 label Aug 1, 2024
@github-project-automation github-project-automation bot moved this to ROADMAP in jarvis v3.2 Aug 1, 2024
@Zefau Zefau added the #status: implemented-locally 🛠️ Status: Issue has been implemented locally (but not pushed to repository yet) label Aug 10, 2024
@Zefau
Copy link
Owner

Zefau commented Aug 10, 2024

Dieser Feature Request wurde mit v3.2.0-beta.55 implementiert. Bitte bestätigen und auf Fehler prüfen. Wenn alles in Ordnung ist, gerne das Issue schließen.


This feature request has been implemented with v3.2.0-beta.55. Please verify and test the feature for any bugs. If everything works as expected, you may close the issue.

@Zefau Zefau added #status: ready-to-test ✔️ Status: Issue fixed and ready-to-test and removed #status: implemented-locally 🛠️ Status: Issue has been implemented locally (but not pushed to repository yet) labels Aug 10, 2024
@Zefau Zefau closed this as completed Aug 23, 2024
@github-project-automation github-project-automation bot moved this from ROADMAP to DONE in jarvis v3.2 Aug 23, 2024
@github-project-automation github-project-automation bot moved this from ROADMAP to DONE in jarvis v4.0 Aug 23, 2024
@Zefau Zefau removed the #status: ready-to-test ✔️ Status: Issue fixed and ready-to-test label Aug 23, 2024
@remove-milestone-or-labels remove-milestone-or-labels bot added the #status: ready-to-test ✔️ Status: Issue fixed and ready-to-test label Aug 23, 2024
@Zefau Zefau removed this from jarvis v4.0 Aug 23, 2024
@Zefau Zefau removed the #status: ready-to-test ✔️ Status: Issue fixed and ready-to-test label Aug 23, 2024
@Erwin40
Copy link
Author

Erwin40 commented Aug 24, 2024

Ok, aber das hier verstehe ich nicht ganz: iobroker upload jarvis
Das schiebt mir doch nicht die Scripte rüber, sondern macht nur den upload von Adapter Dateien
Ich muss die Scripte dann mit FileZille z.B. hochladen, oder?

@Erwin40
Copy link
Author

Erwin40 commented Aug 24, 2024

Funktioniert leider nicht...
Das sind meine Imports (z.Z. noch alles ohne https):
import "http://raspberrypi4-ede:8400/user/jarvisDPs.js";
import "http://raspberrypi4-ede:8400/user/stateListeItemHistory2.js";

Browser-Console:
10:26:41.721 Laden des Moduls von "http://raspberrypi4-ede:8400/user/jarvisDPs.js" wurde auf Grund eines nicht freigegebenen MIME-Typs ("") blockiert. [index.html](http://raspberrypi4-ede:8400/jarvis/index.html#/351097ea-e3f7-4991-add6-0cba50b20afb?reload=false) 10:26:41.721 Laden fehlgeschlagen für das Modul mit der Quelle "http://raspberrypi4-ede:8400/user/jarvisDPs.js". [index.html](http://raspberrypi4-ede:8400/jarvis/index.html#/351097ea-e3f7-4991-add6-0cba50b20afb?reload=false) 10:26:41.721 Laden des Moduls von "http://raspberrypi4-ede:8400/user/stateListeItemHistory2.js" wurde auf Grund eines nicht freigegebenen MIME-Typs ("") blockiert. [index.html](http://raspberrypi4-ede:8400/jarvis/index.html#/351097ea-e3f7-4991-add6-0cba50b20afb?reload=false) 10:26:41.722 Laden fehlgeschlagen für das Modul mit der Quelle "http://raspberrypi4-ede:8400/user/stateListeItemHistory2.js". [index.html](http://raspberrypi4-ede:8400/jarvis/index.html#/351097ea-e3f7-4991-add6-0cba50b20afb?reload=false)

@Zefau
Copy link
Owner

Zefau commented Aug 24, 2024

Wenn du die URL direkt aufrufst, wird dann das Javascript im Browser angezeigt? Der Upload ist notwendig, um ioBroker zu sagen, dass es da eine Datei gibt.

@Erwin40
Copy link
Author

Erwin40 commented Aug 24, 2024

Nein.
Dateien liegen dort wie von dir vorgeschlagen:
grafik

@Zefau
Copy link
Owner

Zefau commented Aug 25, 2024

Wenn du die URL im Browser eingibst und die Datei nicht ausgegeben wird, dann musst du ioBroker upload jarvis machen, damit ioBroker die Datei kennt.

@Erwin40
Copy link
Author

Erwin40 commented Aug 25, 2024

Ja, habe ich gemacht. Da tauchen die Dateien aber auch nicht auf.
Habe jauch schon einen Ordner tiefer versucht und auch mal direkt in die Ordner abgelegt.
Auch die Berechtigungen habe ich angepasst.
grafik

@Erwin40
Copy link
Author

Erwin40 commented Aug 25, 2024

Mist!
Habe die Instanz mal gelöscht und neu hinzugefügt.
Jetzt ist alles weg :-(
Beim Start sagt mir das Log, dass er keine Backups gefunden hat:
grafik

Aber in der Adapter-Konfig unter Datensicherungen:
grafik

@Erwin40
Copy link
Author

Erwin40 commented Aug 25, 2024

Also ein Restore über die Jarvis Instanz habe ich nicht hinbekommen.
Ich musst den Adapter löschen, neu installieren, Instanz erstellen und über BackitUp restoren.
Da werden aber die Einstellungen nicht mit restored. Die konnte ich dann über das Jarvis-Backup wiederherstellen.
Jetzt läuft erst mal wieder alles.

@Zefau
Copy link
Owner

Zefau commented Aug 25, 2024

Schieb es mal bitte in /opt/iobroker/node_modules/iobroker.jarvis/www/jarvis/user dann sollte es nach einem iobroker upload jarvis automatisch unter /opt/iobroker/iobroker-data/files/jarvis/user liegen und via http://<ip>:8400/user/script.js aufrufbar sein.

@Erwin40
Copy link
Author

Erwin40 commented Aug 25, 2024

Ok, das hat geklappt. Wurde auch sauber uploaded und kann direkt aufgerufen werden.
Aber es funktioniert nicht und ich bekomme jetzt eine andere Fehlermeldung in der Browser-Console:
grafik

@mcuiobroker
Copy link
Collaborator

Du hast ein notwendiges Script nicht geladen. jarvisDPs

@Erwin40
Copy link
Author

Erwin40 commented Aug 25, 2024

Doch :-)
import "http://raspberrypi4-ede:8400/user/jarvisDPs.js";
import "http://raspberrypi4-ede:8400/user/stateListeItemHistory2.js";
Und im Log sieht man das auch (erster Eintrag)
Wurde auch uploaded und kann aufgerufen werden.

@mcuiobroker
Copy link
Collaborator

Dann mach mal ein

import "http://raspberrypi4-ede:8400/user/jarvisDPs.js";
setTimeout(function(){
import "http://raspberrypi4-ede:8400/user/stateListeItemHistory2.js";
},3000);

@Erwin40
Copy link
Author

Erwin40 commented Aug 25, 2024

Eben kam noch eine andere Meldung, die vorher wohl "verschluckt" wurde:
grafik

@mcuiobroker
Copy link
Collaborator

mcuiobroker commented Aug 25, 2024

Welche Version vom jarvisDPs.js ist das?
Dort fehlt anscheinend die browserIP?
image

@Erwin40
Copy link
Author

Erwin40 commented Aug 25, 2024

// jarvisDPs v1.0.4

@mcuiobroker
Copy link
Collaborator

mcuiobroker commented Aug 25, 2024

Und ist dort die browserIP und jarvisLayoutCount definiert?


let jarvisWidgets;
let jarvisWidgetsCount = 0;
let jarvisWidgetsLC = 0;
let jarvisDevices;
let jarvisDevicesCount = 0;
let jarvisDevicesLC = 0;
let jarvisLayout;
let jarvisLayoutLC = 0;
let jarvisLayoutCount = 0;
let jarvisLayoutCountPages = 0;
let jarvisLayoutCountTabs = 0;
let browserIP = '';
let browserIPLC = 0;
let serverIP = '';
let serverIPLC = 0;

sollte drin sein

@Erwin40
Copy link
Author

Erwin40 commented Aug 25, 2024

Jain...
jarvisLayoutCount wird dort zwar auf 0 gesetzt obwohl nicht definiert, aber sonst nicht weiter verwendet.
Habe das Statement einfach gelöscht, und jetzt kommt die Meldung nicht mehr.

Aber ich habe mal das Logging in jarvisDPs.js aktiviert:
grafik

@mcuiobroker
Copy link
Collaborator

mcuiobroker commented Aug 25, 2024

image

Was steht denn im stateListItemHistory in Zeile 242?
image

Dann wird anscheinend von jarvis nicht mehr die Variablen von allen Skripten genutzt.
Da hat sich etwas geändert. Dann muss man abwarten bis Zefau die Import-Geschichte gelöst hat.
#2757

@Erwin40
Copy link
Author

Erwin40 commented Aug 25, 2024

Zeile 242: if ( (keypressedIP == browserIP) ) {

@Erwin40
Copy link
Author

Erwin40 commented Aug 25, 2024

Ich habe die beiden Scripte jetzt kurzerhand fusioniert.
Und es werden die stateListItemHistory's wieder angezeigt.
Aber das Ablegen der Scripte ist sehr umständlich. Zudem muss (so habe ich das Gefühl) die Jarvis-Instanz bei jeder Änderung, neu gestartet werden.
Da sollte man vielleicht doch den ursprünglichen Cross-Origin Fehler beheben.
Für mich soll es damit erst mal erledigt sein.
Wenn es mich nervt, mache ich zu gegebener Zeit einen neuen Issue auf :-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature 🌟 Feature request or enhancement v3.2 Roadmap for v3.2
Projects
Status: DONE
Development

No branches or pull requests

3 participants