Funktion zum (um)skalieren von Werten.

Hallo alle zusammen.

Mir fällt immer wieder auf das einige User Probleme mit dem (um)skalieren von Werten haben.
Deswegen möchte ich hier nochmal eine Funktion veröffentlichen die genau das macht.
Die Funktion ist sehr einfach und erfüllt einem alles was man braucht.
Die Funktion rechnet linear, auch über die Eckpunkte hinaus. Also kein Begrenzen.
Es können auch negative Steigungen angegeben werden. Die Mathematik wird’s schon richten. :wink:

Das ist die Funktion:


function Scaling($In, $InUG, $InOG, $OutUG, $OutOG)
            {
            /*=============================================================
            Scaling - Martin Heinzel - 21.09.2011
            Version: 1.0

            Beschreibung:
            Diese Funktion scaliert einen Wert nach der Form:

                  ( ( In - In_Min )                            )
            Out = (------------------- x ( Out_Max - Out_Min ) ) + Out_Min
                  (( In_Max - In_Min )                         )
            ================================================================*/

            return ($In - $InUG) / ($InOG - $InUG) * ($OutOG - $OutUG) + $OutUG;

            }

Anwendungsbeispiele:

Es soll eine Temperatur in den Bereichen von 10.0 – 50.0°C um skaliert werden in 0.0 – 100.0%.
Steigung → positiv,positiv


$Out = Scaling($Temperatur, 10.0, 50.0, 0.0, 100.0);

Es soll eine Temperatur in den Bereichen von 10.0 – 50.0°C um skaliert werden in 100.0 – 0.0%.
Steigung → positiv,negativ


$Out = Scaling($Temperatur, 10.0, 50.0, 100.0, 0.0);

Es soll eine Temperatur in den Bereichen von 70.0 – 10.0°C um skaliert werden in 0.0 – 100.0%.
Steigung → negativ,positiv


$Out = Scaling($Temperatur, 70.0, 10.0, 0.0, 100.0);

Es soll eine Temperatur in den Bereichen von 70.0 – 10.0°C um skaliert werden in 100.0 – 0.0%.
Steigung → negativ,negativ


$Out = Scaling($Temperatur, 70.0, 10.0, 100.0, 0.0);

Ich hoffe das hilft für die Zukunft.

Hallo alle zusammen.

Funktioniert das Skript auch für negative Zahlen?

Ja, natürlich! Die Mathematik bescheißt Dich nicht. :slight_smile:

Anwendungsbeispiele:

Es soll eine Temperatur in den Bereichen von 10.0 – 50.0°C um skaliert werden in -100.0 – +100.0%.
Steigung -> positiv,positiv


$Out = Scaling($Temperatur, 10.0, 50.0, -100.0, 100.0); 

Es soll eine Temperatur in den Bereichen von 10.0 – 50.0°C um skaliert werden in +100.0 – -100.0%.
Steigung → positiv,negativ


$Out = Scaling($Temperatur, 10.0, 50.0, 100.0, -100.0); 

Hallo,

ich hätte eine Frage wie ich dein Script zur Umrechnung eines Drucksensors verwenden kann?
Die Skalierung ist linear, heißt 0bar= 0 Volt, 6bar= 10 Volt.

Den Wert des Sensors lese ich mit dem Fibaro RGWB Modul aus. Dieser zeigt mir den Wert in % an.
Also 0% sind 0Volt sind 0Bar

Danke!

Hi michl

Hab deine anderen Posts gesehen, du kämpfst ja ganz schön mit der Mathematik. :confused:
Um das Problem zu lösen mußt du natürlich auch wissen bei welcher Spannung das Fibaro Dingens 100% ausgibt.

Dann Skalierst du erstmal die 0-10V auf 0-100%. Vorausgesetzt der kann überhaupt 10V am Eingang, ich selbst kenn das Teil leider nicht.
Aus diesen 0-100% machst dann 0-6Bar.

bb

Hallo michl,

Option 1:


$Out = Scaling($Input, 0.0, 100.0, 0.0, 6.0);  

Option 2 (einfach):


$Out = $Input / 100.0 * 6.0;  

Ich kann mir aber beim besten willen nicht vorstellen das du an Grundrechenarten scheiterst.
Ich denke dein Rohwert in IPS entspricht nicht 100.0 für 10 V bzw. 6.0 bar.

Morgen,
der Rohwert Entspricht nicht 100 für 10 Volt?
Ich bin der Meinung das, der Wert der in Prozent angezeigt wird in IPS die Eingehenden Volt sind?
Zb.: 66 Prozent sind 6,6 Volt??

Der Eingang des Fibaro erfasst 0-10 Volt.