Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  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.8k

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

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

Anzahl Datenpunkte geändert - wie Trigger anpassen?

Scheduled Pinned Locked Moved JavaScript
8 Posts 3 Posters 219 Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • BananaJoeB Offline
    BananaJoeB Offline
    BananaJoe
    Most Active
    wrote on last edited by
    #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 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

    paul53P 1 Reply Last reply
    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
      wrote on last edited by 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 Reply Last reply
      0
      • BananaJoeB Offline
        BananaJoeB Offline
        BananaJoe
        Most Active
        wrote on last edited by
        #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 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

        paul53P 1 Reply Last reply
        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
          wrote on last edited by 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 Reply Last reply
          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 Offline
            BananaJoeB Offline
            BananaJoe
            Most Active
            wrote on last edited by
            #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 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

            T 1 Reply Last reply
            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 Do not disturb
              T Do not disturb
              ticaki
              wrote on last edited by 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 Reply Last reply
              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 Offline
                BananaJoeB Offline
                BananaJoe
                Most Active
                wrote on last edited by
                #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 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

                T 1 Reply Last reply
                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 Do not disturb
                  T Do not disturb
                  ticaki
                  wrote on last edited by 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 Reply Last reply
                  0
                  Reply
                  • Reply as topic
                  Log in to reply
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes


                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  430

                  Online

                  32.4k

                  Users

                  81.5k

                  Topics

                  1.3m

                  Posts
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                  ioBroker Community 2014-2025
                  logo
                  • Login

                  • Don't have an account? Register

                  • Login or register to search.
                  • First post
                    Last post
                  0
                  • Home
                  • Recent
                  • Tags
                  • Unread 0
                  • Categories
                  • Unreplied
                  • Popular
                  • GitHub
                  • Docu
                  • Hilfe