NEWS
Min/Max "Dimmer-Range" in "0-100% Dim-Level" umrechnen
-
@Michael-Dolp sagte:
Also z.B.
(Min-Level) aus 12% wird > 0%
(Max_Level) aus 80% wird > 100%alias: { read: "Math.round((val - 12) / 0.68)", write: "Math.round(0.68 * val + 12)", id: '...' }
-
@paul53
Vielen Dank - geht also doch mit Dreisatz, manchmal denk ich einfach zu kompliziert. Ich werde es morgen mal probieren und dann entsprechend Feedback bzw. Beispiel geben. -
@Homoran
Danke, damit scheint wohl eher auf Spatzen mit der .50er geschossen zu werden aber dennoch interessant und vielleicht mal nützlich. -
@Michael-Dolp sagte:
Ich werde es morgen mal probieren und dann entsprechend Feedback bzw. Beispiel geben.
Ich weiß nicht, ob inzwischen im js-controller der Wert auf den Bereich zwischen Min und Max begrenzt wird, denn es war früher nicht so und es wurde mal im Javascript-Adapter ergänzt.
-
@paul53
Das sagt mir jetzt leider nichts, inwiefern betrifft / beeinflusst dies den Lösungsansatz? -
@Michael-Dolp sagte:
inwiefern betrifft / beeinflusst dies den Lösungsansatz?
Das werden wird sehen. Evtl. muss noch eine Begrenzung für "read" ergänzt werden.
-
Habs doch jetzt gleich probiert - es geht soweit, aber ich kriege keine Werte angezeigt (siehe Screenshot). Ich kann einen Wert eingeben und es regelt wie gewünscht in umgerechneter Form den "hm-rpc.0.NEQ0044188.1.LEVEL" das Alias "alias.0.OG.Galerie.Bürobeleuchtung" selbst zeigt aber keine Werte an. Wo habe ich den Fehler?
CODE - "alias.0.OG.Galerie.Bürobeleuchtung":
{ "from": "system.adapter.alias.0", "user": "system.user.admin", "ts": 1605979923610, "common": { "name": "OG_Galerie_Bürobeleuchtung", "unit": "%", "role": "value.dimmer", "type": "number", "alias": { "id": "hm-rpc.0.NEQ0044188.1.LEVEL", "def": 0, "min": 0, "max": 100, "write": "(val * 9/5) + 32", "read": "(val − 32) * 5/9" } }, "native": { "CONTROL": "DIMMER.LEVEL", "ID": "LEVEL", "TYPE": "FLOAT", "UNIT": "100%", "DEFAULT": 0, "FLAGS": 1, "MAX": 1, "MIN": 0, "OPERATIONS": 7, "TAB_ORDER": 0 }, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 }, "_id": "alias.0.OG.Galerie.Bürobeleuchtung", "type": "state" }
Ist das Objekt bzw. der Code überhaupt in diesem Umfang nötig und wo liegt der Fehler - scheint das von Dir prognostizierte evlt. Problem zu sein oder?
Für weitere Hilfe wäre ich sehr dankbar.
-
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 !
-
@paul53
Ja, ich bin wie bereits erwähnt nicht wirklich fit im Coden.. Aber Dank Dir funktioniert es nun perfekt! (siehe Screenshot)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.
-
@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.
-
@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 ) -
@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)"
-
@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
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 ) -
@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));
-
@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.
-
@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)" }
-
@Michael-Dolp sagte:
Auszug Alias Code:
"type" ist falsch, richtig:
"type": "number",
Die Prüfung val > 100 kann entfallen.
-
@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
-
@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 ?