Ankündigung

Einklappen
Keine Ankündigung bisher.

State in Regel speichern und wiederherstellen

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

    State in Regel speichern und wiederherstellen

    Hallo liebe Community,

    ich stehe mal wieder auf dem Schlauch und was ich im Netz finde, bringt nicht nicht ganz ans Ziel.
    Ich habe eine Bewässerungsanlage gebaut und möchte die Farbe meiner LED Strips während des Betriebs auf blau wechseln. Sobald das Bewässerungsprogramm fertig ist, soll die ursprüngliche Farbe wieder eingestellt werden. Leider will meine Regel nicht so ganz wie ich es gerne hätte. Vielleicht habt ihr eine Idee:

    Code:
    rule "Beregnung Hue Rückmeldung"
    when
    Item Beregnung received update
    then
    if(Beregnung.state == ON)
    {
    val storedStates = storeStates(Farbenspiel)
    Farbenspiel.sendCommand("blau")
    }
    if(Beregnung.state == OFF)
    {
    restoreStates(storedStates)
    }
    end
    Viele Grüße
    Patrick

    #2
    Hallo Patrick,

    benutze doch ein Item Farbenspiel_stored und speichere da den Wert zwischen.
    Hat außerdem den Vorteil dass Du es persistieren kannst und es auch einen Neustart Deines Systems während der Bewässerung überlebt.

    Viele Grüße,
    Andreas

    Kommentar


      #3
      Guten Morgen Andreas,

      vielen Dank für deinen Ansatz. Neues Item anlegen und Wert persistieren bekomme ich hin. Aber wie ich den Wert vor Änderung durch die Regel zwischenspeichern und wiederherstellen kann, habe ich noch nicht raus. Hast du ein Beispiel für mich?

      Viele Grüße
      Patrick

      Kommentar


        #4
        Es sollte reichen, Farbenspiel zu persistieren. In der Rule läuft es dann so:
        Code:
        rule "Beregnung Hue Rückmeldung"
        when
            Item Beregnung changed
        then
            if(Beregnung.state == ON)
                Farbenspiel.sendCommand("blau")
            else
                Farbenspiel.sendCommand(Farbenspiel.previousState(true).state)
        end
        Das true sorgt dafür, dass der letzte Wert ungleich dem aktuellen gesetzt wird. Wenn es also auch möglich ist, dass die Farbe blau schon ausgewählt war, bevor die Beregnung startet, muss statt true false (oder garnix) gesetzt werden.
        Damit wird natürlich nicht verhindert, dass während der Beregnung die Farbe manuell geändert wird. Darüber müsste man natürlich nochmal nachdenken.

        Kommentar


          #5
          Super, vielen Dank. Genau das brauche ich. Werde ich direkt testen.

          Kommentar


            #6
            VS Code gibt mir folgenden Fehler für diese Zeile aus:

            Farbenspiel.sendCommand(Farbenspiel.previousState( false).state)

            "Type mismatch: cannot convert from State to String"

            Wie bekomme ich das gelöst?

            Kommentar


              #7
              Ja, das kommt ab und zu vor... das Einfachste ist dann, die Methode zu nutzen, die schon eingebaut ist:
              Code:
              Farbenspiel.sendCommand(Farbenspiel.previousState(true).state.toString)
              Es könnte natürlich noch passieren, dass kein gültiger Status hinterlegt wurde. Dann schlägt auch dieser Aufruf fehl. (NULL kann nicht zu einem String konvertiert werden, auch nicht durch die eingebaute Methode.) Allerdings sollte das höchstens bei der ersten Inbetriebnahme passieren, später aber nicht mehr, da die Persistenz ja weiterhin besteht. Durch die Persistenz könnte man auch ein restoreOnStartup vornehmen.
              Zuletzt geändert von udo1toni; 16.04.2018, 01:51.

              Kommentar

              Lädt...
              X