Hauptmenü

Slider Werte skalieren

Begonnen von trs, 26 September 2018, 17:48:10

Vorheriges Thema - Nächstes Thema

trs

Hallo,

ich möchte mit einen Slider, der Werte von 0 bis 100 annehmen kann, Werte von 153 bis 500 übergeben. Wie rechne ich die Werte am einfachsten um?


Esjay

Warum baust du dir nicht über setList einen Slider der das kann?

wasauchimmer:slider,153,0.5,500

Grüße

trs

Weil ich in Tablet ui einen Slider von 0 - 100 benötige.

Byte09

#3
Zitat von: trs am 26 September 2018, 19:28:42
Weil ich in Tablet ui einen Slider von 0 - 100 benötige.


ggf. hilft dir das weiter.

mit jeder änderung des sliders wird in diesem device das reading 'to_set' entsprechend gesetzt . ob du nur das reading verwendest oder direkt mit diesem device schaltest ... wie du willst .

in jedem fall kannst du da die umrechnung sehen.

aktuelle fheminstallation erforderlich !

gruss Byte09

defmod Linearschalter MSwitch  # FreeCmd
attr Linearschalter MSwitch_Debug 0
attr Linearschalter MSwitch_Delete_Delays 0
attr Linearschalter MSwitch_Expert 1
attr Linearschalter MSwitch_Extensions 0
attr Linearschalter MSwitch_Help 0
attr Linearschalter MSwitch_Ignore_Types notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul
attr Linearschalter MSwitch_Include_Devicecmds 0
attr Linearschalter MSwitch_Include_MSwitchcmds 1
attr Linearschalter MSwitch_Include_Webcmds 0
attr Linearschalter MSwitch_Lock_Quickedit 1
attr Linearschalter MSwitch_Mode Full
attr Linearschalter MSwitch_Safemode 0
attr Linearschalter disable 0
attr Linearschalter room 2_Referenz
attr Linearschalter verbose 1
attr Linearschalter webCmd on:off:pct

setstate Linearschalter on
setstate Linearschalter 2018-09-26 20:41:22 .Device_Affected FreeCmd-AbsCmd1
setstate Linearschalter 2018-09-26 20:42:01 .Device_Affected_Details FreeCmd-AbsCmd1#[NF]cmd#[NF]cmd#[NF]{#[nl]my#[sp]$eingang#[sp]=ReadingsVal(#[sp]"$SELF"#[ko]#[sp]"pct"#[ko]#[sp]0#[sp])#[se]#[nl]my#[sp]$emin=0#[se]#[nl]my#[sp]$emax=100#[se]#[nl]my#[sp]$amin=153#[se]#[nl]my#[sp]$amax=500#[se]#[nl]readingsSingleUpdate(#[sp]$hash#[ko]#[sp]"test"#[ko]#[sp]$eingang#[ko]#[sp]1#[sp])#[se]#[nl]$eingang#[sp]=#[sp]$emin#[sp]if#[sp]$eingang#[sp]<#[sp]$emin#[se]#[nl]$eingang#[sp]=#[sp]$emax#[sp]if#[sp]$eingang#[sp]>#[sp]$emax#[se]#[nl]my#[sp]$y=#[sp](($amax-$amin)/($emax-$emin)*($eingang-$emin))+$amin#[se]#[nl]readingsSingleUpdate(#[sp]$hash#[ko]#[sp]"to_set"#[ko]#[sp]int#[sp]($y)#[ko]#[sp]1#[sp])#[se]#[nl]}#[NF]{#[nl]my#[sp]$eingang#[sp]=ReadingsVal(#[sp]"$SELF"#[ko]#[sp]"pct"#[ko]#[sp]0#[sp])#[se]#[nl]my#[sp]$emin=0#[se]#[nl]my#[sp]$emax=100#[se]#[nl]my#[sp]$amin=153#[se]#[nl]my#[sp]$amax=500#[se]#[nl]readingsSingleUpdate(#[sp]$hash#[ko]#[sp]"test"#[ko]#[sp]$eingang#[ko]#[sp]1#[sp])#[se]#[nl]$eingang#[sp]=#[sp]$emin#[sp]if#[sp]$eingang#[sp]<#[sp]$emin#[se]#[nl]$eingang#[sp]=#[sp]$emax#[sp]if#[sp]$eingang#[sp]>#[sp]$emax#[se]#[nl]my#[sp]$y=#[sp](($amax-$amin)/($emax-$emin)*($eingang-$emin))+$amin#[se]#[nl]readingsSingleUpdate(#[sp]$hash#[ko]#[sp]"to_set"#[ko]#[sp]int#[sp]($y)#[ko]#[sp]1#[sp])#[se]#[nl]}#[NF]delay1#[NF]delay1#[NF]00#[dp]00#[dp]00#[NF]00#[dp]00#[dp]00#[NF]#[NF]#[NF]#[NF]#[NF]1#[NF]0
setstate Linearschalter 2018-09-26 20:41:12 .Device_Events no_trigger
setstate Linearschalter 2018-09-26 20:41:12 .First_init done
setstate Linearschalter 2018-09-26 20:41:12 .Trigger_cmd_off no_trigger
setstate Linearschalter 2018-09-26 20:41:12 .Trigger_cmd_on no_trigger
setstate Linearschalter 2018-09-26 20:41:12 .Trigger_off no_trigger
setstate Linearschalter 2018-09-26 20:41:12 .Trigger_on no_trigger
setstate Linearschalter 2018-09-26 20:41:12 .V_Check V2.00
setstate Linearschalter 2018-09-26 20:41:12 .sysconf $special=#[st]pct#[dp]slider#[ko]0#[ko]1#[ko]100#[st]#[se]#[nl]#[nl]if#[sp]($cmd#[sp]eq#[sp]"on"#[sp]#[wa]#[wa]#[sp]$cmd#[sp]eq#[sp]"off"#[sp]#[wa]#[wa]#[sp]$cmd#[sp]eq#[sp]"pct")#[nl]{#[nl]$args[0]#[sp]=""#[sp]if#[sp]#[sp]!defined#[sp]$args[0]#[se]#[nl]my#[sp]$arg#[sp]=#[sp]$args[0]#[se]#[nl]#[sp]if#[sp]($cmd#[sp]eq#[sp]"on"#[sp]#[wa]#[wa]#[sp]$cmd#[sp]eq#[sp]"off"#[sp]#[sp]#[wa]#[wa]#[sp]$cmd#[sp]eq#[sp]"pct")#[nl]#[sp]{#[nl]#[sp]if#[sp]($cmd#[sp]eq#[sp]"pct"#[sp]&&#[sp]$arg#[sp]eq#[sp]#[st]0#[st])#[nl]#[sp]{#[nl]#[sp]$cmd#[sp]=#[st]off#[st]#[se]#[nl]#[sp]#[sp]}#[nl]if#[sp]($cmd#[sp]eq#[sp]"pct"#[sp]&&#[sp]$arg#[sp]ne#[sp]#[st]0#[st])#[nl]{#[nl]$cmd#[sp]=#[st]on#[st]#[se]#[nl]}#[sp]#[sp]#[sp]#[nl]#[sp]if#[sp](#[sp]$cmd#[sp]eq#[sp]#[st]on#[st]#[sp]&&#[sp]$arg#[sp]eq#[sp]#[st]#[st])#[nl]{#[nl]$args[0]#[sp]=#[sp]ReadingsVal(#[sp]$name#[ko]#[sp]#[st]pct#[st]#[ko]#[sp]100)#[se]#[nl]}#[nl]#[nl]if#[sp](#[sp]$cmd#[sp]eq#[sp]#[st]off#[st]#[sp]&&#[sp]$arg#[sp]eq#[sp]#[st]#[st]#[sp]#[sp]#[sp]#[sp])#[nl]{#[nl]$args[0]#[sp]=#[sp]0#[se]#[nl]}#[nl]readingsSingleUpdate(#[sp]$hash#[ko]#[sp]"pct"#[ko]#[sp]$args[0]#[ko]#[sp]1#[sp])#[se]#[nl]}#[nl]}#[nl]
setstate Linearschalter 2018-09-26 20:42:04 EVENT Linearschalter:on_with_Parameter:18
setstate Linearschalter 2018-09-26 20:42:04 EVTFULL Linearschalter:on_with_Parameter:18
setstate Linearschalter 2018-09-26 20:42:04 EVTPART1 Linearschalter
setstate Linearschalter 2018-09-26 20:42:04 EVTPART2 on_with_Parameter
setstate Linearschalter 2018-09-26 20:42:04 EVTPART3 18
setstate Linearschalter 2018-09-26 20:42:05 Exec_cmd {my $eingang =ReadingsVal( "Linearschalter", "pct", 0 );;my $emin=0;;my $emax=100;;my $amin=153;;my $ama....
setstate Linearschalter 2018-09-26 20:42:04 Parameter 18
setstate Linearschalter 2018-09-26 20:41:12 Sys_Extension on
setstate Linearschalter 2018-09-26 20:41:12 Trigger_device no_trigger
setstate Linearschalter 2018-09-26 20:41:12 Trigger_log on
setstate Linearschalter 2018-09-26 20:42:04 last_event Linearschalter:on_with_Parameter:18
setstate Linearschalter 2018-09-26 20:42:04 pct 18
setstate Linearschalter 2018-09-26 20:42:04 state on
setstate Linearschalter 2018-09-26 20:42:05 test 18
setstate Linearschalter 2018-09-26 20:42:05 to_set 215



Byte09

#5
Zitat von: trs am 26 September 2018, 21:05:22
https://www.wer-weiss-was.de/t/skalierung-von-werten/6459281

Damit müsste es gehen.

... entspricht der angewendeten berechnung i.o gepostetem MSwitch-Device
mehr oder weniger .
{
my $eingang =ReadingsVal( "$SELF", "pct", 0 );
my $emin=0;
my $emax=100;
my $amin=153;
my $amax=500;
$eingang = $emin if $eingang < $emin;
$eingang = $emax if $eingang > $emax;
my $y= (($amax-$amin)/($emax-$emin)*($eingang-$emin))+$amin;
readingsSingleUpdate( $hash, "to_set", int ($y), 1 );
}


gruss Byte09

.... wollte aber die autodidaktische Phase nicht unterbrechen  ;)

trs

Nun die alles entscheidende Frage: Wie bekomme ich die Umrechnung in eime Formel?  Mit

LED_Kuechenschrank:temp:..* set LED_KUECHE Temp (153+((653/100)*$EVTPART1))

geht´s nicht...

da wird nur die Formel übergeben




Byte09

Zitat von: trs am 27 September 2018, 10:21:46
Nun die alles entscheidende Frage: Wie bekomme ich die Umrechnung in eime Formel?  Mit

LED_Kuechenschrank:temp:..* set LED_KUECHE Temp (153+((653/100)*$EVTPART1))

geht´s nicht...

da wird nur die Formel übergeben
Bin mir ja echt nicht sicher ob du wirklich Hilfe willst ? .... meine offenbar nicht  ... aber egal ... wird sich wohl jemand finden .

Gruss Byte09

Gesendet von meinem SM-G900F mit Tapatalk

trs

@Byte09: Vielen Dank für Deine Hilfe. Das ist sicherlich gut gemeint. Aber wir befinden uns hier im Anfängerforum. Und genau das bin ich. Ich möchte eigendlich nur Werte, skalieren. Eingabewerte von 0 - 100, Ausgabewerte 153 - 500.

Dein Lösungsansatz erschließt sich mir überhaupt nicht. Es muß doch eine einfachere Lösung geben, als den Trum, den du vorgeschlagen hast. Ich muß nur noch wissen, wie ich einen berechneten Wert in einem NOTIFY übergeben kann. Das habe ich noch nicht gefunden. Ohne eigene Variablen.

defmod LED_Kuechenschrank_notify_1 notify LED_Kuechenschrank:temp:..* set LED_KUECHE Temp (153+((653/100)*$EVTPART1))

Das funktioniert wie schon geschrieben nicht.




Esjay

defmod LED_Kuechenschrank_notify_1 notify LED_Kuechenschrank:temp:..* set LED_KUECHE Temp {(153+((653/100)*$EVTPART1))}

Versuch das mal.
Grüße

trs

#10
Alles klar, die eckigen Klammern haben gefehlt. So geht's:

defmod LED_Kuechenschrank_notify_1 notify LED_Kuechenschrank:temp:..* set LED_KUECHE Temp {(153+(347/100)*$EVTPART1)}