Ankündigung

Einklappen
Keine Ankündigung bisher.

CallScript mit dynamischem ScriptNamen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    CallScript mit dynamischem ScriptNamen

    Hallo,

    ich will basierend auf einem Wert ein Script aufrufen - mit folgendem Regelauszug:

    if(receivedCommand==ON) {
    if(Nachlauf==null) {
    // first ON command, so create a timer to turn the heating off again after 3 hrs
    var Number FanPrev = FanStatus.state as DecimalType
    //FanStatus.state gibt eine ganze Zahl zw. 1 und 8 zurück
    var ScriptName = ("Fan" + FanStatus.state)
    //GenratedScriptName soll dann so aussehen: Fan1 ... Fan8
    callScript("Fan8")
    Nachlauf = createTimer(now.plusSeconds(120)) [|
    callScript(ScriptName)
    ]
    }

    Fehlermeldung im Designer:
    Multiple markers at this line
    - Cannot refer to a non-final variable ScriptName from
    within a closure
    - Unhandled exception type org.openhab.core.scriptengine.ScriptExecutionExcep tion

    Irgendeine Idee/ Weg da durch?

    Danke
    Karsten

    #2
    Ungetestet:

    if (FanPrev == 1) {
    callScript("Fan1")
    } else if (FanPrev == 2) {
    callScript("Fan2")
    } else if ....

    oder die switch-Anweisung verwenden

    Kommentar


      #3
      ok, aber automatisch generiert geht nicht? das wäre eigentlich nicht dumm

      ich wollte die vielen "ifs" vermeiden - da wird die Regeldatei so gross.

      cheers
      Karsten

      Kommentar


        #4
        hi,

        was du meinst ist so etwas wie ein "eval". Keine Ahnung, ob es so einen Mechanismus in Xtend gibt....

        Gruß

        Kommentar


          #5
          ok, hab mal deinen "unreinen" code eingefügt:

          rule "timertest"
          when
          Item Light_DG_Studio_Wall_left received command ON
          then
          // if(receivedCommand==ON) {
          if(Nachlauf==null) {
          // first ON command, so create a timer to turn the heating off again after 3 hrs
          if(kwlOnOff==ON){
          FanPrev = FanStatus.state as DecimalType
          //var ScriptName = ("Fan" + FanStatus.state)
          callScript("Fan8")
          Nachlauf = createTimer(now.plusSeconds(120)) [|
          if (FanPrev == 1) { callScript("Fan1") }
          else if (FanPrev == 2) { callScript("Fan2") }
          else if (FanPrev == 3) { callScript("Fan3") }
          else if (FanPrev == 4) { callScript("Fan4") }
          else if (FanPrev == 5) { callScript("Fan5") }
          else if (FanPrev == 6) { callScript("Fan6") }
          else if (FanPrev == 7) { callScript("Fan7") }
          else if (FanPrev == 8) { callScript("Fan8") }
          ]
          }
          if(kwlOnOff==OFF){
          sendCommand(Light_DG_Studio_Gright, ON)
          //sendCommand(kwlFan, 100)
          Nachlauf = createTimer(now.plusSeconds(120)) [|
          sendCommand(Light_DG_Studio_Gright, OFF)
          ]
          }
          } else {
          // subsequent ON command, so reschedule the existing timer
          Nachlauf.reschedule(now.plusSeconds(120))
          }
          // }
          end


          Folgende Fehlrmeldung bekomme ich dann im designer:
          Unhandled exception type org.openhab.core.scriptengine.ScriptExecutionExcep tion

          Kommentar


            #6
            Hi

            fast selber gelöst - aber es scheint das in einer Timer Section kein Scripts aufgerufen werden können - auch nicht in einer if/ else if section. Habe mir mit einem Umweg über "hilfs-switche" geholfen und die triggern dann den script aufruf über eine weitere regel. ist zwar nicht elegant - aber scheint zu funktionieren.

            Grüsse
            Karsten

            Kommentar

            Lädt...
            X