Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. [Gelöst] VIS Homematic Dimmer per Checkbox an/aus schalten

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Gelöst] VIS Homematic Dimmer per Checkbox an/aus schalten

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

      Hallo nachdem ich mit Hilfe dieses super Forums und des Homematic Forums mein System soweit zum laufen bekommen habe, bin ich jetzt an einem Punkt angekommen wo ich doch mal etwas direkt Fragen muss.

      Ich habe einen (bzw. mehrere) Homematic Dimmer die ich über VIS mit einer Checkbox nur ein und ausschalten möchte (0% und 100%), die Dimmstufe wird über die anderen Kanele Zeit gesteuert gesetzt. Über einen Dialog soll (etwas versteckt) auch die Dimmstufe geändert werden aber das ist erst mal nicht das Thema.

      Da ich es über die Checkbox direkt nicht hinbekommen habe, habe ich mir 2 Variablen angelegt und es über JavaScript gelöst. Jetzt frage ich mich allerdings ob es wirklich nicht einfacher geht. Es funktioniert zwar aber ich finde es ist schon sehr umständlich und viel Code um nur eine Lampe an und aus zu schalten. Da gibt es doch bestimmt einen besseren Weg?! Ich hatte gehofft, dass ich der Checkbox einen Wert für on und off mitgeben kann. Also bei "false" 0 und bei "true" 100, habe ich da eventuell etwas übersehen?

      on("javascript.0.Homematic.KellerlichtDimmer", function(obj)
      {
          if(!getState("javascript.0.Homematic.KellerlichtDimmerManuell").val)
          {
              var val = getState("javascript.0.Homematic.KellerlichtDimmer").val;
      
              if(val)
              {
                  setState("hm-rpc.0.OEQ0076563.1.LEVEL", 100);
              }
              else
              {
                  setState("hm-rpc.0.OEQ0076563.1.LEVEL", 0);
              }
          }
      });
      
      on("hm-rpc.0.OEQ0076563.1.LEVEL", function(obj)
      {
          var val = getState("hm-rpc.0.OEQ0076563.1.LEVEL").val;
      
          setState("javascript.0.Homematic.KellerlichtDimmerManuell", true);
      
          if(val > 0)
          {
              setState("javascript.0.Homematic.KellerlichtDimmer", true);
          }
          else
          {
              setState("javascript.0.Homematic.KellerlichtDimmer", false);
          }
      
          setState("javascript.0.Homematic.KellerlichtDimmerManuell", false);
      });
      

      Über die Checkbox wird die Variable "javascript.0.Homematic.KellerlichtDimmer" auf true und false gesetzt.

      Gruß

      Martin

      1 Reply Last reply Reply Quote 0
      • R
        RappiRN Most Active last edited by

        Ich habe grad mal probiert. Es gibt drei Checkboxen, die zwei, wo man nur den Haken rein und raus macht funktionieren nicht, weil als Wert 0 und 1 mitgegeben wird. Die Checkbox, die wie ein Schiebeschalter aussieht lässt sich dahingehend konfigurieren, dass als Werte 0 und 100 mitgegeben werden, damit kann man den Datenpunkt "Level" der HM-Dimmer direkt an- und ausschalten.

        Enrico

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

          Ich hab das Ganze mal etwas optimiert.

          Bei dem on-Trigger kriegt man nämlich ein Objekt mit, daß schon den state in sich hat.

          Somit ist eine erneue Abfrage mittels getState nicht nötig.

          Da mit dem "KellerlichtDimmerManuell" ist mir jedoch noch nicht ganz klar,

          deswegen habe ich das hier erstmal weg gelassen.

          on("javascript.0.Homematic.KellerlichtDimmer", function(obj)  {
          	// setzt den Level auf 100 oder 0, je nachdem ob AN oder AUS gesetz wurde
          	setState("hm-rpc.0.OEQ0076563.1.LEVEL", (obj.state.val ? 100 : 0));
          });
          
          on("hm-rpc.0.OEQ0076563.1.LEVEL", function(obj) {
          	// settzt Wert von KellerlichtDimmer auf true, wenn Wert > 0, somsz false
          	setState("javascript.0.Homematic.KellerlichtDimmer", (obj.state.val > 0));
          });
          
          

          Über Endlosschleifen brauch man sich keine Sorgen machen, da der erste Trigger

          höchstens den 2 on-Befhle triggert, aber dann nicht wieder den ersten triggern

          kann, da sich nichts geändert hat.

          Siehe auch:

          https://github.com/ioBroker/ioBroker.ja … some-state

          1 Reply Last reply Reply Quote 0
          • M
            Martin1982 last edited by

            Danke für die hilfreichen und schnellen Antworten. Leider werde ich erst heute Abend zum ausprobieren kommen.

            Das es mehrere verschiedene Checkboxen gibt ist mir nicht aufgefallen. Aber ich befürchte, dass es damit auch nicht so funktionieren wird wie ich es gerne hätte. Damit kann ich dann zwar das Level per VIS auf 0 und 100 setzen aber was zeigt die Box dann bei einem Level von z.B. 20% an? Aber wie gesagt, ich werde es heute Abend testen und berichten.

            Danke für den Hinweis, dass in dem Object des Triggers schon der Wert steht und mit dem ?:-Operator sieht der Code jetzt auch gar nicht mehr so schlimm aus, gerade in diesem Bereich sollte ich den öfter verwenden.

            Aber um das "KellerlichtDimmerManuell" werde ich nicht herumkommen. Da geht es nicht um Endlosschleifen. Wenn ich diese Abfrage nicht drin habe und das Level z.B. auf 20% gesetzt wird, würde der Trigger doch die Variable "KellerlichtDimmer" auf true setzen und damit würde der andere Trigger das Level auf 100% setzen. Aber auch das werde ich heute Abend noch mal genauer testen und das Script entsprechend anpassen.

            Gruß

            Martin

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

              Dann paßt das Skript immer noch:

              Der "on"-Trigger, nur mit der ID, greift nur, wenn die Werte unterschiedlich sind.

              Also egal wie man am Level zwischen 1 und 100 dreht, wird der Trigger nicht beim KellerlichtDimmer nicht ausgeführt,

              da ein Wechsel von "true" auf "true" keine Änderung ist.

              Man kann das noch verfeinern mit:

              on("javascript.0.Homematic.KellerlichtDimmer", function(obj)  {
                 // setzt den Level auf 100 oder 0, je nachdem ob AN oder AUS gesetz wurde
                 setState("hm-rpc.0.OEQ0076563.1.LEVEL", (obj.state.val ? 100 : 0));
              });
              
              on("hm-rpc.0.OEQ0076563.1.LEVEL", function(obj) {
                 // setzt Wert von KellerlichtDimmer auf true, wenn Wert > 0, somsz false
                 var newVal = (obj.state.val > 100);
                 if (newVal != getState("javascript.0.Homematic.KellerlichtDimmer").val) {
                 	setState("javascript.0.Homematic.KellerlichtDimmer", newVal);
                 }
              });
              
              

              Bedeutet:

              Vom Dimmer aus wird der status "KellerlichtDimmer" nur auf true gesetzt,

              wenn der Level von 0 nach >0 welchselt. Oder eben andersrum.

              In VIS macht sich das dann durch eine Änderung der Checkbox bemerkbar.

              Wenn man nun in VIS die Checkbox ändert, dann wird der Dimmer

              entweder an- oder ausgeschaltet.

              Also doch nochmal die Beschreibung des ON-Triggers durchlesen … 🙂

              1 Reply Last reply Reply Quote 0
              • M
                Martin1982 last edited by

                Sorry, bin erst jetzt zum ausprobieren gekommen.

                Die Checkbox bei der man den On und Off Wert angeben kann funktioniert nicht. Wenn das Level auf 50% ist, ist diese auf dem Zustand aus. Ist ja auch ein nicht definierter Zustand und somit ok. Aber für meinen Fall leider nicht richtig.

                Den State "…Manuell" brauche ich. Habe es jetzt ohne getestet und es ging nicht. Wenn ich über die Homematic WebUI den Dimmer auf 50% stelle, springt der Trigger auf Level an und stellt den State "KellerlichtDimmer" auf true. Damit legt der Trigger auf KellerlichtDimmer los und stellt das Level auf 100%, so wie es aus meiner Sicht auch zu erwarten war und richtig ist. Dieses verhalten habe ich mit dem "...Manuell verhindert".

                In den Skripten war noch ein Problem, wenn ich über die Checkbox das Licht auf aus geschaltet hatte, ist die Checkbox erst auf aus, dann auf an und dann wieder auf aus gesprungen. Dieses liegt wohl an dem HM Dimmer Einstellungen. Sobald ich aus schalte startet der Trigger auf Level mit dem aktuellen Wert - 0,5 und dieser hatte bisher den State wieder auf true geschalten irgendwann kommt der Trigger dann mit Level 0 und hatte den State wieder auf false gestellt. Funktion war richtig aber es war auf der Oberfläche nicht schön, dieses habe ich jetzt auch noch angepasst. Anbei mein Script so wie ich es für mich jetzt funktioniert.

                Danke noch für eure Hilfe!

                on("javascript.0.Homematic.KellerlichtDimmer", function(obj)  {
                    if(!getState("javascript.0.Homematic.KellerlichtDimmerManuell").val) {
                        // setzt den Level auf 100 oder 0, je nachdem ob AN oder AUS gesetz wurde
                        setState("hm-rpc.0.OEQ0076563.1.LEVEL", (obj.state.val ? 100 : 0));
                    }
                });
                
                on("hm-rpc.0.OEQ0076563.1.LEVEL", function(obj) {
                   //Wenn der Dimmer per VIS ausgeschalten wird, wird der Trigger erst mit xy,5% ausgeführt und dann mit 0%
                   //damit die Checkbox nicht aus/an und wieder aus geht, wird hier xy,5% ignoriert
                   if(obj.state.val % 1 == 0.5) return;
                
                   var newVal = (obj.state.val > 0);
                   if (newVal != getState("javascript.0.Homematic.KellerlichtDimmer").val) {
                      setState("javascript.0.Homematic.KellerlichtDimmerManuell", true);
                      setState("javascript.0.Homematic.KellerlichtDimmer", newVal);
                      setState("javascript.0.Homematic.KellerlichtDimmerManuell", false);
                   }
                });
                
                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                726
                Online

                31.7k
                Users

                79.6k
                Topics

                1.3m
                Posts

                3
                6
                1554
                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