Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Z-Wave Fibaro Dimmer 2 kein "Binary Switch"

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    Z-Wave Fibaro Dimmer 2 kein "Binary Switch"

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

      Dann zeig mal was du hast

      Gesendet von unterwegs

      1 Reply Last reply Reply Quote 0
      • C
        CrazyCreator last edited by

        Du meinst den Code oder die Logik?

        Der Code:

        Den aktuellen Code siehst du ja ein paar Post weiter oben. Da habe ich noch nichts geändert.

        Aktuell bin ich auf der Suche nach einem ordentlichen Triggerwert/Einstellung.

        Denn den LEVEL_1 versorgen drei verschiedene Quellen mit Werten, was dann wiederum zu einer wilden Triggerorgie führt.

        Schlussendlich, meist nach 2-3 sec. legt die Quelle: system.adapter.zwave.0 dann den Wert von Level_1 fest, aber bis dahin funkt es wild.

        Problem wird dann: Wenn ich da jetzt mit einem Script drauf reagiere, dann switche ich zwar erstmal nur den On_1 und Off_1 Wert, aber das wiederum führt ja dazu das der Level_1 Wert auch geändert wird und schon befinden wir uns in sowas wie einer Schleife und die beiden Scripte Triggern sich gegenseitig "zu Tode".

        Die Logik:

        Schalten per HomeKit.app:

        • Der Datenpunkt On_1 wir auf true oder false gesetzt:

        Wenn On_1 = false -> Dann: Off_1 = true UND LEVEL_1 = 0 und den Wert von Level_1 vorher speichern.

        Wenn On_1 = true -> Dann: Off_1 = false und den vorher gespeicherten Wert von Level_1 in Level_1 schreiben.

        Das funktioniert ja schonmal soweit, mit diesem Knüller von Code:
        9744_bildschirmfoto_2018-12-30_um_23.09.32.png

        Schalten per echtem Schalter:

        • Das Schalten per Schalter, ändert den Wert von Level_1

        Wenn der Wert von LEVEL_1 größer 0 WIRD UND On_1 = false WAR ->Dann: DANN On_1 = True und Off_1 = false

        Anmerkungen:

        Das "EchteSchalterCodeTeil" darf sich dann aber nicht mit den oberen Codezeilen kreuzen, denn dort lege ich ja fest das der gespeicherte Level_1 Wert geschrieben werden soll. Der Schalter will aber seinen intern gespeicherten Wert schreiben.

        Was mir ja schon bei der "Entwicklung" des nun laufenden Code's aufgefallen ist, ich muss Level_1 mit Verzögerung füllen, sonst überschreibt mir die Quelle: system.adapter.zwave.0 den Wert, woher auch immer der kommt. Denn das passiert auch wenn den echten Schalter keiner angefasst hat. Das war ja quasi beim schreiben der ersten Zeilen schon mein Problem.

        Wenn der Schalter in der App erst ein paar Sekunden später auf eine Änderung des echten Schalters reagiert, ist das auch kein Problem. Denn alle folgenden Automatisierungen würden ja, wenn dann, direkt den Datenpunkt/Schalter On_1 schalten und die Scripte dann darauf reagieren.

        Ja und das war es ja eigentlich schon.

        Vielen Dank schonmal

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

          Ich verstehe noch nicht ganz was du damit vor hast. On und Off sind nur Schalter, auf die sollte wie ich schon schrieb nicht getriggert werden. Und schon gar nicht so wie du es machst. true heißt in ZWave gedrückt, false heißt losgelassen.

          Triggere auf Level_1, um herauszufinden, ob die Lampe an (>0) oder aus (=0) ist.

          Schalte On auf true, um die Lampe anzuschalten. Die Auswirkung siehst du nach kurzer Zeit am Level_1-DP

          Schalte Off auf true, um die Lampe auszuschalten. Die Auswirkung siehst du nach kurzer Zeit am Level_1-DP

          Im Prinzip brauchst du weder On noch Off. Setzte Level_1 auf 0, um auszuschalten. Um mit dem letzten Wert wieder anzuschalten, setze es auf 255.

          Edit: ich habe gerade mal probiert. On/Off funktioniert bei mir auch nicht sauber. Wenn du einfach mit Level_1 arbeitest und 0 zum Ausschalten, 255 zum Anschalten nutzt, wird auch der Dimmer-Wert gespeichert

          1 Reply Last reply Reply Quote 0
          • C
            CrazyCreator last edited by

            So … Erst mal an alle: Gesundes neues Jahr 🙂

            Hat ein bisschen gedauert, aber die Feiertage fordern ihren Tribut 🙂

            Also ich habe jetzt zwei verschiedene Scripte laufen.

            Das erste Script ist für den virtuellen Schaltvorgang durch Yahka bzw. HomeKit und das andere für den Schaltvorgang durch den FibaroDimmerSwitch

            Wie schonmal geschrieben, habe ich mir innerhalb des zwaveDevices einen Datenpunkt erstellt, der durch yahka auf true/false geschaltet wird.

            @https://forum.iobroker.net/memberlist.php?mode=viewprofile&u=1097

            Falls du gemeint hast, ich soll durch yahka schon direkt 0 und 255 schalten, dann bräuchte ich da noch einen Denkanstoß … Denn ich wüsste nicht wie ich das realisieren soll.

            Hier mal die beiden Blockly's und unten drunter jeweils das javasript:

            Das für HomeKit:
            9744_bildschirmfoto_2019-01-01_um_21.59.28.png

            var var_zahler;
            
            on({id: 'zwave.0.NODE14.SWITCH_MULTILEVEL.AnAusSchalter', change: "ne"}, function (obj) {
              var value = obj.state.val;
              var oldValue = obj.oldState.val;
              if (getState("zwave.0.NODE14.SWITCH_MULTILEVEL.AnAusSchalter").val == false && getState("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1").from == 'system.adapter.zwave.0') {
                if (var_zahler == 100) {
                  console.log('AnAusSchalter=false / Quelle=ZWAVE / var_zahler=100 -> LICHT WURDE EIGENTLICH ANGESCHALTET -> TUE NICHTS -> Setze var_zahler wieder auf 0');
                  var_zahler = 0;
                } else {
                  setStateDelayed("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1"/*Level_1*/, 0, 1000, false);
                  console.log('AnAusSchalter=false / Quelle=ZWAVE / var_zahler=NICHT100 -> LICHT AUS => Level_1=0 UND var_zahler=0');
                  var_zahler = 0;
                }
              } else if (getState("zwave.0.NODE14.SWITCH_MULTILEVEL.AnAusSchalter").val == true && getState("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1").val > 0) {
                if (getState("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1").val == 100 && getState("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1").from == 'system.adapter.yahka.0') {
                  console.log('AnAusSchalter=true+Level_1>0+Level_1=100+Quelle=Yahka =>> Level_1=255');
                  setStateDelayed("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1"/*Level_1*/, 255, 1100, false);
                } else if (getState("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1").val > 0 && getState("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1").from == 'system.adapter.javascript.0') {
                  console.log('AnAusSchalter=true+Level_1>0+Level_1>100+Quelle=JAVASCRIPT =>> Level_1=255 + var_zahler=100');
                  var_zahler = 100;
                  setStateDelayed("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1"/*Level_1*/, 255, 1100, false);
                } else if (getState("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1").val > 0 && getState("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1").from == 'system.adapter.zwave.0') {
                  console.log('AnAusSchalter=true+Level_1>0+Level_1=100+Quelle=ZWAVE =>> Level_1=255');
                  setStateDelayed("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1"/*Level_1*/, 255, 1100, false);
                }
              }
            });
            
            

            Das für FibaroDimmerSwitch:
            9744_bildschirmfoto_2019-01-01_um_22.01.43.png

            var var_handy;
            
            on({id: 'zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1', change: "ne"}, function (obj) {
              var value = obj.state.val;
              var oldValue = obj.oldState.val;
              if (getState("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1").val > 0 && getState("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1").from == 'system.adapter.javascript.0') {
                console.log('AnDurchHandy / LEVEL_1 > 0 / Quelle=JAVA');
                setState("zwave.0.NODE14.SWITCH_MULTILEVEL.AnAusSchalter"/*AnAusSchalter*/, true);
              } else if (getState("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1").val > 0 && getState("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1").from == 'system.adapter.zwave.0') {
                console.log('AnDurchSchalter / LEVEL_1 > 0 / Quelle=ZWAVE');
                setState("zwave.0.NODE14.SWITCH_MULTILEVEL.AnAusSchalter"/*AnAusSchalter*/, true);
              } else if (getState("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1").val > 0 && getState("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1").from == 'system.adapter.yahka.0') {
                setState("zwave.0.NODE14.SWITCH_MULTILEVEL.AnAusSchalter"/*AnAusSchalter*/, true);
                console.log('AnDurchHandy 1.SCHRITT / LEVEL_ > 0 / Quelle=YAHKA');
                var_handy = true;
              } else if (getState("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1").val == 0 && getState("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1").from == 'system.adapter.javascript.0') {
                console.log('AusDurchHandy / LEVEL_1=0 / Quelle=JAVASCRIPT');
                setState("zwave.0.NODE14.SWITCH_MULTILEVEL.AnAusSchalter"/*AnAusSchalter*/, false);
              } else if (getState("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1").val == 0 && getState("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1").from == 'system.adapter.zwave.0') {
                if (var_handy == true) {
                  console.log('Level_1=0 / Quelle=ZWAVE / var_handy=true =>> AnAusSchalter->true UND var_handy=false');
                  setState("zwave.0.NODE14.SWITCH_MULTILEVEL.AnAusSchalter"/*AnAusSchalter*/, true);
                  var_handy = false;
                } else if (var_handy == false) {
                  console.log('Level_1=0 / Quelle=ZWAVE / var_handy=false =>> AnAusSchalter->false UND var_handy=true');
                  setState("zwave.0.NODE14.SWITCH_MULTILEVEL.AnAusSchalter"/*AnAusSchalter*/, false);
                  var_handy = true;
                }
              } else if (getState("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1").val == 0 && getState("zwave.0.NODE14.SWITCH_MULTILEVEL.Level_1").from == 'system.adapter.yahka.0') {
                console.log('NICHT VERWENDETER WERT - DAS DÜRFTE EIGENTLICH NIE EINTRETEN');
              }
            });
            

            Ich "bastel" derweil mal noch ein bisschen weiter, vielleicht geht das ja alles noch irgendwie kürzer.

            G 1 Reply Last reply Reply Quote 0
            • AlCalzone
              AlCalzone Developer last edited by

              Zwei Hinweise:

              Es geht sicher deutlich kürzer, wenn du die ganzen Log-Ausgaben abhängig von der Quelle nicht brauchst.

              Abgesehen davon solltest du vermeiden, eigene States in den Strukturen anderer Adapter anzulegen. Lege die lieber unter javascript.0 mit einem geeigneten Namen an.

              1 Reply Last reply Reply Quote 0
              • C
                CrazyCreator last edited by

                Ok … Danke für den Tip

                1 Reply Last reply Reply Quote 0
                • D
                  danw last edited by

                  @CrazyCreator:

                  Falls du gelinst hast ich soll durch yahka schon direkt 0 und 255 schalten, dann bräuchte ich da noch einen Denkanstoß … Denn ich wüsste nicht wie ich das realisieren soll. `

                  Nur im Bezug auf den Satz, weil ich den Rest nicht gelesen habe: Conversion Function level255 übersetzt 0-100 (von Apple) in 0-255 (nach ioBroker).

                  1 Reply Last reply Reply Quote 0
                  • D
                    Dragondrummer71 last edited by

                    Hallo Zusammen,

                    ich werde hier mal meine Erfahrungen bezüglich des "FIBARO System FGD212 Dimmer 2" posten, da ich jetzt über einige Tage mit Lesen, try and error eine Lösung zusammen gestrickt habe.

                    Folgendes Szenario:

                    Mit einem ZME_WALLC-S wollte ich mit den Tasten des Schalters bei kurzem Druck auf die Tasten die Lampe auf den zuletzt gedimmten Wert einschalten bzw. bei der anderen Taste den Timmer ausschalten.

                    Bei langem Druck sollte der Dimmer langsam nach oben dimmen bis ich die Taste wieder loslasse - und das natürlich schön gleichmäßig 😄 . Bei der anderen Taste natürlich das gleiche nur nach unten.

                    Da ich so etwas tatsächlich nirgends gefunden habe, hier meine Lösung mit Erklärung:
                    18311_blockly-fibaro_system_fgd212_dimmer.png

                    var Intervall, Intervall2;
                    
                    createState("Wandtaster-betätigt", function () {
                      on({id: "zwave.0.NODE10.CLASSES91.Scene_Number_1"/*Scene Number*/, change: "ne"}, function (obj) {
                        var value = obj.state.val;
                        var oldValue = obj.oldState.val;
                        if (getState("zwave.0.NODE10.CLASSES91.Scene_Number_1").val == 10) {
                          setState("zwave.0.NODE8.SWITCH_MULTILEVEL.Level_1"/*Level*/, 0);
                        } else if (getState("zwave.0.NODE10.CLASSES91.Scene_Number_1").val == 50) {
                          setState("zwave.0.NODE8.SWITCH_MULTILEVEL.Level_1"/*Level*/, 255);
                        } else if (getState("zwave.0.NODE10.CLASSES91.Scene_Number_1").val == 52) {
                          setState("zwave.0.NODE8.SWITCH_MULTILEVEL.Inc_1"/*Inc*/, true);
                          Intervall = setInterval(function () {
                            if (getState("zwave.0.NODE10.CLASSES91.Scene_KeyAttribute_1").val != 2) {
                              setState("zwave.0.NODE8.SWITCH_MULTILEVEL.Inc_1"/*Inc*/, false);
                              (function () {if (Intervall) {clearInterval(Intervall); Intervall = null;}})();
                            }
                          }, 500);
                        } else if (getState("zwave.0.NODE10.CLASSES91.Scene_Number_1").val == 12) {
                          setState("zwave.0.NODE8.SWITCH_MULTILEVEL.Dec_1"/*Dec*/, true);
                          Intervall2 = setInterval(function () {
                            if (getState("zwave.0.NODE10.CLASSES91.Scene_KeyAttribute_1").val != 2) {
                              setState("zwave.0.NODE8.SWITCH_MULTILEVEL.Dec_1"/*Dec*/, false);
                              (function () {if (Intervall2) {clearInterval(Intervall2); Intervall2 = null;}})();
                            }
                          }, 500);
                        }
                      });
                    });
                    

                    Ich verwende am Wandtaster ZME_WALLC-S den Wert: "zwave.0.NODE10.CLASSES91.Scene_Number_1" und den Wert: "zwave.0.NODE10.CLASSES91.Scene_KeyAttribute_1".

                    Der Erste zeigt mir an ob der Wert nur kurz gedrückt wurde (hier die Werte 10 und 50) oder lang gedrückt wird (52 bzw. 12).

                    Nachdem der Schalter lange gedrückt wird:

                    steht der Wert Scene_KeyAttribute_1 = 2 (Key held down) wenn er losgelassen wird,

                    wird dieser Wert Scene_KeyAttribute_1 =1 (Key released) gesetzt.

                    Nun zum Fibaro Dimmer:

                    An bzw. Ausschalten läßt sich diese über "zwave.0.NODE8.SWITCH_MULTILEVEL.Level_1" hierzu muss man für An den Wert "255" übergeben und für Aus den Wert "0".

                    Beim Multilevel_switch entspricht somit "255" dem Wert "ON" und ersetzt den Binary_Switch.

                    Um den Dimmer gleichmäßig zu dimmen, verwende ich hier das event "start level change".

                    Dieses event startet man in dem man increase "zwave.0.NODE8.SWITCH_MULTILEVEL.Inc_1" auf "wahr" setzt.

                    Der Dimmer erhöht dann den Dimmwert solange bis ein "stop level change" gesendet wird. Dies erzeugt man in dem man den Wert "zwave.0.NODE8.SWITCH_MULTILEVEL.Inc_1" auf "unwahr" setzt.

                    Das gleiche gilt für decrease = "zwave.0.NODE8.SWITCH_MULTILEVEL.Dec_1".

                    Ich hoffe das hilft.

                    Ich denke ähnliches kann man auch für Rolladensteuerung verwenden.

                    R 1 Reply Last reply Reply Quote 0
                    • R
                      Rolli100 @Dragondrummer71 last edited by

                      @Dragondrummer71
                      Kannst Du mal erlären, wie Du in den Wandschalter die Werte CLASSES91.Scene_Number_1 und CLASSES91.Scene_KeyAttribute_1 hineinbekommen hast?
                      Ich bekomme das einfach nicht hin und Scene_Count steht bei meinem Taster auch immer auf 0.

                      Ein Tipp hierfür wäre echt super 🙂

                      1 Reply Last reply Reply Quote 0
                      • G
                        Günther711 @CrazyCreator last edited by

                        @crazycreator ist zwar schon länger her dein Post, aber trotzdem die Frage: Hast du es zum laufen bekommen?

                        C 1 Reply Last reply Reply Quote 0
                        • C
                          CrazyCreator @Günther711 last edited by

                          @günther711 Tut mir leid, da kann ich nicht mehr helfen. Habe alles platt gemacht und das komplette System gewechselt.

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate
                          FAQ Cloud / IOT
                          HowTo: Node.js-Update
                          HowTo: Backup/Restore
                          Downloads
                          BLOG

                          733
                          Online

                          31.6k
                          Users

                          79.4k
                          Topics

                          1.3m
                          Posts

                          8
                          23
                          1745
                          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