NEWS
[GELÖST] state auslesen und state setzen
-
Hi,
ich versuche mich gerade eine JS zu schreiben, ich möchte es irgendwann auch verstehen, die folgendes tun soll:
1. Aus "dwd.0.warning.text" auslesen was da steht und mit z.B. obj.newState.val == "FROST" vergleichen.
2. Wenn dies übereinstimmt, dann soll er einen Wert in ein neuen state schreiben.
Mein Versuch:
createState(idWarn, "", {type: 'string'}); schedule('1 0 * * *', function() on('dwd.0.warning.text', function(obj) { if (obj.newState.val == "FROST") { setState("Warn","1"); } if (obj.newState.val == "GLÄTTE") { setState("Warn","2"); } if (obj.newState.val == "STURM") { setState("Warn","3"); } } setState(idWarn, Warn);Gruß,
Tom
-
const idWarn = 'DWD.Warnung'; createState(idWarn, "", {type: 'string'}); on('dwd.0.warning.text', function(obj) { var Warn = "0"; if (obj.newState.val == "FROST") Warn = "1"; if (obj.newState.val == "GLÄTTE") Warn = "2"; if (obj.newState.val == "STURM") Warn = "3"; setState(idWarn, Warn, true); }); -
aber es wird kein State geschrieben obwohl dwd.o.warning.text = FROST ist. `
Der Trigger reagiert nur auf Änderung des Inhalts des Datenpunktes 'dwd.0.warning.text'. Solange der Inhalt auf konstant "FROST" bleibt, passiert nichts. Wenn bei Skriptstart der Datenpunkt "javascript.0.DWD.Warnung" auch gesetzt werden soll, dann muss das Script erweitert werden.const idWarn = 'DWD.Warnung'; const idText = 'dwd.0.warning.text'; function setWarn(obj) { var Warn = "0"; if (obj.newState.val == "FROST") Warn = "1"; if (obj.newState.val == "GLÄTTE") Warn = "2"; if (obj.newState.val == "STURM") Warn = "3"; setState(idWarn, Warn, true); } createState(idWarn, "", {type: 'string'}, function() { var dp = getObject(idText); dp.newState = getState(idText); setWarn(dp); }); on(idText, setWarn); // Triggert bei Wertänderung -
Anmerkung: Gibt es einen Grund, weshalb Du den Ziel-Datenpunkt vom Typ "string" deklariert hast ? Typ "number" wäre naheliegender.
Du benutzt die "veraltete" Eigenschaft newState, die zwar (aus dem Grund der Kompatibilität) gültig ist, aber schon seit einiger Zeit durchdie Eigenschaft state ersetzt wurde. In meiner Schreibweise benutze ich den Variablenbezeichner dp für Datenpunkte, die sämtliche Eigenschaften wie common, native, type, state und oldState enthalten. Deshalb modifiziere ich das letzte Script in diese Richtung:
const idWarn = 'DWD.Warnung'; const idText = 'dwd.0.warning.text'; function setWarn(dp) { var Warn = 0; if (dp.state.val == "FROST") Warn = 1; if (dp.state.val == "GLÄTTE") Warn = 2; if (dp.state.val == "STURM") Warn = 3; setState(idWarn, Warn, true); } createState(idWarn, 0, {type: 'number'}, function() { var obj = getObject(idText); obj.state = getState(idText); setWarn(obj); }); on(idText, setWarn); // Triggert bei Wertänderung -
Guten Morgen Paul,
erstmal, Danke, Danke und nochmal Danke.
Der Grund warum ich den Typ "String" gewählt habe ist Copy&Paste…
Ich versuche gerade endlich Javascript zu verstehen und zu Lernen und deswegen versuche ich mich an kleinen Scripts um zu verstehen wie sieh funktionieren.
Es ist für mich sehr Hilfreich das du mir auch bestimmte Zustände erklärt hast, wie z.B. das der Datenpunkt erst Aktuallisiert wird wenn er geändert wird und mir aber auch aufzeigst wie mann dies erzwingen kann.
Vielen Dank, da habe ich wieder etwas gelernt! :D
Schöne Ostern und Gruß,
Tom
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden