Hauptmenü

[Gelöst]suche map()

Begonnen von fadi1, 24 Februar 2021, 16:31:12

Vorheriges Thema - Nächstes Thema

fadi1

hallo

ich suche einen weg wie ich map() https://www.arduino.cc/reference/de/language/functions/math/map/ in fhem umsetzen kann , wenn möglich ohne einer ESP32

meine derzeitige Lösung funktioniert zwar aber mit einer Funktion wie es map() macht wäre es schöner umzusetzen


GPIO4_DS18B20_0000058679a8:temperature:.* {

my $xxx = 0.000;
my $rrr = 1;

if ($EVTPART1 < "43.000")
      {
      $xxx=0.000;
      }
if ($EVTPART1 > "43.000")
      {
      $xxx = 0.003;
      }
if ($EVTPART1 > "44.000")
      {
      $xxx = 0.004;
      }
if ($EVTPART1 > "45.000")
      {
      $xxx = 0.005;
  $rrr = 0;
      }
if ($EVTPART1 > "46.000")
      {
      $xxx = 0.006;
  $rrr = 0;
      }
if ($EVTPART1 > "47.000")
      {
      $xxx = 0.007;
  $rrr = 0;
      }
if ($EVTPART1 > "48.000")
      {
      $xxx = 0.008;  
      $rrr = 0;
      }
if ($EVTPART1 > "49.000")
      {
      $xxx = 0.009;
  $rrr = 0;
      }
if ($EVTPART1 > "50.000")
      {
      $xxx = 0.010;
  $rrr = 0;
      }
if ($EVTPART1 > "51.000")
      {
      $xxx=0.015;
      $rrr = 0;
      }
if ($EVTPART1 > "52.000")
      {
      $xxx=0.020;
      $rrr = 0;
      }

# fhem("attr lueft_reset disable ". $rrr ."");
fhem("setreading dimm dimm_TLed_l " . $xxx . "");
fhem("setreading dimm dimm_L_lüfter " . $xxx*100 . "");

system("echo \"23=" . $xxx . "\" > /dev/pi-blaster");

}


Danke für eure Anregungen 

Beta-User

Afaik gibt's dazu keine einfache Lösung, siehe evtl. dazu auch https://forum.fhem.de/index.php/topic,110442.0.html
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

CoolTux

given ($zahl) {
  when (100) { $zahl2 = 1; next; };
  when (200) { $zahl2 = 2; next; };
      # usw...
      default { $zahl2 = $zahl }
    }


Schau mal ob Du damit weiter kommst.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

pwlr


Zitatich suche einen weg wie ich map() https://www.arduino.cc/reference/de/language/functions/math/map/ in fhem umsetzen kann , wenn möglich ohne einer ESP32

In dem Link ist unter "Anhang" die von map() verwendete Formel dokumentiert. Die könnte m.E. auch in einer Perl-Subroutine entsprechend umgesetzt werden.

Beta-User

Mal weg von der map()-Frage:

Warum ermittelst du nicht deine beiden Parameter getrennt?

Ungetestet sollte etwa folgendes RAW rauskommen:
defmod n_test notify GPIO4_DS18B20_0000058679a8:temperature:.* {\
my $xxx = 0;;\
my $rrr = $EVTPART1 > 45 ? 0 : 1;;\
if ($EVTPART1 > 52) {\
    $xxx=0.020;;\
} elsif ($EVTPART1 > 43) {\
    $xxx = ($EVTPART1 - 40)/1000;;\
}\
fhem("setreading dimm dimm_TLed_l $xxx ;; setreading dimm dimm_L_lüfter " . $xxx*100);;\
system("echo \"23=" . $xxx . "\" > /dev/pi-blaster");;\
}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

pwlr

Moin,

eine sub in die myUtils stellen:
sub fhem_map($$$$$) {

#  map(value, fromLow, fromHigh, toLow, toHigh)
#see https://www.arduino.cc/en/pmwiki.php?n=Reference/Map

my($value,$fromLow,$fromHigh,$toLow,$toHigh) = @_;
my$result = (($value - $fromLow) * ( $toHigh - $toLow)) / ($fromHigh - $fromLow) + $toLow;
return $result;
};


und dann beispielsweise in der Command-Zeile aufrufen:
{fhem_map(50, 0, 100, 100, 200)}

oder eben in notify etc. entsprechend einbauen.

fadi1

Hallo
danke für die wertvollen Tipps 8)
ich habe mir jetzt eine Sub in myUtils erstellt und dafür den Code von "pwlr" genommen  funktioniert bestens Danke an euch alle.
ihr seit alle super 8),
ich bin noch Meilen von den Können entfernt.