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. Variablen dynamisch erzeugen

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

Variablen dynamisch erzeugen

Geplant Angeheftet Gesperrt Verschoben JavaScript
12 Beiträge 2 Kommentatoren 729 Aufrufe 1 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.
  • freakyfreakyF Offline
    freakyfreakyF Offline
    freakyfreaky
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    ich würde gerne per globalen Script alle Variablen/States ermitteln welche per Funktion enum.functions.$sys_var definiert sind und diese als einzelne Variablen in allen Scripts zu Verfügung stellen. In meinem alten System (IP-Symcon) hatte ich dies per PHP Script als global include laufen und nach der foreach Schleife einen extract(sys_var). Leider bin Ich in Javascript noch nicht fit genug.

    Beispiel:
    Das script läuft durch und würde nun die Alexa Lautstärke als Variable zurück spielen. Genre kann der Name oder Ident entsprechend angepasst werden z.b. lautstaerke_alexa wenn es das einfacher macht. Könnte da jemand bitte helfen?

    44ad9f9e-47ef-4e50-b20b-dbddbe93002e-image.png

    paul53P 1 Antwort Letzte Antwort
    0
    • freakyfreakyF freakyfreaky

      Hallo zusammen,

      ich würde gerne per globalen Script alle Variablen/States ermitteln welche per Funktion enum.functions.$sys_var definiert sind und diese als einzelne Variablen in allen Scripts zu Verfügung stellen. In meinem alten System (IP-Symcon) hatte ich dies per PHP Script als global include laufen und nach der foreach Schleife einen extract(sys_var). Leider bin Ich in Javascript noch nicht fit genug.

      Beispiel:
      Das script läuft durch und würde nun die Alexa Lautstärke als Variable zurück spielen. Genre kann der Name oder Ident entsprechend angepasst werden z.b. lautstaerke_alexa wenn es das einfacher macht. Könnte da jemand bitte helfen?

      44ad9f9e-47ef-4e50-b20b-dbddbe93002e-image.png

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

      @freakyfreaky sagte: Funktion enum.functions.$sys_var

      Das $-Zeichen in der ID ist kontraproduktiv, da es bei RegExp das Ende bildet. Alle Datenpunkte mit der Funktion enum.functions.sys_var können per Selektor ermittelt werden:

      const sys_vars = $('*(functions=sys_var)');
      

      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

      freakyfreakyF 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @freakyfreaky sagte: Funktion enum.functions.$sys_var

        Das $-Zeichen in der ID ist kontraproduktiv, da es bei RegExp das Ende bildet. Alle Datenpunkte mit der Funktion enum.functions.sys_var können per Selektor ermittelt werden:

        const sys_vars = $('*(functions=sys_var)');
        
        freakyfreakyF Offline
        freakyfreakyF Offline
        freakyfreaky
        schrieb am zuletzt editiert von
        #3

        @paul53

        Hi Paul,

        vielen Dank für die fixe Hilfe. Das $-Zeichen muss nicht sein und habe Ich ersetzt.
        Als Ergebnis erhalte Ich nun:

        {'0':'0_userdata.0.Systemvariablen.Alexa.Lautstärke','length':1}
        

        Wie kann ich damit weiter arbeiten, wie z.b: setState / getState

        Grüße Andy

        paul53P 1 Antwort Letzte Antwort
        0
        • freakyfreakyF freakyfreaky

          @paul53

          Hi Paul,

          vielen Dank für die fixe Hilfe. Das $-Zeichen muss nicht sein und habe Ich ersetzt.
          Als Ergebnis erhalte Ich nun:

          {'0':'0_userdata.0.Systemvariablen.Alexa.Lautstärke','length':1}
          

          Wie kann ich damit weiter arbeiten, wie z.b: setState / getState

          Grüße Andy

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

          @freakyfreaky sagte: Wie kann ich damit weiter arbeiten

          Mittels Schleife

          sys_vars.each(function(id, i) {
             // setState(id, wert);
          });
          

          oder als Trigger

          sys_vars.on(function(dp) {
             let wert = dp.state.val;
          });
          

          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

          freakyfreakyF 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @freakyfreaky sagte: Wie kann ich damit weiter arbeiten

            Mittels Schleife

            sys_vars.each(function(id, i) {
               // setState(id, wert);
            });
            

            oder als Trigger

            sys_vars.on(function(dp) {
               let wert = dp.state.val;
            });
            
            freakyfreakyF Offline
            freakyfreakyF Offline
            freakyfreaky
            schrieb am zuletzt editiert von freakyfreaky
            #5

            @paul53

            Hi Paul,

            das Problem ist, dass Ich damit keine eindeutige Zuordnung hinbekomme. Sobald ich eine neue Systemvariable im Baum hinzufüge, kann sich die ID in der Auflistung ändern. Daher war der ursprüngliche Denkansatz, dass das globale Script die Variablen per Funktionsbezeichnung wie von dir beschrieben durchgeht und dann fixe Variablen übergibt. Somit könnte ich in einem anderen Script dann einfach beispielweise per setState dieses setzen, ohne jedesmal alle Variablen zu ermitteln

            So sieht mein heutiges Array als Output aus dem PHP Syript aus.

            //Array Overview
            
            Array
            (
                [sys_anwesenheit] => 24989 /*[Systemvariablen\Anwesenheit]*/
                [sys_last_change_anwesenheit] => 51767 /*[Systemvariablen\Anwesenheit\Last Change Anwesenheit]*/
                [sys_last_notify_anwesenheit] => 53775 /*[Systemvariablen\Anwesenheit\Last Notify Anwesenheit]*/
                [sys_hauszustand] => 36501 /*[Systemvariablen\Hauszustand]*/
                [sys_besuchsdauer] => 24899 /*[Systemvariablen\Hauszustand\Besuchsmodus\Besuchsdauer]*/
                [sys_nachtmodus] => 55178 /*[Systemvariablen\Nachtmodus]*/
            )
            

            Nutzung in anderen Scripts:

            // Nachtmodus  an kein script start
            if (GetValue($sys_nachtmodus) == false){
            }
            

            Da er die Objekt ID kennt, kann es entsprechend den Wert auslesen und vergleichen.

            paul53P 1 Antwort Letzte Antwort
            0
            • freakyfreakyF freakyfreaky

              @paul53

              Hi Paul,

              das Problem ist, dass Ich damit keine eindeutige Zuordnung hinbekomme. Sobald ich eine neue Systemvariable im Baum hinzufüge, kann sich die ID in der Auflistung ändern. Daher war der ursprüngliche Denkansatz, dass das globale Script die Variablen per Funktionsbezeichnung wie von dir beschrieben durchgeht und dann fixe Variablen übergibt. Somit könnte ich in einem anderen Script dann einfach beispielweise per setState dieses setzen, ohne jedesmal alle Variablen zu ermitteln

              So sieht mein heutiges Array als Output aus dem PHP Syript aus.

              //Array Overview
              
              Array
              (
                  [sys_anwesenheit] => 24989 /*[Systemvariablen\Anwesenheit]*/
                  [sys_last_change_anwesenheit] => 51767 /*[Systemvariablen\Anwesenheit\Last Change Anwesenheit]*/
                  [sys_last_notify_anwesenheit] => 53775 /*[Systemvariablen\Anwesenheit\Last Notify Anwesenheit]*/
                  [sys_hauszustand] => 36501 /*[Systemvariablen\Hauszustand]*/
                  [sys_besuchsdauer] => 24899 /*[Systemvariablen\Hauszustand\Besuchsmodus\Besuchsdauer]*/
                  [sys_nachtmodus] => 55178 /*[Systemvariablen\Nachtmodus]*/
              )
              

              Nutzung in anderen Scripts:

              // Nachtmodus  an kein script start
              if (GetValue($sys_nachtmodus) == false){
              }
              

              Da er die Objekt ID kennt, kann es entsprechend den Wert auslesen und vergleichen.

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

              @freakyfreaky sagte: Array als Output aus dem PHP Syript aus.

              Was sind das für Zahlenwerte (z.B. 24989)?

              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

              freakyfreakyF 1 Antwort Letzte Antwort
              0
              • paul53P paul53

                @freakyfreaky sagte: Array als Output aus dem PHP Syript aus.

                Was sind das für Zahlenwerte (z.B. 24989)?

                freakyfreakyF Offline
                freakyfreakyF Offline
                freakyfreaky
                schrieb am zuletzt editiert von
                #7

                @paul53

                Sorry für die fehlenden Infos. Ist schon spät.
                Das sind die Objekt ID´s welche IP Symcon nutzt. Ist vergleichbar mit der ID in ioBroker. Wie gesagt Ich versuche nur die Funktionalität irgendwie nachzustellen. Eventuell geht es auch gar nicht, oder Ich denk zu kompliziert. :)

                e2eb1228-da43-4cb2-90ec-14ccae3a200a-image.png

                paul53P 2 Antworten Letzte Antwort
                0
                • freakyfreakyF freakyfreaky

                  @paul53

                  Sorry für die fehlenden Infos. Ist schon spät.
                  Das sind die Objekt ID´s welche IP Symcon nutzt. Ist vergleichbar mit der ID in ioBroker. Wie gesagt Ich versuche nur die Funktionalität irgendwie nachzustellen. Eventuell geht es auch gar nicht, oder Ich denk zu kompliziert. :)

                  e2eb1228-da43-4cb2-90ec-14ccae3a200a-image.png

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

                  @freakyfreaky sagte: Das sind die Objekt ID´s welche IP Symcon nutzt.

                  Die IDs in ioBroker sind nicht so abstrakt, sondern haben eine Struktur, die allerdings nicht einheitlich ist, sondern Adapter spezifisch. Außerdem gibt es noch die Funktion getIdByName(name), falls die Namen eindeutig sind.

                  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

                  freakyfreakyF 1 Antwort Letzte Antwort
                  0
                  • freakyfreakyF freakyfreaky

                    @paul53

                    Sorry für die fehlenden Infos. Ist schon spät.
                    Das sind die Objekt ID´s welche IP Symcon nutzt. Ist vergleichbar mit der ID in ioBroker. Wie gesagt Ich versuche nur die Funktionalität irgendwie nachzustellen. Eventuell geht es auch gar nicht, oder Ich denk zu kompliziert. :)

                    e2eb1228-da43-4cb2-90ec-14ccae3a200a-image.png

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

                    @freakyfreaky
                    Anmerkung: Unter "0_userdata.0" und unter "alias.0" bestimmt man selbst die ID-Struktur. Eine Übersetzung in einen "sprechenden" Variablenbezeichner ist also nicht nötig und die automatische Erzeugung in Javascript auch nicht möglich (höchstens als Objekt).

                    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

                    1 Antwort Letzte Antwort
                    0
                    • paul53P paul53

                      @freakyfreaky sagte: Das sind die Objekt ID´s welche IP Symcon nutzt.

                      Die IDs in ioBroker sind nicht so abstrakt, sondern haben eine Struktur, die allerdings nicht einheitlich ist, sondern Adapter spezifisch. Außerdem gibt es noch die Funktion getIdByName(name), falls die Namen eindeutig sind.

                      freakyfreakyF Offline
                      freakyfreakyF Offline
                      freakyfreaky
                      schrieb am zuletzt editiert von freakyfreaky
                      #10

                      @paul53

                      Hi Paul,

                      vielen Dank für den Austausch. Der Ansatz mit getIdByName hilft mir weiter.
                      Gibt es auch ein getIdById?

                      Dann könnte ich die ID eineindeutig machen und den Text trotzdem lesbar. Ansonsten verbiege Ich mir den Alias. Das geht auch :)

                      eeca402e-506f-478d-b63c-a8e6282d3df4-image.png

                      paul53P 1 Antwort Letzte Antwort
                      0
                      • freakyfreakyF freakyfreaky

                        @paul53

                        Hi Paul,

                        vielen Dank für den Austausch. Der Ansatz mit getIdByName hilft mir weiter.
                        Gibt es auch ein getIdById?

                        Dann könnte ich die ID eineindeutig machen und den Text trotzdem lesbar. Ansonsten verbiege Ich mir den Alias. Das geht auch :)

                        eeca402e-506f-478d-b63c-a8e6282d3df4-image.png

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

                        @freakyfreaky sagte: Gibt es auch ein getIdById?

                        ?? Der Name soll ermittelt werden?

                        let Name = getObject(id).common.name;
                        

                        @freakyfreaky sagte in Variablen dynamisch erzeugen:

                        die ID eineindeutig machen und den Text trotzdem lesbar.

                        Die ID in ioBroker ist eindeutig.

                        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

                        freakyfreakyF 1 Antwort Letzte Antwort
                        1
                        • paul53P paul53

                          @freakyfreaky sagte: Gibt es auch ein getIdById?

                          ?? Der Name soll ermittelt werden?

                          let Name = getObject(id).common.name;
                          

                          @freakyfreaky sagte in Variablen dynamisch erzeugen:

                          die ID eineindeutig machen und den Text trotzdem lesbar.

                          Die ID in ioBroker ist eindeutig.

                          freakyfreakyF Offline
                          freakyfreakyF Offline
                          freakyfreaky
                          schrieb am zuletzt editiert von
                          #12

                          @paul53

                          Vielen Dank

                          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

                          599

                          Online

                          32.6k

                          Benutzer

                          82.3k

                          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