Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [Gelöst] - Vis 1 Editor Skript: setzen eines Objekt-Wertes?

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Gelöst] - Vis 1 Editor Skript: setzen eines Objekt-Wertes?

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

      Hallo ioBroker-Forum!

      Ein Skript im vis-editor liest die Auflösung des Fensters aus, indem die vis läuft und bei Änderung der Auflösung, reagiert das Skript. Frage: kann man per Vis-Skript die Werte eines Buttons (oder eins beliebigen anderen Widgets) oder noch besser eines Objekt-Wertes per Editor-Skript ändern?

      Ziel: Ändern der Auflösung (zB durch Drehen eines iPads) soll automatisch die View ändern.
      Anmerkung: Ein Wechsel auf Vis 2 ist erst einmal nicht vorgesehen.

      Aufbau:

      View_1 (1024x768)
      View_2 (z.B.: 768x1024)

      // SKRIPT IM VIS EDITOR
      const mq = window.matchMedia('(min-width: 1024px)');
      
      function updateView(mq) {
        if (mq.matches) {
          console.log('Große Auflösung');
          // kann man jetzt einen Widget/Button/Objekt-Wert ändern lassen?
          return true;
        } else {
          console.log('Kleine Auflösung');
          // kann man jetzt einen Widget/Button/Objekt-Wert ändern lassen?
          return false;
        }
      }
      updateView(mq);
      mq.addEventListener('change', updateView);
      

      Objekte/Datenpunkt: 0_userdata.0.isHighResolution

      JavaScript im Adapter:

      on('0_userdata.0.isHighResolution', function(obj) {
          var state = getState('0_userdata.0.isHighResolution').val;
          const smallView = 'View_2';
          const largeView = 'View_1';
          const instance = 'XXXXXXX'
          
          if (state) {
              setState('vis.0.control.instance', instance);
              setState('vis.0.control.data', largeView);
              setState('vis.0.control.command',  'changeView');
          } else {
              setState('vis.0.control.instance', instance);
              setState('vis.0.control.data', smallView);
              setState('vis.0.control.command',  'changeView');
          }
      });
      

      Aktueller Workaround:
      In der vis befindet sich ein Button, der den Objektwert beim Drücken zwischen true/false wechselt.
      Das Wechseln des Objektwertes triggert das Javascript, welches die View für die spezielle Instanz ändert.

      liv-in-sky 1 Reply Last reply Reply Quote 0
      • liv-in-sky
        liv-in-sky @ioBit last edited by

        @iobit sagte in Vis 1 Editor Skript: setzen eines Objekt-Wertes?:

        eines Objekt-Wertes per Editor-Skript ändern?

        meinst du einen datenpunkt ändern ?

        dann:

        vis.setValue('0_userdata.0.CONTROL-OWN.AAATEST.ATESTBildUpload.uplaodBase64',myvalue);
        
        I 1 Reply Last reply Reply Quote 1
        • I
          ioBit @liv-in-sky last edited by

          @liv-in-sky sagte in Vis 1 Editor Skript: setzen eines Objekt-Wertes?:

          @iobit sagte in Vis 1 Editor Skript: setzen eines Objekt-Wertes?:

          eines Objekt-Wertes per Editor-Skript ändern?

          meinst du einen datenpunkt ändern ?

          dann:

          vis.setValue('0_userdata.0.CONTROL-OWN.AAATEST.ATESTBildUpload.uplaodBase64',myvalue);
          

          Vielen Dank für die rasche und korrekte Antwort!
          Es hat funktioniert. Mit "vis.setValue" kann ich den Datenpunkt setzen und die Änderung triggert mein Skript.

          A 1 Reply Last reply Reply Quote 0
          • A
            Andreas.S @ioBit last edited by

            @iobit
            Hi,
            ich möchte in einer User-Variablen festhalten, wenn z.B. vom Startbildschirm abgesprungen wird.
            Dazu habe ich einen Datenpunkt angelegt, den ich nun mit diesem Vorgehen ansprechen wollte. Offenbar geht das nicht so, wie ich es gedacht hatte.
            Ich habe versucht den Code beim Widget in Skripte einzubetten. Das setzt aber nicht den Datenpunkt.

            vis.setValue('0_userdata.0.Variablen.VIS.Absprung_aus_Start',true);
            

            VIS-setstate.jpg

            liv-in-sky 2 Replies Last reply Reply Quote 0
            • liv-in-sky
              liv-in-sky @Andreas.S last edited by liv-in-sky

              @andreas-s sagte in [Gelöst] - Vis 1 Editor Skript: setzen eines Objekt-Wertes?:

              vom Startbildschirm abgesprungen wird

              das ist wohl dein trigger - kommt aber nicht in deinem script vor - was genau bedeutet abgesprungen vom startbildschirm

              dein script wird einmal ausgeführt, wenn du die seite (bzw vis-project) aufrufst - bzw wenn du einen seiten-reload machst - mehr passiert da nicht

              A 1 Reply Last reply Reply Quote 0
              • liv-in-sky
                liv-in-sky @Andreas.S last edited by

                @andreas-s

                nebenbei - je nachdem, wie deine vis aufgebaut ist, sieht man auch in den dp, welche seite geöffnet ist

                Image 061.png

                A 1 Reply Last reply Reply Quote 0
                • A
                  Andreas.S @liv-in-sky last edited by

                  @liv-in-sky
                  Vielen Dank.
                  Ich habe erst jetzt gesehen, dass das Skript an der gesamten View hängt.
                  Ich bin fälschlicher Weise davon ausgegangen, dass es am Widget-Objekt (z.B. dem Navigations-Widget) hängt und durch das getriggert wird.

                  1 Reply Last reply Reply Quote 0
                  • A
                    Andreas.S @liv-in-sky last edited by

                    @liv-in-sky
                    Gibt es da auch eine Möglichkeit zu sehen auf welchem Gerät die VIS Seite geöffnet wurde?

                    Beispiel: Ich habe ein Tablet im Flur mit Kiosk-Browser. Wenn jemand im Vorbeigehen sich etwas ansieht, möchte ich das nachher wieder zurückstellen. Nicht so, wenn ich das VIS auf dem PC nutze.

                    liv-in-sky 1 Reply Last reply Reply Quote 0
                    • liv-in-sky
                      liv-in-sky @Andreas.S last edited by

                      @andreas-s in den daten punten oben gibt es instance dp - der sagt das aus

                      du kannst das da ablesen und sogar setzen und die tablets wechsel die seite

                      mach die vis editor seite auf, auf dem tablet, dass du nutzt und gehe im viseditor unter tools - dort kannst du die instanz setzen

                      Image 062.png

                      einziges problem - wenn du den cache des browser löscht, ist die instanz auch weg und muss neu gesetzt werden

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      582
                      Online

                      31.8k
                      Users

                      80.0k
                      Topics

                      1.3m
                      Posts

                      3
                      9
                      709
                      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