Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. On Change nur bei Änderung über vis

    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

    On Change nur bei Änderung über vis

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

      Ich meine, ich hatte da schon mal eine Lösung gehabt, stehe aber gerade total auf dem Schlauch.

      Ich würde gerne ein Script erstellen, dass nur bei Änderung einer Variable reagiert, die man über die vis geändert hat.

      Aktuell läuft es so

      on({ id: "viessmann.0.get.VitoBetriebsart", change: 'ne'}, function(obj) {
          setState("viessmann.0.set.VitoBetriebsart", obj.newState.val);
      });
      

      Das Script reagiert dann aber auch, wenn die Variable von einem anderen Adapter oder von sich selbst geändert hat.

      1 Reply Last reply Reply Quote 0
      • htrecksler
        htrecksler Forum Testing last edited by

        ich würde es so machen…

        einen Datenpunkt anlegen (bool)

        Diesen Datenpunkt über VIS Schalten und darauf im Script reagieren.

        1 Reply Last reply Reply Quote 0
        • N
          NightWatcher last edited by

          Habe ich auch erst überlegt, dann wird aber der neue Datenpunkt nicht vom Adapter aktualisiert.

          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 last edited by

            @NightWatcher:

            dann wird aber der neue Datenpunkt nicht vom Adapter aktualisiert. `
            Auch das kann man per Skript lösen.

            var vitoBa = getState("viessmann.0.get.VitoBetriebsart").val;
            setState("javascript.0.vis.VitoBetriebsart", vitoBa);
            
            on({ id: "viessmann.0.get.VitoBetriebsart", change: 'ne'}, function(obj) {
                if(obj.state.val != vitoBa) {
                   vitoBa = obj.state.val;
                   setState("javascript.0.vis.VitoBetriebsart", vitoBa);
                }
            });
            
            on({ id: "javascript.0.vis.VitoBetriebsart", change: 'ne'}, function(obj) {
                vitoBa = obj.state.val;
                setState("viessmann.0.set.VitoBetriebsart", vitoBa);
            });
            
            1 Reply Last reply Reply Quote 0
            • htrecksler
              htrecksler Forum Testing last edited by

              muss er das denn? Ich würde den "neuen" Datenpunkt nur als Auslöser nehmen und ihn am Ende des Scriptes auch wieder auf False zurückstellen.

              Edit…oder so wie Paul geschrieben hat, aber ich glaube das muss gar nicht sein.

              1 Reply Last reply Reply Quote 0
              • apollon77
                apollon77 last edited by

                An sich sollte in obj.state.from drin stehen welcher Adapter den neuen Wert gesetzt hat. Bei vis sollte da System.adapter.vis.0 stehen … an sich sollte man das nutzen können

                1 Reply Last reply Reply Quote 0
                • N
                  NightWatcher last edited by

                  Danke das war es. Hätte mir das Objekt einfach mal ausgeben lassen sollen. Dann wäre es mir vermutlich selbst wieder aufgefallen. 8-)

                  1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 last edited by

                    @NightWatcher:

                    sollte in obj.state.from drin stehen welcher Adapter den neuen Wert gesetzt hat. Bei vis sollte da System.adapter.vis.0 stehen `
                    Ein Test mit VIS ergab für obj.state.from: system.adapter.web.0

                    @NightWatcher:

                    Aktuell läuft es so

                    on({ id: "viessmann.0.get.VitoBetriebsart", change: 'ne'}, function(obj) {
                        setState("viessmann.0.set.VitoBetriebsart", obj.newState.val);
                    });
                    ```` `  
                    

                    Wofür ist das überhaupt nötig ? Es müsste auch ohne das Skript funktionieren (ack = false).

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

                      Hallo,

                      ich nutze das bei einigen Logiken, um herauszufiltern, ob die Eingabe aus VIS gemacht wurde. Dann kommt die Eingabe (zum Beispiel Nachtruhe einschalten) von einem Menschen und nicht von einem Timer o.ä.

                      Auf diese Weise lassen sich auch die Logs präzisieren ("Nachtruhe per VIS eingeschaltet" / "Nachtruhe per Zeitsteuerung eingeschaltet")

                      Die on-Funktion ist ja https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md#on–-subscribe-on-changes-or-updates-of-some-state. Es gibt auch eine Negierung von From.

                      fromNe - New Value is not from defined adapter

                      Damit kann man (leichte) Sicherheitsschranken bauen und so zB verhindern, dass bestimmte Aktionen per VIS (oder einen anderen Adapter) gestartet werden, für die eigentlich eine on-Funktion einen Datenpunkt überwacht.

                      Gruß

                      Pix

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      725
                      Online

                      31.9k
                      Users

                      80.2k
                      Topics

                      1.3m
                      Posts

                      5
                      9
                      4031
                      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