Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Überwachen und schalten

    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] Überwachen und schalten

    This topic has been deleted. Only users with topic management privileges can see it.
    • paul53
      paul53 @ostseeskipper last edited by paul53

      @ostseeskipper
      Um eine Endlosschleife zu vermeiden, überprüft man, ob die Quelle des Triggers nicht ein Skript ist:

      on({id: id, fromNe: 'system.adapter.javascript.0'}, function(dp) {});
      
      1 Reply Last reply Reply Quote 1
      • O
        ostseeskipper last edited by

        @ostseeskipper
        Um eine Endlosschleife zu vermeiden, überprüft man, ob die Quelle des Triggers nicht ein Skript ist:

        on({id: id, fromNe: 'system.adapter.javascript.0'}, function(dp) {});
        

        @paul53 besten Dank.
        muss den tollen Input von dir und @mickym nun erst mal verarbeiten.👍
        fromNe: heisst also "nicht von"?

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

          @ostseeskipper sagte: fromNe: heisst also "nicht von"?

          Ja, siehe Doku.

          1 Reply Last reply Reply Quote 1
          • O
            ostseeskipper last edited by

            @mickym said in Überwachen und schalten:

            Du wirst ja auch feststellen, dass wenn Du über Javascript im iobroker mit ack=true setzt eigentlich kein Schaltvorgang erfolgt.

            Hab mit den Schaltern (erst mal noch ohne Funktion) rumgespielt und denke das hilft zum erkennen.

            @paul53 auf dich komm ich bestimmt noch mal zu da es nicht nur 1 Schalter ist sondern 8 wollte ich nur mit einem Trigger arbeiten. "enums" heisst glaub ich das Zauberwort. Dann müsste ich aber in der Trigger Funktion auswerten welcher der 8 nun welchen Wert haben soll.

            Aber nun bau ich das erst mal nur für einen Schalter bis der funktioniert.

            Schönen Abend noch.☺

            O 1 Reply Last reply Reply Quote 0
            • O
              ostseeskipper @ostseeskipper last edited by

              @paul53 @mickym
              Dank Eurer Hilfe bin ich soweit das der Trigger über die Funktion den Datenpunkt schaltet.

              on({id: idVar, fromNe: 'system.adapter.javascript.0', change: 'ne', ack:false}, function (obj) { //nur unbestätigte Änderungen und nicht durch ein javascript geändert
                      log("AUSGELÖST: Datenpunkt unbestätigt nicht aus Script geändert" ,"info");
                  setRelais(1)// Hier der Code, der aber nur ausgeführt wird, falls aktiv im VIS etc. ausgeführt. ACK ist da standardmäßig immer false.
              });
              

              Da es 8 Relais gibt würde ich gern alle 8 gleichzeitig in einem Script überwachen lassen.
              Dafür habe ich schon mal die 8 Datenpunkte in ein Enum zusammengefasst.
              Wie muss ich varID (Datenpunktvariable) ändern um enum.functions.relaisschalter zu triggern?
              Wie kann ich dann auslesen welcher der Datenpunkte ausgelöst hat damit ich das in setRelais(x) übergeben kann.

              (wenn man auf enum nicht triggern kann, meine so was gelesen zu haben, leg ich halt 8 x varID1-8 als Array an) oder gibt ne schlankere Variante

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

                @ostseeskipper sagte: Wie muss ich varID (Datenpunktvariable) ändern um enum.functions.relaisschalter zu triggern?

                Mit dem $Selector:

                $('*(functions=relaisschalter)').on(function(dp) {
                    log('Auslöser: ' + dp.id + ', Wert: ' + dp.state.val);
                });
                

                oder mit RegExp im on(), da die 8 IDs sicherlich eine einheitliche Struktur haben, die sich von anderen Datenpunkt-IDs unterscheidet.

                1 Reply Last reply Reply Quote 0
                • O
                  ostseeskipper last edited by

                  @paul53
                  Danke.
                  Hab das rüberkopiert aber es löst nicht aus.
                  Es sieht auch so komisch aus als ob es Text ist
                  efc3f419-f135-4a8b-a256-bc6096fe5872-grafik.png

                  Allerdings ehrlich gesagt ist mir leider grad 1 Schritt zu weit. Ist schwer grad, da ich auch keinen Bezug zu meiner enum Liste enum.functions.relaisschalter finde.

                  Ja die 8 ID's haben eine einheitliche Struktur
                  Hatte sgrad mit on und dem Array probiert, hab allerdings aktuell die Herausforderung das ich noch nicht weiss wie ich ermitteln kann welches der 8 der Auslöser war.

                  on({id: [idVar1,idVar2,idVar3,idVar4,idVar5,idVar6,idVar7,idVar8], fromNe: 'system.adapter.javascript.0', change: 'ne', ack:false}, function (obj) { //nur unbestätigte Änderungen und nicht durch ein javascript geändert
                          log("AUSGELÖST: Datenpunkt unbestätigt nicht aus Script geändert" ,"info");
                      setRelais(1)// Hier der Code, der aber nur ausgeführt wird, falls aktiv im VIS etc. ausgeführt. ACK ist da standardmäßig immer false.
                  });
                  
                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @ostseeskipper last edited by

                    @ostseeskipper sagte: Ja die 8 ID's haben eine einheitliche Struktur

                    Wie sieht die aus?

                    O 1 Reply Last reply Reply Quote 0
                    • O
                      ostseeskipper @paul53 last edited by

                      @paul53

                      const idVar1 = 'javascript.0.Anel.1.R1.Rel_Status'; // Datenpunkt-ID 
                      const idVar2 = 'javascript.0.Anel.1.R2.Rel_Status'; // Datenpunkt-ID 
                      const idVar3 = 'javascript.0.Anel.1.R3.Rel_Status'; // Datenpunkt-ID 
                      const idVar4 = 'javascript.0.Anel.1.R4.Rel_Status'; // Datenpunkt-ID 
                      const idVar5 = 'javascript.0.Anel.1.R5.Rel_Status'; // Datenpunkt-ID 
                      const idVar6 = 'javascript.0.Anel.1.R6.Rel_Status'; // Datenpunkt-ID 
                      const idVar7 = 'javascript.0.Anel.1.R7.Rel_Status'; // Datenpunkt-ID 
                      const idVar8 = 'javascript.0.Anel.1.R8.Rel_Status'; // Datenpunkt-ID 
                      
                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @ostseeskipper last edited by paul53

                        @ostseeskipper
                        Dann mit RegExp z.B. so:

                        on({id: /^javascript\.0\.Anel\.1\.R\d\.Rel_Status$/, fromNe: 'system.adapter.javascript.0', change: 'ne', ack:false}, function (obj) { //nur unbestätigte Änderungen und nicht durch ein javascript geändert
                            log('Auslöser: ' + obj.id);
                            log("AUSGELÖST: Datenpunkt unbestätigt nicht aus Script geändert" ,"info");
                            setRelais(1)// Hier der Code, der aber nur ausgeführt wird, falls aktiv im VIS etc. ausgeführt. ACK ist da standardmäßig immer false.
                        })
                        
                        O 2 Replies Last reply Reply Quote 1
                        • O
                          ostseeskipper @paul53 last edited by ostseeskipper

                          @paul53
                          Cool danke, du bist genial.👍

                          Nun muss ich mir die obj.id nur noch zerlegen da ich einfach nur die Zahl von 1-8 brauche.
                          Das würde ich per Text und parseInt oder so machen. Oder gibts da noch nen schlankeren Trick? (Sorry ich komm aus der SQL Ecke)

                          paul53 1 Reply Last reply Reply Quote 0
                          • O
                            ostseeskipper @paul53 last edited by

                            @paul53
                            Paul, kann ich mir irgendwie einfach das \d\ in eine variable holen?

                            /^javascript\.0\.Anel\.1\.R\d\.Rel_Status$/
                            
                            1 Reply Last reply Reply Quote 0
                            • paul53
                              paul53 @ostseeskipper last edited by

                              @ostseeskipper sagte: Nun muss ich mir die obj.id nur noch zerlegen

                                  let id = obj.id.split('.');
                                  let relais = parseInt(id[4].substr(1,1));
                              
                              O 1 Reply Last reply Reply Quote 1
                              • O
                                ostseeskipper @paul53 last edited by

                                @paul53 said in Überwachen und schalten:

                                Paul, vielen Dank für eine so tolle Hilfe👍 ☺

                                1 Reply Last reply Reply Quote 0
                                • First post
                                  Last post

                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                793
                                Online

                                31.9k
                                Users

                                80.1k
                                Topics

                                1.3m
                                Posts

                                3
                                24
                                1184
                                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