Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Erzeugen von Datenpunkten mit Voreinstellungen

    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

    Erzeugen von Datenpunkten mit Voreinstellungen

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

      Mit dem hier vorgestellten globalen Script können Datenpunkte mit sinnvollen Voreinstellungen erzeugt werden (createState). Die Attribute der so erstellten Objekte kann man in der Eingabemaske "allgemein" bequem editieren.

      Das Script stellt fogende 5 Funktionen zur Verfügung:

      • createCheckbox(name) - für boolsche Werte ohne Zustandstexte

      • createSwitch(name) - für boolsche Werte mit Zustandstexten (falsch/wahr, Aus/Ein, Nein/Ja, Sommer/Winter, …)

      • createMultistate(name) - für Multistate-Werte (Werteliste, z.B. Auto;Manu;Boost, Aus;Stufe-1;Stufe-2, ...)

      • createLevel(name) - für Analogwerte

      • createString(name) - für Zeichenketten

      // Datenpunkte mit Voreinstellungen erzeugen (createState)
      
      function createCheckbox(name) {
          createState(name, false, {read: true, 
                                    write: true, 
                                    desc: "Beschreibung", 
                                    type: "boolean", 
                                    def: false
          });
      }
      
      function createSwitch(name) {
          createState(name, false, {read: true, 
                                    write: true, 
                                    desc: "Beschreibung", 
                                    type: "boolean", 
                                    def: false, 
                                    states: {false:'Aus', true:'Ein'}
          });
      }
      
      function createMultistate(name) {
          createState(name, 0, {read: true, 
                                write: true, 
                                desc: "Beschreibung", 
                                type: "number", 
                                min: 0, 
                                max: 2, 
                                def: 0, 
                                states: {0:'Wert0', 1:'Wert1', 2:'Wert2'}
          });
      }
      
      function createLevel(name) {
          createState(name, 0, {read: true,
                                write: true, 
                                desc: "Beschreibung", 
                                type: "number", 
                                min: -30, 
                                max: 70, 
                                def: 0,
                                unit: "°C"
          });
      }
      
      function createString(name) {
          createState(name, "", {read: true, 
                                 write: true, 
                                 desc: "Beschreibung", 
                                 type: "string", 
                                 def: ""
          });
      }
      
      

      Die Auswahl der Zustände der Funktion createSwitch(name) funktioniert erst ab Version 0.5.7 von ioBroker Admin (Tab "Zustände").

      EDIT(10.07.2020): String-Version für states ersetzt durch Objekt-Version.

      Garfonso 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        Da man in verschiedenen Räumen immer wieder die gleichen Datenpunkte benötigt, die sich nur im Namen (und der ID) unterscheiden, habe ich das globale Script noch um die Funktion copyDatapoint(Quellname,Zielname) erweitert:

        function copyDatapoint(src, dst) {
            var sid = getIdByName(src);
            var sdp = getObject(sid).common;
            createState(dst, sdp.def, { read: sdp.read,
                                        write: sdp.write,
                                        desc: sdp.desc,
                                        type: sdp.type,
                                        min: sdp.min,
                                        max: sdp.max,
                                        def: sdp.def,
                                        unit: sdp.unit,
                                        states: sdp.states
            });
        }
        
        1 Reply Last reply Reply Quote 0
        • B
          Baerny last edited by

          Ich versuche schon seit längerer Zeit für ein Blocklyscript einen Datenpunkt zu erstellen. Das erstellen dieses Datenpunktes gelingt mir auch, nur kann ich diesen Datenpunkt nicht mit true oder false beschreiben. ( Bin in Sachen Script absoluter Anfänger) Auch die intensive Suche in diesem Forum hat mir leider nicht weitergeholfen.

          Jetzt bin ich zufällig auch dieses Script gestoßen.

          Wäre bitte jemand so lieb, mir zu erklären, welche Punkte ich bei dem Script anpassen muss um einen Datenpunkt zu erzeugen.

          Vielen Dank schon mal im voraus

          Baerny

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

            Wie kann ich die globalen Variablen in anderen Scripts zum Einsatz bringen? Hast du hierfür ein beispiel zum besseren Verständniss?

            Danke.

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

              Es gibt hier 3 Funktion, die man in Blockly importieren kann, um Datenpunkte mit 3 verschiedenen Eigenschaften zu etzeugen.

              Dazu die entsprechende Funktion (für wshr/unwahr z. B. boolean) in das neue Blockly-Script kopieren, dann hat man links in der Blockauswahl bei den Funktionen den entsprechenden neuen Block und kann den entsprechenden vorbereiten.

              Ich erzeuge damit generell für alle Scripte die Datenpunkte, wenn das im Script erforderlich ist.

              Hier der Link zu den Import-Dateien direkt für Blockly

              viewtopic.php?p=157770#p157770

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

                Wie verwendet man es im normalen Javascript? Benutze leider kein Blocky.

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

                  Importiere es einmal in ein Blockly-Script und lasse dir dann rechts oben den Quelltext anzeigen.

                  Von dort kannst du es leicht kopieren.

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

                    @0018:

                    Wie verwendet man es im normalen Javascript? Benutze leider kein Blocky. `
                    Dann ist es noch einfacher, weil globale Skripte automatisch in alle anderen (nicht globalen) Skripte kopiert werden: Verwende das Skript aus meinem ersten Post als globales Skript, dann kannst Du die passende Funktion zur Datenpunkterzeugung in jedem Skript aufrufen. Beispiel für String:

                    createString('meineGruppe.meinName'); // String-Datenpunkt mit der ID "javascript.0.meineGruppe.meinName" wird erzeugt
                    

                    EDIT: Seit @Bluefox die Erzeugung von Datenpunkten im Reiter "Objekte" ermöglicht hat, benutze ich nur noch die Funktion copyDatapoint(src, dst), um Datenpunkte zu duplizieren, die sich nur im Namen (ID) unterscheiden.

                    1 Reply Last reply Reply Quote 0
                    • O
                      oliver2017 last edited by

                      @paul53:

                      Da man in verschiedenen Räumen immer wieder die gleichen Datenpunkte benötigt, die sich nur im Namen (und der ID) unterscheiden, habe ich das globale Script noch um die Funktion copyDatapoint(Quellname,Zielname) erweitert:

                      function copyDatapoint(src, dst) {
                          var sid = getIdByName(src);
                          var sdp = getObject(sid).common;
                          createState(dst, sdp.def, { read: sdp.read,
                                                      write: sdp.write,
                                                      desc: sdp.desc,
                                                      type: sdp.type,
                                                      min: sdp.min,
                                                      max: sdp.max,
                                                      def: sdp.def,
                                                      unit: sdp.unit,
                                                      states: sdp.states
                          });
                      }
                      ```` `  
                      

                      Wie kann man die Funktion einfach ausführen lassen habe es so versucht:

                      
                      copyDatapoint("javascript.0.Homematic.hue", "javascript.0.Esszimmer.Tablet.hue");
                      
                      

                      aber ich bekomme immer eine Fehlermeldung und die States werden nicht angelegt!

                      Gruß Oliver

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

                        Als Quelle den Namen angeben - nicht die ID !

                        1 Reply Last reply Reply Quote 0
                        • O
                          oliver2017 last edited by

                          achso, ich dachte man kann den gesamten "ordner" kopieren, oder gibt es da auch eine möglichkeit?

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

                            @paul53 said in Erzeugen von Datenpunkten mit Voreinstellungen:

                            Leider scheint dieses alte Topic immer noch als Referenz zu dienen für manche. Daher hier mein Hinweis:
                            common.states sollte heute ein Object sein, kein string, wie in dem Skript. Hier das aktualisierte Skript:

                            // Datenpunkte mit Voreinstellungen erzeugen (createState)
                            
                            function createCheckbox(name) {
                                createState(name, false, {read: true, 
                                                          write: true, 
                                                          desc: "Beschreibung", 
                                                          type: "boolean", 
                                                          def: false
                                });
                            }
                            
                            function createSwitch(name) {
                                createState(name, false, {read: true, 
                                                          write: true, 
                                                          desc: "Beschreibung", 
                                                          type: "boolean", 
                                                          def: false,
                                                          states: {false:"Aus", true:"Ein"}
                                });
                            }
                            
                            function createMultistate(name) {
                                createState(name, 0, {read: true, 
                                                      write: true, 
                                                      desc: "Beschreibung", 
                                                      type: "number", 
                                                      min: 0, 
                                                      max: 2, 
                                                      def: 0, 
                                                      states: { 0:"Wert0", 1:"Wert1", 2:"Wert2"}
                                });
                            }
                            
                            function createLevel(name) {
                                createState(name, 0, {read: true,
                                                      write: true, 
                                                      desc: "Beschreibung", 
                                                      type: "number", 
                                                      min: -30, 
                                                      max: 70, 
                                                      def: 0,
                                                      unit: "°C"
                                });
                            }
                             
                            function createString(name) {
                                createState(name, "", {read: true, 
                                                       write: true, 
                                                       desc: "Beschreibung", 
                                                       type: "string", 
                                                       def: ""
                                });
                            }
                            
                            1 Reply Last reply Reply Quote 0
                            • First post
                              Last post

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            843
                            Online

                            31.8k
                            Users

                            80.0k
                            Topics

                            1.3m
                            Posts

                            javascript
                            6
                            12
                            5771
                            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