NEWS
Funktion zum umrechnen
-
Hallo,
Ich möchte ein Skript bauen welches mir einen Wert aufgrund eines Objektes errechnen.
Idee: Die ObjektID gibt mir den Wert 98 aus.
Jetzt rechne ich das so um das 2 raus kommt.
Soweit kein Thema.
Aber könnte ich das Skript so bauen, dass ich in der Anwendung dieses Skript anspreche, gefolgt von der Objekt id und es mir dann diesen Wert ausspuckt?
Im Prinzip eine Funktion.
Vielen Dank für die Hilfe.
Gesendet von iPhone mit Tapatalk
-
Hallo Matze1708,
wenn du der Funktion nur die ObjektID übergibst, dann lädt die Funktion den Wert aus der ObjektID.
Im Prinzip:
function berechneWert (OID) { var wert = getState(OID).val; if (typeof wert === "number") { // Berechnung // hier nur Beispiel var rueckgabe = (wert + wert) / 2; // Ende Berechnung return (rueckgabe); } else { log('OID enthält keinen Zahlenwert','warn'); return(0); } } ````Es wird geprüft, ob das Objekt eine Zahl enthält, dann eine Berechnung ausgeführt und das Ergebnis zurueckgegeben. Wenn das Objekt keine Zahl ist, wird hier 0 zurückgegeben. Kann aber auch was anderes sein. Gruß Pix EDIT: Aufruf
berechneWert("javascript.0.Objekt");
-
Ich glaube das ist genau das was ich suche.
Wenn ich es bei mir eingebe und die Function aus einem weiteren Skript öffne kommt das hier raus:
javascript.0 script.js.Skript1: ReferenceError: berechneWert is not defined at script.js.Skript1:1:1 at ContextifyScript.Script.runInContext (vm.js:35:29)
-
Ja, das ist klar. Dann musst du diese Funktion in einem Skript speichern und unter global ablegen. Dann kann sie aus anderen Skripten aufgerufen werden.
-
Habe ich jetzt getan.
Eine bekomme aber noch kein Ergebnis zurück.
Habe es mal über VIS probiert und über ein weiteres Skript.
Im weiteren Skript steht das hier drin:
berechneWert("knx.0.25_Meter.Bewegungsmeldung.25_M_Schleuse_BWM_interner_Lichtwert_1");
Im Vis habe ich den Roten Punkt genommen und als ObJectID das obige eingetragen.
Ist das so richtig?
-
Jetzt verstehe ich erst, was du willst.
Das Ergebnis soll also in VIS dargestellt werden. :idea:
Dazu musst du einen neues Objekt erstellen, welches dann das Ergebnis aufnimmt.
Es ist dann besser, die Funktion wieder aus dem globalen Ordner herauszunehmen und in das Skript zu packen, in dem du den Startwert abfragst.
Ist das Quellobjekt "knx.0.25_Meter.Bewegungsmeldung.25_M_Schleuse_BWM_interner_Lichtwert_1" immer gleich oder variiert das?
Verwendest du die Funktion also nur einmal oder für mehrere Objekte?
Packe also die Funktion in das von dir erwähnte weitere Skript oben rein:
function berechneWert (OID) { createState("Berechnung.Zielwert", 0); var wert = getState(OID).val; if (typeof wert === "number") { // Berechnung // hier nur Beispiel var rueckgabe = (wert + wert) / 2; // Ende Berechnung setState("Berechnung.Zielwert", rueckgabe); } else { log('OID enthält keinen Zahlenwert','warn'); setState("Berechnung.Zielwert", 0); } }
Der Wert steht nun im Objekt "javascript.INSTANZ.Berechnung.Zielwert"
Gruß
Pix
-
Hallo, danke für deine Hilfe.
Die Berechnung würde für sehr viele Objekte sein.
Ich wollte mir sparen für jedes Objekt noch ein Skript anzulegen.
Sondern nur den Objektaufruf durch die Berechnung zu verändern.
Gesendet von iPhone mit Tapatalk
-
Eigentlich will ich das Ergebnis in einem Adapter weiter verwenden , weil dieser leider genau den umgekehrten Wert erwartet wie er geliefert bekommt.
Er sagt das Fenster ist auf obwohl es zu ist.
Weil in meinem Fall der Wert 0% aus dem Aktor kommt das heisst offen und HomeKit bei 0% denkt es wäre zu.
Gesendet von iPhone mit Tapatalk