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. Ändern einer Variable in einer Funktion

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    280

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

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

Ändern einer Variable in einer Funktion

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
6 Beiträge 3 Kommentatoren 366 Aufrufe 2 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.
  • oetziO Offline
    oetziO Offline
    oetzi
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    ich habe eine Funktion die einen übergebenen Text mit einer übergebenen Lautstärke auf einem Echo ausgibt. Das funktioniert soweit.
    Jetzt wollte ich die Funktion dahingehend erweitern, dass sie sich am Anfang die aktuelle/ursprüngliche Lautstärke merkt um diese nach erfolgter Sprachausgabe am Ende wiederherzustellen.

    Nur funktioniert das merken nicht und ich habe keine Idee warum.
    Hier mal der relevante Teil der Funktion:
    funktion.JPG
    Der Output ist
    40 (aktuell eingestellte Lautstärke)
    22 (Testwert, der eigentlich mit den 40 überschrieben werden sollte)

    Die Debugausgabe von 40 zeigt, dass "Wert von ObjektID EchoSpeakVolumeID" das liefert, was ich erwarte.
    Warum funktioniert dann das erste "schreibe" nicht?

    Übrigens: Das untere "schreibe" funktioniert wunderbar und ist ja quasi nur das umgekehrte des oberen "schreibe"

    paul53P 1 Antwort Letzte Antwort
    0
    • oetziO oetzi

      Hallo zusammen,

      ich habe eine Funktion die einen übergebenen Text mit einer übergebenen Lautstärke auf einem Echo ausgibt. Das funktioniert soweit.
      Jetzt wollte ich die Funktion dahingehend erweitern, dass sie sich am Anfang die aktuelle/ursprüngliche Lautstärke merkt um diese nach erfolgter Sprachausgabe am Ende wiederherzustellen.

      Nur funktioniert das merken nicht und ich habe keine Idee warum.
      Hier mal der relevante Teil der Funktion:
      funktion.JPG
      Der Output ist
      40 (aktuell eingestellte Lautstärke)
      22 (Testwert, der eigentlich mit den 40 überschrieben werden sollte)

      Die Debugausgabe von 40 zeigt, dass "Wert von ObjektID EchoSpeakVolumeID" das liefert, was ich erwarte.
      Warum funktioniert dann das erste "schreibe" nicht?

      Übrigens: Das untere "schreibe" funktioniert wunderbar und ist ja quasi nur das umgekehrte des oberen "schreibe"

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @oetzi
      Den Lautstärke-Wert in einer Variablen (nicht Datenpunkt) merken; übergebene Werte ausgeben und mit Verzögerung die alte Lautstärke schreiben. Stark verkürzt:

      Bild_2021-04-25_164511.png

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      oetziO 1 Antwort Letzte Antwort
      1
      • paul53P paul53

        @oetzi
        Den Lautstärke-Wert in einer Variablen (nicht Datenpunkt) merken; übergebene Werte ausgeben und mit Verzögerung die alte Lautstärke schreiben. Stark verkürzt:

        Bild_2021-04-25_164511.png

        oetziO Offline
        oetziO Offline
        oetzi
        schrieb am zuletzt editiert von
        #3

        @paul53
        ah ja, so geht es. Dank dir.

        Würde trotzdem noch gerne verstehen, wann genau man welchen Weg einsetzen muss, damit ich nicht immer try and error machen muss :-)

        Die Differenzierung die ich mir vorstellen kann ist, dass man "schreibe" nur für Werte von irgendwelchen Objekte nutzen darf und für Variablen eben den oben gezeigten Weg.
        Ist das korrekt?

        XenonX 1 Antwort Letzte Antwort
        0
        • oetziO oetzi

          @paul53
          ah ja, so geht es. Dank dir.

          Würde trotzdem noch gerne verstehen, wann genau man welchen Weg einsetzen muss, damit ich nicht immer try and error machen muss :-)

          Die Differenzierung die ich mir vorstellen kann ist, dass man "schreibe" nur für Werte von irgendwelchen Objekte nutzen darf und für Variablen eben den oben gezeigten Weg.
          Ist das korrekt?

          XenonX Offline
          XenonX Offline
          Xenon
          Forum Testing Developer
          schrieb am zuletzt editiert von
          #4

          @oetzi variablen sind immer local (also im RAM gespeichert). Hier holst du dir den Wert aus einem DP mit getState (in JS) oder "Wert vom...." in blockly und schreibst in die Variable.

          Wenn du einen state setzen möchtest, machst du das mit setState ('datenpunkt', wert) (in JS), übersetzt in blockly dann "schreibe Objekt ID ...). So steuerst du Datenpunkte in Adaptern an. Der Unterschied zwischen Schreibe und aktualisiere ist auch wichtig:

          Schreibe -> Hallo Adapter, setze mir bitte den Wert XYZ auf 1 -> Antwort Adapter: "Ok, 1 ist plausibel, das mache ich und bestätige dir das"
          Aktualisiere: -> Hallo Adapter, setze mir den Wert XYZ auf 1, du brauchst den nicht prüfen, das mache ich für dich. -> keine Reaktion vom Adapter und folglich keine Änderung des Datenpunktes (zumindest sollte es so sein)

          Wenn du in selbst erstellte Datenpunkte Werte schreiben möchtest, ist es dir überlassen ob "schreibe" oder "aktualisiere". Hier wird es dann nur interessant, auf was dein Trigger lauscht... ich hoffe, dass war ein wenig verständlich :) sonst einfach fragen

          wenn euch mein Beitrag geholfen hat, bewertet ihn bitte unten rechts :)

          oetziO 1 Antwort Letzte Antwort
          1
          • XenonX Xenon

            @oetzi variablen sind immer local (also im RAM gespeichert). Hier holst du dir den Wert aus einem DP mit getState (in JS) oder "Wert vom...." in blockly und schreibst in die Variable.

            Wenn du einen state setzen möchtest, machst du das mit setState ('datenpunkt', wert) (in JS), übersetzt in blockly dann "schreibe Objekt ID ...). So steuerst du Datenpunkte in Adaptern an. Der Unterschied zwischen Schreibe und aktualisiere ist auch wichtig:

            Schreibe -> Hallo Adapter, setze mir bitte den Wert XYZ auf 1 -> Antwort Adapter: "Ok, 1 ist plausibel, das mache ich und bestätige dir das"
            Aktualisiere: -> Hallo Adapter, setze mir den Wert XYZ auf 1, du brauchst den nicht prüfen, das mache ich für dich. -> keine Reaktion vom Adapter und folglich keine Änderung des Datenpunktes (zumindest sollte es so sein)

            Wenn du in selbst erstellte Datenpunkte Werte schreiben möchtest, ist es dir überlassen ob "schreibe" oder "aktualisiere". Hier wird es dann nur interessant, auf was dein Trigger lauscht... ich hoffe, dass war ein wenig verständlich :) sonst einfach fragen

            oetziO Offline
            oetziO Offline
            oetzi
            schrieb am zuletzt editiert von
            #5

            Vielen lieben Dank für die sehr gute Erklärung! Auch der Vergleich von JS und Blockly hilft fürs Verständnis. Wollte mir ohnehin demnächst mal die JS Welt angucken.

            @xenon said in Ändern einer Variable in einer Funktion:

            Schreibe -> Hallo Adapter, setze mir bitte den Wert XYZ auf 1 -> Antwort Adapter: "Ok, 1 ist plausibel, das mache ich und bestätige dir das"
            Aktualisiere: -> Hallo Adapter, setze mir den Wert XYZ auf 1, du brauchst den nicht prüfen, das mache ich für dich. -> keine Reaktion vom Adapter und folglich keine Änderung des Datenpunktes (zumindest sollte es so sein)

            Hierzu noch eine Nachfrage: Mit "keine Reakton vom Adapter" meinst du, dass er nichts ändert, wenn er den Datenpunkt nicht ändern kann, also z. B. der übergebene Wert vom Typ her nicht passt?

            Dann frage ich mich, wozu es überhaupt Aktualisiere gibt. Eine explizite Prüfung bzw. Rückmeldung ist doch im Zweifel immer besser, auch wenn ich es vorher selber prüfe. Kann sich ja schließlich immer ein Fehler einschleichen.

            XenonX 1 Antwort Letzte Antwort
            0
            • oetziO oetzi

              Vielen lieben Dank für die sehr gute Erklärung! Auch der Vergleich von JS und Blockly hilft fürs Verständnis. Wollte mir ohnehin demnächst mal die JS Welt angucken.

              @xenon said in Ändern einer Variable in einer Funktion:

              Schreibe -> Hallo Adapter, setze mir bitte den Wert XYZ auf 1 -> Antwort Adapter: "Ok, 1 ist plausibel, das mache ich und bestätige dir das"
              Aktualisiere: -> Hallo Adapter, setze mir den Wert XYZ auf 1, du brauchst den nicht prüfen, das mache ich für dich. -> keine Reaktion vom Adapter und folglich keine Änderung des Datenpunktes (zumindest sollte es so sein)

              Hierzu noch eine Nachfrage: Mit "keine Reakton vom Adapter" meinst du, dass er nichts ändert, wenn er den Datenpunkt nicht ändern kann, also z. B. der übergebene Wert vom Typ her nicht passt?

              Dann frage ich mich, wozu es überhaupt Aktualisiere gibt. Eine explizite Prüfung bzw. Rückmeldung ist doch im Zweifel immer besser, auch wenn ich es vorher selber prüfe. Kann sich ja schließlich immer ein Fehler einschleichen.

              XenonX Offline
              XenonX Offline
              Xenon
              Forum Testing Developer
              schrieb am zuletzt editiert von
              #6

              @oetzi aktualisiere ist zb bei alias sehr wichtig. Im Adapter wird immer geprüft ob der state plausibel ist und wird dann entweder nicht akzeptiert oder halt bestätigt

              wenn euch mein Beitrag geholfen hat, bewertet ihn bitte unten rechts :)

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


              Support us

              ioBroker
              Community Adapters
              Donate

              534

              Online

              32.7k

              Benutzer

              82.5k

              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