Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly
  5. Schreiben in Datenpunkt schießt JS Instanz ab

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    534

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.6k

Schreiben in Datenpunkt schießt JS Instanz ab

Geplant Angeheftet Gesperrt Verschoben Blockly
31 Beiträge 6 Kommentatoren 2.3k Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • J Offline
    J Offline
    JoergH
    schrieb am zuletzt editiert von JoergH
    #1

    So, jetzt mal ein harter Brocken:

    Ich habe mir eine Art "Pipeline" für die Ansagen gebastellt, da ich verhindern möchte, dass beim Eintreten von zwei Events, die eine Sprachausgabe auslösen, alles durcheinander gesabbelt wird. Dabei habe ich festgestellt, dass sowieso nur Texte bis maximal 70 Zeichen gesprochen werden können, weshalb ich dann halt die Texte in Stücke zerlegt habe. Das ganze wird in einem Array abgespeichert im Format Text, Verzögerung, Text, Verzögerung,...
    Wenn dieser Datenpunkt sich verändert, springt die "Abspielroutine" per Trigger an und soll dann Jobs kreiren, die nach der Verzögerung x den nächsten Text aufsagen. Das ganze ist noch nicht hundertprozent fertig, aber zum Testen bis hierhin reicht es.

    Solange die Texte kurz sind, klappt alles wunderbar.
    Sind die Texte aber länger als 70 Zeichen, dann bringt mir der Schreibbefehl des Arrays in den Datenpunkt, in dem ich die Pipe abspeichern will die komplette Javascript Instanz zum resetten...

    Eine Fehlermeldung gibt es nicht.

    Wie kann ich nun rausfinden woran das liegt?

    var targetDatapoint, Delay_ms, cronMessage, text, ID_DP_Pipe, ID_DP_Pipe_Trigger, ID_DP_Sprache_Ausgangspuffer, Text_in_ms, ID_Fully_ScreenOn, ID_DP_Sprachausgabe, Pipe, ID_DP_Lautst_C3_A4rke, ID_DP_Sprachlog, Pipe_running, ID_DP_Alarmausl_C3_B6sung, Textstring, Textteil, Trunc_pos, myjsonArray;
    
    // Beschreibe diese Funktion …
    async function createObj(text) {
        return {zeit: formatDate(new Date(), 'hh:mm:ss'), text: text};
    }
    
    
    createState('0_userdata.0.Visualisierung.Pipe', [], { type: 'array', read: true, write: true }, async () => {
      ID_DP_Pipe = '0_userdata.0.Visualisierung.Pipe';
      ID_DP_Pipe_Trigger = '0_userdata.0.Visualisierung.Pipe_Trigger';
      ID_DP_Sprache_Ausgangspuffer = '0_userdata.0.Visualisierung.Sprache_Ausgangspuffer';
      ID_Fully_ScreenOn = 'fullybrowser.0.Samsung_A7_Eingang.Commands.screenOn';
      ID_DP_Sprachausgabe = '0_userdata.0.Visualisierung.Sprachausgabe';
      ID_DP_Sprachlog = '0_userdata.0.Visualisierung.Sprachlog';
      ID_DP_Lautst_C3_A4rke = '0_userdata.0.Visualisierung.Lautstärke';
      ID_DP_Alarmausl_C3_B6sung = '0_userdata.0.Sicherheit.Alarm_Auslösung';
      Text_in_ms = 0;
      setStateDelayed(ID_DP_Pipe, { val: [], ack: false }, parseInt(((0) || '').toString(), 10), false);
      on({ id: [].concat(ID_DP_Sprachausgabe), change: 'ne' }, async (obj) => {
        let value = obj.state.val;
        let oldValue = obj.oldState.val;
        Pipe = getState(ID_DP_Pipe).val;
        Textstring = getState(ID_DP_Sprachausgabe).val;
        Text_in_ms = Textstring.length * 200;
        if (Textstring.length > 70) {
          while (!(Textstring.length < 71)) {
            Textteil = Textstring.slice(0, 70);
            Trunc_pos = Textteil.lastIndexOf(' ') + 1;
            Textteil = Textstring.slice(0, Trunc_pos - 1);
            Textstring = Textstring.slice((Trunc_pos - 1), Textstring.length);
            console.info((['Text geteilt in: ',Textteil,'\n','- und in - ',Textstring,'- mit Zeichenanzahl: ',Textstring.length].join('')));
            Text_in_ms = Textteil.length * 200;
            Pipe.push(Textteil);
            Pipe.push(Text_in_ms);
          }
          Text_in_ms = Textstring.length * 200;
        }
        Pipe.push(Textstring);
        Pipe.push(Text_in_ms);
        console.info((['Pipe: ',Pipe,'- Pipelänge: ',Pipe.length].join('')));
        setStateDelayed(ID_DP_Pipe, { val: Pipe, ack: true }, parseInt(((0) || '').toString(), 10), false);
        setStateDelayed(ID_DP_Pipe_Trigger, { val: true, ack: false }, parseInt(((1000) || '').toString(), 10), false);
      });
    });
    on({ id: [].concat(['0_userdata.0.Visualisierung.Pipe_Trigger']), change: 'any' }, async (obj) => {
      let value = obj.state.val;
      let oldValue = obj.oldState.val;
      Text_in_ms = 100;
      if (!Pipe_running) {
        Pipe = getState(ID_DP_Pipe).val;
        console.info('Pipe not running...');
        console.info(('Länge der  Pipe bei bis: ' + String(Pipe.length)));
        while (!(Pipe.length < 2)) {
          console.info('test');
          Pipe_running = true;
          Pipe = getState(ID_DP_Pipe).val;
          Textstring = Pipe[0];
          console.info((['Cronjob erstellen mit ',ID_DP_Sprache_Ausgangspuffer,' - ',Text_in_ms,' - ',Textstring].join('')));
          console.info(('Länge der Pipe: ' + String(Pipe.length)));
          Text_in_ms = Pipe[1];
          if (Pipe.length > 2) {
            Pipe = Pipe.slice(0, Pipe.length - 2);
            console.info(('Pipe nach Durchlauf: ' + String(Pipe)));
          } else {
            Pipe = [];
            Text_in_ms = 100;
          }
          console.info(('Länge der Pipe danach: ' + String(Pipe.length)));
        }
        Pipe_running = false;
        if (getState(ID_DP_Pipe).val.length > 0) {
          console.info('Lösche Pipe');
          setStateDelayed(ID_DP_Pipe, { val: [], ack: true }, parseInt(((0) || '').toString(), 10), false);
        }
      }
    });
    on({ id: [].concat(ID_DP_Sprache_Ausgangspuffer), change: 'ne' }, async (obj) => {
      let value = obj.state.val;
      let oldValue = obj.oldState.val;
      sendTo("sayit", "say", { text: getState(ID_DP_Sprache_Ausgangspuffer).val, volume: getState(ID_DP_Lautst_C3_A4rke).val });});
    J 1 Antwort Letzte Antwort
    0
    • J JoergH

      So, jetzt mal ein harter Brocken:

      Ich habe mir eine Art "Pipeline" für die Ansagen gebastellt, da ich verhindern möchte, dass beim Eintreten von zwei Events, die eine Sprachausgabe auslösen, alles durcheinander gesabbelt wird. Dabei habe ich festgestellt, dass sowieso nur Texte bis maximal 70 Zeichen gesprochen werden können, weshalb ich dann halt die Texte in Stücke zerlegt habe. Das ganze wird in einem Array abgespeichert im Format Text, Verzögerung, Text, Verzögerung,...
      Wenn dieser Datenpunkt sich verändert, springt die "Abspielroutine" per Trigger an und soll dann Jobs kreiren, die nach der Verzögerung x den nächsten Text aufsagen. Das ganze ist noch nicht hundertprozent fertig, aber zum Testen bis hierhin reicht es.

      Solange die Texte kurz sind, klappt alles wunderbar.
      Sind die Texte aber länger als 70 Zeichen, dann bringt mir der Schreibbefehl des Arrays in den Datenpunkt, in dem ich die Pipe abspeichern will die komplette Javascript Instanz zum resetten...

      Eine Fehlermeldung gibt es nicht.

      Wie kann ich nun rausfinden woran das liegt?

      var targetDatapoint, Delay_ms, cronMessage, text, ID_DP_Pipe, ID_DP_Pipe_Trigger, ID_DP_Sprache_Ausgangspuffer, Text_in_ms, ID_Fully_ScreenOn, ID_DP_Sprachausgabe, Pipe, ID_DP_Lautst_C3_A4rke, ID_DP_Sprachlog, Pipe_running, ID_DP_Alarmausl_C3_B6sung, Textstring, Textteil, Trunc_pos, myjsonArray;
      
      // Beschreibe diese Funktion …
      async function createObj(text) {
          return {zeit: formatDate(new Date(), 'hh:mm:ss'), text: text};
      }
      
      
      createState('0_userdata.0.Visualisierung.Pipe', [], { type: 'array', read: true, write: true }, async () => {
        ID_DP_Pipe = '0_userdata.0.Visualisierung.Pipe';
        ID_DP_Pipe_Trigger = '0_userdata.0.Visualisierung.Pipe_Trigger';
        ID_DP_Sprache_Ausgangspuffer = '0_userdata.0.Visualisierung.Sprache_Ausgangspuffer';
        ID_Fully_ScreenOn = 'fullybrowser.0.Samsung_A7_Eingang.Commands.screenOn';
        ID_DP_Sprachausgabe = '0_userdata.0.Visualisierung.Sprachausgabe';
        ID_DP_Sprachlog = '0_userdata.0.Visualisierung.Sprachlog';
        ID_DP_Lautst_C3_A4rke = '0_userdata.0.Visualisierung.Lautstärke';
        ID_DP_Alarmausl_C3_B6sung = '0_userdata.0.Sicherheit.Alarm_Auslösung';
        Text_in_ms = 0;
        setStateDelayed(ID_DP_Pipe, { val: [], ack: false }, parseInt(((0) || '').toString(), 10), false);
        on({ id: [].concat(ID_DP_Sprachausgabe), change: 'ne' }, async (obj) => {
          let value = obj.state.val;
          let oldValue = obj.oldState.val;
          Pipe = getState(ID_DP_Pipe).val;
          Textstring = getState(ID_DP_Sprachausgabe).val;
          Text_in_ms = Textstring.length * 200;
          if (Textstring.length > 70) {
            while (!(Textstring.length < 71)) {
              Textteil = Textstring.slice(0, 70);
              Trunc_pos = Textteil.lastIndexOf(' ') + 1;
              Textteil = Textstring.slice(0, Trunc_pos - 1);
              Textstring = Textstring.slice((Trunc_pos - 1), Textstring.length);
              console.info((['Text geteilt in: ',Textteil,'\n','- und in - ',Textstring,'- mit Zeichenanzahl: ',Textstring.length].join('')));
              Text_in_ms = Textteil.length * 200;
              Pipe.push(Textteil);
              Pipe.push(Text_in_ms);
            }
            Text_in_ms = Textstring.length * 200;
          }
          Pipe.push(Textstring);
          Pipe.push(Text_in_ms);
          console.info((['Pipe: ',Pipe,'- Pipelänge: ',Pipe.length].join('')));
          setStateDelayed(ID_DP_Pipe, { val: Pipe, ack: true }, parseInt(((0) || '').toString(), 10), false);
          setStateDelayed(ID_DP_Pipe_Trigger, { val: true, ack: false }, parseInt(((1000) || '').toString(), 10), false);
        });
      });
      on({ id: [].concat(['0_userdata.0.Visualisierung.Pipe_Trigger']), change: 'any' }, async (obj) => {
        let value = obj.state.val;
        let oldValue = obj.oldState.val;
        Text_in_ms = 100;
        if (!Pipe_running) {
          Pipe = getState(ID_DP_Pipe).val;
          console.info('Pipe not running...');
          console.info(('Länge der  Pipe bei bis: ' + String(Pipe.length)));
          while (!(Pipe.length < 2)) {
            console.info('test');
            Pipe_running = true;
            Pipe = getState(ID_DP_Pipe).val;
            Textstring = Pipe[0];
            console.info((['Cronjob erstellen mit ',ID_DP_Sprache_Ausgangspuffer,' - ',Text_in_ms,' - ',Textstring].join('')));
            console.info(('Länge der Pipe: ' + String(Pipe.length)));
            Text_in_ms = Pipe[1];
            if (Pipe.length > 2) {
              Pipe = Pipe.slice(0, Pipe.length - 2);
              console.info(('Pipe nach Durchlauf: ' + String(Pipe)));
            } else {
              Pipe = [];
              Text_in_ms = 100;
            }
            console.info(('Länge der Pipe danach: ' + String(Pipe.length)));
          }
          Pipe_running = false;
          if (getState(ID_DP_Pipe).val.length > 0) {
            console.info('Lösche Pipe');
            setStateDelayed(ID_DP_Pipe, { val: [], ack: true }, parseInt(((0) || '').toString(), 10), false);
          }
        }
      });
      on({ id: [].concat(ID_DP_Sprache_Ausgangspuffer), change: 'ne' }, async (obj) => {
        let value = obj.state.val;
        let oldValue = obj.oldState.val;
        sendTo("sayit", "say", { text: getState(ID_DP_Sprache_Ausgangspuffer).val, volume: getState(ID_DP_Lautst_C3_A4rke).val });});
      J Offline
      J Offline
      JoergH
      schrieb am zuletzt editiert von Homoran
      #2

      Hier sind auch noch die Blocklys dazu, die allerdings so lang sind, dass ich sie splitten musste:

      Screenshot 2024-11-19 093457.png

      Screenshot 2024-11-19 093549.png

      Screenshot 2024-11-19 093608.png

      Screenshot 2024-11-19 093618.png

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

      David G.D BananaJoeB 2 Antworten Letzte Antwort
      0
      • J JoergH

        Hier sind auch noch die Blocklys dazu, die allerdings so lang sind, dass ich sie splitten musste:

        Screenshot 2024-11-19 093457.png

        Screenshot 2024-11-19 093549.png

        Screenshot 2024-11-19 093608.png

        Screenshot 2024-11-19 093618.png

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

        David G.D Online
        David G.D Online
        David G.
        schrieb am zuletzt editiert von David G.
        #3

        @joergh

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

        Warum sind die Blöcke zum DP generieren alle verschachtelt?
        Warum überhaupt noch die Blöcke, DPs sind ja jetzt angekegt.
        Warum kommen da drinnen irgendwann relevante Aktionen wie den Zähler aber das alles hat keinen Trigger?

        Warum hast du innerhalb einer Funktion einen Trigger?

        Warum die ganzen Cronejobs anlegen?

        Ich finde das alles sehr komplihiert aufgebaut.

        Zeigt eure Lovelace-Visualisierung klick
        (Auch ideal um sich Anregungen zu holen)

        Meine Tabellen für eure Visualisierung klick

        1 Antwort Letzte Antwort
        0
        • J JoergH

          Hier sind auch noch die Blocklys dazu, die allerdings so lang sind, dass ich sie splitten musste:

          Screenshot 2024-11-19 093457.png

          Screenshot 2024-11-19 093549.png

          Screenshot 2024-11-19 093608.png

          Screenshot 2024-11-19 093618.png

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

          BananaJoeB Offline
          BananaJoeB Offline
          BananaJoe
          Most Active
          schrieb am zuletzt editiert von
          #4

          @joergh Du solltest schon mal deiner Funktion Element als Parameter übergeben und sich nicht darauf verlassen das der Wert noch stimmt während in deinem Startskript in der Schleife schon der nächste Wert in Element geschrieben wird.

          Und du hast diese große Hammerroutine die dann für jedes Fenster/Tür etc. einmal komplett hinterlegt wird. Und es letztendlich doch nur darum geht das ganze einmal neu anzustoßen wenn sich der Zustand eines Datenpunktes ändert.

          Pack das ganze doch in eine Funktion. So oder so:
          Dann lässt du dein Startskript eine(!) Liste erstellen in der alle Datenpunkte sind die überwacht werden sollen.
          Und dann packst du ganz unten unter dein Startskript, nicht in einer Funktion, einen(!) Trigger dem du diese Liste übergibst als Parameter und der den Aufruf der Funktion enthält. Von mir aus mit dem ganzen Inhalt deiner bisherigen Funktion.
          Das Verschachteln mit "Datenpunkt erzeugen" würde ich auch dringen aufheben.
          Im Schlimmsten Fall musst du beim allerersten mal dein Skript 2x Starten damit die Datenpunkte da sind und auch gleich genutzt werden können.

          Und was genau beabsichtigst du mit den ganzen Cronjobs pro Fenster/Tür etc? Was machen dieses zeitlich gesteuerten Jobs?

          ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

          J 1 Antwort Letzte Antwort
          0
          • J Offline
            J Offline
            JoergH
            schrieb am zuletzt editiert von
            #5

            @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.D 1 Antwort Letzte Antwort
            0
            • BananaJoeB BananaJoe

              @joergh Du solltest schon mal deiner Funktion Element als Parameter übergeben und sich nicht darauf verlassen das der Wert noch stimmt während in deinem Startskript in der Schleife schon der nächste Wert in Element geschrieben wird.

              Und du hast diese große Hammerroutine die dann für jedes Fenster/Tür etc. einmal komplett hinterlegt wird. Und es letztendlich doch nur darum geht das ganze einmal neu anzustoßen wenn sich der Zustand eines Datenpunktes ändert.

              Pack das ganze doch in eine Funktion. So oder so:
              Dann lässt du dein Startskript eine(!) Liste erstellen in der alle Datenpunkte sind die überwacht werden sollen.
              Und dann packst du ganz unten unter dein Startskript, nicht in einer Funktion, einen(!) Trigger dem du diese Liste übergibst als Parameter und der den Aufruf der Funktion enthält. Von mir aus mit dem ganzen Inhalt deiner bisherigen Funktion.
              Das Verschachteln mit "Datenpunkt erzeugen" würde ich auch dringen aufheben.
              Im Schlimmsten Fall musst du beim allerersten mal dein Skript 2x Starten damit die Datenpunkte da sind und auch gleich genutzt werden können.

              Und was genau beabsichtigst du mit den ganzen Cronjobs pro Fenster/Tür etc? Was machen dieses zeitlich gesteuerten Jobs?

              J Offline
              J Offline
              JoergH
              schrieb am zuletzt editiert von JoergH
              #6

              @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-skyL HomoranH 2 Antworten Letzte Antwort
              0
              • J 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-skyL Offline
                liv-in-skyL Offline
                liv-in-sky
                schrieb am zuletzt editiert von
                #7

                @joergh

                Ich vermute Mal es liegt an den while schleifen

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

                nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                J 1 Antwort Letzte Antwort
                0
                • J 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.

                  HomoranH Nicht stören
                  HomoranH Nicht stören
                  Homoran
                  Global Moderator Administrators
                  schrieb am zuletzt editiert von
                  #8

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

                  [Edit] : Jetzt passt es.

                  jetzt passen aber die Antworten nicht mehr

                  kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                  der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                  J 1 Antwort Letzte Antwort
                  0
                  • HomoranH Homoran

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

                    [Edit] : Jetzt passt es.

                    jetzt passen aber die Antworten nicht mehr

                    J Offline
                    J Offline
                    JoergH
                    schrieb am zuletzt editiert von
                    #9

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

                    HomoranH 1 Antwort Letzte Antwort
                    0
                    • liv-in-skyL liv-in-sky

                      @joergh

                      Ich vermute Mal es liegt an den while schleifen

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

                      J Offline
                      J Offline
                      JoergH
                      schrieb am zuletzt editiert von
                      #10

                      @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 Antwort Letzte Antwort
                      0
                      • J JoergH

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

                        HomoranH Nicht stören
                        HomoranH Nicht stören
                        Homoran
                        Global Moderator Administrators
                        schrieb am zuletzt editiert von
                        #11

                        @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

                        kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                        der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                        J 1 Antwort Letzte Antwort
                        0
                        • HomoranH Homoran

                          @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 Offline
                          J Offline
                          JoergH
                          schrieb am zuletzt editiert von
                          #12

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

                          HomoranH liv-in-skyL 2 Antworten Letzte Antwort
                          0
                          • J JoergH

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

                            HomoranH Nicht stören
                            HomoranH Nicht stören
                            Homoran
                            Global Moderator Administrators
                            schrieb am zuletzt editiert von Homoran
                            #13

                            @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!

                            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                            J 1 Antwort Letzte Antwort
                            0
                            • J JoergH

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

                              liv-in-skyL Offline
                              liv-in-skyL Offline
                              liv-in-sky
                              schrieb am zuletzt editiert von
                              #14

                              @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
                              

                              nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                              J 1 Antwort Letzte Antwort
                              0
                              • HomoranH 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 Offline
                                J Offline
                                JoergH
                                schrieb am zuletzt editiert von
                                #15

                                @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?

                                Samson71S 1 Antwort Letzte Antwort
                                0
                                • liv-in-skyL liv-in-sky

                                  @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 Offline
                                  J Offline
                                  JoergH
                                  schrieb am zuletzt editiert von JoergH
                                  #16

                                  @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-skyL 1 Antwort Letzte Antwort
                                  0
                                  • J 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-skyL Offline
                                    liv-in-skyL Offline
                                    liv-in-sky
                                    schrieb am zuletzt editiert von
                                    #17

                                    @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

                                    nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                                    1 Antwort Letzte Antwort
                                    0
                                    • J JoergH

                                      @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?

                                      Samson71S Offline
                                      Samson71S Offline
                                      Samson71
                                      Global Moderator
                                      schrieb am zuletzt editiert von
                                      #18

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

                                      Markus

                                      Bitte beachten:
                                      Hinweise für gute Forenbeiträge
                                      Maßnahmen zum Schutz des Forums

                                      J 1 Antwort Letzte Antwort
                                      0
                                      • J JoergH

                                        @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.D Online
                                        David G.D Online
                                        David G.
                                        schrieb am zuletzt editiert von David G.
                                        #19

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

                                        Zeigt eure Lovelace-Visualisierung klick
                                        (Auch ideal um sich Anregungen zu holen)

                                        Meine Tabellen für eure Visualisierung klick

                                        J 1 Antwort Letzte Antwort
                                        0
                                        • David G.D 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 Offline
                                          J Offline
                                          JoergH
                                          schrieb am zuletzt editiert von
                                          #20

                                          @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.D 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          670

                                          Online

                                          32.5k

                                          Benutzer

                                          81.8k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe