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. Gültigkeitsbereiche von Variablen

NEWS

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

  • 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

Gültigkeitsbereiche von Variablen

Scheduled Pinned Locked Moved JavaScript
4 Posts 3 Posters 401 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.
  • E Offline
    E Offline
    ehome
    wrote on last edited by ehome
    #1

    kann leider den Post nicht löschen ......

    BananaJoeB 1 Reply Last reply
    0
    • E ehome

      kann leider den Post nicht löschen ......

      BananaJoeB Offline
      BananaJoeB Offline
      BananaJoe
      Most Active
      wrote on last edited by
      #2

      @ehome ich habe den Abonniert und hätte gerne die Lösung gesehen :-)
      Ich fand es ein etwas wildes Spiel bei der Verwendung von let und const oder eben dem völligen weglassen. Wollte aber den Profis den Vortritt lassen.

      ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 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 APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

      E 1 Reply Last reply
      0
      • BananaJoeB BananaJoe

        @ehome ich habe den Abonniert und hätte gerne die Lösung gesehen :-)
        Ich fand es ein etwas wildes Spiel bei der Verwendung von let und const oder eben dem völligen weglassen. Wollte aber den Profis den Vortritt lassen.

        E Offline
        E Offline
        ehome
        wrote on last edited by ehome
        #3

        @bananajoe

        Ups, sorry .
        Hatte den Post gelöscht, da ich mit meinem Skript ziemlich auf dem Holzweg war - ich glaube da war der Mix aus let und const das geringste Problem .....
        Meine Lektion des Woche: Objekte lassen sich nicht mit ObjektNeu=Objekt kopieren ....

        Momentan verwende ich tsMax noch nicht. Habe es aber erst einmal im code drin gelassen....

        create_states und tolog sind globale Funktionen und stehen daher nicht im code
        Hier der funktionierende Code:

        
        // Skript  zum erfassen der Max Arbeit pro tag
        // die maximal Werte werden in powerMax gesichert
        // und zum Tagesanfang resettet
        
        
        let logging=true
        
        //  Prod
        let sourcePath='alias.0.power'
        let targetPath="0_userdata.0.Auswertungen.maxPowerDaily"
        
        // Test
        //let targetPath="0_userdata.0.test.maxPower"
        //let sourcePath="0_userdata.0.test.aliasPower"
        
        var stateObjects=readLoggingObject(sourcePath+"*") // Liste der datenpunkte mit aktuellem Wert als initial wert
        const stateObjectsKeys=keys = Object.keys(stateObjects);
        //log(stateObjectsKeys)
        
        // beim start sind valMax=val und tsMax=ts 
        // sind target datenpunkte noch nicht vorhanden werden sie mit den aktuellen werten angelegt
        
        for (let key in stateObjects) {
          create_states([[targetPath+"."+getDpShort(key), {'name':getDpShort(key), 'type':'number', 'read':true, 'write':true, 'role': "value", 'unit': "W", 'def':  stateObjects[key].val}]])
        }
        
        // falls es einen restart gegeben hat, werden die letzten aktuellen max werte eingelesen
        
        for (let key in stateObjects) {
          if (stateObjects.hasOwnProperty(key)) {
            stateObjects[key]['tsMax'] = getState(targetPath+"."+getDpShort(key)).ts;
            stateObjects[key]['valMax'] = getState(targetPath+"."+getDpShort(key)).val;
          }
        }
        
        //log(stateObjects)
        
        on({id:stateObjectsKeys, change:'ne'}, function (obj) { 
          stateObjects[obj.id]['val']=obj.state.val
          stateObjects[obj.id]['ts']=obj.state.ts
          if (obj.state.val > stateObjects[obj.id]['valMax']) {
            stateObjects[obj.id]['valMax'] = obj.state.val
            stateObjects[obj.id]['tsMax'] = obj.state.ts
            setState(targetPath+"."+getDpShort(obj.id),obj.state.val,true)
          }
        })
         
        // zu tagesbeginn werden die max-werte zurück gesetzt
        
        schedule("0 0 * * *", function () {
          tolog(logging,"Reset max values in "+targetPath)
          for (let key in stateObjects) {
            if (stateObjects.hasOwnProperty(key)) {
              stateObjects[key]['tsMax'] = stateObjects[key].ts;
              stateObjects[key]['valMax'] = stateObjects[key].val;
              setState(targetPath+"."+getDpShort(key),stateObjects[key].val,true)
            }
          }
        })
        
        // funktion zum erstellen von datenpunkten 
        
        function create_states(statesToCreate) { 
                createUserStates('0_userdata.0.', false, statesToCreate, function(){
                tolog(logging,"States der Statistikenfür alle Counter erstellt");
            })
        }
        
        // einlesen der werte
        
        function readLoggingObject(object_datapoints) {
          let loggingObj={}
          $(object_datapoints).each(function (id, i) {
              const state = getState(id);          
              if (state && !isNaN(state.val)) {
                  loggingObj[id] = state
              } else {
                  loggingObj[id].state={};
              }
          })
          return loggingObj
        }
        
        function logDp(obj) {
          for (const key of Object.keys(obj)) {
            tolog(logging,"Key: "+key+" aktuell: "+obj[key]['val']+" Max: "+obj[key]['valMax']+" MaxTS: "+obj[key]['tsMax'])
          }
        }
        
        // erstellen des short names
        
        function getDpShort(str) {
          const parts = str.split('.');
          return parts[parts.length - 1];
        }
        
        1 Reply Last reply
        0
        • arteckA Offline
          arteckA Offline
          arteck
          Developer Most Active
          wrote on last edited by arteck
          #4

          ich habs mir angeschaut... und wusste nicht wo ich anfangen soll...

          Empfehlung an @ehome setzt dich nochmal mit der Syntax/Semantik von Javascript zusammen (und ich rede nicht von CleanCode)

          @BananaJoe

          eigentlich ist es ganz einfach

          let var1 = true;
          
          if (var1) {
            let var2 = false;
          }
          

          var1 ist allgemein gültig (globale Variable) für den ganzen Programm/Script lauf auch innerhalb der if Abfrage
          var2 ist nur in der if Abfrage gültig ... (lokale Variable) ..das kann man jetzt weiter treiben auf Schleifen oder Trigger

          früher war das Problem von globalen Variablen dass diese (wie jede andere auch) speicher Platz im RAM verbraucht haben.. und dieser sehr knapp war..
          man musste genaustens überlegen wie viel Byte man braucht.. und ob die Variable nur einmal oder mehrere male oder für den ganzen Programmlauf benötigt war
          Devs die vor 40 Jahren Programmiert haben wissen wovon ich rede

          zigbee hab ich, zwave auch, nuc's genauso und HA auch

          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

          438

          Online

          32.7k

          Users

          82.6k

          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