[Gelöst] Werte gleichsetzen / Umrechnen

Begonnen von Jessyfoosy, 02 Oktober 2018, 15:59:39

Vorheriges Thema - Nächstes Thema

Jessyfoosy

Moin,

leider haben die 3 Seiten Suchergebnisse zum Thema Rechnen nicht zum Ziel geführt. Ich habe einen Drucksensor 0-5V an einem KNX Analogeingang angeschlossen um den Füllstand meiner Zisterne zu messen. Ich lasse mir aufgrund der genaueren Messung den Wert in 2 Byte ausgeben. Somit habe ich einen Min Wert (Zisterne Leer) von 6550 und einen Max Wert von 18200.

Wie bekomme ich jetzt eine schöne Umrechnung in Form von 6550= 0 und 18200= 100 hin ?

Byte09

#1
Zitat von: Jessyfoosy am 02 Oktober 2018, 15:59:39
Moin,

leider haben die 3 Seiten Suchergebnisse zum Thema Rechnen nicht zum Ziel geführt. Ich habe einen Drucksensor 0-5V an einem KNX Analogeingang angeschlossen um den Füllstand meiner Zisterne zu messen. Ich lasse mir aufgrund der genaueren Messung den Wert in 2 Byte ausgeben. Somit habe ich einen Min Wert (Zisterne Leer) von 6550 und einen Max Wert von 18200.

Wie bekomme ich jetzt eine schöne Umrechnung in Form von 6550= 0 und 18200= 100 hin ?

hatten wir die tage schonmal :
https://forum.fhem.de/index.php/topic,91474.msg839925.html#msg839925

my $eingang = <EINGANGSWERT z.b. 6550>
my $emin=6550;
my $emax=18200;
my $amin=0;
my $amax=100;

$eingang = $emin if $eingang < $emin;
$eingang = $emax if $eingang > $emax;

my $y= (($amax-$amin)/($emax-$emin)*($eingang-$emin))+$amin;



gruss B<te09

Jessyfoosy

Auf Skalierung bin ich nicht gekommen  :(

Danke erstmal für die Antwort. Werde das nachher mal versuchen umzusetzen.

Jessyfoosy

Ich verstehe deinen Code nur leider weiß ich als Anfänger nicht wie ich ihn einbinden soll  :(
kannst du mir da eventuell auf die Sprünge helfen ?

Ich habe bis jetzt nur mit DOIF gearbeitet, der Link und eigene Recherche nach Skalierung hat mich auch nicht weiter gebracht.

Byte09

#4
Zitat von: Jessyfoosy am 02 Oktober 2018, 20:24:11
Ich verstehe deinen Code nur leider weiß ich als Anfänger nicht wie ich ihn einbinden soll  :(
kannst du mir da eventuell auf die Sprünge helfen ?

Ich habe bis jetzt nur mit DOIF gearbeitet, der Link und eigene Recherche nach Skalierung hat mich auch nicht weiter gebracht.

jenachdem wie und wo du ihn anzeigen willst. dü könntest ihn in die 99myutils auslagern , oder als userreading setzen etc .

als userreading (https://wiki.fhem.de/wiki/UserReadings):

attr <DEVICE> userReadings mystate {my $eingang = ReadingsVal($name,"state","") ;;;;my $emin=6550;;;;my $emax=18200;;;;my $amin=0;;;;my $amax=100;;;;$eingang = $emin if $eingang < $emin;;;;$eingang = $emax if $eingang > $emax;;;;my $y= (($amax-$amin)/($emax-$emin)*($eingang-$emin))+$amin;;;;$y = int ($y);;;;}

das Userreading skaliert den wert des readings state und setzt diesen als reading mystate.

über das attribut stateformat (https://blog.krannich.de/fhem-stateformat-kurz-erklaert/) kannst du es dann noch in die geräteansicht packen:

attr <DEVICE> stateFormat State skaliert: mystate

<DEVICE>  muss gegen den NAmen deines Devices getauscht werden.

gruss Byte09

Jessyfoosy

Hat super funktioniert. Ich danke dir. Habe wieder viel dazu gelernt  :D