Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Funktion zum umrechnen

    NEWS

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    Funktion zum umrechnen

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Matze1708 last edited by

      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

      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        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");

        1 Reply Last reply Reply Quote 0
        • M
          Matze1708 last edited by

          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)

          1 Reply Last reply Reply Quote 0
          • P
            pix last edited by

            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.

            1 Reply Last reply Reply Quote 0
            • M
              Matze1708 last edited by

              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?

              1 Reply Last reply Reply Quote 0
              • P
                pix last edited by

                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

                1 Reply Last reply Reply Quote 0
                • M
                  Matze1708 last edited by

                  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

                  1 Reply Last reply Reply Quote 0
                  • M
                    Matze1708 last edited by

                    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

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    871
                    Online

                    32.0k
                    Users

                    80.5k
                    Topics

                    1.3m
                    Posts

                    2
                    8
                    1675
                    Loading More Posts
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes
                    Reply
                    • Reply as topic
                    Log in to reply
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    The ioBroker Community 2014-2023
                    logo