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

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

[gelöst] Datenpunkte in Variablen zusammenfassen

Geplant Angeheftet Gesperrt Verschoben JavaScript
6 Beiträge 2 Kommentatoren 450 Aufrufe 2 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.
  • H Offline
    H Offline
    Heidi02
    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • H Offline
        H Offline
        Heidi02
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        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
          schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
          1
          • H Offline
            H Offline
            Heidi02
            schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
            0
            • H Offline
              H Offline
              Heidi02
              schrieb am zuletzt editiert von
              #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 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

              609

              Online

              32.6k

              Benutzer

              82.1k

              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