Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Länge/Breite in Javascript Adapter einbinden

    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

    Länge/Breite in Javascript Adapter einbinden

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

      @paul53:

      Nein, ich arbeite mich gerade erst in JS ein. Was ist ein pull request ? `
      1. Du machst ein Account auf github

      2. Machst fork von https://github.com/ioBroker/ioBroker.javascript

      3. Dann machst du die Änderungen an dem Projekt (online oder "lokal und dann push") und dann

      4. drückst du auf "pull request" Knopf und bietest deine Änderungen in den Hauptzweig zu mergen.

      @paul53:

      Ist das createState(name) am Script-Ende erforderlich ? `
      Habe korrigiert 🙂

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

        @ruhr70:

        kann man bei getObject nicht auch mit RegExp arbeiten? `
        Nein. Weil du genau wissen solltest, was du nimmst.

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

          @Bluefox:

          @ruhr70:

          kann man bei getObject nicht auch mit RegExp arbeiten? Nein. Weil du genau wissen solltest, was du nimmst.

          Verdammt bist Du schnell…

          ich hatte es schon gelöscht und dann kam Deine Antwort.

          Ja, ist logisch... ich muss ja nicht irgendeine Instanz haben, sondern genau die Richtige.
          4874_dwdexpand.txt

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

            Bevor ich Änderungen auf GitHub vornehme, muss ich Deinen Code erst einmal (nahezu vollständig) verstehen. Davon bin ich noch weit entfernt.

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

              Zum Thema: Ermitteln der Javascript-Instanz, unter dem das Script aktuell läuft

              Ich habe nichts gefunden, ob es da mittlerweile eine andere Alternative gibt.

              Aus den Posts oben habe ich mir eine globale Function erstellt, anhand der ich mir im Script die aktuelle Javascript-Instanz zurückgeben lasse. Danke für die Anregungen.

              // globale Funktion:    getJSInstance()
              
              // Beschreibung:        Ermittelt die aktuelle Javascript-Instanz und gibt diese als String zurück            
              
              // Übergabeparameter:   keine
              // Rückgabe:            aktuelle Javascript Instanz als String
              
              // Infos:               legt den Datenpunkt "CheckInstance" in der aktiven Javascript-Instanz an
              
              function getJSInstanceDP () {
                  return getIdByName("CheckInstance").substr(0,12);
              }
              
              function getJSInstance () {
                  createState("CheckInstance", getJSInstanceDP);
                  setState("CheckInstance", getJSInstanceDP);
                  return getJSInstanceDP();
                  }
              
              

              Wenn jemand mehr als 10 Javascript Instanzen startet, habe ich das nicht berücksichtigt 😉

              Der Aufruf der Funktion getJSInstance() gibt dann z.B. "javascript.0" zurück.

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

                Ich habe hier leider noch das übliche Problem.

                Beim ersten Start eines Scripts, welches die Funktion verwendet, kommt der Fehler, das der Datenpunkt CheckInstance noch nicht definiert ist.

                Ab dem zweiten Start läuft es dann sauber.

                Gibt es eine Möglichkeit, dass in der globalen Funktion abzufangen?

                Ich möchte eine globale Funktion so narrensicher wie möglich realisieren.

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

                  @ruhr70:

                  Zum Thema: Ermitteln der Javascript-Instanz, unter dem das Script aktuell läuft

                  Ich habe nichts gefunden, ob es da mittlerweile eine andere Alternative gibt.

                  Aus den Posts oben habe ich mir eine globale Function erstellt, anhand der ich mir im Script die aktuelle Javascript-Instanz zurückgeben lasse. Danke für die Anregungen.

                  // globale Funktion:    getJSInstance()
                  
                  // Beschreibung:        Ermittelt die aktuelle Javascript-Instanz und gibt diese als String zurück            
                  
                  // Übergabeparameter:   keine
                  // Rückgabe:            aktuelle Javascript Instanz als String
                  
                  // Infos:               legt den Datenpunkt "CheckInstance" in der aktiven Javascript-Instanz an
                  
                  function getJSInstanceDP () {
                      return getIdByName("CheckInstance").substr(0,12);
                  }
                  
                  function getJSInstance () {
                      createState("CheckInstance", getJSInstanceDP);
                      setState("CheckInstance", getJSInstanceDP);
                      return getJSInstanceDP();
                      }
                   
                  
                  

                  Wenn jemand mehr als 10 Javascript Instanzen startet, habe ich das nicht berücksichtigt 😉

                  Der Aufruf der Funktion getJSInstance() gibt dann z.B. "javascript.0" zurück. `
                  Und das alles nur dafür um kein Pull Request auf github zu machen. 😄

                  Es ist sehr einfach die Info zugreifbar zu machen . Ich muss nur wissendass es nötig ist. 😄

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

                    @Bluefox:

                    Und das alles nur dafür um kein Pull Request auf github zu machen. 😄

                    Es ist sehr einfach die Info zugreifbar zu machen . Ich muss nur wissendass es nötig ist. 😄 `

                    Na ja…

                    2.500 Zeilen Code...

                    Dann wüsste ich nicht, wie man das sauber in dem Adapter umsetzt.

                    Und github/pull Request sind auch so Themen, mit denen ich sonst nichts zu tun habe.

                    Programmierung kenne ich noch als Maschinencode und Assambler für die 6502 und 6510 CPU 😉

                    Also wenn ich es könnte und sicher wäre, dass ich nichts kaputt mache, würde ich das sehr gerne einen "Pull Request" machen. Ich bin davon aber noch Meilen entfernt 😞

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

                      @ruhr70:

                      @Bluefox:

                      Und das alles nur dafür um kein Pull Request auf github zu machen. 😄

                      Es ist sehr einfach die Info zugreifbar zu machen . Ich muss nur wissendass es nötig ist. 😄 `

                      Na ja…

                      2.500 Zeilen Code...

                      Dann wüsste ich nicht, wie man das sauber in dem Adapter umsetzt.

                      Und github/pull Request sind auch so Themen, mit denen ich sonst nichts zu tun habe.

                      Programmierung kenne ich noch als Maschinencode und Assambler für die 6502 und 6510 CPU 😉

                      Also wenn ich es könnte und sicher wäre, dass ich nichts kaputt mache, würde ich das sehr gerne einen "Pull Request" machen. Ich bin davon aber noch Meilen entfernt 😞 `
                      Ich muss nur nicht vergessen. Dann baue ich das ein.

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

                        @Bluefox:

                        Ich muss nur nicht vergessen. Dann baue ich das ein. `

                        Danke! 🙂

                        Ich komme ganz gut damit zurecht, dass ich ein Script zweimal starten muss, damit es dann sauber läuft 🙂

                        Ich erstell mir gerade ein Script-Template, welches ich dann hier für die Allgemeinheit reinstelle. Da wäre das halt unschön.

                        Was kann ich tun, damit das nicht vergessen wird? Jira?

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

                          @ruhr70:

                          @Bluefox:

                          Ich muss nur nicht vergessen. Dann baue ich das ein. `

                          Danke! 🙂

                          Ich komme ganz gut damit zurecht, dass ich ein Script zweimal starten muss, damit es dann sauber läuft 🙂

                          Ich erstell mir gerade ein Script-Template, welches ich dann hier für die Allgemeinheit reinstelle. Da wäre das halt unschön.

                          Was kann ich tun, damit das nicht vergessen wird? Jira? `
                          Habe ich schon implementiert.

                          Damit die Fehlermeldung nicht kommt muss man so eine Struktur machen.

                          function ready () {
                             // set start states
                             setState('myState', 0);
                             log('ready');
                          }
                          createState('state1',0);
                          createState ('myState', ready);
                          
                          

                          Weil createState asynchron ausgeführt wird und wir müssen warten, bis die Funktion fertig wird, bevor wir die mit setState ansprechen können.

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

                            @Bluefox:

                            Habe ich schon implementiert.

                            Damit die Fehlermeldung nicht kommt muss man so eine Struktur machen.

                            function ready () {
                               // set start states
                               setState('myState', 0);
                               log('ready');
                            }
                            createState('state1',0);
                            createState ('myState', ready);
                            
                            

                            Weil createState asynchron ausgeführt wird und wir müssen warten, bis die Funktion fertig wird, bevor wir die mit setState ansprechen können. `

                            Danke und Danke 😉

                            Dann könnte ich ja an der Stelle aufhören das zu testen. 😛

                            Habe ich aber nicht. Mit dem asynchrone stehe ich immer noch auf dem Kriegsfuss. Es funktioniert nicht. 😞

                            function ready () {
                               // set start states
                               setState('myState', 0);
                               log('function ready');
                            }
                            
                            createState('state1',0);
                            createState ('myState', ready);
                            
                            log ('weiter im Script');
                            
                            javascript-1	2016-03-06 08:44:34	info	script.js.Test_schnell: function ready
                            javascript-1	2016-03-06 08:44:34	info	script.js.Test_schnell: registered 0 subscriptions and 0 schedules
                            javascript-1	2016-03-06 08:44:34	info	script.js.Test_schnell: weiter im Script
                            javascript-1	2016-03-06 08:44:34	info	Start javascript script.js.Test_schnell
                            

                            Das "weiter im Script" kommt vor dem "function ready".

                            Ich hatte das so verstanden, dass durch das Setzen des Datenpunkt über eine Funktion, der nächste Befehl erst ausgeführt wird, wenn der Datenpunkt angelegt ist.

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

                              @ruhr70:

                              @Bluefox:

                              Habe ich schon implementiert.

                              Damit die Fehlermeldung nicht kommt muss man so eine Struktur machen.

                              function ready () {
                                 // set start states
                                 setState('myState', 0);
                                 log('ready');
                              }
                              createState('state1',0);
                              createState ('myState', ready);
                              
                              

                              Weil createState asynchron ausgeführt wird und wir müssen warten, bis die Funktion fertig wird, bevor wir die mit setState ansprechen können. `

                              Danke und Danke 😉

                              Dann könnte ich ja an der Stelle aufhören das zu testen. 😛

                              Habe ich aber nicht. Mit dem asynchrone stehe ich immer noch auf dem Kriegsfuss. Es funktioniert nicht. 😞

                              function ready () {
                                 // set start states
                                 setState('myState', 0);
                                 log('function ready');
                              }
                              
                              createState('state1',0);
                              createState ('myState', ready);
                              
                              log ('weiter im Script');
                              
                              javascript-1	2016-03-06 08:44:34	info	script.js.Test_schnell: function ready
                              javascript-1	2016-03-06 08:44:34	info	script.js.Test_schnell: registered 0 subscriptions and 0 schedules
                              javascript-1	2016-03-06 08:44:34	info	script.js.Test_schnell: weiter im Script
                              javascript-1	2016-03-06 08:44:34	info	Start javascript script.js.Test_schnell
                              

                              Das "weiter im Script" kommt vor dem "function ready".

                              Ich hatte das so verstanden, dass durch das Setzen des Datenpunkt über eine Funktion, der nächste Befehl erst ausgeführt wird, wenn der Datenpunkt angelegt ist. `
                              Du hast es nicht ganz verstanden. Asynchron heißt: es wird als Auftrag gespeichert und irgendwann später ausgeführt. Und wenn es fertig ist, dann wird die ready Funktion ausgeführt.

                              "Irgendwann später" heißt, wenn er nichts zu tun haben wird und bei dir muss er was tun, nämlich, log ausgeben.

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

                                @Bluefox:

                                Du hast es nicht ganz verstanden. Asynchron heißt: es wird als Auftrag gespeichert und irgendwann später ausgeführt. Und wenn es fertig ist, dann wird die ready Funktion ausgeführt.

                                "Irgendwann später" heißt, wenn er nichts zu tun haben wird und bei dir muss er was tun, nämlich, log ausgeben. `

                                Ich danke Dir für Deine Erklärung.

                                Das Ergebnis spielt sich ja auch im Log wieder.

                                Das bedeutet aber doch, dass ich um eine setTimeout() Funktion nicht drumherum komme, wenn ich den geschriebenen Datenpunkt im weiteren Verlauf benötige oder?

                                Mit setTimeout() habe ich das jetzt realisiert. Hatte die Hoffnung, dass es auch "eleganter" geht.

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

                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                738
                                Online

                                31.9k
                                Users

                                80.2k
                                Topics

                                1.3m
                                Posts

                                4
                                25
                                3642
                                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