Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. Switch Widget ID über Variablen Datenpunkt möglich?

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Switch Widget ID über Variablen Datenpunkt möglich?

    This topic has been deleted. Only users with topic management privileges can see it.
    • OliverIO
      OliverIO @JoJo58 last edited by OliverIO

      @jojo58

      am einfachsten wäre es für jeden Datenpunkt ein eigenes Widget anzulegen und dann die Anzeige des richtigen Datenpunkts in Sichtbarkeit des widgets zu steuern.

      JoJo58 1 Reply Last reply Reply Quote 0
      • JoJo58
        JoJo58 @OliverIO last edited by

        @oliverio
        Auch eine gute Idee. Man müsste die dann alle übereinander legen und dann über den Wert vom entsprechenden Datenpunkt anzeigen oder ausblenden.
        Ich brauche das dann auch für ein JSON Widget und weiß nicht wie VIS das macht. Wenn ich 10 Widgets habe, werden die dann immer alle geladen und nur wenn die Sichtbarkeit zutrifft, dann auch angezeigt? Oder wird so ein Universal oder JSON erst dann geladen, wenn es auch angezeigt wird?
        Falls immer alles geladen wird, dann wäre die Version über den Alias etwas Ressourcenschonender. Ich werde einfach beide Versionen testen und dann mal sehen was mir besser gefällt.

        Danke für den Tipp.

        1 Reply Last reply Reply Quote 0
        • OliverIO
          OliverIO last edited by

          @jojo58

          Datenpunkte müssen bei Start von vis
          sowieso alle bekannt sein. Dynamische Datenpunkte funktionieren nicht.
          Ich glaube, alle Widgets werden angelegt und dann per CSS sichtbar gemacht oder nicht. Bin mir da nicht ganz so sicher, wie bis innen drin funktioniert.

          O JoJo58 2 Replies Last reply Reply Quote 0
          • O
            oFbEQnpoLKKl6mbY5e13 @OliverIO last edited by

            @oliverio sagte in Switch Widget ID über Variablen Datenpunkt möglich?:

            Dynamische Datenpunkte funktionieren nicht.

            Gerade mal mit der Änderung des Ziels bei einem Alias ausprobiert. Funktioniert einwandfrei. Muss man nur noch in ein Skript gießen.

            JoJo58 1 Reply Last reply Reply Quote 0
            • JoJo58
              JoJo58 @oFbEQnpoLKKl6mbY5e13 last edited by

              @ofbeqnpolkkl6mby5e13
              Das funktioniert über ein Blockly mit Funktionen. Mit einer Funktion ändere ich das Ziel des Alias Datenpunktes und mit einer weiteren Funktion, die etwas später (1 Sekunde) aufgerufen wird, lese ich den Wert des Ziel Datenpunktes aus und schreibe diesen auch direkt wieder zurück, so das der Zeitstempel geändert wird. Dadurch bekommt der Alias auch den richtigen Wert, denn der wird beim ändern des Ziels nicht übernommen.
              Ein Programmierer würde das wohl in einer Funktion unterbringen, aber ich habe keinen Plan von Javascript und bin froh das es mit zweien klappt.
              Somit habe ich ein funktionierendes Widget bei dem der zu schaltende Datenpunkt über das "select" Widget von Material Design ausgewählt wird.
              Coole Sache 😎
              Vielen Dank für den Tipp...

              Johannes

              O 1 Reply Last reply Reply Quote 1
              • JoJo58
                JoJo58 @OliverIO last edited by JoJo58

                @oliverio sagte in Switch Widget ID über Variablen Datenpunkt möglich?:

                Datenpunkte müssen bei Start von vis
                sowieso alle bekannt sein.

                Stimmt, das hat ein anderer User bei Facebook auch geschrieben, deswegen funktioniert das ja auch nicht mit Binding in einer Objekt ID.

                1 Reply Last reply Reply Quote 0
                • O
                  oFbEQnpoLKKl6mbY5e13 @JoJo58 last edited by

                  @jojo58

                  Wärst du bereit, deine zwei Funktionen zu teilen? Vielleicht brauche ich das auch mal, dann könnte ich das verwenden.

                  JoJo58 2 Replies Last reply Reply Quote 0
                  • JoJo58
                    JoJo58 @oFbEQnpoLKKl6mbY5e13 last edited by

                    @ofbeqnpolkkl6mby5e13
                    Klar, mache ich morgen früh als erstes. Im Moment hab ich nur mein Handy zur Verfügung.

                    1 Reply Last reply Reply Quote 1
                    • JoJo58
                      JoJo58 @oFbEQnpoLKKl6mbY5e13 last edited by

                      @ofbeqnpolkkl6mby5e13

                      Moin, wie gestern versprochen, hier die beiden Scripte.

                      Mit dieser Funktion ändere ich den Alias Datenpunkt:

                      // Ziel-Datenpunkt ändern
                      const targetAlias = alias_DP; // Der Alias-Datenpunkt, dessen Ziel geändert werden soll
                      const newTarget = source_Alias_DP; // Der neue Ziel-Datenpunkt
                      
                      // Objekt-ID des Alias-Datenpunkts abrufen
                      const aliasObj = getObject(targetAlias, (err, obj) => {
                          if (err) {
                              console.error('Fehler beim Abrufen des Alias-Datenpunkts:', err);
                              return;
                          }
                      
                          if (!obj) {
                              console.error('Alias-Datenpunkt nicht gefunden:', targetAlias);
                              return;
                          }
                      
                          // Ziel-Datenpunkt des Alias ändern
                          obj.common.alias.id = newTarget;
                      
                          // Aktualisierte Objekteigenschaften speichern
                          setObject(targetAlias, obj, (err) => {
                              if (err) {
                                  console.error('Fehler beim Speichern der aktualisierten Alias-Eigenschaften:', err);
                                  return;
                              }
                      
                              console.log('Alias-Datenpunkt erfolgreich aktualisiert:', targetAlias);
                          });
                      });
                      
                      return 0;
                      

                      Und mit dieser Funktion lese ich den Wert von einem DP und schreibe ihn direkt wieder zurück, damit sich der Zeitstempel ändert und der geänderte Alias den richtigen Wert hat.

                      const stateName = source_Alias_DP; // Name der State-Variable
                      
                      // Wert der State-Variable abrufen
                      getState(stateName, (err, state) => {
                          if (err) {
                              console.error('Fehler beim Abrufen des Zustands:', err);
                              return;
                          }
                      
                          if (state) {
                              const value = state.val;
                              
                              // Wert wieder in den gleichen Datenpunkt schreiben
                              setState(stateName, value, (err) => {
                                  if (err) {
                                      console.error('Fehler beim Schreiben des Zustands:', err);
                                      return;
                                  }
                                  console.log('Wert erfolgreich aktualisiert:', value);
                              });
                          } else {
                              console.error('Zustand nicht gefunden:', stateName);
                          }
                      });
                      
                      return 0;
                      

                      Wie bereits erwähnt, ich bin kein Programmierer und bei mir laufen die beiden Funktionen einwandfrei. Falls hier jemand einen Verbesserungsvorschlag hat, immer her damit.

                      Gruß, Johannes

                      O 1 Reply Last reply Reply Quote 1
                      • O
                        oFbEQnpoLKKl6mbY5e13 @JoJo58 last edited by

                        @jojo58

                        Vielen Dank!

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        676
                        Online

                        32.0k
                        Users

                        80.4k
                        Topics

                        1.3m
                        Posts

                        4
                        16
                        666
                        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