Update #1
Below includes a revised and simplified (manual) fan speed control rule.
Instead of hard-coding most items, I went this time for a more flexible setup.
//Set item variables
var triggerItem = ir.getItem(event.itemName);
var triggerState = ir.getItem(triggerItem.name).getState();
var triggerLabel = ir.getItem(triggerItem.name).getLabel();
var substring_pve = triggerItem.name.substring(5, 10); //you need to change this depending on your items
//User access
var username = "USER";
var password = "PASSWORD";
if(this.event === undefined) {
// event does not exist
}
//Set correct IP Address
switch (triggerItem.name) {
case "YOUR-Triggering-ItemName1":
var substring_ip = "YOUR-IP-Server1";
break;
case "YOUR-Triggering-ItemName2":
var substring_ip = "YOUR-IP-Server2";
break;
case "YOUR-Triggering-ItemName3":
var substring_ip = "YOUR-IP-Server3";
break;
case "YOUR-Triggering-ItemName4":
var substring_ip = "YOUR-IP-ServerX";
break;
}
//Set correct fan speed HEX value
switch (triggerState) {
case 0:
var speed = "0x00";
break;
case 5:
var speed = "0x05";
break;
case 10:
var speed = "0x0A";
break;
case 20:
var speed = "0x14";
break;
case 30:
var speed = "0x1e";
break;
case 50:
var speed = "0x32";
break;
case 70:
var speed = "0x46";
break;
case 80:
var speed = "0x50";
break;
case 100:
var speed = "0x64";
break;
}
//Actions
var execFAN = Exec.executeCommandLine(Duration.ofSeconds(5),"ipmitool","-I", "lanplus", "-H", substring_ip, "-U", username, "-P", password, "raw", "0x30", "0x30", "0x02", "0xff", speed);
Log.logWarn("servers", substring_pve + " (" + substring_ip + ") set to " + triggerState + "%");
As you can see, above reduces the number of lines drastically (in case of multiple servers).
Hope this helps!