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. On ID Grundlage

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

On ID Grundlage

Geplant Angeheftet Gesperrt Verschoben JavaScript
23 Beiträge 3 Kommentatoren 74 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.
  • L Online
    L Online
    Laser
    schrieb am zuletzt editiert von Laser
    #1

    Ich habe nachfolgendes Testscript erstellt. Die Meldung "OK" kommt bei Auslösung aber mehrfach. Auch wenn ein anderer Befehl eingegeben wird, wird Dieser auch mehrfach ausgeführt. Auch wenn ich "val:false" weglasse und bei change "lt" einsetze. Was mache ich falsch?

    // Beispiel:
    //on({id: 'hm-rpc.0.OEQ0333XXX.1.STATE', change: 'any'}, function (obj) {
    //  setState("hm-rpc.0.OEQ0816XXX.1.STATE",obj.state.val);
    //});
    
     setInterval(abfrage,2000);
     
    function abfrage(){
        on({id:'0_userdata.0.Logik.TestZustand'/*TestZustand*/,val:false,change: 'ne'}, function(){
          
            console.log("OK");
    });
    };  // Ende function abfrage
    
     /*  change:
    Wert	Erklärung
    eq	Der neue Wert muss gleich dem alten sein
    ne	Der neue Wert muss nicht gleich dem alten sein (Standard)
    gt	Neuer Wert muss größer als der alte Wert sein
    ge	Neuer Wert muss größer oder gleich groß sein
    lt	Neuer Wert muss kleiner als der alte sein
    le	Neuer Wert muss kleiner oder gleich groß sein
    any	Trigger wird immer ausgeführt
    */
    
    paul53P 1 Antwort Letzte Antwort
    0
    • HomoranH Homoran verschob dieses Thema von Einsteigerfragen am
    • L Laser

      Ich habe nachfolgendes Testscript erstellt. Die Meldung "OK" kommt bei Auslösung aber mehrfach. Auch wenn ein anderer Befehl eingegeben wird, wird Dieser auch mehrfach ausgeführt. Auch wenn ich "val:false" weglasse und bei change "lt" einsetze. Was mache ich falsch?

      // Beispiel:
      //on({id: 'hm-rpc.0.OEQ0333XXX.1.STATE', change: 'any'}, function (obj) {
      //  setState("hm-rpc.0.OEQ0816XXX.1.STATE",obj.state.val);
      //});
      
       setInterval(abfrage,2000);
       
      function abfrage(){
          on({id:'0_userdata.0.Logik.TestZustand'/*TestZustand*/,val:false,change: 'ne'}, function(){
            
              console.log("OK");
      });
      };  // Ende function abfrage
      
       /*  change:
      Wert	Erklärung
      eq	Der neue Wert muss gleich dem alten sein
      ne	Der neue Wert muss nicht gleich dem alten sein (Standard)
      gt	Neuer Wert muss größer als der alte Wert sein
      ge	Neuer Wert muss größer oder gleich groß sein
      lt	Neuer Wert muss kleiner als der alte sein
      le	Neuer Wert muss kleiner oder gleich groß sein
      any	Trigger wird immer ausgeführt
      */
      
      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @Laser sagte: Was mache ich falsch?

      Das Intervall erzeugt alle 2 s einen neuen Trigger, ohne die bestehenden Trigger zu beenden.
      Entweder man verwendet einen Trigger, der auf Ereignisse reagiert, oder man fragt einen Wert zyklisch ab (Polling).

      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
      • L Online
        L Online
        Laser
        schrieb am zuletzt editiert von
        #3

        Alle 2 Sekunden wäre ja in Ordnung. Aber im Millisekundenbreich wird "OK" ausgegeben.

        paul53P 1 Antwort Letzte Antwort
        0
        • L Laser

          Alle 2 Sekunden wäre ja in Ordnung. Aber im Millisekundenbreich wird "OK" ausgegeben.

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von paul53
          #4

          @Laser sagte: im Millisekundenbreich wird "OK" ausgegeben.

          Die vielen Trigger werden unmittelbar nacheinander ausgeführt.
          Das Intervall erstellt die vielen Trigger. Die Callback-Funktion der Trigger wird beim Trigger-Ereignis ausgeführt.

          Ich schrieb: Entweder ein Trigger oder Polling!

          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
          • L Online
            L Online
            Laser
            schrieb am zuletzt editiert von
            #5

            Das Intervall benutze ich als Zeitbasis für Schaltvorgänge. Ich will einen Status von true nach false umschaltend, abfragen. Wie mache ich denn das nun richtig?

            paul53P 1 Antwort Letzte Antwort
            0
            • L Laser

              Das Intervall benutze ich als Zeitbasis für Schaltvorgänge. Ich will einen Status von true nach false umschaltend, abfragen. Wie mache ich denn das nun richtig?

              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #6

              @Laser sagte: Wie mache ich denn das nun richtig?

              Nur einen Trigger dafür verwenden! Lösche das Intervall.

              on({id:'0_userdata.0.Logik.TestZustand'/*TestZustand*/,val:false,change: 'ne'}, function(){
                  console.log("OK");
              });
              

              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
              • L Online
                L Online
                Laser
                schrieb am zuletzt editiert von Laser
                #7

                Danke, das funktioniert. Dann muß ich das on id / Flankenerkennung in eine extra Script auslagern.

                paul53P 1 Antwort Letzte Antwort
                0
                • L Laser

                  Danke, das funktioniert. Dann muß ich das on id / Flankenerkennung in eine extra Script auslagern.

                  paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #8

                  @Laser sagte: Dann muß ich das on id / Flankenerkennung in eine extra Script auslagern.

                  Weshalb?
                  Abfragen macht man nicht mit on(id), sondern mit getState(id).

                  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
                  • L Online
                    L Online
                    Laser
                    schrieb am zuletzt editiert von
                    #9

                    OK. Da ist mir aber Nichts dazu eingefallen. Ich möchte die fallende Flanke erkennen.

                    1 Antwort Letzte Antwort
                    0
                    • P Offline
                      P Offline
                      peterfido
                      schrieb am zuletzt editiert von peterfido
                      #10

                      Das Beispiel von @paul53 macht genau das.

                      val: false, change 'ne'
                      Der Wert muss false (val: false) sein, und geändert (change 'ne') worden sein.

                      Wird er zwischendurch nicht auf true gesetzt, gibt es keine fallende Flanke.

                      Gruß

                      Peterfido


                      Proxmox auf Intel NUC12WSHi5
                      ioBroker: Debian (VM)
                      CCU: Debmatic (VM)
                      Influx: Debian (VM)
                      Grafana: Debian (VM)
                      eBus: Debian (VM)
                      Zigbee: Debian (VM) mit zigbee2mqtt

                      paul53P 1 Antwort Letzte Antwort
                      0
                      • L Online
                        L Online
                        Laser
                        schrieb am zuletzt editiert von
                        #11

                        Das funktioniert. Habe ich schon getestet. In dem Script mit dem "interval" werden aber auch die vielen Befehle im Millisekundenbereich erzeugt. Ich habe jetzt die "on id"in ein kurzes Script ausgelagert. Da brauche ich eben ein paar Variablen/Objekte mehr. Das macht dem Raspi aber nichts aus. Wie es aussieht.

                        1 Antwort Letzte Antwort
                        0
                        • P peterfido

                          Das Beispiel von @paul53 macht genau das.

                          val: false, change 'ne'
                          Der Wert muss false (val: false) sein, und geändert (change 'ne') worden sein.

                          Wird er zwischendurch nicht auf true gesetzt, gibt es keine fallende Flanke.

                          paul53P Offline
                          paul53P Offline
                          paul53
                          schrieb am zuletzt editiert von paul53
                          #12

                          @peterfido sagte: Das Beispiel von @paul53 macht genau das.

                          Das Beispiel ist eine Kopie von @laser .
                          Es funktioniert auch mit
                          change: 'lt'

                          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
                          • L Online
                            L Online
                            Laser
                            schrieb am zuletzt editiert von Laser
                            #13

                            Es funktionieren beide Varianten. Nur eben nicht in meinem Hauptscript mit "interval".
                            Im extra Script kein Problem.

                            paul53P 1 Antwort Letzte Antwort
                            0
                            • P Offline
                              P Offline
                              peterfido
                              schrieb am zuletzt editiert von
                              #14

                              Wofür soll der Intervall gut sein?

                              Gruß

                              Peterfido


                              Proxmox auf Intel NUC12WSHi5
                              ioBroker: Debian (VM)
                              CCU: Debmatic (VM)
                              Influx: Debian (VM)
                              Grafana: Debian (VM)
                              eBus: Debian (VM)
                              Zigbee: Debian (VM) mit zigbee2mqtt

                              1 Antwort Letzte Antwort
                              0
                              • L Online
                                L Online
                                Laser
                                schrieb am zuletzt editiert von Laser
                                #15

                                Damit arbeite ich verschiedene Dinge zyklisch ab. Rufe Funktionen zyklisch auf. In meiner Steuerung für die Heizung. Dient gleichzeitig zur Erzeugung von Minutenimpulsen und Zählern.
                                In dem gezeigten Testscript macht das natürlich keinen Sinn.

                                1 Antwort Letzte Antwort
                                0
                                • P Offline
                                  P Offline
                                  peterfido
                                  schrieb am zuletzt editiert von
                                  #16

                                  Wenn Du alle 2 Sekunden einen Wert abfragst, kann Dir ein Flankenwechsel durchrutschen.

                                  Gruß

                                  Peterfido


                                  Proxmox auf Intel NUC12WSHi5
                                  ioBroker: Debian (VM)
                                  CCU: Debmatic (VM)
                                  Influx: Debian (VM)
                                  Grafana: Debian (VM)
                                  eBus: Debian (VM)
                                  Zigbee: Debian (VM) mit zigbee2mqtt

                                  1 Antwort Letzte Antwort
                                  0
                                  • L Online
                                    L Online
                                    Laser
                                    schrieb am zuletzt editiert von Laser
                                    #17

                                    OK. Es gab schon Fehlfunktionen. Da ist das extraScript sicher die bessere Lösung.

                                    1 Antwort Letzte Antwort
                                    0
                                    • P Offline
                                      P Offline
                                      peterfido
                                      schrieb am zuletzt editiert von
                                      #18

                                      Alles in ein Skript ist kein Problem. Es sei denn, Du meinst statt Skript Funktion.

                                      Gruß

                                      Peterfido


                                      Proxmox auf Intel NUC12WSHi5
                                      ioBroker: Debian (VM)
                                      CCU: Debmatic (VM)
                                      Influx: Debian (VM)
                                      Grafana: Debian (VM)
                                      eBus: Debian (VM)
                                      Zigbee: Debian (VM) mit zigbee2mqtt

                                      1 Antwort Letzte Antwort
                                      0
                                      • L Laser

                                        Es funktionieren beide Varianten. Nur eben nicht in meinem Hauptscript mit "interval".
                                        Im extra Script kein Problem.

                                        paul53P Offline
                                        paul53P Offline
                                        paul53
                                        schrieb am zuletzt editiert von paul53
                                        #19

                                        @Laser sagte: mit "interval".

                                        Wenn nicht per Trigger, sondern per Polling auf die Flanke reagiert werden soll, benötigt man eine Hilfsvariable:

                                        const id = '0_userdata.0.Logik.TestZustand';
                                        var lastVal = getState(id).val;
                                        
                                        function abfrage() {
                                            const val = getState(id).val;
                                            if(!val && lastVal) {
                                                // Aktion bei Flanke true --> false
                                            } 
                                            lastVal = val;
                                        }
                                        
                                        setInterval(abfrage,2000);
                                        

                                        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
                                        • L Online
                                          L Online
                                          Laser
                                          schrieb am zuletzt editiert von
                                          #20

                                          Ja, das Ganze kann man natürlich auch so machen. Ohne die tolle "on id" mit "change" ging es ja früher auch.

                                          paul53P 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

                                          775

                                          Online

                                          32.6k

                                          Benutzer

                                          82.1k

                                          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