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. [gelöst] Datenpunkte in Variablen zusammenfassen

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    559

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    5.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.4k

[gelöst] Datenpunkte in Variablen zusammenfassen

Scheduled Pinned Locked Moved JavaScript
6 Posts 2 Posters 495 Views 2 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.
  • H Offline
    H Offline
    Heidi02
    wrote on last edited by Heidi02
    #1

    Hallo,
    ich habe hier ein Script, welches die Timestamps der Zigbee-Sensoren in eigenen Datenpunkten ablegt.

    const HexAddress = '00158d00032400af';
    
    const MijiaSwitch = [ 'zigbee.0.00158d00032400af.click' , 'zigbee.0.00158d00032400af.double_click' , 'zigbee.0.00158d00032400af.triple_click' , 
    'zigbee.0.00158d00032400af.quad_click' , 'zigbee.0.00158d00032400af.many_click' ];
    
    const Path = '0_userdata.0.zigbee.';
    
    on({id: MijiaSwitch, val:true}, function (dp) {
    
      var time = formatDate(Number(dp.state.ts), 'TT-MM-JJ hh:mm:ss');
      var change = formatDate(Number(dp.state.lc), 'hh:mm:ss');
      
      setState(Path + HexAddress + '.' + 'ts', time);
      setState(Path + HexAddress + '.' + 'lc', change);
    });
    
    

    Wie könnte ich die Zeile "const MijiaSwitch = [ 'zigbee ..." vereinfachen, so daß ich nicht jeden Datenpunkt für jede Funktion des Schalters eintragen muss? Also, vom Prinzip her, so etwas wie - 'zigbee.0.' + HexAddress + '.*'
    Könnt Ihr mir einen Tipp geben?

    PS: Allen ein gesundes neues Jahr!

    paul53P 1 Reply Last reply
    0
    • H Heidi02

      Hallo,
      ich habe hier ein Script, welches die Timestamps der Zigbee-Sensoren in eigenen Datenpunkten ablegt.

      const HexAddress = '00158d00032400af';
      
      const MijiaSwitch = [ 'zigbee.0.00158d00032400af.click' , 'zigbee.0.00158d00032400af.double_click' , 'zigbee.0.00158d00032400af.triple_click' , 
      'zigbee.0.00158d00032400af.quad_click' , 'zigbee.0.00158d00032400af.many_click' ];
      
      const Path = '0_userdata.0.zigbee.';
      
      on({id: MijiaSwitch, val:true}, function (dp) {
      
        var time = formatDate(Number(dp.state.ts), 'TT-MM-JJ hh:mm:ss');
        var change = formatDate(Number(dp.state.lc), 'hh:mm:ss');
        
        setState(Path + HexAddress + '.' + 'ts', time);
        setState(Path + HexAddress + '.' + 'lc', change);
      });
      
      

      Wie könnte ich die Zeile "const MijiaSwitch = [ 'zigbee ..." vereinfachen, so daß ich nicht jeden Datenpunkt für jede Funktion des Schalters eintragen muss? Also, vom Prinzip her, so etwas wie - 'zigbee.0.' + HexAddress + '.*'
      Könnt Ihr mir einen Tipp geben?

      PS: Allen ein gesundes neues Jahr!

      paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #2

      @Heidi02 sagte:

      etwas wie - 'zigbee.0.' + HexAddress + '.*'

      Verwendung von $Selector.

      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
      • H Offline
        H Offline
        Heidi02
        wrote on last edited by
        #3

        Danke, Paul!
        Der $Selector hilft tatsächlich :blush: . Es funktioniert soweit wie gewünscht.
        Nur ein kleines Problem habe ich noch. Ist es möglich Adresse des Sensors als Variable in die Selector - Funktion einzufügen. Daran strauchele ich im Moment.
        Diese Variante funktioniert -

        $('state[id=zigbee.0.00158d00032400af.*]').each(function(id, i) {
        ...
        });
        

        und diese nicht -

        const SensorHexAddress = '00158d00032400af';
        var SensorPath = ('zigbee.0.' + SensorHexAddress + '.*');
        $('state[id = (SensorPath)]').each(function(id, i) {
        ...
        });
        

        Wo liegt mein Fehler?

        paul53P 1 Reply Last reply
        0
        • H Heidi02

          Danke, Paul!
          Der $Selector hilft tatsächlich :blush: . Es funktioniert soweit wie gewünscht.
          Nur ein kleines Problem habe ich noch. Ist es möglich Adresse des Sensors als Variable in die Selector - Funktion einzufügen. Daran strauchele ich im Moment.
          Diese Variante funktioniert -

          $('state[id=zigbee.0.00158d00032400af.*]').each(function(id, i) {
          ...
          });
          

          und diese nicht -

          const SensorHexAddress = '00158d00032400af';
          var SensorPath = ('zigbee.0.' + SensorHexAddress + '.*');
          $('state[id = (SensorPath)]').each(function(id, i) {
          ...
          });
          

          Wo liegt mein Fehler?

          paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by paul53
          #4

          @Heidi02 sagte:

          und diese nicht -

          Ich habe es zwar noch nicht getestet, aber meiner Meinung nach sollte eine normale String-Verkettung funktionieren. Versuche es mal so:

          const SensorHexAddress = '00158d00032400af';
          const SensorPath = 'zigbee.0.' + SensorHexAddress + '.*';
          $('state[id=' + SensorPath + ']').each(function(id, i) {
          ...
          });
          

          wobei das auch funktionieren sollte:

          const SensorHexAddress = '00158d00032400af';
          const SensorPath = 'zigbee.0.' + SensorHexAddress + '.*';
          $(SensorPath).each(function(id, i) {
          ...
          });
          

          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
          1
          • H Offline
            H Offline
            Heidi02
            wrote on last edited by Heidi02
            #5

            @paul53
            Vielen Dank für Deine Hilfe!

            Beide Varianten Deiner Lösung funktionieren tadellos. Ich sehe schon, daß ich in Sachen JS / TS noch viel zu lernen habe.

            So sieht das ganze "Machwerk" aus. Eventuell kann es ja jemand gebrauchen. Verbesserungsvorschläge oder Tipps sind gern gesehen.

            export {};
            const SensorHexAddress = '00158d00032400af';
            const UserdataPath = '0_userdata.0.zigbee.';
            
            var SensorPath = ('zigbee.0.' + SensorHexAddress + '.*');
            var SensorStat = [];
            
            $(SensorPath).each(function(id, i) {        
                SensorStat.push(id);
            });
            
            on({id: SensorStat , val:true}, function (dp) {
            
              var timestamp = formatDate(Number(dp.state.ts), 'TT-MM-JJ hh:mm:ss');
              var lastchange = formatDate(Number(dp.state.lc), 'hh:mm:ss');
              
              setState(UserdataPath + SensorHexAddress + '.' + 'ts', timestamp);
              setState(UserdataPath + SensorHexAddress + '.' + 'lc', lastchange);
            });   
            
            1 Reply Last reply
            0
            • H Offline
              H Offline
              Heidi02
              wrote on last edited by
              #6

              Achso:
              Ich hatte zum Testen des Scripts einen Taster verwendet da der viele verschiedene states zurückliefert und natürlich auch schnell gedrückt ist.
              Bei Verwendung anderer Sensoren, welche Werte zurückliefern anstatt logischer Zustände, müsste die Zeile

              on({id: SensorStat , val:true}, function (dp) {
              

              geändert werden in

              on({id: SensorStat , change: 'any'}, function (dp) {
              

              .

              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

              621

              Online

              32.7k

              Users

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