Skip to content
  • 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
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [gelöst] Blocky - Gegen unterschiedliche Elemente in einem Datenpunkt prüfen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.0k

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

Scheduled Pinned Locked Moved Skripten / Logik
14 Posts 4 Posters 800 Views
  • 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.
  • M Offline
    M Offline
    Mitch
    wrote on last edited by
    #1

    Hi,

    ich habe in einen Datenpunkt unterschiedliche Elemente auf die ich prüfen möchte Allerdings werden die Unter-Datenpunkte durch ein Skript neu angelegt und wieder gelöscht.

    Kann ich mittels Blocky nur gegen einen exakten Datenpunkt prüfen, oder gegen alle vorhanden Unter-Datenpunkte? Geht das vielleicht über eine Schleife in Blocky, oder ist die Lösung viel einfacher? Oder muss Javascript her?

    Siehe Screenshot.

    EDIT: Mit Eurer Hilfe war schnell klar, das es mit Blockly alleine nicht geht. Aber Javascript und das Forum hier konnte helfen.
    8437_unbenannt.png

    1 Reply Last reply
    0
    • DutchmanD Offline
      DutchmanD Offline
      Dutchman
      Developer Most Active Administrators
      wrote on last edited by
      #2

      Alles unter einem Baum geht leider nicht mit blockly da musst du die objecten selektieren.

      In JavaScript geht das mit regxp

      Sent from my iPhone using Tapatalk

      1 Reply Last reply
      0
      • M Offline
        M Offline
        Mitch
        wrote on last edited by
        #3

        Du meinst regexp und vermutlich einer Schleife. Hast Du vielleicht eine Code-Schnipsel, den ich als Grundlage nehmen könnte?

        1 Reply Last reply
        0
        • DutchmanD Offline
          DutchmanD Offline
          Dutchman
          Developer Most Active Administrators
          wrote on last edited by
          #4

          @Mitch:

          Du meinst regexp und vermutlich einer Schleife. Hast Du vielleicht eine Code-Schnipsel, den ich als Grundlage nehmen könnte? `

          Oeps ja den meinte ich und nein keine Schleife die sind immer schlecht.

          Code Schnitzel kommt in 5 Minuten habe hier glaube noch nicht gutes Beispiel für

          Sent from my iPhone using Tapatalk

          1 Reply Last reply
          0
          • M Offline
            M Offline
            Mitch
            wrote on last edited by
            #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 Reply Last reply
            0
            • DutchmanD Offline
              DutchmanD Offline
              Dutchman
              Developer Most Active Administrators
              wrote on last edited by
              #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 Reply Last reply
              0
              • M Offline
                M Offline
                Mitch
                wrote on last edited by
                #7

                Ist super deine Hilfe! Vielen Dank!

                1 Reply Last reply
                0
                • paul53P Offline
                  paul53P Offline
                  paul53
                  wrote on last edited by
                  #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 Reply Last reply
                  0
                  • M Offline
                    M Offline
                    Mitch
                    wrote on last edited by
                    #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 Reply Last reply
                    0
                    • DutchmanD Offline
                      DutchmanD Offline
                      Dutchman
                      Developer Most Active Administrators
                      wrote on last edited by
                      #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 Reply Last reply
                      0
                      • H Offline
                        H Offline
                        homecineplexx
                        wrote on last edited by
                        #11

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

                        1 Reply Last reply
                        0
                        • H Offline
                          H Offline
                          homecineplexx
                          wrote on last edited by
                          #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 Reply Last reply
                          0
                          • H Offline
                            H Offline
                            homecineplexx
                            wrote on last edited by
                            #13

                            Und du musst \n statt /n verwenden

                            1 Reply Last reply
                            0
                            • M Offline
                              M Offline
                              Mitch
                              wrote on last edited by
                              #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 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

                              603

                              Online

                              32.4k

                              Users

                              81.4k

                              Topics

                              1.3m

                              Posts
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                              ioBroker Community 2014-2025
                              logo
                              • Login

                              • Don't have an account? Register

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Recent
                              • Tags
                              • Unread 0
                              • Categories
                              • Unreplied
                              • Popular
                              • GitHub
                              • Docu
                              • Hilfe