Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Min/Max "Dimmer-Range" in "0-100% Dim-Level" umrechnen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Min/Max "Dimmer-Range" in "0-100% Dim-Level" umrechnen

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

      @Michael-Dolp:

      wo liegt der Fehler?

      Hast du den Alias manuell erstellt ? Ich korrigiere mal.

        "common": {
          "name": "OG_Galerie_Bürobeleuchtung",
          "unit": "%",
          "role": "level.dimmer",
          "type": "number",
          "def": 0,
          "min": 0,
          "max": 100,
          "alias": {
             "id": "hm-rpc.0.NEQ0044188.1.LEVEL",
             "write": "Math.round(0.68 * val + 12)",
             "read": "Math.round((val - 12) / 0.68)"
          }
        },
        "native": {}, // darf nur ein leeres Objekt enthalten !
      
      Michael Dolp 1 Reply Last reply Reply Quote 0
      • Michael Dolp
        Michael Dolp @paul53 last edited by Michael Dolp

        @paul53
        Ja, ich bin wie bereits erwähnt nicht wirklich fit im Coden.. Aber Dank Dir funktioniert es nun perfekt! (siehe Screenshot)

        alt text

        Der komplette Code zu diesem Beispiel:

        HomeMatic Dimmer Device: hm-rpc.0.NEQ0044188.1.LEVEL
        Virtual Device: alias.0.OG.Galerie.Bürobeleuchtung
        Dim-Range: 12-80%

        Berechnung des Faktors hier "0.68":
        Dim.Max - Dim.Min / 100 > (80 - 12) / 100 = 0.68
        ( Wert 12 = Dim.Min )

        {
          "from": "system.adapter.alias.0",
          "user": "system.user.admin",
          "ts": 1605979923610,
          "common": {
            "name": "OG_Galerie_Bürobeleuchtung",
            "unit": "%",
            "role": "level.dimmer",
            "type": "number",
            "def": 0,
            "min": 0,
            "max": 100,
            "alias": {
              "id": "hm-rpc.0.NEQ0044188.1.LEVEL",
              "write": "Math.round(0.68 * val + 12)",
              "read": "Math.round((val - 12) / 0.68)"
            }
          },
          "native": {},
          "acl": {
            "object": 1636,
            "owner": "system.user.admin",
            "ownerGroup": "system.group.administrator",
            "state": 1636
          },
          "_id": "alias.0.OG.Galerie.Bürobeleuchtung",
          "type": "state"
        }
        

        Vielen Dank für die schnelle Hilfe!

        Sollte somit "gelöst" sein.

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

          @Michael-Dolp sagte:

          Dim-Range: 12-80%

          Gib mal bei "hm-rpc.0.NEQ0044188.1.LEVEL" den Wert 85 ein und schau, welchen Wert der Alias annimmt.

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

            @paul53
            In dem Fall kommen wir auf 107% - kommt jetzt die erwähnte Begrenzung zum Einsatz?

            Stimmt so oder:
            Berechnung des Faktors hier "0.68":
            Dim.Max - Dim.Min / 100 > (80 - 12) / 100 = 0.68
            ( Wert 12 = Dim.Min )

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

              @Michael-Dolp sagte:

              kommt jetzt die erwähnte Begrenzung zum Einsatz?

              Ja.

                    "read": "val < 12 ? 0 : val > 80 ? 100 : Math.round((val - 12) / 0.68)"
              
              Michael Dolp 2 Replies Last reply Reply Quote 0
              • Michael Dolp
                Michael Dolp @paul53 last edited by

                @paul53 said in Min/Max "Dimmer-Range" in "0-100% Dim-Level" umrechnen:

                "read": "val < 12 ? 0 : val > 80 ? 100 : Math.round((val - 12) / 0.68)"

                Er gibt mir jetzt entsprechend nur noch "true" oder "false" aus. Geht also noch nicht.

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

                  @paul53
                  EDIT: "geht mit beiden"

                  "type": "number" statt "state" dann gehts.

                  Hier also der momentan perfekt funktionierende Code:

                  {
                    "from": "system.adapter.alias.0",
                    "user": "system.user.admin",
                    "ts": 1605979923610,
                    "common": {
                      "name": "OG_Galerie_Bürobeleuchtung",
                      "unit": "%",
                      "role": "level.dimmer",
                      "type": "number",
                      "def": 0,
                      "min": 0,
                      "max": 100,
                      "alias": {
                        "id": "hm-rpc.0.NEQ0044188.1.LEVEL",
                        "write": "Math.round(0.68 * val + 12)",
                        "read": "val < 12 ? 0 : val > 80 ? 100 : Math.round((val - 12) / 0.68)"
                      }
                    },
                    "native": {},
                    "acl": {
                      "object": 1636,
                      "owner": "system.user.admin",
                      "ownerGroup": "system.group.administrator",
                      "state": 1636
                    },
                    "_id": "alias.0.OG.Galerie.Bürobeleuchtung",
                    "type": "state"
                  }
                  

                  Berechnung des Faktors hier "0.68":
                  ( Dim.Max - Dim.Min ) / 100 > (80 - 12) / 100 = 0.68
                  ( Wert 12 = Dim.Min )
                  ( Wert 80 = Dim.Max )

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

                    @Michael-Dolp sagte:

                    Er gibt mir jetzt entsprechend nur noch "true" oder "false" aus.

                    Seltsam. Wenn ich die Sequenz in Javascript teste, funktioniert es.

                    var val = 8;
                    log(val < 12 ? 0 : val > 80 ? 100 : Math.round((val - 12) / 0.68));
                    
                    Michael Dolp 2 Replies Last reply Reply Quote 0
                    • Michael Dolp
                      Michael Dolp @paul53 last edited by Michael Dolp

                      @paul53
                      Stimmt, ging auch mit "state" war also alles korrekt. Hang wohl irgendwo kurz.

                      Vielen Dank für die sehr schnelle kompetente Hilfe Paul, das hat mit sehr weiter geholfen!

                      Hab echt schon vorher einige Zeit rumgesucht und nichts gefunden... komisch, dass Niemand dieses Problem hat bzw. Dimmer Visualisiert, welche sich nicht auf 0 und 100 regeln lassen.

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

                        @paul53
                        Hi, jetzt muss ich leider nochmal stören - wenn ich in das Alias 0% schreibe wird das Device auf den "Min" Wert gesetzt und nicht ebenfalls auf "0" / OFF.

                        Was müsste hierfür noch ergänzt werden?

                        Aktueller Auszug Alias Code:

                        "common": {
                            "name": "OG_Galerie_Bürobeleuchtung",
                            "unit": "%",
                            "role": "level.dimmer",
                            "type": "stater",
                            "def": 0,
                            "min": 0,
                            "max": 100,
                            "alias": {
                              "id": "hm-rpc.0.NEQ0044188.1.LEVEL",
                              "write": "Math.round(0.77 * val + 23)",
                              "read": "val < 23 ? 0 : val > 100 ? 100 : Math.round((val - 23) / 0.77)"
                            }
                        
                        paul53 1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 @Michael Dolp last edited by paul53

                          @Michael-Dolp sagte:

                          Auszug Alias Code:

                          "type" ist falsch, richtig:

                              "type": "number",
                          

                          Die Prüfung val > 100 kann entfallen.

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

                            @paul53 said in Min/Max "Dimmer-Range" in "0-100% Dim-Level" umrechnen:

                            Die Prüfung val > 100 kann entfallen.

                            Danke, aber ich glaube wir meinen was anderes - Wenn das Alias 0 ist, dann ist das Device 23
                            Es sollte aber bei Alias 0 das Device ebenfalls auf 0 setzen.

                            Quasi so:
                            "write": "val = 23 ? 0 : Math.round(0.76 * val + 23)",
                            "read": "val < 23 ? 0 : val > 100 ? 100 : Math.round((val - 23) / 0.76)"

                            Nur so geht es nicht, da wird das Device immer 0

                            Also praktisch ab 1% umrechnen - bei 0% beides auf 0% setzten

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

                              @Michael-Dolp sagte:

                              Es sollte aber bei Alias 0 das Device ebenfalls auf 0 setzen.

                              Quasi so:
                              "write": "val = 23 ? 0 : Math.round(0.76 * val + 23)",
                              "read": "val < 23 ? 0 : val > 100 ? 100 : Math.round((val - 23) / 0.76)"

                              Ich denke so:

                                  "write": "val <= 0 ? 0 : Math.round(0.77 * val + 23)",
                                  "read": "val < 23 ? 0 : Math.round((val - 23) / 0.77)"
                              

                              Der Wert des Original-Datenpunktes wird nicht > 100. Oder ?

                              Michael Dolp 2 Replies Last reply Reply Quote 0
                              • Michael Dolp
                                Michael Dolp @paul53 last edited by

                                @paul53 said in Min/Max "Dimmer-Range" in "0-100% Dim-Level" umrechnen:

                                                                                                                                                                "write": "val <= 0 ? 0 : Math.round(0.77 * val + 23)",                                                                                                                                                                                "read": "val < 23 ? 0 : Math.round((val - 23) / 0.77)"                                            
                                

                                Danke, jetzt läuft es so wie es soll und bei Device 100% schreibt er das Alias ebenfalls auf 100% und nicht höher.

                                ( Hat leider etwas gedauert, weil mein Filesystem des Virtuellen IOBrokers Systems kaput ging und ich den IOBroker inzwischen in einem Docker neu aufgesetzt habe. )

                                Das ist jetzt also der ideale Code um mit einem Alias eine "individuelle Dimm-Range" auf die Volle 0-100% Range umzurechnen:

                                {
                                  "from": "system.adapter.alias.0",
                                  "user": "system.user.admin",
                                  "ts": 1605979923610,
                                  "common": {
                                    "name": "OG_Galerie_Bürobeleuchtung",
                                    "unit": "%",
                                    "role": "level.dimmer",
                                    "type": "number",
                                    "def": 0,
                                    "min": 0,
                                    "max": 100,
                                    "alias": {
                                      "id": "hm-rpc.0.NEQ0044188.1.LEVEL",
                                      "write": "val <= 0 ? 0 : Math.round(0.77 * val + 23)",
                                      "read": "val < 23 ? 0 : Math.round((val - 23) / 0.77)"
                                    }
                                  },
                                  "native": {},
                                  "acl": {
                                    "object": 1636,
                                    "owner": "system.user.admin",
                                    "ownerGroup": "system.group.administrator",
                                    "state": 1636
                                  },
                                  "_id": "alias.0.OG.Galerie.Bürobeleuchtung",
                                  "type": "state"
                                }
                                

                                Berechnung des Faktors hier "0.77":
                                ( Dim.Max - Dim.Min ) / 100 > (100 - 23) / 100 = 0.77
                                ( Wert 23 = Dim.Min )
                                ( Wert 100 = Dim.Max )

                                Beispiel Range 15-80%: ( 80 - 15 ) / 100 = 0.65 also:

                                "write": "val <= 0 ? 0 : Math.round(0.65 * val + 15)",
                                "read": "val < 15 ? 0 : Math.round((val - 15) / 0.65)"
                                

                                im Iot übernimmt er damit auch problemlos das Alias als "Dimmer"

                                Danke nochmal!

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

                                  @paul53
                                  Hallo Paul,

                                  da ich leider einige Steckdosen mit ESPEasy geflasht habe und diese nicht umflashen möchte muss ich nun ebenfalls ein Alias anlegen, weches mir den GPIO12 auf 0 / 1 setzt und selbst mit false / true funktionieren soll. Ist jetzt zwar etwas Offtopic, aber trifft die gleiche Vorgehensweise. Mit der Add Device "Auto-Funktion" kriegt er es nicht hin.

                                  alt text

                                  Meine bisherigen Ansätze sind maximal bis zu einer Endlosschleife gekommen und IOBRoker hat neu initialisiert.

                                  Also so etwas in der Richtung:

                                  "common": {
                                    "name": "SET",
                                    "role": "switch.light",
                                    "type": "string",
                                      "write": "val = true ? 1 : 0",
                                      "read": "val = 1 ? true : false"
                                    "alias": {
                                      "id": "mqtt.0.LSC_Plug_4.Set.GPIO.12"
                                    }
                                  

                                  Leider geht das so nicht ganz - kannst Du mir vielleicht weiter helfen?

                                  Danke - Gruß

                                  Michael

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

                                    @Michael-Dolp sagte:

                                    Also so etwas in der Richtung:

                                    "type" muss "boolean" sein. Bitte ändern:

                                    "common": {
                                      "name": "Schreibtischleuchte Kinderzimmer",
                                      "role": "switch.light",
                                      "type": "boolean",
                                      "write": true,
                                      "read": true,
                                      "alias": {
                                        "id": "mqtt.0.LSC_Plug_4.Set.GPIO.12",
                                        "write": "val ? 1 : 0"
                                      }
                                    

                                    Die Umwandlung 0 --> false und 1 --> true erfolgt automatisch.

                                    Michael Dolp R 2 Replies Last reply Reply Quote 0
                                    • Michael Dolp
                                      Michael Dolp @paul53 last edited by

                                      @paul53
                                      Vielen Dank funktioniert auch perfekt - da muss ich noch einiges lernen, um das Schema zu begreifen, aber das ist es sicher Wert, denn bisher bin ich bis auf ein paar kleine Dinge vom IOBroker begeistert!

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

                                        @paul53

                                        Hallo Paul,
                                        kannst du dir auch meine Konfiguration mal anschauen, auch ich habe das Problem dass ich die gelieferten Werte vom ESP Easy 0 und 1 sind und nicht false oder true.
                                        Der type „boolean“ ist eingestellt aber in blockly werden die Werte nicht als false oder true erkannt. Du hast ja oben beschrieben dass die Werte automatisch umgeschrieben werden, ändert sich auch die Bezeichnung in false und true oder bleiben sie bei 0 und 1.
                                        Vielen Dank
                                        Radler1
                                        Folie1.PNG Folie2.PNG Folie3.PNG

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

                                          @radler1 sagte: die gelieferten Werte vom ESP Easy 0 und 1 sind und nicht false oder true.

                                          Dann ist der Datenpunkt-Typ "boolean" falsch und muss in "number" geändert werden, damit der Alias-Datenpunkt vom Typ "boolean" automatisch wandelt.

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

                                            @paul53
                                            Hallo paul53,
                                            vielen Dank für die schnelle Hilfe, ich habe "boolean" in "number" geändert, aber trozdem wird der Wert nicht richtig erkannt.
                                            Fällt Dir noch was ein?

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            1.0k
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript template
                                            4
                                            37
                                            2095
                                            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