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. [gelöst] Blocky - Gegen unterschiedliche Elemente in einem Datenpunkt prüfen

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

[gelöst] Blocky - Gegen unterschiedliche Elemente in einem Datenpunkt prüfen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
14 Beiträge 4 Kommentatoren 874 Aufrufe
  • Ä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.
  • M Offline
    M Offline
    Mitch
    schrieb am zuletzt editiert von
    #5

    Das ist lieb, sorry das ich noch nicht der Javascripter bin. Werde zwar ständig besser.

    Mit den Schleifen habe ich schon gehört, das dies nicht gut ist. Habe aber bisher ein Script am laufen, wo eine Schleife genutzt werden. Warum ist das schlecht?

    1 Antwort Letzte Antwort
    0
    • DutchmanD Offline
      DutchmanD Offline
      Dutchman
      Developer Most Active Administrators
      schrieb am zuletzt editiert von
      #6

      so musste suchen so oft benutze ich es nicht, hoffe diese code hilft dir weiter.

      Ich lese hierin alle inhalte von einer enum aus, muss doch m it schleife mein denkfehler !

      `//******************************************
      //*****************Dutchman*****************
      //****revert values to use KNX with yahka***
      //*******************V 0.8****************** 
      //******************************************
      //******************************************
      
      // Read all enums related to enum.functions
      functions = getEnums('functions');
      
      // Loop on all values and store members of function "rolladen" to variable
      for (var i in functions){
          if (functions[i].name == 'rolladen'){
              var rolladen = functions[i].members;
      
          }
      
      }
      
      //Seperate values in variable "rolladen" to seperate devices
      //and create new objects reflecting all current devies and states for "rolladen" in javascript tree
      str = rolladen + ' ';
      
      var str_array = str.split(',');
      for(i = 0; i < str_array.length; i++) {
          str_array[i] = str_array[i].replace(/^\s*/, "").replace(/\s*$/, "");
      
      	try{
      
              //retrieve device name for all found devices, replace empty spaces in name by _
              var objnameT =  getObject(str_array[i]).common.name;
              var objname = objnameT.split(' ').join('_');
              var objvalue = 100 - getState(str_array[i]).val;
              var revName = objname + '_reversed';
      
              //Check if object already exist, otherwise create and sync current value
      		if (typeof(getIdByName(revName)) === 'undefined') {
      
                  createState("rolladen_reversed_values." + objname, objvalue, {
                      name: revName,
                      read: true,
                      write: true,
                      min: 0,
                      max: 100,
                      type: 'number',
                      role: 'level.hight',
                      unit: "%",
                      linkorigin: str_array[i]
      
                  });
      
                  log('New object  "' + revName + '"  created within "rolladen_reversed_values"');
      
      		}
      
      	}   catch(e){}   
      
      }
      
      // Trigger on value change in reverse values and syncronise to origin
      on({id: /^javascript.1.rolladen_reversed_values\./, change: "ne"}, function (obj) {
      
          //reverse value from Yahka to KNX logic
          var newvalue = 100 - obj.state.val;
      
          //verify is calculated value is different, if yes update Yahka value to reversed object otherwise do nothing
          if (newvalue !== getState(obj.common.linkorigin).val){
              setState (obj.common.linkorigin, newvalue);
              console.debug('value change based on Yahka trigger, received value = ' + obj.state.val + ' ,calculated to = ' + newvalue);
      
          }
      
      });
      
      // Trigger on value change in origin values and syncronise to reverse values
      on({enumName: 'rolladen', change: "ne"}, function (obj) {
      
          //reverse value from KNX to Yahka logic
          var newvalue = 100 - obj.state.val;
          var objnameT =  obj.common.name;
          var objname = objnameT.split(' ').join('_');
      
          //verify is calculated value is different, if yes update KNX value to reversed object otherwise do nothing
          if (newvalue !== getState("rolladen_reversed_values." + objname).val){
              setState("rolladen_reversed_values." + obj.common.name, newvalue, true);
              console.debug('value change based on KNX trigger, received value = ' + obj.state.val + ' ,calculated to = ' + newvalue);
      
          }
      
      });` [/i][/i][/i][/i][/i][/i][/i]
      
      1 Antwort Letzte Antwort
      0
      • M Offline
        M Offline
        Mitch
        schrieb am zuletzt editiert von
        #7

        Ist super deine Hilfe! Vielen Dank!

        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #8

          @Mitch:

          Oder muss Javascript her?

          Siehe Screenshot. `
          Ja, Blockly bietet es nicht. Für die gezeigte Struktur eignet sich der $Selector.

          const dps = $('javascript.0.isopen.*');
          
          dps.each(function(id, i) {
              var val = getState(id).val;
              log(id + ': ' + val);
          });
          
          

          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
          • M Offline
            M Offline
            Mitch
            schrieb am zuletzt editiert von
            #9

            Erstmal vielen Dank für die Hilfe.

            Die Lösung von Paul hat funktioniert:

            schedule("*/1 * * * *", function () {
                const dps = $('javascript.0.isopen.*');
                dps.each(function(id, i) {
                    var desc = getObject(id).common.desc;
                    infotext = infotext + 'Der Sensor '+ desc +' ist offen./n' 
                });
                sendTo('telegram.0', {
                    text:   infotext
                });
            });
            

            Allerdings wollte ich alles in einer Telegram Nachricht darstellen. Scheinbar scheint infotext außerhalb der Schleifer nicht mehr zu funktionieren:

            javascript.0 2018-09-20 21:18:00.943 error at script.js.Meine_Überwachungen.Sensoren_offen:5:20

            javascript.0 2018-09-20 21:18:00.942 error Error in callback: ReferenceError: infotext is not defined

            Sag mal, gibt es eigentlich so ein Wiki wo man seine Lösungen die man sich selbst gebastelt hat, mit anbieten kann? Ich würde gerne meine Lösungen weitergeben wenn sie mal fertig sind, um auch etwas an die Community zurück zu geben.

            1 Antwort Letzte Antwort
            0
            • DutchmanD Offline
              DutchmanD Offline
              Dutchman
              Developer Most Active Administrators
              schrieb am zuletzt editiert von
              #10

              @Mitch:

              Allerdings wollte ich alles in einer Telegram Nachricht darstellen. Scheinbar scheint infotext außerhalb der Schleifer nicht mehr zu funktionieren: `

              Waum nicht so ?

              schedule("*/1 * * * *", function () {
                  const dps = $('javascript.0.isopen.*');
                  dps.each(function(id, i) {
                      var desc = getObject(id).common.desc;
                      infotext = infotext + 'Der Sensor '+ desc +' ist offen./n' 
              
                  	sendTo('telegram.0', {
                      	text:   infotext
                  	});
                  });
              });
              
              

              @Mitch:

              Sag mal, gibt es eigentlich so ein Wiki wo man seine Lösungen die man sich selbst gebastelt hat, mit anbieten kann? Ich würde gerne meine Lösungen weitergeben wenn sie mal fertig sind, um auch etwas an die Community zurück zu geben. `

              Wir haben da eine seite mit ein par beispielen, das meiste allerdings hier im forum.

              Daher ist es auch sehr wichtig vernueftige thema namen zu waehlen damit man es auch uber die suchfunktion findet.

              1 Antwort Letzte Antwort
              0
              • H Offline
                H Offline
                homecineplexx
                schrieb am zuletzt editiert von
                #11

                Wenn du die variable infotext ganz am Anfang definierst kannst sie auch außerhalb benutzen in deinem send.

                1 Antwort Letzte Antwort
                0
                • H Offline
                  H Offline
                  homecineplexx
                  schrieb am zuletzt editiert von
                  #12

                  So

                  var infotext = "" ;
                  
                  schedule("*/1 * * * *", function () {
                      const dps = $('javascript.0.isopen.*');
                      dps.each(function(id, i) {
                          var desc = getObject(id).common.desc;
                          infotext = infotext + 'Der Sensor '+ desc +' ist offen./n' 
                  
                      	sendTo('telegram.0',  infotext);
                      });
                  });
                  
                  
                  1 Antwort Letzte Antwort
                  0
                  • H Offline
                    H Offline
                    homecineplexx
                    schrieb am zuletzt editiert von
                    #13

                    Und du musst \n statt /n verwenden

                    1 Antwort Letzte Antwort
                    0
                    • M Offline
                      M Offline
                      Mitch
                      schrieb am zuletzt editiert von
                      #14

                      Ihr seit die besten. Hier das fertige Script:

                      schedule("*/1 * * * *", function () {
                          var infotext = '';
                          const dps = $('javascript.0.isopen.*');
                          dps.each(function(id, i) {
                              var desc = getObject(id).common.desc;
                              infotext = infotext + 'Der Sensor '+ desc +' ist offen.\n';
                          });
                      	sendTo('telegram.0',  infotext);
                      });
                      

                      Ich setze das Thema aus gelöst!

                      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

                      296

                      Online

                      32.6k

                      Benutzer

                      82.3k

                      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