Hi, did some work to prepare home heating based on PID and PWM automation module. Putting it all together works, but there are some problems with rules switching the thermostat modes on/off etc.
using openhab-js to create rules.
1/ when this rules fires with case ON
rules.JSRule({
name: `Termostat wyłącz wszystkie `,
id: `Termostats_all`,
tags: [`_DYNAMIC_`],
overwrite: `true`,
description: `Group termostat`,
triggers: [triggers.ItemStateChangeTrigger(`Radiators_AwayMode`)],
execute: (event) => {
switch (event.receivedCommand.toString()) {
case "ON": {
console.log("Wlaczono tryb wakacji");
for (let i = 1; i <= RoomNumber ; i++) {
items.getItem(`RadiatorAC${i}_homekit_TargetHeatingCoolingMode`).sendCommand("off");
}
break;
}
case "OFF": {
console.log("Wylaczono tryb wakacji")
for (let i = 1; i <= RoomNumber; i++) {
items.getItem(`RadiatorAC${i}_homekit_TargetHeatingCoolingMode`).sendCommand("auto");
}
break;
}
}
}
});
2/ “Termostat_1_modes_management” (i variable comes from a loop, not important) - item receives “off” from rule 1
rules.JSRule({
name: `Termostat ${i} modes management`,
id: `Termostat_${i}_modes_management`,
tags: [`Room${i}`, `_DYNAMIC_`],
overwrite: `true`,
description: `Seeting and syncing modes between iOS APP and Google Assistant`,
triggers: [triggers.ItemCommandTrigger(`RadiatorAC${i}_homekit_TargetHeatingCoolingMode`)],
execute: data => {
switch (data.receivedCommand.toString()) {
case "auto": {
rules.setEnabled(`Termostat_${i}_modes_management_from_schedule`,true);
items.getItem(`RadiatorAC${i}_SystemMode`).sendCommand("auto")
items.getItem(`RadiatorAC${i}_Preset`).sendCommand("schedule")
items.getItem(`RadiatorAC${i}_TargetTemperature`).sendCommand(items.getItem(`RadiatorAC${i}_scheduled_TargetTemperature`).state)
rules.setEnabled(`Termostat_${i}_PWM_rule`,true);
rules.setEnabled(`Termostat_${i}_PID_controller`,true);
break;
}
case "heat": {
console.log("otrzymał heat")
items.getItem(`RadiatorAC${i}_SystemMode`).sendCommand("auto")
items.getItem(`RadiatorAC${i}_Preset`).sendCommand("manual")
rules.setEnabled(`Termostat_${i}_modes_management_from_schedule`,false);
rules.setEnabled(`Termostat_${i}_PWM_rule`,true);
rules.setEnabled(`Termostat_${i}_PID_controller`,true);
break;
}
case "off": {
items.getItem(`RadiatorAC${i}_SystemMode`).sendCommand("off")
rules.setEnabled(`Termostat_${i}_PWM_rule`,false);
rules.setEnabled(`Termostat_${i}_modes_management_from_schedule`,false);
rules.setEnabled(`Termostat_${i}_PID_controller`,false);
items.getItem(`RadiatorAC${i}_PWM_Relay`).sendCommand("OFF")
break;
}
}
}
});
i get
2022-06-15 22:43:45.714 [INFO ] [tomation.script.file.rulesCreator.js] - Wlaczono tryb wakacji
2022-06-15 22:43:45.779 [ERROR] [tomation.script.file.rulesCreator.js] - Failed to execute rule Termostat_1_modes_management: java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@764b8cb[Not completed, task = java.util.concurrent.Executors$RunnableAdapter@5666048d[Wrapped task = org.openhab.core.automation.internal.TriggerHandlerCallbackImpl$TriggerData@3a2ebf6d]] rejected from java.util.concurrent.ScheduledThreadPoolExecutor@894258f[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 7752]
2022-06-15 22:43:45.796 [ERROR] [e.automation.internal.RuleEngineImpl] - Failed to execute rule 'Termostat_1_modes_management': Fail to execute action: 1
2022-06-15 22:43:45.809 [ERROR] [tomation.script.file.rulesCreator.js] - Failed to execute rule Termostat_3_modes_management: java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@4fc1bc98[Not completed, task = java.util.concurrent.Executors$RunnableAdapter@efcb6a3[Wrapped task = org.openhab.core.automation.internal.TriggerHandlerCallbackImpl$TriggerData@ac333a4]] rejected from java.util.concurrent.ScheduledThreadPoolExecutor@1566b04c[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 7761]
2022-06-15 22:43:45.811 [ERROR] [e.automation.internal.RuleEngineImpl] - Failed to execute rule 'Termostat_3_modes_management': Fail to execute action: 1
2022-06-15 22:43:45.816 [ERROR] [tomation.script.file.rulesCreator.js] - Failed to execute rule Termostat_4_modes_management: java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@6597400d[Not completed, task = java.util.concurrent.Executors$RunnableAdapter@36365227[Wrapped task = org.openhab.core.automation.internal.TriggerHandlerCallbackImpl$TriggerData@2ab3db61]] rejected from java.util.concurrent.ScheduledThreadPoolExecutor@365bc336[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 7344]
2022-06-15 22:43:45.820 [ERROR] [e.automation.internal.RuleEngineImpl] - Failed to execute rule 'Termostat_4_modes_management': Fail to execute action: 1
2022-06-15 22:43:45.823 [ERROR] [tomation.script.file.rulesCreator.js] - Failed to execute rule Termostat_6_modes_management: java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@320b0d31[Not completed, task = java.util.concurrent.Executors$RunnableAdapter@5ecce1b[Wrapped task = org.openhab.core.automation.internal.TriggerHandlerCallbackImpl$TriggerData@7bfec0ed]] rejected from java.util.concurrent.ScheduledThreadPoolExecutor@639f17ae[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 7177]
2022-06-15 22:43:45.827 [ERROR] [e.automation.internal.RuleEngineImpl] - Failed to execute rule 'Termostat_6_modes_management': Fail to execute action: 1
2022-06-15 22:43:45.838 [ERROR] [tomation.script.file.rulesCreator.js] - Failed to execute rule Termostat_7_modes_management: java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@2e89ef67[Not completed, task = java.util.concurrent.Executors$RunnableAdapter@6fb4e55c[Wrapped task = org.openhab.core.automation.internal.TriggerHandlerCallbackImpl$TriggerData@6b8b7c72]] rejected from java.util.concurrent.ScheduledThreadPoolExecutor@57bb36b3[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 7567]
2022-06-15 22:43:45.840 [ERROR] [e.automation.internal.RuleEngineImpl] - Failed to execute rule 'Termostat_7_modes_management': Fail to execute action: 1
2022-06-15 22:43:45.845 [ERROR] [tomation.script.file.rulesCreator.js] - Failed to execute rule Termostat_5_modes_management: java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@46f2613c[Not completed, task = java.util.concurrent.Executors$RunnableAdapter@7cf6b07[Wrapped task = org.openhab.core.automation.internal.TriggerHandlerCallbackImpl$TriggerData@3f0ef26]] rejected from java.util.concurrent.ScheduledThreadPoolExecutor@b157780[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 7568]
2022-06-15 22:43:45.847 [ERROR] [e.automation.internal.RuleEngineImpl] - Failed to execute rule 'Termostat_5_modes_management': Fail to execute action: 1
2022-06-15 22:43:45.851 [ERROR] [tomation.script.file.rulesCreator.js] - Failed to execute rule Termostat_2_modes_management: java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@1e5a0b14[Not completed, task = java.util.concurrent.Executors$RunnableAdapter@66319e18[Wrapped task = org.openhab.core.automation.internal.TriggerHandlerCallbackImpl$TriggerData@7aee13ae]] rejected from java.util.concurrent.ScheduledThreadPoolExecutor@2b402746[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 7751]
2022-06-15 22:43:45.855 [ERROR] [e.automation.internal.RuleEngineImpl] - Failed to execute rule 'Termostat_2_modes_management': Fail to execute action: 1
Any ideas what to do ? i think the problem is appearing when the rules are enabled/disabled:
rules.setEnabled(Termostat_${i}_PWM_rule
,false);
rules.setEnabled(Termostat_${i}_modes_management_from_schedule
,false);
rules.setEnabled(Termostat_${i}_PID_controller
,false);
PWM and PID are automation modules addons, modes management from schedule is simple cronbased rule (every 5 minutes check the desired temperature from schedule)