Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Schreiben in Datenpunkt schießt JS Instanz ab

    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

    Schreiben in Datenpunkt schießt JS Instanz ab

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

      @david-g sagte in Schreiben in Datenpunkt schießt JS Instanz ab:

      @joergh

      Warum das A schmiert weiß ich nicht.
      In dem Blockly ist aber einiges komisch....

      @david-g
      Danke, dass Du Dich damit beschäftigt hast.

      Warum sind die Blöcke zum DP generieren alle verschachtelt?

      Ich habe zu Datenpunkt anlegen nirgends eine Beschreibung gefunden und bin mir nicht im Klaren wofür die Klammer da sein soll, habe es dann mal so umgesetzt, damit er nicht auf die Idee kommt außerhalb der Klammer vielleicht nicht auf die Datenpunkte zugreifen zu können. Ansonsten verkürzt es das Script oben etwas. Vielleicht kannst Du mir ja sagen, wofür das sein?

      Er legt jedenfalls die Datenpunkte an.

      Warum überhaupt noch die Blöcke, DPs sind ja jetzt angekegt.

      Weil beim nächsten Umzug auf ein neues System die Datenpunkte nicht mehr das sind...weil das Skript so für jedermann leichter anpassbar wäre und er sich um die nötigen Datenpunkte weniger Gedanken machen müsste. Weil ich so leicht die Datenpunkte irgendwo anders anlegen lassen kann ohne alle manuell zu löschen und neu einzurichten...hat Vorteile.

      Warum kommen da drinnen irgendwann relevante Aktionen wie den Zähler aber das alles hat keinen Trigger?

      Der Zähler wird benötigt um die Listen mit Fenstern und Türen zu erstellen beim Initialisieren des Programms. Links ist reine Initialisierung zu sehen. Er startet und erstellt die nötigen DP, soweit nicht vorhanden und die liest welche Fenster und Türen vorhanden sind und in welchen Räumen und erstellt entsprechende Listen. Dabei vergleicht er mit der alten Liste, die er zuvor erstellt hat und ergänzt neue Komponenten. So wird verhindert, dass wenn mal wieder die HomematicIP Datenpunkte ihre Eigenschaften (Fenster, Tür, Raum) verloren haben, das Skript nicht mehr funktioniert. Das wird alles nur einmal durchlaufen.

      Am Ende wird dann die Funktion Trigger starten gestartet mit der neu erstellten Liste und es werden cronjobs zur Überwachung der Fenster und Türen eingerichtet. Bei jeder Veränderung werden die entsprechenden cronjobs dann die zählung der offenen Fenster / Türen neu anstoßen.

      Warum hast du innerhalb einer Funktion einen Trigger?

      Warum die ganzen Cronejobs anlegen?

      Ich finde das alles sehr komplihiert aufgebaut.

      Es ist eine komplizierte Materie 😉 ...bin aber immer offen für Vorschläge, wie man das alles einfacher lösen kann....

      David G. 1 Reply Last reply Reply Quote 0
      • J
        JoergH @BananaJoe last edited by JoergH

        @bananajoe @David-G

        Sorry!!! Mir fällt gerade auf, dass ich die falschen Blocklys gepostet habe! Das ist ein funktionierendes Skript und nicht das zu dem Problem....das korrekte kommt gleich.

        [Edit] : Jetzt passt es.

        liv-in-sky Homoran 2 Replies Last reply Reply Quote 0
        • liv-in-sky
          liv-in-sky @JoergH last edited by

          @joergh

          Ich vermute Mal es liegt an den while schleifen

          Da kommt es oft zu solchen Fehlern - Javascript Neustart ohne Fehler Meldung

          J 1 Reply Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators @JoergH last edited by

            @joergh sagte in Schreiben in Datenpunkt schießt JS Instanz ab:

            [Edit] : Jetzt passt es.

            jetzt passen aber die Antworten nicht mehr

            J 1 Reply Last reply Reply Quote 0
            • J
              JoergH @Homoran last edited by

              @homoran Stimmt. Die Antwort passt auf den Post der Amnmerkungen zu dem falschen Blockly. Ich beantworte auch gerne Fragen zu dem nun zum Script passenden Blockly.

              Homoran 1 Reply Last reply Reply Quote 0
              • J
                JoergH @liv-in-sky last edited by

                @liv-in-sky Das habe ich auch schon befürchtet und mal von "solange" auf "bis" umgestellt, hat aber keine Änderung gebracht...Hast Du eine Idee, wie ich denn anders eine Schleife darstellen kann, als mit dem entsprechenden Blockly?

                1 Reply Last reply Reply Quote 0
                • Homoran
                  Homoran Global Moderator Administrators @JoergH last edited by

                  @joergh sagte in Schreiben in Datenpunkt schießt JS Instanz ab:

                  @homoran Stimmt. Die Antwort passt auf den Post der Amnmerkungen zu dem falschen Blockly. Ich beantworte auch gerne Fragen zu dem nun zum Script passenden Blockly.

                  Deswegen niemals nachträglich ohne Kennzeichnung (und belassen des falschen) Änderungen durchführen
                  Das gehört zu den Grundlagen eines Forums!

                  https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge/1

                  J 1 Reply Last reply Reply Quote 0
                  • J
                    JoergH @Homoran last edited by

                    @homoran

                    @joergh sagte in Schreiben in Datenpunkt schießt JS Instanz ab:

                    @bananajoe @David-G

                    Sorry!!! Mir fällt gerade auf, dass ich die falschen Blocklys gepostet habe! Das ist ein funktionierendes Skript und nicht das zu dem Problem....das korrekte kommt gleich.

                    [Edit] : Jetzt passt es.

                    Homoran liv-in-sky 2 Replies Last reply Reply Quote 0
                    • Homoran
                      Homoran Global Moderator Administrators @JoergH last edited by Homoran

                      @joergh sagte in Schreiben in Datenpunkt schießt JS Instanz ab:

                      @homoran

                      @joergh sagte in Schreiben in Datenpunkt schießt JS Instanz ab:

                      @bananajoe @David-G

                      Sorry!!! Mir fällt gerade auf, dass ich die falschen Blocklys gepostet habe! Das ist ein funktionierendes Skript und nicht das zu dem Problem....das korrekte kommt gleich.

                      [Edit] : Jetzt passt es.

                      ???
                      was willst du mir damit sagen?

                      Hast du den verlinkten Thread überhaupt (vollständig) gelesen?

                      EDIT:
                      Habe einen entsprechenden Kommentar im betreffenden Post eingefügt!

                      J 1 Reply Last reply Reply Quote 0
                      • liv-in-sky
                        liv-in-sky @JoergH last edited by

                        @joergh

                        habe dein script nicht wirklich analisiert - aber du willst doch texte, die kleiner 70 zeichen sind

                        zum testen

                        function splitStringAtSpaces(inputString, maxLength = 70) {
                           const result = [];
                           let start = 0;
                        
                           for (let end = 0; start < inputString.length; start = end + 1) {
                               end = start + maxLength;
                        
                               // Suche das letzte Leerzeichen innerhalb des Bereichs [start, end]
                               if (end < inputString.length) {
                                   const lastSpace = inputString.lastIndexOf(" ", end);
                                   if (lastSpace > start) {
                                       end = lastSpace; // An einem Leerzeichen abschneiden
                                   }
                               }
                        
                               // Abschnitt hinzufügen, führende und nachfolgende Leerzeichen entfernen
                               result.push(inputString.substring(start, end).trim());
                           }
                           for (let i=0; i<result.length;i++){log(result[i].length+" : "+result[i])}
                           return result;
                        }
                        
                        // Beispiel:
                        const testString = "Dies ist ein sehr sehr langer sehr langer Beispieltext, der mehr als siebzig Zeichen hat. Wir möchten sicherstellen, dass der Text korrekt an Leerzeichen getrennt wird. Das ganze soll ein Script mit einer FOR-Schleife sein und somit sicherer als mit einer WHILE-Schleife sein. Jetzt weiß ich nicht mehr, was ich noch schreiben soll";
                        const result = splitStringAtSpaces(testString);
                        
                        console.log(result);
                        

                        bringt sowas:

                        avascript.0	11:06:17.939	info	script.js.common.AA-Versuche.Skript_1: 68 : Dies ist ein sehr sehr langer sehr langer Beispieltext, der mehr als
                        javascript.0	11:06:17.939	info	script.js.common.AA-Versuche.Skript_1: 69 : siebzig Zeichen hat. Wir möchten sicherstellen, dass der Text korrekt
                        javascript.0	11:06:17.939	info	script.js.common.AA-Versuche.Skript_1: 65 : an Leerzeichen getrennt wird. Das ganze soll ein Script mit einer
                        javascript.0	11:06:17.939	info	script.js.common.AA-Versuche.Skript_1: 65 : FOR-Schleife sein und somit sicherer als mit einer WHILE-Schleife
                        javascript.0	11:06:17.939	info	script.js.common.AA-Versuche.Skript_1: 60 : sein. Jetzt weiß ich nicht mehr, was ich noch schreiben soll
                        
                        J 1 Reply Last reply Reply Quote 0
                        • J
                          JoergH @Homoran last edited by

                          @homoran Es hatte außer zwei Personen noch keiner geantwortet, die Blocklys austauschen dürfte da wohl eher wenig für Verwirrung sorgen, zumal ich direkt danach darauf hingewiesen habe und dies kenntlich gemacht habe. Geht es jetzt ums Prinzipenreiten oder gibt es ein echtes Problem?

                          Samson71 1 Reply Last reply Reply Quote 0
                          • J
                            JoergH @liv-in-sky last edited by JoergH

                            @liv-in-sky sagte in Schreiben in Datenpunkt schießt JS Instanz ab:

                            @joergh

                            habe dein script nicht wirklich analisiert - aber du willst doch texte, die kleiner 70 zeichen sind

                            zum testen

                            function splitStringAtSpaces(inputString, maxLength = 70) {
                               const result = [];
                               let start = 0;
                            
                               for (let end = 0; start < inputString.length; start = end + 1) {
                                   end = start + maxLength;
                            
                                   // Suche das letzte Leerzeichen innerhalb des Bereichs [start, end]
                                   if (end < inputString.length) {
                                       const lastSpace = inputString.lastIndexOf(" ", end);
                                       if (lastSpace > start) {
                                           end = lastSpace; // An einem Leerzeichen abschneiden
                                       }
                                   }
                            
                                   // Abschnitt hinzufügen, führende und nachfolgende Leerzeichen entfernen
                                   result.push(inputString.substring(start, end).trim());
                               }
                               for (let i=0; i<result.length;i++){log(result[i].length+" : "+result[i])}
                               return result;
                            }
                            
                            // Beispiel:
                            const testString = "Dies ist ein sehr sehr langer sehr langer Beispieltext, der mehr als siebzig Zeichen hat. Wir möchten sicherstellen, dass der Text korrekt an Leerzeichen getrennt wird. Das ganze soll ein Script mit einer FOR-Schleife sein und somit sicherer als mit einer WHILE-Schleife sein. Jetzt weiß ich nicht mehr, was ich noch schreiben soll";
                            const result = splitStringAtSpaces(testString);
                            
                            console.log(result);
                            

                            bringt sowas:

                            avascript.0	11:06:17.939	info	script.js.common.AA-Versuche.Skript_1: 68 : Dies ist ein sehr sehr langer sehr langer Beispieltext, der mehr als
                            javascript.0	11:06:17.939	info	script.js.common.AA-Versuche.Skript_1: 69 : siebzig Zeichen hat. Wir möchten sicherstellen, dass der Text korrekt
                            javascript.0	11:06:17.939	info	script.js.common.AA-Versuche.Skript_1: 65 : an Leerzeichen getrennt wird. Das ganze soll ein Script mit einer
                            javascript.0	11:06:17.939	info	script.js.common.AA-Versuche.Skript_1: 65 : FOR-Schleife sein und somit sicherer als mit einer WHILE-Schleife
                            javascript.0	11:06:17.939	info	script.js.common.AA-Versuche.Skript_1: 60 : sein. Jetzt weiß ich nicht mehr, was ich noch schreiben soll
                            

                            Richtig, ich will die Texte splitten und dann in ein array schreiben. Das funktioniert auch genauso so weit, bis er zum Schreiben des Datenpunktes kommt, dann schmiert er ab.

                            Du meinst ich sollte die Split Funktion in dem JS-Script auslagern, da ich damit auch die Schleife "verzichten" kann, sprich sie im JS-Script läuft...?

                            Wäre eine Möglichkeit...probiere ich mal aus. Danke für die Anregung!

                            liv-in-sky 1 Reply Last reply Reply Quote 0
                            • liv-in-sky
                              liv-in-sky @JoergH last edited by

                              @joergh

                              die andere while schleife solltest du auch dann noch ersetzen - leider muss ich wieder los - zur not hilft dir auch chatgpt, falls sich kein anderer findet

                              1 Reply Last reply Reply Quote 0
                              • Samson71
                                Samson71 Global Moderator @JoergH last edited by

                                @joergh sagte in Schreiben in Datenpunkt schießt JS Instanz ab:

                                Geht es jetzt ums Prinzipenreiten oder gibt es ein echtes Problem?

                                Ich will mich hier nicht weiter reinhängen, aber genau um den ersten Teil der Frage geht es ganz und gar nicht, aber der zweite Teil ist durchaus für einen unbedarften Leser möglich. Deswegen auch das Mod-Edit bzw., die Ergänzung unter dem im 2. Beitrag ausgetauschten Blockly.

                                Wer das als Neuleser von Anfang an ohne Vorahnung (ggf. auch später) liest und eben nicht weiß, dass es eine schon korrigierte Austauschfassung ist, sucht wg. der Folgekommentare einen möglichen Fehler darin der gar nicht mehr enthalten ist. Bis dieser über den kleine unscheinbaren Edit-Hinweis im 6. Post gestolpert ist, ist u.U. nen Haufen Lebenszeit sinnlos verbraten.

                                Um nichts anderes ging es @Homoran bei seinen Ausführungen. Genau das ist der Grund warum nachträgliche Edits in Beiträgen ohne dortige direkte und deutliche Kenntlichmachung in echtes Foren-NoGo sind.

                                J 1 Reply Last reply Reply Quote 0
                                • David G.
                                  David G. @JoergH last edited by David G.

                                  @joergh sagte in Schreiben in Datenpunkt schießt JS Instanz ab:

                                  Weil beim nächsten Umzug auf ein neues System die Datenpunkte nicht mehr das sind.

                                  Dann macht es evtl Sinn sich ein Alias für die Geräte anzulegen.

                                  Ich zähle meine Kontakte indem ich den DPs eine Funktion gebe. Das kann man schön schnell anpassen.
                                  Das Script sucht die Funktion der DPs und fertig.

                                  EDIT
                                  Ich prüfe nur auf geschlossen und offen. Aber lässt sich ja leicht anpassen.
                                  Screenshot_20241119_123130_Chrome.jpg

                                  Du Funktion habe ich von meiner Alarmanlage übernommen. Dort werden alle Fenster geprüft. Dann muss ich es nicht doppelt vergeben.
                                  Die Variable Durchlauf habe ich um das "und" richtig zu setzen für die Sprachansage.

                                  J 1 Reply Last reply Reply Quote 0
                                  • J
                                    JoergH @David G. last edited by

                                    @david-g sagte in Schreiben in Datenpunkt schießt JS Instanz ab:

                                    @joergh sagte in Schreiben in Datenpunkt schießt JS Instanz ab:

                                    Weil beim nächsten Umzug auf ein neues System die Datenpunkte nicht mehr das sind.

                                    Dann macht es evtl Sinn sich ein Alias für die Geräte anzulegen.

                                    Ja, kann man machen. Ist eine Alternative. Ich lege die Datenpunkte lieber selber an, so wie jeder Adapter das schließlich auch macht. Ich denke genau dafür wurde die Blöcke doch auch eingerichtet.

                                    Ich zahle meine Kontakte indem ich den DPs eine Funktion gebe. Das kann man schon schnell anpassen.

                                    Das ist eben das Problem, welches ich schon öfter hatte: Beim bisher verwendeten Skript durfte man NICHT die Channels mit der Funktion ausstatten, MUSSTE aber die STATEs ausstatten. Leider liefert die Homematic_CCU es aber anders nach Neueinlesen. Beim mehr als 30 Fenster ging es mir gegen den Strich jedesmal die ganzen Eigenschaften wieder neu setzen zu müssen und vor allem habe ich nicht einmal mitbekommen, dass sie aus irgendwelchen Gründen mal wieder verschwunden sind und mich dann irgendwann gewundert, warum keine Warnungen mehr erschienen sind.

                                    Das Script sucht die Funktion der DPs und fertig.

                                    EDIT
                                    Ich prüfe nur auf geschlossen und offen. Aber lässt sich ja leicht anpassen.
                                    Screenshot_20241119_123130_Chrome.jpg

                                    Mein Skript für die Fenster läuft nun auch wunderbar und vermeidet die oben genannte Problematik, da es die Eigenschaften so nutzt, wie sie von Homematic_CCU angeliefert werden, ohne irgendwas im iobroker setzen zu müssen (in der HM-CCU müssen sie natürlich zugeordnet sein!). Ich kann dann noch einstellen nach wie vielen Minuten er eine Warnung in einen Datenpunkt schreiben soll und damit weiterarbeiten.

                                    Das war aber leider das falsche Skript, ich habe die Instanz-Absturz in einem anderen. Der JS-Code der Blockly-Blöcke war schon korrekt, nur die Screenshots nicht.

                                    David G. 1 Reply Last reply Reply Quote 0
                                    • J
                                      JoergH @Samson71 last edited by

                                      @samson71 sagte in Schreiben in Datenpunkt schießt JS Instanz ab:

                                      @joergh sagte in Schreiben in Datenpunkt schießt JS Instanz ab:

                                      Geht es jetzt ums Prinzipenreiten oder gibt es ein echtes Problem?

                                      Ich will mich hier nicht weiter reinhängen, aber genau um den ersten Teil der Frage geht es ganz und gar nicht, aber der zweite Teil ist durchaus für einen unbedarften Leser möglich. Deswegen auch das Mod-Edit bzw., die Ergänzung unter dem im 2. Beitrag ausgetauschten Blockly.

                                      Das MOD-Edit ist nur eben leider falsch, da sich die ersten Antworten und meine Reaktion darauf auf die ursprüngliche Grafik beziehen. Was nun mehr Verwirrung stiftet überlasse ich anderen....

                                      Homoran 1 Reply Last reply Reply Quote 0
                                      • David G.
                                        David G. @JoergH last edited by

                                        @joergh

                                        Ich Pflege die Gewerke in der CCU nicht.
                                        Kannst du diese nicht mit dem rega Adapter synchronisieren und die Fenster per Selector ermitteln?

                                        J 1 Reply Last reply Reply Quote 0
                                        • Homoran
                                          Homoran Global Moderator Administrators @JoergH last edited by

                                          @joergh sagte in Schreiben in Datenpunkt schießt JS Instanz ab:

                                          Das MOD-Edit ist nur eben leider falsch, da sich die ersten Antworten und meine Reaktion darauf auf die ursprüngliche Grafik beziehen.

                                          ???

                                          @joergh sagte in Schreiben in Datenpunkt schießt JS Instanz ab:

                                          MOD-EDIT: Das hier gezeigte Blockly wurde nachträglich ausgetauscht! Die folgenden Antworten beziehen sich auf das inzwischen gelöschte Blockly!

                                          und was steht da??

                                          J 1 Reply Last reply Reply Quote 0
                                          • J
                                            JoergH @David G. last edited by

                                            @david-g Doch, aber nur, wenn Sie in der CCU auch als Fenster, Tür, Raum etc. eingepflegt wurden, werden sie synchronisiert. Dann aber die Channels und nicht die STATES...

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            656
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            31
                                            930
                                            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