Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Blocky - Gegen unterschiedliche Elemente in einem Datenpunkt prüfen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

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

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Mitch last edited by

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

      1 Reply Last reply Reply Quote 0
      • Dutchman
        Dutchman Developer Most Active Administrators last edited by

        @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 Reply Quote 0
        • M
          Mitch last edited by

          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 Reply Quote 0
          • Dutchman
            Dutchman Developer Most Active Administrators last edited by

            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 Reply Quote 0
            • M
              Mitch last edited by

              Ist super deine Hilfe! Vielen Dank!

              1 Reply Last reply Reply Quote 0
              • paul53
                paul53 last edited by

                @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);
                });
                
                
                1 Reply Last reply Reply Quote 0
                • M
                  Mitch last edited by

                  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 Reply Quote 0
                  • Dutchman
                    Dutchman Developer Most Active Administrators last edited by

                    @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 Reply Quote 0
                    • H
                      homecineplexx last edited by

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

                      1 Reply Last reply Reply Quote 0
                      • H
                        homecineplexx last edited by

                        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 Reply Quote 0
                        • H
                          homecineplexx last edited by

                          Und du musst \n statt /n verwenden

                          1 Reply Last reply Reply Quote 0
                          • M
                            Mitch last edited by

                            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 Reply Quote 0
                            • First post
                              Last post

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            757
                            Online

                            31.7k
                            Users

                            79.9k
                            Topics

                            1.3m
                            Posts

                            4
                            14
                            748
                            Loading More Posts
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes
                            Reply
                            • Reply as topic
                            Log in to reply
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                            The ioBroker Community 2014-2023
                            logo