Tipp: Du kannst statt der switch-case Anweisung auch eine Hashmap nutzen, das geht schneller:
Code: Alles auswählen
import java.util.HashMap
val Hashmap<Number,Number> hmPuffer = newHashMap[ 0 -> 0.955, 1 -> 0.924, 2 -> 0.903,
3 -> 0.8707298701, 4 -> 0.8372402597, 5 -> 0.8204954545,
6 -> 0.7870058442, 7 -> 0.770261039, 8 -> 0.7367714286,
9 -> 0.7200266234, 10 -> 0.7032818182, 11 -> 0.686537013,
12 -> 0.6530474026, 13 -> 0.6363025974, 14 -> 0.6195577922,
15 -> 0.602812987, 16 -> 0.5860681818, 17 -> 0.5693233766,
18 -> 0.5525785714, 19 -> 0.5358337662, 20 -> 0.519088961,
21 -> 0.5023441558, 22 -> 0.4855993506, 23 -> 0.4688545455,
24 -> 0.4688545455, 25 -> 0.4521097403, 26 -> 0.4353649351,
27 -> 0.4353649351, 28 -> 0.4186201299, 29 -> 0.4018753247,
30 -> 0.4018753247, 31 -> 0.3851305195, 32 -> 0.3683857143,
33 -> 0.3683857143, 34 -> 0.3516409091, 35 -> 0.3348961039,
36 -> 0.3348961039, 37 -> 0.3181512987, 38 -> 0.3181512987,
39 -> 0.3181512987, 40 -> 0.3181512987, 41 -> 0.3014064935,
42 -> 0.3014064935, 43 -> 0.2846616883, 44 -> 0.2846616883,
45 -> 0.2846616883, 46 -> 0.2679168831, 47 -> 0.2679168831,
48 -> 0.2679168831, 49 -> 0.2679168831, 50 -> 0.2679168831 ]
rule "Pool Aktiv Chlor berechnen"
when
Item Pool_fCL changed or Item Pool_CYA changed
then
var Number CYA_Puffer = 1
if(Pool_CYA.state instanceof Number)
if((Pool_CYA.state as Number).intValue > -1 && (Pool_CYA.state as Number).intValue < 51)
CYA_Puffer = hmPuffer.get((Pool_CYA.state as Number).intValue)
logInfo("potenz","CYA_Puffer: {} ", CYA_Puffer)
Rest des Codes kann gleich bleiben.
Ich gehe davon aus, dass Du die Zwischenwerte eher zum testen brauchst. Die Formel kannst Du direkt so verwenden, die DSL beherrscht die mathematischen Grundreglen (Punkt vor Strich, Klammern)
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet