Skip to content
  • 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
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Anzahl Datenpunkte geändert - wie Trigger anpassen?

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.2k

Anzahl Datenpunkte geändert - wie Trigger anpassen?

Geplant Angeheftet Gesperrt Verschoben JavaScript
8 Beiträge 3 Kommentatoren 218 Aufrufe 3 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.
  • BananaJoeB Online
    BananaJoeB Online
    BananaJoe
    Most Active
    schrieb am zuletzt editiert von
    #1

    Ich habe in einem Skript einen Trigger auf alle Datenpunkte eines Adapters gesetzt, und zwar wie folgt:

    // Und eine weitere Subscription auf "life.360.0.myplaces.*.*.isPresent"
    $(dp_myplaces + ".*.*.isPresent").on( function (obj) {
    //on({ id: dp_circle + ".*.membersPresent", change: "ne" }, function (obj) {
        var value = obj.state.val;
        if (value == true) {
            MyPlaces_AssignPeopleAndPlaces(obj.id);
        }
    });
    

    Wenn ich nun in der Life360 App einen weiteren Ort erstelle so scheint der Adapter dies auch zeitnah mitzubekommen. Aber mein Skript nicht. Der Adapter erstellt den neuen Ort (und müsste sofort festgestellt haben das dort jemand "Present" ist, mein Skript bekam das aber erst nach einem Neustart raus.
    Ich vermute weil die neuen Datenpunkte halt noch nicht im Trigger / Subscription waren.

    Also, wie löst man das am besten?

    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 44TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=157 Tasmota/Shelly || >=88 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 900/750W kaskadiert || Creality CR-10 SE 3D-Drucker

    paul53P 1 Antwort Letzte Antwort
    0
    • BananaJoeB BananaJoe

      Ich habe in einem Skript einen Trigger auf alle Datenpunkte eines Adapters gesetzt, und zwar wie folgt:

      // Und eine weitere Subscription auf "life.360.0.myplaces.*.*.isPresent"
      $(dp_myplaces + ".*.*.isPresent").on( function (obj) {
      //on({ id: dp_circle + ".*.membersPresent", change: "ne" }, function (obj) {
          var value = obj.state.val;
          if (value == true) {
              MyPlaces_AssignPeopleAndPlaces(obj.id);
          }
      });
      

      Wenn ich nun in der Life360 App einen weiteren Ort erstelle so scheint der Adapter dies auch zeitnah mitzubekommen. Aber mein Skript nicht. Der Adapter erstellt den neuen Ort (und müsste sofort festgestellt haben das dort jemand "Present" ist, mein Skript bekam das aber erst nach einem Neustart raus.
      Ich vermute weil die neuen Datenpunkte halt noch nicht im Trigger / Subscription waren.

      Also, wie löst man das am besten?

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @bananajoe sagte: die neuen Datenpunkte halt noch nicht im Trigger / Subscription waren.

      Die neuen Datenpunkte sind noch nicht im Puffer der Javascript-Instanz.

      @bananajoe sagte in Anzahl Datenpunkte geändert - wie Trigger anpassen?:

      wie löst man das am besten?

      Mit

      on(RegExp, function(dp) {});
      

      anstelle des Selektors.

      on(/^life360\.0\.myplaces\..+\.isPresent$/, function(dp) {
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      0
      • BananaJoeB Online
        BananaJoeB Online
        BananaJoe
        Most Active
        schrieb am zuletzt editiert von
        #3

        @paul53 sagte in Anzahl Datenpunkte geändert - wie Trigger anpassen?:

        on(RegExp, function(dp) {});

        Also so etwa?

        // Pfad mit dem Kreis der Überwacht werden soll. Den "channel" unterhalb von life360.x.circles der Überwacht werden soll
        const dp_circle = "life360.0.circles.8a95a98d-adb3-4df4-bb0c-e374f4f8f161";
        var on_dp_circle = "/^" + dp_circle + "\..+\.membersPresent$/"
        
        on(on_dp_circle , function(dp) {
            var value = obj.state.val;
            if (value == true) {
                MyPlaces_AssignPeopleAndPlaces(obj.id);
        });
        

        Ich hab gesehen das du hier im Forum schon oft Fragen dazu beantwortest hast.
        ich bin mir nicht sicher bezüglich der Schreibweisen und ob ich das wie oben stehend verketten kann:

        /^ muss Anfangen mit
        \.. eine beliebige Anzahl von Zeichen (war das nicht ein Punkt?)
        + muss mindestens einmal vorkommen?
        $/ Zeichenkettenende / Zeilenende?
        

        Ich nutze sonst den RegExBuddy - aber da muss ich das passende Verfahren einstellen, das wäre dann JavaScript? die / und \ verwirren mich ein wenig

        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 44TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=157 Tasmota/Shelly || >=88 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 900/750W kaskadiert || Creality CR-10 SE 3D-Drucker

        paul53P 1 Antwort Letzte Antwort
        0
        • BananaJoeB BananaJoe

          @paul53 sagte in Anzahl Datenpunkte geändert - wie Trigger anpassen?:

          on(RegExp, function(dp) {});

          Also so etwa?

          // Pfad mit dem Kreis der Überwacht werden soll. Den "channel" unterhalb von life360.x.circles der Überwacht werden soll
          const dp_circle = "life360.0.circles.8a95a98d-adb3-4df4-bb0c-e374f4f8f161";
          var on_dp_circle = "/^" + dp_circle + "\..+\.membersPresent$/"
          
          on(on_dp_circle , function(dp) {
              var value = obj.state.val;
              if (value == true) {
                  MyPlaces_AssignPeopleAndPlaces(obj.id);
          });
          

          Ich hab gesehen das du hier im Forum schon oft Fragen dazu beantwortest hast.
          ich bin mir nicht sicher bezüglich der Schreibweisen und ob ich das wie oben stehend verketten kann:

          /^ muss Anfangen mit
          \.. eine beliebige Anzahl von Zeichen (war das nicht ein Punkt?)
          + muss mindestens einmal vorkommen?
          $/ Zeichenkettenende / Zeilenende?
          

          Ich nutze sonst den RegExBuddy - aber da muss ich das passende Verfahren einstellen, das wäre dann JavaScript? die / und \ verwirren mich ein wenig

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von paul53
          #4

          @bananajoe sagte: Also so etwa?

          Nein, RegExp ist kein String, also funktioniert auch keine String-Verkettung. Wie man RegExp verkettet, entzieht sich meiner Kenntnis.

          @bananajoe sagte in Anzahl Datenpunkte geändert - wie Trigger anpassen?:

          die / und \ verwirren mich ein wenig

          / markieren Anfang und Ende eines RegExp. \ vor einem Punkt meinen den Punkt selbst, da der Punkt im RegExp sonst eine besondere Bedeutung hat (beliebiges Zeichen).

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          BananaJoeB 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @bananajoe sagte: Also so etwa?

            Nein, RegExp ist kein String, also funktioniert auch keine String-Verkettung. Wie man RegExp verkettet, entzieht sich meiner Kenntnis.

            @bananajoe sagte in Anzahl Datenpunkte geändert - wie Trigger anpassen?:

            die / und \ verwirren mich ein wenig

            / markieren Anfang und Ende eines RegExp. \ vor einem Punkt meinen den Punkt selbst, da der Punkt im RegExp sonst eine besondere Bedeutung hat (beliebiges Zeichen).

            BananaJoeB Online
            BananaJoeB Online
            BananaJoe
            Most Active
            schrieb am zuletzt editiert von
            #5

            @paul53 also müsste ich das hart-verdrahtet in das Skript packen.
            Ich schau mal ob ich noch was dazu finde - aber schon mal vielen Dank

            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 44TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=157 Tasmota/Shelly || >=88 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 900/750W kaskadiert || Creality CR-10 SE 3D-Drucker

            T 1 Antwort Letzte Antwort
            0
            • BananaJoeB BananaJoe

              @paul53 also müsste ich das hart-verdrahtet in das Skript packen.
              Ich schau mal ob ich noch was dazu finde - aber schon mal vielen Dank

              T Nicht stören
              T Nicht stören
              ticaki
              schrieb am zuletzt editiert von ticaki
              #6

              @bananajoe

              const dp_circle = "life360\.0\.circles\.8a95a98d-adb3-4df4-bb0c-e374f4f8f161";
               var on_dp_circle = "/^" + dp_circle + "\..+\.membersPresent$/"
              

              oder ne Funktion:

              const dp_circle = "life360.0.circles.8a95a98d-adb3-4df4-bb0c-e374f4f8f161";
              let r = getRegEx(dp_circle, '^');
              r += '.*\.membersPresent$';
              on({ id: new RegExp(r), change: 'ne' }, ...)
              
              function getRegEx(value, firstChar) {
                  let path = value.split('.');
                  if (value[value.length-1] == '.') path.splice(path.length-1,1);
                  let r = '';
                  if (firstChar !== undefined) r+=firstChar;
                  for (let a=0;a<path.length;a++) {
                      if (path[a]) r+=path[a]+'\.';
                  }
                  return r;
              }
              

              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

              Spenden

              BananaJoeB 1 Antwort Letzte Antwort
              0
              • T ticaki

                @bananajoe

                const dp_circle = "life360\.0\.circles\.8a95a98d-adb3-4df4-bb0c-e374f4f8f161";
                 var on_dp_circle = "/^" + dp_circle + "\..+\.membersPresent$/"
                

                oder ne Funktion:

                const dp_circle = "life360.0.circles.8a95a98d-adb3-4df4-bb0c-e374f4f8f161";
                let r = getRegEx(dp_circle, '^');
                r += '.*\.membersPresent$';
                on({ id: new RegExp(r), change: 'ne' }, ...)
                
                function getRegEx(value, firstChar) {
                    let path = value.split('.');
                    if (value[value.length-1] == '.') path.splice(path.length-1,1);
                    let r = '';
                    if (firstChar !== undefined) r+=firstChar;
                    for (let a=0;a<path.length;a++) {
                        if (path[a]) r+=path[a]+'\.';
                    }
                    return r;
                }
                
                BananaJoeB Online
                BananaJoeB Online
                BananaJoe
                Most Active
                schrieb am zuletzt editiert von
                #7

                @ticaki irgendwie ist die Antwort nicht ganz so wie du diese erstellen wolltest - glaube ich.
                Zumindest scheinst du diese wieder geändert zu haben.

                Die Function macht was? Ermittelt die vorhandenen Datenpunkte einzeln? Und die On Springt an wenn einer dazu kommt? oder gelöscht wird?

                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 44TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=157 Tasmota/Shelly || >=88 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 900/750W kaskadiert || Creality CR-10 SE 3D-Drucker

                T 1 Antwort Letzte Antwort
                0
                • BananaJoeB BananaJoe

                  @ticaki irgendwie ist die Antwort nicht ganz so wie du diese erstellen wolltest - glaube ich.
                  Zumindest scheinst du diese wieder geändert zu haben.

                  Die Function macht was? Ermittelt die vorhandenen Datenpunkte einzeln? Und die On Springt an wenn einer dazu kommt? oder gelöscht wird?

                  T Nicht stören
                  T Nicht stören
                  ticaki
                  schrieb am zuletzt editiert von ticaki
                  #8

                  @bananajoe
                  Hallo, war gestern etwas zu müde. Ich hatte zuerst vorgeschlagen das du mit einem schedule überprüft ob sich

                  $(dp_myplaces + ".*.*.isPresent")
                  

                  verändert und wenn ja, das Skript neu startest.

                  var oldDps = $(dp_myplaces + ".*.*.isPresent");
                  
                  schedule('*/5 * * * *', function() {
                    if (JSON.stringify(oldDps) != JSON.stringify($(dp_myplaces + ".*.*.isPresent"))) restartScript();
                  })
                  

                  Dann gesehen das RegEx neue Datenpunkt erfasst, und weil du mit dem /\ durcheinanderkommst. dir meine Funktion hier rein kopiert die jeden Punkt in einem Datenpunkt gegen

                  \.
                  

                  tauscht.

                  RegEx findet keine gelöschten Datenpunkte soweit mir bekannt, sondern nur neue.

                  Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                  Spenden

                  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

                  625

                  Online

                  32.4k

                  Benutzer

                  81.4k

                  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
                  • Aktuell
                  • Tags
                  • Ungelesen 0
                  • Kategorien
                  • Unreplied
                  • Beliebt
                  • GitHub
                  • Docu
                  • Hilfe