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] Datenpunkt Echo vermeiden - Wie?

    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] Datenpunkt Echo vermeiden - Wie?

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

      Liebe Scripter,

      aktuell probiere ich über ein kleines Script meinen Verstärker zu steuern. Hierbei habe ich folgenden Effekt den ich gerne vermeiden würde:

      Über den Datenpunkt VOLUME möchte ich die aktuelle Lautstärke sehen {read:true} und über den gleichen Datenpunkt diese auch ändern können {write:true}.

      Wenn ich die Lautstärke des Verstärkers am Gerät selber verändere, schickt dieser sofort ein entsprechendes Datenpaket mit dem neuen Volume Level heraus. Dieses wird in einem Script interpretiert und daraufhin der Datenpunkt mit dem neuen Wert aktualisiert:

      var volume = parseInt(read.subarray(14,16),10); 
             if (volume > 0 && volume < 100) {
                  setState(adapter+'.volume', volume, true);
              }
      

      Wenn ich die Lautstärke über den Datenpunkt im ioBroker ändere (z.B. über VIS mit Slider für Volume), erkennt das Skript die Veränderung und schickt daraufhin ein entspr. Kommando an den Verstärker, der dann die neue Lautstärke entspr. einstellt:

          on ({id:'javascript.0.Rotel.volume', ack: true}, function (obj) {
              console.log ('Set volume level to:'+obj.state.val);
              rotelWrite (0x30, obj.state.val);
          });
      

      Natürlich löst aber diese Veränderung beim Verstärker ein Datenpakt aus, bei dem der Verstärker dem Script mitteilen möchte welcher Volume Level eingestellt wurde, worauf der ioBroker die Veränderung bemerkt, den Wert aktualisiert und genau DIESE Veränderung wiederum an den Verstärker schickt. Dieser stellt den neun Wert ein und Schickt ein Datenpakt zurück usw. usw. usw. Das loopt dann so 20-30 mal und hört vermutlich wegen diverser Delays dann irgendwann auf. Ein Datenpunkt Echo so zu sagen 😉

      Wie macht man das richtig? Wenn man mit einem Datenpunkt Lesen und Schreiben möchte? Und die geschriebene Information über einen Umweg als lesende Information wieder zurück kommt? Das muss doch loopen... 😞

      Ich habe probiert beim Setzten des Datenpunktes ein ack: false mitzugeben und die Veränderung nur bei einem ack: true zu verarbeiten. Das klappt schon recht gut, ist aber nicht perfekt - Wäre das die richtige Lösung?

      Jey Cee Geko Eder 2 Replies Last reply Reply Quote 0
      • Jey Cee
        Jey Cee Developer @oberstel last edited by

        @oberstel dein Ansatz ist gut. Du kannst auch mit getObject das Objekt holen und dann auswerten woher die Änderung kommt. Das steht im objekt unter from.

        oberstel 1 Reply Last reply Reply Quote 0
        • oberstel
          oberstel @Jey Cee last edited by

          @Jey-Cee said in Datenpunkt Echo vermeiden - Wie?:

          @oberstel Du kannst auch mit getObject das Objekt holen und dann auswerten woher die Änderung kommt. Das steht im objekt unter from.

          Das ist ein guter Tipp!
          Ich habe das mal eingebaut:

          on ({id:'javascript.0.Rotel.volume'}, function (obj) {
                  if (getState(obj.id).from != 'system.adapter.javascript.0') {
                  console.log ('Set volume level to:'+obj.state.val);
                  rotelWrite (0x30, obj.state.val);
                  }
              });
          

          Klappt super und ist wesentlich besser als die acknowledge Lösung - Danke!!!

          1 Reply Last reply Reply Quote 0
          • Geko Eder
            Geko Eder @oberstel last edited by

            @oberstel Ich sehe dein Vertärker ist ein Rotel 😉 Ich hab auch einen und kämpfe ehrlich gesagt auch mit der Scriptsteuerung. Würde es dir was ausmachen dein Script sharen? Das würde mir helfen.
            Danke-

            PackElend 1 Reply Last reply Reply Quote 0
            • PackElend
              PackElend @Geko Eder last edited by

              @geko-eder @oberstel reden wir zufällig hierüber: https://github.com/oberstel/ioBroker.js-rotelControl?

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

              Support us

              ioBroker
              Community Adapters
              Donate

              716
              Online

              31.9k
              Users

              80.2k
              Topics

              1.3m
              Posts

              javascript multimedia
              4
              5
              394
              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