Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Gelöst: Unterscheid zwischen Script und Fernbedienung

    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: Unterscheid zwischen Script und Fernbedienung

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

      Hallöchen
      wie versuche mich gerade daran zu Unterscheiden, ob ein Gerät per Script oder per Hersteller FB geschaltet wurde.
      Ich habe eine Tahoma die bietet in den Objekten folgende States:
      Unbenannt.JPG
      Ich benötige mal einen Ansatz, habe mich gerade verrannt.
      Danke
      michael

      T T 2 Replies Last reply Reply Quote 0
      • T
        TobiasHahner @michihorn last edited by

        @michihorn
        Hallihallo!

        Ich habe das mit einem selbstangelegten state gelöst. Wenn mein Skript selbst etwas steuert, setzt es den state auf true. So weiss ich, wenn sich etwas geändert hat, und der state false ist, dass die Änderung nicht von meinem Skript kommt.

        Beste Grüße,
        Tobias

        M 1 Reply Last reply Reply Quote 0
        • T
          ticaki Developer @michihorn last edited by

          @michihorn
          Wenn du das zum Schaltzeitpunkt wissen möchtest gibt es im Trigger dafür eine Option. Wenn du es später erfahren willst, nutze die Lösung vom Vorposter.

          M 1 Reply Last reply Reply Quote 0
          • M
            michihorn @ticaki last edited by

            @ticaki Hallo das mit dem eigenen State habe ich auch schon probiert, bin gespannt auf deinen Trigger

            paul53 1 Reply Last reply Reply Quote 0
            • M
              michihorn @TobiasHahner last edited by

              @TobiasHahner Danke, das war auch meine Idee 😉

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

                @michihorn sagte in Unterscheid zwischen Script und Fernbedienung:

                bin gespannt auf deinen Trigger

                const idMeinDP = '...';
                const jsi = 'system.adapter.javascript.' + instance;
                
                on({id: idMeinDP, change: 'ne', fromNe: jsi}, function(dp) { // nicht durch Javascript-Instanz verursacht
                
                M 1 Reply Last reply Reply Quote 0
                • M
                  michihorn @paul53 last edited by michihorn

                  @paul53 sagte in Unterscheid zwischen Script und Fernbedienung:

                                                                                                                                              const idMeinDP = '...';                                                                                                                                                                            const jsi = 'system.adapter.javascript.' + instance;                                                                                                                                                                                                                                                                                                                                                         on({id: idMeinDP, change: 'ne', fromNe: jsi}, function(dp) { // nicht durch Javascript-Instanz verursacht                                            
                  

                  Kannst Du mir das kurz erklären?
                  Ich habe 3 Instanzen laufen. Die Markisen sind auf 2.
                  Beim Anlagen des DP habe ich eine 0 als Standardwert vorgegeben.
                  const idL = 'javascript.0.Garten.Markisse.ScriptL';
                  Michael

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

                    @michihorn sagte:

                    Kannst Du mir das kurz erklären?

                    change: 'ne' - nur bei Wertänderung wird getriggert
                    fromNe: jsi - nur, wenn die Quelle der Wertänderung nicht die Javascript-Instanz ist, wird getriggert
                    Siehe Funktions-Doku zum Javascript-Adapter.

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

                      @paul53 Okay Danke

                      const idMeinDP = 'tahoma.0.devices.Markisse_Links.states.core:DeploymentState';
                      const jsi = 'system.adapter.javascript.' + instance;
                       
                      on({id: idMeinDP, change: 'ne', fromNe: jsi}, function(dp) { // nicht durch Javascript-Instanz verursacht
                      log("Fernbedienung");
                      });
                      

                      Normaler Weise sollte nun bei Bedienung per FB im LOG was stehen, oder?

                      paul53 M 2 Replies Last reply Reply Quote 0
                      • paul53
                        paul53 @michihorn last edited by

                        @michihorn sagte:

                        sollte nun bei Bedienung per FB im LOG was stehen, oder?

                        Ja, wenn sich der Wert des Datenpunktes durch die FB ändert.

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

                          @paul53 Danke das tuts auch 😉

                          Gruß
                          Michael

                          1 Reply Last reply Reply Quote 0
                          • M
                            michihorn @michihorn last edited by

                            @michihorn sagte in Gelöst: Unterscheid zwischen Script und Fernbedienung:

                            @paul53 Okay Danke

                            const idMeinDP = 'tahoma.0.devices.Markisse_Links.states.core:DeploymentState';
                            const jsi = 'system.adapter.javascript.' + instance;
                             
                            on({id: idMeinDP, change: 'ne', fromNe: jsi}, function(dp) { // nicht durch Javascript-Instanz verursacht
                            log("Fernbedienung");
                            });
                            

                            Normaler Weise sollte nun bei Bedienung per FB im LOG was stehen, oder?

                            Hallo Paul ich habe deine Idee nochmal aufgegriffen, die Funktion gibt den Wert, des Datenpunktes wieder aber nicht den Hinweis, dass die Aktion nicht durch ein Script ausgelöst wurde. In Zeile 28 kann man das so sehen.

                            /*****Handbedienung Markisen Pool *****************************************
                            **    November 2021
                            **    TAHOMA
                            **    (0 = OBEN), (100 = UNTEN)
                            **    erstellt: 17.11.21
                            **    geändert: 
                            ********************************************************************************/
                            var logging = true;
                            const jsi = 'system.adapter.javascript' + instance;
                            const idRollo = 'tahoma.0.devices.Pool_Kopf.states.core:DeploymentState'
                            const idRollo1 = 'tahoma.0.devices.Pool_Seite.states.core:DeploymentState'
                            var text
                            const idFB = "javascript.0.Garten.Pool.Kopf.FB"
                            const idFB1 = "javascript.0.Garten.Pool.Seite.FB"
                            
                            
                            on({ id: idRollo, change: 'ne', fromNe: jsi }, function (dpL) { // nicht durch Javascript-Instanz verursacht
                                if (dpL.state.val == 0) {
                                    log("MELDUNG: Hand Bedienung Markise Kopf")
                                    setState(idFB, dpL.state.val);
                                    text = '\u270b  Markise Kopf  '
                                    createEventlog("Handbedienung", text)
                                    if (logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915753938xxx' });
                                };     //Handbetrieb Kopf
                            });
                            
                            on({ id: idRollo1, change: 'ne', fromNe: jsi }, function (dpL) { // nicht durch Javascript-Instanz verursacht
                                log("Ergebniss:" +dpL.state.val)
                                if (dpL.state.val == 1) {
                                    log("MELDUNG: Hand Bedienung Markise Links")
                                    setState(idFB1, dpL.state.val);
                                    text = '\u270b  Markise Seite  '
                                    createEventlog("Handbedienung", text)
                                    if (logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915753938xxx' });
                                };     //Handbetrieb Seite
                            });
                            
                            on({ time: { hour: 23, minute: 59 } }, function () {
                                setState(idFB, 0)
                                setState(idFB1, 0)
                            });
                            

                            michael

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

                              @michihorn sagte: const jsi = 'system.adapter.javascript' + instance;

                              In Zeile 9 fehlt ein Punkt.

                              const jsi = 'system.adapter.javascript.' + instance;  
                              
                              M 1 Reply Last reply Reply Quote 0
                              • M
                                michihorn @paul53 last edited by

                                @paul53 Hallo Paul, Danke.
                                Das Verhalten bleibt gleich.
                                Wenn ich mit der Fernbedienung die Markisse fahre gibt der DP den Status aus(Wert zwischen 0 und 100), dass selbe passiert wenn ich die Markisse per Script fahre.
                                Also kein Unterschied im Ergebnis.
                                Gruß
                                Michael

                                T 1 Reply Last reply Reply Quote 0
                                • T
                                  ticaki Developer @michihorn last edited by

                                  @michihorn
                                  zeige bitte das Log. Läuft dieses Skript auf der gleichen Instanz wie die anderen Skripte?

                                  M 1 Reply Last reply Reply Quote 0
                                  • M
                                    michihorn @ticaki last edited by michihorn

                                    @ticaki
                                    Habe das Script nun fest mit Instance 3 verbunden
                                    Zeile 3-6 sind vom Script ausgelöst, Zeile 15-17 per FB. Die einzige Unterscheidung ist das per Script die Markisse hoch gefahren wurde und per FB runter.

                                    10:59:48.705	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: schedule(cron=[object Object])
                                    10:59:48.705	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: registered 2 subscriptions and 1 schedule
                                    10:59:56.024	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss:0
                                    11:00:49.612	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss:12
                                    11:00:49.613	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss:2
                                    11:00:49.615	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss:0
                                    11:02:14.778	info	javascript.1 (14532) Stop script script.js.Garten.Pool.POOL_Fernbedienung
                                    11:02:14.778	info	javascript.2 (6940) Stop script script.js.Garten.Pool.POOL_Fernbedienung
                                    11:02:14.790	info	javascript.3 (964) Stop script script.js.Garten.Pool.POOL_Fernbedienung
                                    11:02:14.803	info	javascript.3 (964) Start javascript script.js.Garten.Pool.POOL_Fernbedienung
                                    11:02:14.809	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: subscribe: {"pattern":{"id":"tahoma.0.devices.Pool_Kopf.states.core:DeploymentState","change":"ne","fromNe":"system.adapter.javascript.3","q":0},"name":"script.js.Garten.Pool.POOL_Fernbedienung"}
                                    11:02:14.810	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: subscribe: {"pattern":{"id":"tahoma.0.devices.Pool_Seite.states.core:DeploymentState","change":"ne","fromNe":"system.adapter.javascript.3","q":0},"name":"script.js.Garten.Pool.POOL_Fernbedienung"}
                                    11:02:14.812	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: schedule(cron=[object Object])
                                    11:02:14.812	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: registered 2 subscriptions and 1 schedule
                                    11:02:19.684	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss:4
                                    11:02:19.688	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss:97
                                    11:02:19.689	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss:100
                                    
                                    T 1 Reply Last reply Reply Quote 0
                                    • T
                                      ticaki Developer @michihorn last edited by ticaki

                                      @michihorn
                                      Infos reichen noch nicht 🙂

                                      log("Ergebniss: " +dpL.state.val + ' from: ' + dpL.state.from + ' ack: ' + dpL.state.ack)
                                      

                                      benutze die Logausgabe bitte

                                      M 1 Reply Last reply Reply Quote 0
                                      • M
                                        michihorn @ticaki last edited by michihorn

                                        @ticaki sagte in Gelöst: Unterscheid zwischen Script und Fernbedienung:

                                        log("Ergebniss: " +dpL.state.val + ' from: ' + dpL.state.from + ' ack: ' + dpL.state.ack)

                                        Zeile 1 sollte nun Script sein
                                        Wie erfasse ich den Status ack?

                                        11:23:16.631	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss: 0 from: system.adapter.web.0 ack: false
                                        11:24:49.736	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss: 11 from: system.adapter.tahoma.0 ack: true
                                        11:24:49.738	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss: 2 from: system.adapter.tahoma.0 ack: true
                                        11:24:49.741	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss: 1 from: system.adapter.tahoma.0 ack: true
                                        11:24:49.741	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: MELDUNG: Hand Bedienung Markise Links
                                        11:24:49.741	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: setForeignState(id=javascript.0.Garten.Pool.Seite.FB, state={"val":1,"ack":false,"c":"script.js.Garten.Pool.POOL_Fernbedienung"})
                                        11:24:49.741	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: getState(id=javascript.0.SystemEventList.EventList, timerId=undefined) => {"val":"","ack":false,"ts":1637663040059,"q":0,"c":"script.js.common.Loeschen_Eventlist","from":"system.adapter.javascript.3","user":"system.user.admin","lc":1637662920040}
                                        11:24:49.741	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: getState(id=javascript.0.SystemEventList.NextEventId, timerId=undefined) => {"val":0,"ack":false,"ts":1637663040059,"q":0,"c":"script.js.common.Loeschen_Eventlist","from":"system.adapter.javascript.3","user":"system.user.admin","lc":1637662920040}
                                        11:24:49.742	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: setForeignState(id=javascript.0.SystemEventList.NextEventId, state={"val":1,"ack":false,"c":"script.js.Garten.Pool.POOL_Fernbedienung"})
                                        11:24:49.742	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: setForeignState(id=javascript.0.SystemEventList.EventList, state={"val":"00001 -- 23.11.21 - 11:24:49 --- Handbedienung - ✋ Markise Seite <br>","ack":false,"c":"script.js.Garten.Pool.POOL_Fernbedienung"})
                                        11:24:49.742	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: sendTo(adapter=whatsapp-cmb.0, cmd=send, msg={"text":"✋ Markise Seite ","phone":"+4915253938149"})
                                        11:24:49.746	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss: 0 from: system.adapter.tahoma.0 ack: true
                                        11:24:49.752	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss: 5 from: system.adapter.tahoma.0 ack: true
                                        11:24:49.756	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss: 98 from: system.adapter.tahoma.0 ack: true
                                        11:24:49.758	info	javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss: 100 from: system.adapter.tahoma.0 ack: true
                                        
                                        T 1 Reply Last reply Reply Quote 0
                                        • T
                                          ticaki Developer @michihorn last edited by ticaki

                                          @michihorn sagte in Gelöst: Unterscheid zwischen Script und Fernbedienung:

                                          https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#on---subscribe-on-changes-or-updates-of-some-state

                                          on({ id: idRollo1, change: 'ne', fromNe: jsi, ack:true}, function (dpL) {
                                          

                                          ack: true oder false in on({})

                                          M 1 Reply Last reply Reply Quote 0
                                          • M
                                            michihorn @ticaki last edited by

                                            @ticaki sagte in Gelöst: Unterscheid zwischen Script und Fernbedienung:

                                            @michihorn sagte in Gelöst: Unterscheid zwischen Script und Fernbedienung:

                                            https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#on---subscribe-on-changes-or-updates-of-some-state

                                            on({ id: idRollo1, change: 'ne', fromNe: jsi, ack:true}, function (dpL) {
                                            

                                            ack: true oder false in on({})

                                            Danke, das "ack" hat wohl gefehlt. Jetzt klappt es 🙂

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            758
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            4
                                            20
                                            566
                                            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