NEWS
[erledigt] JS zum anlegen eines DP unter 0_userdata
-
besagtes script hatte früher funktioniert. allerdings seit langem nicht mehr benutzt.
function listeWerte() { // Liste let werte = getObject("enum.functions.power_consumption").common.members; // Startwert 0 let wert = 0; // Schleife, um die Werte abzufragen for (var i = 0; i < werte.length; i++) { wert += getState(werte[i]).val; } setState("0_userdata.0.Heizen.Heizen", wert); } // Funktionsaufruf fuer das Abonnieren der Datenpunkte $('state(functions=power_consumption)').on(function (obj) { listeWerte(); });
hab jetzt in enum was geändert. 3 werte rausgenommen.
wenn ich das script starte, wird nichts angelegt, und eine fehlermeldung ausgegeben.19:08:55.050 info javascript.0 (545) Start javascript script.js.common.Heizen.Heizen 19:08:55.389 info javascript.0 (545) script.js.common.Heizen.Heizen: registered 7 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions 19:08:57.933 warn javascript.0 (545) at listeWerte (script.js.common.Heizen.Heizen:13:5) 19:08:57.933 warn javascript.0 (545) at Object.<anonymous> (script.js.common.Heizen.Heizen:17:5) 19:09:00.695 info javascript.0 (545) Stop script script.js.common.Heizen.Heizen
den alten DP habe ich vorher gelöscht.
ich nehme an, daß da im script ein fehler durch eventuelle änderungen bei JS ist.
kann mich da wer hilfreich sein? -
@da_woody sagte: wird nichts angelegt, und eine fehlermeldung ausgegeben.
Das Skript erzeugt keinen Datenpunkt, sondern schreibt in den Datenpunkt "0_userdata.0.Heizen.Heizen", der bereits existieren muss.
-
@paul53 autsch, wie löse ich das am besten?
k, hab mal einen folder Heizen angelegt... -
@paul53 kommando retour!
bißchen logisches denken klappt doch noch manchmal...
ist in iQontrol wieder da...
-
Naja jeztt hab ich schon gemacht
async function listeWerte() { // Liste let werte = getObject("enum.functions.power_consumption").common.members; // Startwert 0 let wert = 0; // Schleife, um die Werte abzufragen for (var i = 0; i < werte.length; i++) { wert += getState(werte[i]).val; } if (existsState("0_userdata.0.Heizen.Heizen")) setState("0_userdata.0.Heizen.Heizen", wert); else await createStateAsync("0_userdata.0.Heizen.Heizen", wert, false, { type: "number", role: "value", name: "user state", // da rein schreiben wie der State heißen soll in der name spalte unit: "W", read: true, write: true } ) } // Funktionsaufruf fuer das Abonnieren der Datenpunkte $('state(functions=power_consumption)').on(function (obj) { listeWerte(); });
-
@ticaki hehe, thnx tropsdem!
kann man ja immer brauchen! soweit komm ich mit eventuellem umschreiben zurecht... -
@ticaki
Ich finde es gut, wie ihr immer mit diesem await, async zeug rum handiert.Ich tue mich da immer noch sehr schwer damit.
Danke für das Beispiel.
-
@bahnuhr vor allem auch in der geschwindigkeit...
-
@bahnuhr sagte in JS zum anlegen eines DP unter 0_userdata:
@ticaki
Ich finde es gut, wie ihr immer mit diesem await, async zeug rum handiert.Ich tue mich da immer noch sehr schwer damit.
Danke für das Beispiel.
Dann mache ich es aber auch richtig :). Wenn du ein await benutz ist ein
try {} catch(){}
zwingend... vergesse ich in Forenbeispielen laufend.Wenn der fehlt beendet der JS-Controller/nodejs im Fehlerfall den ausführenden Prozess, was heißt der Javascript-Adapter wird abgeschaltet.
async function listeWerte() { // Liste let werte = getObject("enum.functions.power_consumption").common.members; // Startwert 0 let wert = 0; // Schleife, um die Werte abzufragen for (var i = 0; i < werte.length; i++) { wert += getState(werte[i]).val; } try { if (existsState("0_userdata.0.Heizen.Heizen")) setState("0_userdata.0.Heizen.Heizen", wert); else await createStateAsync("0_userdata.0.Heizen.Heizen", wert, false, { type: "number", role: "value", name: "user state", unit: "", read: true, write: true } ) } catch (e) { log(e.message); } } // Funktionsaufruf fuer das Abonnieren der Datenpunkte $('state(functions=power_consumption)').on(function (obj) { listeWerte(); });