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

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    15
    1
    557

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.9k

Gültigkeitsbereiche von Variablen

Geplant Angeheftet Gesperrt Verschoben JavaScript
4 Beiträge 3 Kommentatoren 369 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.
  • E Offline
    E Offline
    ehome
    schrieb am zuletzt editiert von ehome
    #1

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

    BananaJoeB 1 Antwort Letzte Antwort
    0
    • E ehome

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

      BananaJoeB Offline
      BananaJoeB Offline
      BananaJoe
      Most Active
      schrieb am zuletzt editiert von
      #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, 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

      E 1 Antwort Letzte Antwort
      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
        schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
        0
        • arteckA Offline
          arteckA Offline
          arteck
          Developer Most Active
          schrieb am zuletzt editiert von 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 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

          483

          Online

          32.6k

          Benutzer

          81.9k

          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