Navigation

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

    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

    GetState in switch

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

      Hallo zusammen,

      ich versuche gerade in iobroker mit js modbus und hue zu kombinieren, damit egal, wo ich was ändere, der andere das mitkriegt.

      Folgendes Skript hab ich probiert, aber die Werte sind immer undefined nach dem switch

      ! var Devicename1;
      ! var Devicename2;
      ! var DeviceNeedsBool = false;
      ! var anzahlFunktionen = 3;
      ! var i=1;
      ! for (i=1;i<=anzahlFunktionen;i++)
      ! {
      ! switch (i)
      ! {
      ! case '1': Devicename1 = getState("modbus.0.holdingRegisters.12288_Lampe_1_Rot");
      ! Devicename2 = getState("hue.0.Philips_hue.Lampe_1_LED.r");
      ! DeviceNeedsBool = false;
      ! break;
      ! case '2': Devicename1 = getState("modbus.0.holdingRegisters.12289_Lampe_1_Gruen");
      ! Devicename2 = getState("hue.0.Philips_hue.Lampe_1_LED.g");
      ! DeviceNeedsBool = false;
      ! break;
      ! case '3': Devicename1 = getState("modbus.0.holdingRegisters.12290_Lampe_1_Blau");
      ! Devicename2 = getState("hue.0.Philips_hue.Lampe_1_LED.b");
      ! DeviceNeedsBool = false;
      ! break;
      ! default:
      ! } // end of switch
      ! console.log("Value Switch " + i + ": " + Devicename1);
      ! console.log("Value Switch " + i + ": " + Devicename2);
      ! console.log("Value Switch " + i + ": " + DeviceNeedsBool);
      ! on({id: Devicename1, change: "ne"}, function (obj)
      ! {
      ! var value = obj.state.val;
      ! var oldValue= obj.oldState.val;
      ! console.log("Value " + i + ": " + value);
      ! console.log("Value " + i + ": " + oldValue);
      ! if (value != oldValue)
      ! {
      ! console.log("Value IF" + i + ": " + value);
      ! console.log("Value IF" + i + ": " + oldValue);
      ! if (!DeviceNeedsBool)
      ! {
      ! setState(Devicename2, value);
      ! }
      ! else if (DeviceNeedsBool)
      ! {
      ! setState(Devicename2, !value);
      ! oldValue = value;
      ! }
      ! }
      ! });
      ! } // end of for

      Deswegen arbeitet das auch nach der switch Anweisung nicht weiter.

      Kann mir bitte jemand auf die Sprünge helfen?

      Danke Michael

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

        Naja Du zählst eine Zahl aber dein Case vergleicht mit einem String ('1') … das matcht nicht damit landest Du in Default und da wird nichts getan, also ergo ... undefined ...

        1 Reply Last reply Reply Quote 0
        • W
          walf last edited by

          Danke dir, das hat funktioniert, aber wir komme ich jetzt an die Werte von obj.state.val und obj.oldState.val, um sie miteinander zu vergleichen?

          on({id: Devicename1, change: "ne"}, function (obj)

          {

          var value = obj.state.val;

          var oldValue= obj.oldState.val;

          console.log("Value " + i + ": " + value);

          console.log("Value " + i + ": " + oldValue);

          if (value != oldValue)

          Das funktioniert leider nicht.

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

            Naja DeviceName1 ist ein Wert (genau genommen sogar das Wert-Objekt des States) und keine ID eines States … darauf macht es keinen Sinn zu subscriben ...

            1 Reply Last reply Reply Quote 0
            • W
              walf last edited by

              Und wie löst man sowas dann? Ich brauche doch einen Vergleichswert, um zu sehen, ob und was sich geändert hat.

              Btw: Das sind meine ersten Versuche in JS.

              Danke Michael

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

                Effektiv machst Du viele davon

                on({id:"modbus.0.holdingRegisters.12288_Lampe_1_Rot", change: "ne", ack: true}, function(obj) {

                if (getState("hue.0.Philips_hue.Lampe_1_LED.r").val === obj.state.val) return; /doo nothing because value is already as should

                setState("hue.0.Philips_hue.Lampe_1_LED.r", obj.state.val, false);

                });

                für alle Kombinationen. Es geht auch cooler, aber für JS Beginner denke genau richtig

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

                  @walf:

                  mit js modbus und hue zu kombinieren, damit egal, wo ich was ändere, der andere das mitkriegt. `
                  https://forum.iobroker.net/viewtopic.php?f=21&t=14027&p=148561#p148561.

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

                    @walf:

                    Ich brauche doch einen Vergleichswert, um zu sehen, ob und was sich geändert hat. `
                    Die https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md#on–-subscribe-on-changes-or-updates-of-some-state des JS-Adapters kennst Du ? Und damit auch die Bedeutung der Triggerbedingung change: 'ne' ?

                    1 Reply Last reply Reply Quote 0
                    • W
                      walf last edited by

                      @apollon77:

                      Effektiv machst Du viele davon

                      on({id:"modbus.0.holdingRegisters.12288_Lampe_1_Rot", change: "ne", ack: true}, function(obj) {

                      if (getState("hue.0.Philips_hue.Lampe_1_LED.r").val === obj.state.val) return; /doo nothing because value is already as should

                      setState("hue.0.Philips_hue.Lampe_1_LED.r", obj.state.val, false);

                      });

                      für alle Kombinationen. Es geht auch cooler, aber für JS Beginner denke genau richtig `

                      So ist es jetzt gelöst. Das war ja auch meine Anfangsidee, aber mit der for Schleife wäre es halt cooler gewesen, weil ja immer wieder neue Geräte hinzukommen.

                      Dank dir Michael

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      989
                      Online

                      31.7k
                      Users

                      79.9k
                      Topics

                      1.3m
                      Posts

                      3
                      9
                      867
                      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