Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Abfrage von Datenpunkten

    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

    Abfrage von Datenpunkten

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

      Hi,

      ich habe so gut wie keine Kenntnisse von JavaScript(leider). Versuche es aber zu lernen.

      ich versuche mich gerade an einen Script, das in diesen Fall vier "fancyswitches" abfragt. 'fenster1….4'

      Der Zustand der DP ändert sich auch wenn ich die Schalter betätige, leider wird anscheinend die Funktion nicht abgearbeitet.

      //Datenpunkte erzeugen
      
      createState('fenster1', 0);  
      createState('fenster2', 0);
      createState('fenster3', 0);
      createState('fenster4', 0);
      createState('zustand', 0);
      
      var eins = getState('fenster1').val;
      var zwei = getState('fenster2').val;
      var drei = getState('fenster3').val;
      var vier = getState('fenster4').val;
      
      function status()
      {
      	var a = getState(eins).val;
      	var b = getState(zwei).val;
      	var c = getState(drei).val;
      	var d = getState(vier).val;
      if(a === 1 && b === 1 && c === 1 && d === 1)
      {
      	setState('zustand', 1);
      }
      else if(a === 0 || b === 0 || c === 0 || d === 0)
      {
      	setState('zustand', 0);
      }
      }
      //Script starten
      
      on(eins, function()
      {
      	status();
      });
      
      on(zwei, function()
      {
      	status();
      });
      
      

      der DP 'zustand' soll im VIS dann einen basic static html anzeigen.

      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        @blauholsten:

        Hi,

        ich habe so gut wie keine Kenntnisse von JavaScript(leider). Versuche es aber zu lernen.

        ich versuche mich gerade an einen Script, das in diesen Fall vier "fancyswitches" abfragt. 'fenster1….4'

        Der Zustand der DP ändert sich auch wenn ich die Schalter betätige, leider wird anscheinend die Funktion nicht abgearbeitet.

        //Datenpunkte erzeugen
        
        createState('fenster1', 0);  
        createState('fenster2', 0);
        createState('fenster3', 0);
        createState('fenster4', 0);
        createState('zustand', 0);
        
        var eins = getState('fenster1').val;
        var zwei = getState('fenster2').val;
        var drei = getState('fenster3').val;
        var vier = getState('fenster4').val;
        
        function status()
        {
        	var a = getState(eins).val;
        	var b = getState(zwei).val;
        	var c = getState(drei).val;
        	var d = getState(vier).val;
        if(a === 1 && b === 1 && c === 1 && d === 1)
        {
        	setState('zustand', 1);
        }
        else if(a === 0 || b === 0 || c === 0 || d === 0)
        {
        	setState('zustand', 0);
        }
        }
        //Script starten
        
        on(eins, function()
        {
        	status();
        });
        
        on(zwei, function()
        {
        	status();
        });
        
        

        der DP 'zustand' soll im VIS dann einen basic static html anzeigen. `

        Hallo blauholsten,

        fast richtig! 😄 Da ist ein kleiner Fehler in den on-Funktionen:

        //Datenpunkte erzeugen
        
        createState('fenster1', 0);  
        createState('fenster2', 0);
        createState('fenster3', 0);
        createState('fenster4', 0);
        createState('zustand', 0);
        
        var eins ='fenster1';
        var zwei = 'fenster2';
        var drei = 'fenster3;
        var vier = 'fenster4';
        
        function status()
        {
        	var a = getState(eins).val;
        	var b = getState(zwei).val;
        	var c = getState(drei).val;
        	var d = getState(vier).val;
        if(a === 1 && b === 1 && c === 1 && d === 1)
        {
        	setState('zustand', 1);
        }
        else if(a === 0 || b === 0 || c === 0 || d === 0)
        {
        	setState('zustand', 0);
        }
        }
        //Script starten
        
        on(eins, function()
        {
        	status();
        });
        
        on(zwei, function()
        {
        	status();
        });
        

        Hast du die Änderungen bemerkt? Die ID in der on-Funktion reagiert nicht auf getState().val –- der String in den Häkchen ist nur ein eine ersetzt nur 'javascript.[Instanz].Variablenname' damit der Datenpunkt mit getState abgefragt werden kann. Im alten Skript war es praktisch getState(getState(x).val) und das ist falsch.

        Gruß

        Pix
        6334_ede21.jpg

        1 Reply Last reply Reply Quote 0
        • blauholsten
          blauholsten Developer last edited by

          Hi,

          vielen Dank! Ich werde es heute Abend mal ausprobieren. 😉

          1 Reply Last reply Reply Quote 0
          • blauholsten
            blauholsten Developer last edited by

            Hi,

            geht leider noch nicht…. :?

            671_unbenannt.jpg

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

              getState(id) verlangt die ID (nicht den Namen).

              var eins = getIdByName('fenster1');
              var zwei = getIdByName('fenster2');
              var drei = getIdByName('fenster3');
              var vier = getIdByName('fenster4');
              var zustand = getIdByName('zustand');
              
              function status()
              {
                  var a = getState(eins).val;
                  var b = getState(zwei).val;
                  var c = getState(drei).val;
                  var d = getState(vier).val;
                  if(a  && b && c && d)
                  {
                     setState(zustand, 1);
                  }
                  else
                  {
                     setState(zustand, 0);
                  }
              }
              
              on(eins, status());
              on(zwei, status());
              
              
              1 Reply Last reply Reply Quote 0
              • blauholsten
                blauholsten Developer last edited by

                Also die eigentliche if Abfrage in der funktion geht! Leider reagiert das Script nicht auf Veränderungen der fancyswitches. Nur wenn ich das Script neu lade wird die Funktion abgearbeitet.

                Was mache ich falsch? Ich dacht das on ist dafür da auf gewünschte Änderungen zu reagieren?

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

                  Habe gerade getestet: Die verkürzte Schreibweise

                  on(eins, status());
                  

                  funktioniert leider nicht. Richtig:

                  on(eins, function() {status();});
                  on(zwei, function() {status();});
                  on(drei, function() {status();});
                  on(vier, function() {status();});
                  
                  
                  1 Reply Last reply Reply Quote 0
                  • blauholsten
                    blauholsten Developer last edited by

                    So jetzt habe ich es dank eurer Hilfe am laufen! Danke!!!!

                    //Datenpunkte erzeugen
                    
                    createState('fenster1', 0);
                    createState('fenster2', 0);
                    createState('fenster3', 0);
                    createState('fenster4', 0);
                    createState('zustand', 0);
                    
                    function status()
                    {
                        var a = getState('fenster1').val;
                        var b = getState('fenster2').val;
                        var c = getState('fenster3').val;
                        var d = getState('fenster4').val;
                    
                        if(a  && b && c && d)
                        {
                           setState('zustand', 1);
                        }
                        else
                        {
                           setState('zustand', 0);
                        }
                    }
                    
                    on({id:'javascript.0.fenster1'}, function(){
                        status();
                        });
                    on({id:'javascript.0.fenster2'}, function(){
                        status();
                        });
                    on({id:'javascript.0.fenster3'}, function(){
                        status();
                        });
                    on({id:'javascript.0.fenster4'}, function(){
                        status();
                        });
                    
                    

                    ich habe bei der on function gleich mit dem id Wert gearbeitet, um später z.b. die HM Datenpunkte schneller einbinden zu können.

                    Wie kann man den Beitrag als [gelöst] markieren?

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

                      @blauholsten:

                      Wie kann man den Beitrag als [gelöst] markieren? `
                      Indem man die Betreff-Zeile editiert.

                      Anmerkung: Die Funktion getState('Name') funktioniert nur mit Datenpunkten der zugehörigen Javascript-Instanz. Um generell mit Namen arbeiten zu können, verwende ich die Funktion getIdByName('Name'), die nur einmal bei Script-Start aufgerufen wird.
                      358_modbus_solaredge.png

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

                        @paul53:

                        Die verkürzte Schreibweise

                        on(eins, status());
                        
                        

                        funktioniert leider nicht. Richtig:

                        on(eins, function() {status();});
                        on(zwei, function() {status();});
                        on(drei, function() {status();});
                        on(vier, function() {status();});
                        ```` `  
                        

                        oder so:

                        on(eins, status);
                        on(zwei, status);
                        on(drei, status);
                        on(vier, status);
                        
                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        965
                        Online

                        31.9k
                        Users

                        80.2k
                        Topics

                        1.3m
                        Posts

                        3
                        10
                        8721
                        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