NEWS
Javascript für Import wird nicht gefunden
-
@paul53 sagte in Javascript für Import wird nicht gefunden:
Ich speichere eigene Module unter "iobroker-data/modules", damit sie mit dem ioBroker-Backup gesichert werden.
Ich denke du hast dann die Module aber nicht direkt im Javascript Adapter, oder? (siehe mein Bild im obigen Post)
Ich nutze da den Weg das ich so alles direkt im Adapter habe und damit keine "externen" Files benötige.
Die Sicherung ist damit auch gegeben.Zu den eigenen Modulen bei den zusätzlichen NPM-Modulen ablegen, gibt es einen Thread im Forum, finde ihn aber gerade nicht.
Edit: hier ist der Link zu dem Thread, aus diesem habe ich auch die o.a. Lösung von @ticaki (siehe Beitrag 17)
https://forum.iobroker.net/topic/70069/einfügen-von-js-klassen-aus-eigenem-npm-modul@ofri2607 sagte: Link zu dem Thread
Im November 2023 hat meine Lösung auch noch funktioniert.
Problem ist, dass neuerdings
@Rolli2 sagte in Javascript für Import wird nicht gefunden:packt da immer noch "@iobroker-javascript.0/" davor.
-
-
-
@ofri2607 sagte: Die Lösung wie oben dargestellt, läuft so bei mir zuverlässig
Ja, funktioniert bei mir auch nach Instanz-Neustart:
const myfunc = require('/home/iobroker/scripts/modules/test.js'); log(myfunc(new Date()));
-
@ofri2607 sagte in Javascript für Import wird nicht gefunden:
So wie ich den Screenshot von @rolli2 deute, hat er das in Blockly aufgebaut.
Korrekt, ich hab's in Blockly gebaut.
@ofri2607 sagte in Javascript für Import wird nicht gefunden:
Ja, Neustart der Instanz ist leider bei jeder Änderung in der Klasse erforderlich.
Die Javainstanz startet ja automatisch neu, wenn ich irgendwas darin ändere.
@ofri2607 sagte in Javascript für Import wird nicht gefunden:
Ich habe dein Beispiel jetzt mal auf die Schnelle in meiner Umgebung nachgestellt,
Du hast's ja nicht in Blockly gebaut. Dann scheint's ja wirklich daran zu liegen.
@paul53 sagte in Javascript für Import wird nicht gefunden:
EDIT: Gerade getestet: Es funktioniert so offenbar nicht mehr!
Aber bei dir scheinen Sachen ja auch "nicht mehr" zu funktionieren.
-
@ofri2607 sagte in Javascript für Import wird nicht gefunden:
So wie ich den Screenshot von @rolli2 deute, hat er das in Blockly aufgebaut.
Korrekt, ich hab's in Blockly gebaut.
@ofri2607 sagte in Javascript für Import wird nicht gefunden:
Ja, Neustart der Instanz ist leider bei jeder Änderung in der Klasse erforderlich.
Die Javainstanz startet ja automatisch neu, wenn ich irgendwas darin ändere.
@ofri2607 sagte in Javascript für Import wird nicht gefunden:
Ich habe dein Beispiel jetzt mal auf die Schnelle in meiner Umgebung nachgestellt,
Du hast's ja nicht in Blockly gebaut. Dann scheint's ja wirklich daran zu liegen.
@paul53 sagte in Javascript für Import wird nicht gefunden:
EDIT: Gerade getestet: Es funktioniert so offenbar nicht mehr!
Aber bei dir scheinen Sachen ja auch "nicht mehr" zu funktionieren.
@Rolli2 sagte: Aber bei dir scheinen Sachen ja auch "nicht mehr" zu funktionieren.
In der "alten" Version hat es nicht mehr funktioniert, was daran liegen kann, dass beim Neuaufsetzen von ioBroker (neuer PC) das Verzeichnis "iobroker-data/modules" nicht restored wurde.
Mit dem Erstellen der Module im Skript-Editor unter der Gruppe "modules" und dem geänderten Pfad "/home/iobroker/scripts/modules/test.js" funktioniert es. "/home/iobroker/scripts" ist der Spiegelpfad bei mir.Es funktioniert auch innerhalb einer JS-Funktion in Blockly.
-
@ofri2607 sagte in Javascript für Import wird nicht gefunden:
So wie ich den Screenshot von @rolli2 deute, hat er das in Blockly aufgebaut.
Korrekt, ich hab's in Blockly gebaut.
@ofri2607 sagte in Javascript für Import wird nicht gefunden:
Ja, Neustart der Instanz ist leider bei jeder Änderung in der Klasse erforderlich.
Die Javainstanz startet ja automatisch neu, wenn ich irgendwas darin ändere.
@ofri2607 sagte in Javascript für Import wird nicht gefunden:
Ich habe dein Beispiel jetzt mal auf die Schnelle in meiner Umgebung nachgestellt,
Du hast's ja nicht in Blockly gebaut. Dann scheint's ja wirklich daran zu liegen.
@paul53 sagte in Javascript für Import wird nicht gefunden:
EDIT: Gerade getestet: Es funktioniert so offenbar nicht mehr!
Aber bei dir scheinen Sachen ja auch "nicht mehr" zu funktionieren.
-
Anmerkung: Das Vorgehen von @ofri2607 mit einer Gruppe für eigene Node-Module hat den Vorteil, dass im Spiegelverzeichnis die Rechte für den User "iobroker" passen und man das Modul-Skript nicht erst in eine Datei kopieren muss.
@ofri2607 sagte in Javascript für Import wird nicht gefunden:
würde der Pfad bei dir „ /home/iobroker/skripte/Person.js“ lauten.
Der korrekte Pfad wäre gewesen:
const Person = require('/home/iobroker/skripte/common/Person.js'); -
Anmerkung: Das Vorgehen von @ofri2607 mit einer Gruppe für eigene Node-Module hat den Vorteil, dass im Spiegelverzeichnis die Rechte für den User "iobroker" passen und man das Modul-Skript nicht erst in eine Datei kopieren muss.
@ofri2607 sagte in Javascript für Import wird nicht gefunden:
würde der Pfad bei dir „ /home/iobroker/skripte/Person.js“ lauten.
Der korrekte Pfad wäre gewesen:
const Person = require('/home/iobroker/skripte/common/Person.js'); -
@Rolli2 sagte: funktioniert es auch bei mir in Blockly.
Bedenke, dass Person nur innerhalb der JS-Funktion zur Verfügung steht.
EDIT: Man kann Blockly allerdings austricksen, indem man eine (globale) Variable mit identischem Bezeichner Person erstellt, die auch einmal verwendet werden muss, damit sie im Skript erhalten bleibt.

Funktion classPerson():
Person = require('/home/iobroker/scripts/modules/Person.js');Funktion modultest(vorname, nachname, alter):
const neu = new Person(vorname, nachname, alter); return neu.information();Log:
javascript.1 13:31:06.996 info start JavaScript (Blockly) javascript.1 13:31:07.000 info function javascript.1 13:31:07.000 info Mein Name ist Cagney -
@Rolli2 sagte: funktioniert es auch bei mir in Blockly.
Bedenke, dass Person nur innerhalb der JS-Funktion zur Verfügung steht.
EDIT: Man kann Blockly allerdings austricksen, indem man eine (globale) Variable mit identischem Bezeichner Person erstellt, die auch einmal verwendet werden muss, damit sie im Skript erhalten bleibt.

Funktion classPerson():
Person = require('/home/iobroker/scripts/modules/Person.js');Funktion modultest(vorname, nachname, alter):
const neu = new Person(vorname, nachname, alter); return neu.information();Log:
javascript.1 13:31:06.996 info start JavaScript (Blockly) javascript.1 13:31:07.000 info function javascript.1 13:31:07.000 info Mein Name ist Cagney


