Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [gelöst] Datenpunkt Echo vermeiden - Wie?

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.8k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    898

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

[gelöst] Datenpunkt Echo vermeiden - Wie?

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascriptmultimedia
5 Beiträge 4 Kommentatoren 574 Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • oberstelO Offline
    oberstelO Offline
    oberstel
    schrieb am zuletzt editiert von oberstel
    #1

    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 CeeJ Geko EderG 2 Antworten Letzte Antwort
    0
    • oberstelO 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 CeeJ Online
      Jey CeeJ Online
      Jey Cee
      Developer
      schrieb am zuletzt editiert von
      #2

      @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.

      Persönlicher Support
      Spenden -> paypal.me/J3YC33

      oberstelO 1 Antwort Letzte Antwort
      0
      • Jey CeeJ Jey Cee

        @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.

        oberstelO Offline
        oberstelO Offline
        oberstel
        schrieb am zuletzt editiert von
        #3

        @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 Antwort Letzte Antwort
        0
        • oberstelO 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?

          Geko EderG Offline
          Geko EderG Offline
          Geko Eder
          schrieb am zuletzt editiert von
          #4

          @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-

          PackElendP 1 Antwort Letzte Antwort
          0
          • Geko EderG Geko Eder

            @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-

            PackElendP Offline
            PackElendP Offline
            PackElend
            schrieb am zuletzt editiert von
            #5

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

            1 Antwort Letzte Antwort
            0
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

            ioBroker
            Community Adapters
            Donate

            715

            Online

            32.6k

            Benutzer

            82.2k

            Themen

            1.3m

            Beiträge
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
            ioBroker Community 2014-2025
            logo
            • Anmelden

            • Du hast noch kein Konto? Registrieren

            • Anmelden oder registrieren, um zu suchen
            • Erster Beitrag
              Letzter Beitrag
            0
            • Home
            • Aktuell
            • Tags
            • Ungelesen 0
            • Kategorien
            • Unreplied
            • Beliebt
            • GitHub
            • Docu
            • Hilfe