System Start Level changed

Is there a way of using System Start Level with an implicite variable like we do with newState?
Something like this:

when
   SystemStartLevel changed
then
   switch newState {
      case 40:
      case 60:
      case 80:
      case 100:
  }

some times ago i realized it with an item:

Number		StartLevel 							"Start Level"

and this rule:

rule StartLevel40
when
	System reached start level 40
then
	logWarn("StartLevel40", "Rule for Event <System reached start level 40> started")
	StartLevel.postUpdate(40)
end

rule StartLevel50
when
	System reached start level 50
then
	logWarn("StartLevel50", "Rule for Event <System reached start level 50> started")
	if (StartLevel.state < 50)	{ StartLevel.postUpdate(50) }
	else { logWarn("StartLevel50", "StartLevel decreased from " + StartLevel.state + " to 50") }
end

rule StartLevel70
when
	System reached start level 70
then
	logWarn("StartLevel70", "Rule for Event <System reached start level 70> started")
	if (StartLevel.state < 70)	{ StartLevel.postUpdate(70) }
	else { logWarn("StartLevel70", "StartLevel decreased from " + StartLevel.state + " to 70") }
end

rule StartLevel80
when
	System reached start level 80
then
	logWarn("StartLevel80", "Rule for Event <System reached start level 80> started")
	if (StartLevel.state < 80)	{ StartLevel.postUpdate(80) }
	else { logWarn("StartLevel80", "StartLevel decreased from " + StartLevel.state + " to 80") }
end

rule StartLevel100
when
	System reached start level 100
then
	logWarn("StartLevel100", "Rule for Event <System reached start level 100> started")
	if (StartLevel.state < 100)	{ StartLevel.postUpdate(100) }
	else { logWarn("StartLevel100", "StartLevel decreased from " + StartLevel.state + " to 100") }
end

i think there could be more elegant way to do this but for me it worked :slightly_smiling_face:

This is exactly how I do it today and I am looking for a more elegant way so that I can manage all my System Start actions in one rule :slight_smile:

Just for completeness, actually there IS an implicit variable available, guess who :slight_smile: ,

startlevel

so that you can manage your startup from one rule

configuration: {}
triggers:
  - id: "1"
    configuration:
      startlevel: 20
    type: core.SystemStartlevelTrigger
  - id: "2"
    configuration:
      startlevel: 40
    type: core.SystemStartlevelTrigger
  - id: "3"
    configuration:
      startlevel: 50
    type: core.SystemStartlevelTrigger
  - id: "4"
    configuration:
      startlevel: 70
    type: core.SystemStartlevelTrigger
  - id: "5"
    configuration:
      startlevel: 80
    type: core.SystemStartlevelTrigger
  - id: "6"
    configuration:
      startlevel: 100
    type: core.SystemStartlevelTrigger
conditions: []
actions:
  - inputs: {}
    id: "7"
    configuration:
      type: application/javascript
      script: |-
        var strLevel = "";
        switch (startlevel.toString()) {
          case '20':
            strLevel = "(System Started)";
            break;
          case '40':
            strLevel = "(Rules are loaded)";
            break;
          case '50':
            strLevel = "(Rules Engine active)";
            break;
          case '70':
            strLevel = "(UI is active)";
            break;
          case '80':
            strLevel = "(All things initialized)";
            break;
          case '100':
            strLevel = "(Startup complete)";
        } 
        console.log("System Start Level:",startlevel.toString(),strLevel);
        items.vStartLevel.postUpdate(startlevel);
    type: script.ScriptAction

1 Like