Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Variablen dynamisch erzeugen

    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

    Variablen dynamisch erzeugen

    This topic has been deleted. Only users with topic management privileges can see it.
    • paul53
      paul53 @freakyfreaky last edited by 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)');
      
      freakyfreaky 1 Reply Last reply Reply Quote 0
      • freakyfreaky
        freakyfreaky @paul53 last edited by

        @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

        paul53 1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @freakyfreaky last edited by 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;
          });
          
          freakyfreaky 1 Reply Last reply Reply Quote 0
          • freakyfreaky
            freakyfreaky @paul53 last edited by 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.

            paul53 1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @freakyfreaky last edited by paul53

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

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

              freakyfreaky 1 Reply Last reply Reply Quote 0
              • freakyfreaky
                freakyfreaky @paul53 last edited by

                @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

                paul53 2 Replies Last reply Reply Quote 0
                • paul53
                  paul53 @freakyfreaky last edited by 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.

                  freakyfreaky 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @freakyfreaky last edited by paul53

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

                    1 Reply Last reply Reply Quote 0
                    • freakyfreaky
                      freakyfreaky @paul53 last edited by 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

                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @freakyfreaky last edited by 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.

                        freakyfreaky 1 Reply Last reply Reply Quote 1
                        • freakyfreaky
                          freakyfreaky @paul53 last edited by

                          @paul53

                          Vielen Dank

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          818
                          Online

                          31.8k
                          Users

                          80.0k
                          Topics

                          1.3m
                          Posts

                          2
                          12
                          428
                          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