NEWS
[gelöst] createState überschreibt Daten?!
-
Hallo allerseits. Ich bin jetzt eine Woche mit iobroker am experimentieren und da ich nirgends ein script mit vis für eine Zeitschaltung gefunden habe was mir taugt, dacht ich, schreib ich selber. Mit JS an sich hab ich Vorkenntnisse, aber bestimmt 10 Jahre nix mehr gemacht. Mein aktuelles Problem ist, dass ich zwar mit createState wunderbar Datenpunkte anlegen kann bei Scriptstart und auch Ids zuweisen usw.
Dazu hab ich ein kleines vis gebaut welche die Daten sauber einträgt. Nur, bei jedem Scriptdurchlauf sind die Daten vom vis wieder weg und die defaults eingetragen. Was mach ich falsch?Das vis dazu:
-
Hallo
hast du dazu schon irgend eine Lösung gefunden???
Mir geht es aktuell auch so, aber nur bei einem iobroker, von 5 die ich betreue -
@Pittini hi
ich weiß zwar nicht, ob meine scripts, die sind, die dir nicht gefallen - aber hier wäre ein script, welches herunterzählt und man mit einem steuerscript ansprechen könnte
https://forum.iobroker.net/topic/22574/vorlage-zeit-herunterzählen-bis-googletermin-eintritt?page=1
(nennt sich "das js-script") - zählt runter bis zum angegebene termin und kann in der vis gut dargestellt werden (funktioniert auch bei /nachiobroker neustart)
oder mit dem script - eine art stoppuhr - welche man auch steuern kann (blockly)
https://forum.iobroker.net/topic/22532/vorlage-blockly-script-für-stoppuhr-laufzeiten-aufzeichen?page=1man könnte wohl mit beiden eine art zeitsteuerung realisieren
es gibt auch noch jmd, der einen countdown adapter macht
https://forum.iobroker.net/topic/22626/aufruf-countdown-adapter-testen?page=1 -
Mir geht es aktuell auch so, aber nur bei einem iobroker, von 5 die ich betreue
Welche Versionen haben js-controller und Javascript-Adapter ? Bei meinen Versionen js-controller 1.5.9 und JS-Adapter 4.1.13 (von Github) überschreibt createState() keine Werte.
-
@Pittini sagte in createState überschreibt Daten?!:
Was mach ich falsch?
Ich sehe den Fehler auch nicht. Allerdings ist der Code schwer zu lesen, kannst du bitte innerhalb des Spoilers noch die Code-Tags anfügen?
createState() kann gezwungen werden, den Datenpunkt neu anzulegen, wenn man z auf true setzt (force creation).
createState(x, y, z, {...});
Bei dir ist das nicht der Fall.
-
@pix Ich hab inzwischen die Lösung gefunden Es lag tatsächlich an der CreateState Syntax.
So funktionierts nicht
createState(praefix + x + ".Aktiv", false, { read: true, write: true, name: "Timer aktiv", type: "boolean", role: "switch", def: false }); //Legt fest ob der Timer aktiv ist
So funktionierts
createState(praefix + x + ".Aktiv", false, false, { read: true, write: true, name: "Timer aktiv", type: "boolean", role: "switch", def: false }); //Legt fest ob der Timer aktiv ist
-
@liv-in-sky Hi,
danke für die Links, die hatte ich tatsächlich schon gefunden, durchgeguggt und paar Ideen geholt. Is aber nix auch nur annähernd so wie ich das will.
Inzwischen hab ich das Ding auch fertig und im Testbetrieb. Werds dann vermutlich mal als Projekt vorstellen. -
@Pittini sagte in [gelöst] createState überschreibt Daten?!:
So funktionierts nicht
Zur Erklärung: Der 3. Parameter (ein Objekt) wird von JS als truthy eingestuft - lose übersetzt "wahr oder so". Viele Prüfungen werden in JS so geschrieben, auch in ioBroker:
if (variable) { ... }
. Diese Bedingung ist wahr, wennvariable
truthy ist.
Da der dritte Parameter für das Erzwingen der State-Erstellung steht, wird mit der ersten Syntax (Objekt anstelle des Parameters) also dieser Code-Zweig ausgeführt.Mal aus Interesse, was sagt denn die Syntaxhilfe, wenn du den Befehl so eingibst?
-
@AlCalzone said in [gelöst] createState überschreibt Daten?!:
Mal aus Interesse, was sagt denn die Syntaxhilfe, wenn du den Befehl so eingibst?
Gar nix, die findet das ok. Allerdings mault die immer bei mehrdimensionalen Arrays und bei setTimeout und setIntervall obwohls funktioniert. Is auch bei importierten Scripts das selbe, ich ignoriers inzwischen einfach.
-
@Pittini sagte in [gelöst] createState überschreibt Daten?!:
Gar nix, die findet das ok
Im Screenshot hast du auch den dritten Parameter als Boolean
-
@AlCalzone said in [gelöst] createState überschreibt Daten?!:
Im Screenshot hast du auch den dritten Parameter als Boolean
Versteh den Kommentar nicht, ist doch im Codeschnipsel genauso? Oder meinst Du was anderes?
-
@Pittini Ich meinte den Code-Schnipsel, der nicht funktioniert Eigentlich sollte die Syntax-Hilfe da meckern.
-
Hab das nochmal als neuen Thread aufgemacht