I’m trying to convert the rules on the OH3 GUI to dsl, but i always get the same error
“Failed to execute rule ‘9b817e1a93’ with status ‘RUNNING’
2022-12-19 23:28:37.289 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID ‘9b817e1a93’ failed:”
I don’t understand where I’m wrong, can someone help me?
thank you
I paste the code
FF_Boiler_Modo.postUpdate(3) // set to default
Thread::sleep(500) // some delay to sort things out
}
switch((FF_Boiler_Modo.state as Number).intValue) {
case 0: { //manuale
// logWarn("mylog","manuale")
}
case 1: { //automatico
if(caldaia_giorno.state=="ON" && caldaia_lavoro.state=="OFF") {
FF_Boiler_Heating.postUpdate(FF_Boiler_massima.state)
// logWarn("mylog","automatico1")
} else if((caldaia_giorno=="ON" && caldaia_lavoro.state=="ON") || caldaia_giorno.state=="OFF") {
FF_Boiler_Heating.postUpdate(FF_Boiler_minima.state)
// logWarn("mylog","automatico2")
}
}
case 2: { //con presenza
if(gPresence.state == "ON"){
FF_Boiler_Heating.postUpdate(FF_Boiler_massima.state)
// logWarn("mylog","con presenza1")
} else {
FF_Boiler_Heating.postUpdate(FF_Boiler_minima.state)
// logWarn("mylog","con presenza2")
}
}
case 3: { //con presenza in determinati orari
if(gPresence.state == "OFF"){
FF_Boiler_Heating.postUpdate(FF_Boiler_minima.state)
// logWarn("mylog","con presenza orari3")
} else {
if(caldaia_giorno.state=="ON"){
FF_Boiler_Heating.postUpdate(FF_Boiler_massima.state)
// logWarn("mylog","con presenza orari1")
} else {
FF_Boiler_Heating.postUpdate(FF_Boiler_minima.state)
// logWarn("mylog","con presenza orari2")
}
}
}
case 4: {
FF_Boiler_Heating.postUpdate(10)
// logWarn("mylog","imposto arieggiare a 10")
}
}
//alla fine di tutto accendo o spengo la caldaia
var newState = OFF
if((FF_Boiler_Control_Temperature.state as Number).intValue ==0){
logWarn("mylog","newstate 0")
newState = if((FF_Boiler_Heating.state as Number) > (FF_FamilyRoom_Temperature.state as Number) && Thermostat_SoggiornoG_Mode.state == "AUTO" || (FF_Boiler_Heating.state as Number) > (FF_Kitchen_Temperature.state as Number) && Thermostat_Cucina_Mode.state == "AUTO" || (FF_Boiler_Heating.state as Number) > (FF_Studio_Temperature.state as Number) && Thermostat_Studio_Mode.state == "AUTO" || (FF_Boiler_Heating.state as Number) > (FF_Bathroom_Temperature.state as Number) && Thermostat_Bagno_Mode.state == "AUTO" || (FF_Boiler_Heating.state as Number) > (FF_MasterBedroom_Temperature.state as Number) && Thermostat_Camera_Mode.state == "AUTO" || (FF_Boiler_Heating.state as Number) > (FF_Bedroom_Temperature.state as Number) && Thermostat_Cameretta_Mode.state == "AUTO") ON else OFF
}
else if((FF_Boiler_Control_Temperature.state as Number).intValue ==1){
newState = if((FF_Boiler_Heating.state as Number) > (FF_FamilyRoom_Temperature.state as Number) ON else OFF
logWarn("mylog","newstate 1")
}
else if((FF_Boiler_Control_Temperature.state as Number).intValue ==2){
newState = if((FF_Boiler_Heating.state as Number) > (FF_Bathroom_Temperature.state as Number) ON else OFF
logWarn("mylog","newstate 2")
}
else if((FF_Boiler_Control_Temperature.state as Number).intValue ==3){
newState = if((FF_FamilyRoom_Heating.state as Number) > (FF_FamilyRoom_Temperature.state as Number) && Thermostat_SoggiornoG_Mode.state == "AUTO" || (FF_Kitchen_Heating.state as Number) > (FF_Kitchen_Temperature.state as Number) && Thermostat_Cucina_Mode.state == "AUTO" || (FF_Studio_Heating.state as Number) > (FF_Studio_Temperature.state as Number) && Thermostat_Studio_Mode.state == "AUTO" || (FF_Bathroom_Heating.state as Number) > (FF_Bathroom_Temperature.state as Number) && Thermostat_Bagno_Mode.state == "AUTO" || (FF_MasterBedroom_Heating.state as Number) > (FF_MasterBedroom_Temperature.state as Number) && Thermostat_Camera_Mode.state == "AUTO" || (FF_Bedroom_Heating.state as Number) > (FF_Bedroom_Temperature.state as Number) && Thermostat_Cameretta_Mode.state == "AUTO") ON else OFF
logWarn("mylog","newstate 3")
}
//if(FF_Boiler_Stato.state != newState) FF_Boiler_Stato.sendCommand(newState)
FF_Boiler_Stato.sendCommand(newState)
logWarn("mylog","newstate send")
type or paste code here
I tried but nothing to do, no errors, it only reports the code, I report the error below
thank you
2022-12-20 15:03:53.849 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID '9b817e1a93' failed:
if(!(FF_Boiler_Modo.state instanceof Number)) { // in case of no valid number
FF_Boiler_Modo.postUpdate(3) // set to default
Thread::sleep(500) // some delay to sort things out
}
switch((FF_Boiler_Modo.state as Number).intValue) {
case 0: { //manuale
logWarn("mylog","manuale")
}
case 1: { //automatico
if(caldaia_giorno.state=="ON" && caldaia_lavoro.state=="OFF") {
FF_Boiler_Heating.postUpdate(FF_Boiler_massima.state)
logWarn("mylog","automatico1")
} else if((caldaia_giorno=="ON" && caldaia_lavoro.state=="ON") || caldaia_giorno.state=="OFF") {
FF_Boiler_Heating.postUpdate(FF_Boiler_minima.state)
logWarn("mylog","automatico2")
}
}
case 2: { //con presenza
if(gPresence.state == "ON"){
FF_Boiler_Heating.postUpdate(FF_Boiler_massima.state)
logWarn("mylog","con presenza1")
} else {
FF_Boiler_Heating.postUpdate(FF_Boiler_minima.state)
logWarn("mylog","con presenza2")
}
}
case 3: { //con presenza in determinati orari
if(gPresence.state == "OFF"){
FF_Boiler_Heating.postUpdate(FF_Boiler_minima.state)
logWarn("mylog","con presenza orari3")
} else {
if(caldaia_giorno.state=="ON"){
FF_Boiler_Heating.postUpdate(FF_Boiler_massima.state)
logWarn("mylog","con presenza orari1")
} else {
FF_Boiler_Heating.postUpdate(FF_Boiler_minima.state)
logWarn("mylog","con presenza orari2")
}
}
}
case 4: {
FF_Boiler_Heating.postUpdate(10)
logWarn("mylog","imposto arieggiare a 10")
}
}
//alla fine di tutto accendo o spengo la caldaia
var newState = OFF
if((FF_Boiler_Control_Temperature.state as Number).intValue ==0){
logWarn("mylog","newstate 0")
newState = if((FF_Boiler_Heating.state as Number) > (FF_FamilyRoom_Temperature.state as Number) && Thermostat_SoggiornoG_Mode.state == "AUTO" || (FF_Boiler_Heating.state as Number) > (FF_Kitchen_Temperature.state as Number) && Thermostat_Cucina_Mode.state == "AUTO" || (FF_Boiler_Heating.state as Number) > (FF_Studio_Temperature.state as Number) && Thermostat_Studio_Mode.state == "AUTO" || (FF_Boiler_Heating.state as Number) > (FF_Bathroom_Temperature.state as Number) && Thermostat_Bagno_Mode.state == "AUTO" || (FF_Boiler_Heating.state as Number) > (FF_MasterBedroom_Temperature.state as Number) && Thermostat_Camera_Mode.state == "AUTO" || (FF_Boiler_Heating.state as Number) > (FF_Bedroom_Temperature.state as Number) && Thermostat_Cameretta_Mode.state == "AUTO") ON else OFF
}
else if((FF_Boiler_Control_Temperature.state as Number).intValue ==1){
newState = if((FF_Boiler_Heating.state as Number) > (FF_FamilyRoom_Temperature.state as Number) ON else OFF
logWarn("mylog","newstate 1")
}
else if((FF_Boiler_Control_Temperature.state as Number).intValue ==2){
newState = if((FF_Boiler_Heating.state as Number) > (FF_Bathroom_Temperature.state as Number) ON else OFF
logWarn("mylog","newstate 2")
}
else if((FF_Boiler_Control_Temperature.state as Number).intValue ==3){
newState = if((FF_FamilyRoom_Heating.state as Number) > (FF_FamilyRoom_Temperature.state as Number) && Thermostat_SoggiornoG_Mode.state == "AUTO" || (FF_Kitchen_Heating.state as Number) > (FF_Kitchen_Temperature.state as Number) && Thermostat_Cucina_Mode.state == "AUTO" || (FF_Studio_Heating.state as Number) > (FF_Studio_Temperature.state as Number) && Thermostat_Studio_Mode.state == "AUTO" || (FF_Bathroom_Heating.state as Number) > (FF_Bathroom_Temperature.state as Number) && Thermostat_Bagno_Mode.state == "AUTO" || (FF_MasterBedroom_Heating.state as Number) > (FF_MasterBedroom_Temperature.state as Number) && Thermostat_Camera_Mode.state == "AUTO" || (FF_Bedroom_Heating.state as Number) > (FF_Bedroom_Temperature.state as Number) && Thermostat_Cameretta_Mode.state == "AUTO") ON else OFF
logWarn("mylog","newstate 3")
}
//if(FF_Boiler_Stato.state != newState) FF_Boiler_Stato.sendCommand(newState)
FF_Boiler_Stato.sendCommand(newState)
logWarn("mylog","newstate send")
this is what i see, there is no red mark, so i think tabs are fine,
there will be some function it doesn’t like
but this script in the rules file works fine
configuration: {}
triggers:
- id: "1"
configuration:
itemName: FF_Boiler_Heating
type: core.ItemStateChangeTrigger
- id: "2"
configuration:
itemName: FF_FamilyRoom_Temperature
type: core.ItemStateUpdateTrigger
- id: "3"
configuration:
itemName: FF_Kitchen_Temperature
type: core.ItemStateUpdateTrigger
- id: "4"
configuration:
itemName: FF_Bathroom_Temperature
type: core.ItemStateUpdateTrigger
- id: "5"
configuration:
itemName: FF_Boiler_Modo
type: core.ItemCommandTrigger
- id: "6"
configuration:
itemName: gPresence
type: core.ItemStateChangeTrigger
conditions: []
actions:
- inputs: {}
id: "7"
configuration:
type: application/vnd.openhab.dsl.rule
script: >2
if(!(FF_Boiler_Modo.state instanceof Number)) { // in case of no valid number
FF_Boiler_Modo.postUpdate(3) // set to default
Thread::sleep(500) // some delay to sort things out
}
switch((FF_Boiler_Modo.state as Number).intValue) {
case 0: { //manuale
logWarn("mylog","manuale")
}
case 1: { //automatico
if(caldaia_giorno.state=="ON" && caldaia_lavoro.state=="OFF") {
FF_Boiler_Heating.postUpdate(FF_Boiler_massima.state)
logWarn("mylog","automatico1")
} else if((caldaia_giorno=="ON" && caldaia_lavoro.state=="ON") || caldaia_giorno.state=="OFF") {
FF_Boiler_Heating.postUpdate(FF_Boiler_minima.state)
logWarn("mylog","automatico2")
}
}
case 2: { //con presenza
if(gPresence.state == "ON"){
FF_Boiler_Heating.postUpdate(FF_Boiler_massima.state)
logWarn("mylog","con presenza1")
} else {
FF_Boiler_Heating.postUpdate(FF_Boiler_minima.state)
logWarn("mylog","con presenza2")
}
}
case 3: { //con presenza in determinati orari
if(gPresence.state == "OFF"){
FF_Boiler_Heating.postUpdate(FF_Boiler_minima.state)
logWarn("mylog","con presenza orari3")
} else {
if(caldaia_giorno.state=="ON"){
FF_Boiler_Heating.postUpdate(FF_Boiler_massima.state)
logWarn("mylog","con presenza orari1")
} else {
FF_Boiler_Heating.postUpdate(FF_Boiler_minima.state)
logWarn("mylog","con presenza orari2")
}
}
}
case 4: {
FF_Boiler_Heating.postUpdate(10)
logWarn("mylog","imposto arieggiare a 10")
}
}
//alla fine di tutto accendo o spengo la caldaia
var newState = OFF
if((FF_Boiler_Control_Temperature.state as Number).intValue ==0){
logWarn("mylog","newstate 0")
newState = if((FF_Boiler_Heating.state as Number) > (FF_FamilyRoom_Temperature.state as Number) && Thermostat_SoggiornoG_Mode.state == "AUTO" || (FF_Boiler_Heating.state as Number) > (FF_Kitchen_Temperature.state as Number) && Thermostat_Cucina_Mode.state == "AUTO" || (FF_Boiler_Heating.state as Number) > (FF_Studio_Temperature.state as Number) && Thermostat_Studio_Mode.state == "AUTO" || (FF_Boiler_Heating.state as Number) > (FF_Bathroom_Temperature.state as Number) && Thermostat_Bagno_Mode.state == "AUTO" || (FF_Boiler_Heating.state as Number) > (FF_MasterBedroom_Temperature.state as Number) && Thermostat_Camera_Mode.state == "AUTO" || (FF_Boiler_Heating.state as Number) > (FF_Bedroom_Temperature.state as Number) && Thermostat_Cameretta_Mode.state == "AUTO") ON else OFF
}
else if((FF_Boiler_Control_Temperature.state as Number).intValue ==1){
newState = if((FF_Boiler_Heating.state as Number) > (FF_FamilyRoom_Temperature.state as Number) ON else OFF
logWarn("mylog","newstate 1")
}
else if((FF_Boiler_Control_Temperature.state as Number).intValue ==2){
newState = if((FF_Boiler_Heating.state as Number) > (FF_Bathroom_Temperature.state as Number) ON else OFF
logWarn("mylog","newstate 2")
}
else if((FF_Boiler_Control_Temperature.state as Number).intValue ==3){
newState = if((FF_FamilyRoom_Heating.state as Number) > (FF_FamilyRoom_Temperature.state as Number) && Thermostat_SoggiornoG_Mode.state == "AUTO" || (FF_Kitchen_Heating.state as Number) > (FF_Kitchen_Temperature.state as Number) && Thermostat_Cucina_Mode.state == "AUTO" || (FF_Studio_Heating.state as Number) > (FF_Studio_Temperature.state as Number) && Thermostat_Studio_Mode.state == "AUTO" || (FF_Bathroom_Heating.state as Number) > (FF_Bathroom_Temperature.state as Number) && Thermostat_Bagno_Mode.state == "AUTO" || (FF_MasterBedroom_Heating.state as Number) > (FF_MasterBedroom_Temperature.state as Number) && Thermostat_Camera_Mode.state == "AUTO" || (FF_Bedroom_Heating.state as Number) > (FF_Bedroom_Temperature.state as Number) && Thermostat_Cameretta_Mode.state == "AUTO") ON else OFF
logWarn("mylog","newstate 3")
}
//if(FF_Boiler_Stato.state != newState) FF_Boiler_Stato.sendCommand(newState)
FF_Boiler_Stato.sendCommand(newState)
logWarn("mylog","newstate send")
type: script.ScriptAction