Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. Blockly
  5. Schleifen und der Variablen-Scope

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    364

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    323

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    944

Schleifen und der Variablen-Scope

Geplant Angeheftet Gesperrt Verschoben Blockly
4 Beiträge 2 Kommentatoren 385 Aufrufe 1 Beobachtet
  • Ä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.
  • S Offline
    S Offline
    Sammy R.
    schrieb am zuletzt editiert von Sammy R.
    #1

    Moin,

    ich wollte für mehrere Devices das immer gleich Verhalten implementieren und bin nun beim Testen darüber gestolpert, dass ich leider den Variablen-Scope in Blockly (der mir vorher nicht so klar war) beachtet habe.

    Wenn ich den Blick in die JS-Darstellung von Blockly richtig deute, dann werden alle Variablen zu Beginn des gesamten Skriptes deklariert und sind damit quasi global (für das Skript.
    Für meine Anwendung - Tasmota-Results abfangen, Json Parsen und in entsprechenden Datenpunkt schreiben - gewinnt damit leider der letzte Schleifendurchlauf. Ausnahme ist hier die Registrierung des Events (on...), vermutlich, weil dies direkt beim Schleifendurchlauf passiert.

    Ich wollte für beide Devices jeweils den Trigger 'beobachten', diesen Parsen und in den dazugehörigen Datenpunkt schreiben.
    Der Trigger selbst funktioniert, in der Schleife wird dann aber Trigger-Datenpunkt und Trigger-Zielpunkt des letzten Devices genutzt (halt das, was als letztes in den Variablen steht).

    schleifeGlobaleVars.png

    Gibt es einen Weg. Das doch mit Blockly zu realisieren? Eine JS-Funktion scheint ja auch nicht zu helfen, da deren Variablen direkt auch direkt oben im Skript deklariert werden.

    paul53P S 2 Antworten Letzte Antwort
    0
    • S Sammy R.

      Moin,

      ich wollte für mehrere Devices das immer gleich Verhalten implementieren und bin nun beim Testen darüber gestolpert, dass ich leider den Variablen-Scope in Blockly (der mir vorher nicht so klar war) beachtet habe.

      Wenn ich den Blick in die JS-Darstellung von Blockly richtig deute, dann werden alle Variablen zu Beginn des gesamten Skriptes deklariert und sind damit quasi global (für das Skript.
      Für meine Anwendung - Tasmota-Results abfangen, Json Parsen und in entsprechenden Datenpunkt schreiben - gewinnt damit leider der letzte Schleifendurchlauf. Ausnahme ist hier die Registrierung des Events (on...), vermutlich, weil dies direkt beim Schleifendurchlauf passiert.

      Ich wollte für beide Devices jeweils den Trigger 'beobachten', diesen Parsen und in den dazugehörigen Datenpunkt schreiben.
      Der Trigger selbst funktioniert, in der Schleife wird dann aber Trigger-Datenpunkt und Trigger-Zielpunkt des letzten Devices genutzt (halt das, was als letztes in den Variablen steht).

      schleifeGlobaleVars.png

      Gibt es einen Weg. Das doch mit Blockly zu realisieren? Eine JS-Funktion scheint ja auch nicht zu helfen, da deren Variablen direkt auch direkt oben im Skript deklariert werden.

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

      @sammy-r sagte: Gibt es einen Weg. Das doch mit Blockly zu realisieren?

      Objekt ID und Wert sind lokale Variablen. Alternative zur Schleife:

      Blockly_temp.JPG

      Noch einfacher: Ersetzen von "RESULT" durch "teleperiod" in der Target-ID.

      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

      S 1 Antwort Letzte Antwort
      0
      • S Sammy R.

        Moin,

        ich wollte für mehrere Devices das immer gleich Verhalten implementieren und bin nun beim Testen darüber gestolpert, dass ich leider den Variablen-Scope in Blockly (der mir vorher nicht so klar war) beachtet habe.

        Wenn ich den Blick in die JS-Darstellung von Blockly richtig deute, dann werden alle Variablen zu Beginn des gesamten Skriptes deklariert und sind damit quasi global (für das Skript.
        Für meine Anwendung - Tasmota-Results abfangen, Json Parsen und in entsprechenden Datenpunkt schreiben - gewinnt damit leider der letzte Schleifendurchlauf. Ausnahme ist hier die Registrierung des Events (on...), vermutlich, weil dies direkt beim Schleifendurchlauf passiert.

        Ich wollte für beide Devices jeweils den Trigger 'beobachten', diesen Parsen und in den dazugehörigen Datenpunkt schreiben.
        Der Trigger selbst funktioniert, in der Schleife wird dann aber Trigger-Datenpunkt und Trigger-Zielpunkt des letzten Devices genutzt (halt das, was als letztes in den Variablen steht).

        schleifeGlobaleVars.png

        Gibt es einen Weg. Das doch mit Blockly zu realisieren? Eine JS-Funktion scheint ja auch nicht zu helfen, da deren Variablen direkt auch direkt oben im Skript deklariert werden.

        S Offline
        S Offline
        Sammy R.
        schrieb am zuletzt editiert von
        #3

        @sammy-r
        Ich habe ein Lösung gefunden, bei ich den inneren Teil der Schleife noch die beiden Datenpunkte ermittelt und dann eine globale Funktion aufruft, die unter der Haube dann auch an ein Blockly weiterleiten kann.

        Irgendwie unschön, ich benötige die Funktionalität zwar mehrfach, allerdings würde ich gern Logs einbauen und muss manchmal mehr als nur einen einzelnen Datenpunkt setzen.

        Ich wäre trotzdem dankbar für einen Tipp, ob das irgendwie schöner geht.
        Irgendwie kann ich nicht glauben, dass man in ioBroker eine Liste von gleichen Devices alle einzelne via Copy and Paste anbinden muss.

        So ganz zuhause bin ich in JS nicht und ich sehe hier auch Vorteile in grafischen Skripten.

        1 Antwort Letzte Antwort
        0
        • paul53P paul53

          @sammy-r sagte: Gibt es einen Weg. Das doch mit Blockly zu realisieren?

          Objekt ID und Wert sind lokale Variablen. Alternative zur Schleife:

          Blockly_temp.JPG

          Noch einfacher: Ersetzen von "RESULT" durch "teleperiod" in der Target-ID.

          S Offline
          S Offline
          Sammy R.
          schrieb am zuletzt editiert von Sammy R.
          #4

          @paul53 Das war jetzt parallel zu meiner Erkenntnis. Dein Skript muss ich jetzt erst mal durchgehen. Sieht so ganz anders als erwartet aus.

          Noch einfacher: Ersetzen von "RESULT" durch "teleperiod" in der Target-ID.
          RESULT ist ein fixer Datenpunkt von Tasmota, teleperiod ist von mir angelegt und muss deshalb von mir gesetzt werden (deshalb das JSON-Parsen).

          Die lokalen Variablen hatte ich gar nicht mehr drauf.
          Ich muss mal nachlesen, wo es die überall gibt.

          Wie komme ich denn an ObjektId und Wert 'mit dem Pfeil davor' ran? Ich bekomme die nicht angezeigt?
          Edit: Ich vermute mal, nur bei Schleifen etc, die auf Datenpunkten arbeiten.

          Das scheint hau laufen:
          innerFunc.png

          Danke für den Denkanstoß und das helfen in anderen Posts, an denen ich mich bedient habe ;-)

          1 Antwort Letzte Antwort
          0

          Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

          Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

          Mit deinem Input könnte dieser Beitrag noch besser werden 💗

          Registrieren Anmelden
          Antworten
          • In einem neuen Thema antworten
          Anmelden zum Antworten
          • Älteste zuerst
          • Neuste zuerst
          • Meiste Stimmen


          Support us

          ioBroker
          Community Adapters
          Donate

          547

          Online

          32.8k

          Benutzer

          82.8k

          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