NEWS
Javascript Adapter Frage
-
Ich muss jetzt nochmal fragen, ich hatte gestern versucht unter javascript.0.XXXX einen datenpunkt zu erzeugen mittels der Funktion in Iobroker skript Das funktioniert auch aber der Datenpunkt erscheint nach dem erstellen nicht unter Javascript.0.XXX sondern unter javascript.0.scriptproblem.XXXX und ich kann das auch nicht ändern. Hab das jetzt sooft probiert komm da aber im Moment garnicht weiter. Könnte mir da mal jemand helfen .
Gruß
Hawe -
@teletapi sagte: versucht unter javascript.0.XXXX einen datenpunkt zu erzeugen
Wie?
-
@teletapi Tipp: Erstelle direkt deine Datenpunkte in
0_userdata.0
mit dem JavaScript-Adapter und nicht in derjavascript.0.
Struktur.Ansonsten zeig mal das Script, welches sich so verhält.
-
@teletapi sagte in Javascript Adapter Frage:
Ich muss jetzt nochmal fragen, ich hatte gestern versucht unter javascript.0.XXXX einen datenpunkt zu erzeugen mittels der Funktion in Iobroker skript Das funktioniert auch aber der Datenpunkt erscheint nach dem erstellen nicht unter Javascript.0.XXX sondern unter javascript.0.scriptproblem.XXXX und ich kann das auch nicht ändern. Hab das jetzt sooft probiert komm da aber im Moment garnicht weiter. Könnte mir da mal jemand helfen .
Gruß
HaweManuell erzeugte datenpunkte gehören nicht in den namespace von Adaptern sondern unter 0_userdata. Die adapter namespaces sind für adapter-interne datenpunkte vorgesehen. Es ist denkbar das der JS adapter da code zu hat das sicher zu stellen.
A.
-
@asgothian sagte in Javascript Adapter Frage:
Es ist denkbar das der JS adapter da code zu hat das sicher zu stellen.
Hat er nicht - alles in
javascript.0
(ist ja der "eigene Namespace" der Scripts) und0_userdata.0
ist erlaubt. -
@teletapi sagte in Javascript Adapter Frage:
nicht unter Javascript.0.XXX sondern unter javascript.0.scriptproblem.XXXX
Dann hast Du das in Deinem Script auch so vorgesehen.
Ohne besonderes Zutun - also percreateState('meinState')
- erscheint ein State unterjavascript.0
.Dass der da nicht hingehört, wurde bereits gesagt.
Aber ohne das Script zu sehen bleibt unsere Glaskugel recht trüb.
-
Jetzt im Moment hatte ich garkein script dazu ich wollte nur nochmal versuchen einen datenpunkt unter dem Rootverzeichnis javascript.0.XX zu erstellen. Gestern hatte ich mir mithilfe von Chatgpt ein script erstellen lassen um aus einem wert die differenz pro tag erstellen zu lassen Chatgpt hatte dazu den Datenpunkt unter javascript.0.XXX erstellen wollen was aber nicht funktionierte weil der Datenpunkt dann immer unter javascrip.0.scriptproblem.XXXX auftauchte und somit das script nicht laufen konnte und ich auch nicht wirklich einen weg gefunden hatte das zu ändern. Irgendwie hab ich das wohl hinbekommen. Möglicherweise ist das ja falsch aber ich habe ja viele datenpunkte im Javascript Adapter dann aber in Unterordner..
// Funktion, die das Skript periodisch ausführt function updateDailyEnergy() { // Datenpunkt für die gesamte erzeugte Energie const totalEnergyDP = 'modbus.0.holdingRegisters.1086_Total_PV_Energy'; // Datenpunkt für die täglich erzeugte Energie const dailyEnergyDP = 'javascript.0.PV_Daily_Energy'; // Heutiges Datum const today = new Date(); today.setHours(0, 0, 0, 0); // Setze Zeit auf Mitternacht // Gestriges Datum const yesterday = new Date(today); yesterday.setDate(yesterday.getDate() - 1); // Datenpunktwerte lesen getState(totalEnergyDP, (err, state) => { if (err) { console.error('Fehler beim Lesen des Datenpunkts für die gesamte erzeugte Energie:', err); return; } const totalEnergy = state.val || 0; // Gesamte erzeugte Energie heute console.log('Gesamte erzeugte Energie heute:', totalEnergy); getState(dailyEnergyDP, (err, state) => { if (err) { console.error('Fehler beim Lesen des Datenpunkts für die täglich erzeugte Energie:', err); return; } const lastTotalEnergy = state.val || 0; // Gesamte erzeugte Energie gestern console.log('Gesamte erzeugte Energie gestern:', lastTotalEnergy); // Täglich erzeugte Energie berechnen const dailyEnergy = totalEnergy - lastTotalEnergy; console.log('Täglich erzeugte Energie:', dailyEnergy); // Täglich erzeugte Energie in den entsprechenden Datenpunkt schreiben setState(dailyEnergyDP, dailyEnergy, true, (err) => { if (err) { console.error('Fehler beim Schreiben des Datenpunkts für die täglich erzeugte Energie:', err); return; } console.log('Täglich erzeugte Energie erfolgreich aktualisiert:', dailyEnergy); }); }); }); } // Funktion periodisch ausführen (alle 30 Minuten) updateDailyEnergy(); // Sofortiges Ausführen beim Start setInterval(updateDailyEnergy, 30 * 60 * 1000); // Alle 30 Minuten wiederholen
-
@teletapi sagte in Javascript Adapter Frage:
wollte nur nochmal versuchen einen datenpunkt unter dem Rootverzeichnis javascript.0.XX zu erstellen
Dann lass den Namespace
javascript.0.
in der ID weg.Dein Script legt aber nirgendwo einen neuen State an, sondern liest und schreibt nur diesen State?!
-
@teletapi
Es gibt 3 Möglichkeiten in Javascript per createState() einen Datenpunkt zu erstellen:createState('XXXX', 0, common); // erstellt DP "javascript.N.XXXX" (N = JS-Instanznr.) createState('javascript.0.XXXX', 0, common); // erstellt DP "javascript.0.XXXX" createState('0_userdata.0.XXXX', 0, common); // erstellt DP "0_userdata.0.XXXX"
EDIT: Die 3. Version ist zu bevorzugen.
-
Danke euch, man lernt halt nie aus