Convert old rules to OH3 GUI

Hi all

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

Unless your paste has gone wrong, there’s a closing curly brace } without an opening partner {.

If you uncomment the logWarn()s helpfully placed in your code, you might get a better idea of where it gets to.

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")

That’s a weird and very long error message.

Lokk at your rule in the GUI and use the code tab to view its structure. May we see that?

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

Looks odd. Think you may have picked up some control character in copy-paste. Trying typing in a simple rule script section directly in the GUI

the problem was here, a parenthesis is missing

newState = if((FF_Boiler_Heating.state as Number) > (FF_FamilyRoom_Temperature.state as Number) ON else OFF

thanks for your time