Ankündigung

Einklappen
Keine Ankündigung bisher.

Status merken

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

    Status merken

    Hallo,

    ich möchte mir vor dem Ausführen einer Lichtszene (Licht, Rollo, etc.) die Status diverser Items merken.
    Beispiel: Ich löse die Szene "Fernsehen" aus und fahre dabei Rollos runter und Lichter hoch. Das ganze passiert per Fernbedienung. Wenn ich nun per Fernbedienung meinen Fernseher wieder ausschalte, möchte ich den Zustand vor der TV-Szene anfahren (Rollos wieder hoch, außer diese waren vor der Szene bereits unten, etc.).
    Dafür scheint ja folgendes Feature geeignet:
    • Map<Item, State> storeStates(Item... items): Stores the current state of a list of items in a map which can be assigned to a variable. Group items are not themselves put into the map, but instead all their members.
    • restoreStates(Map<Item, State> statesMap): Restores item states from a map. If the saved state can be interpreted as a command, a command is sent for the item (and the physical device can send a status update if occurred). If it is no valid command, the item state is directly updated to the saved value.

    Nur leider verstehe ich die Anwendung dessen nicht ganz. Kann mir vielleicht einer ein Beispiel dazu zeigen. Beispiele sagen oft mehr als viel Worte ;-)
    Danke!

    #2
    Hat keiner einen Tipp?
    Ich komme hier leider nicht weiter :-(

    Kommentar


      #3
      Hi,

      hier gibt es doch ein Beispiel: Timer mit Rücksetzen zum letzten Wert

      Hilft dir das weiter?

      Gruß Björn

      Kommentar


        #4
        Hi Björn,

        danke für den Tipp. In dem gleichen Threat habe ich auch meine Frage gestellt ;-)
        Mein Problem ist, dass ich den restore nicht in der gleichen Rule machen kann, sondern erst viel später. Ich weiß nicht, wie ich den store "global" machen kann.

        Viele Grüße
        Michael

        Kommentar


          #5
          Vielleicht nochmal anders formuliert:
          ich möchte zu einem Ereignis den Status von ein paar Items speichern und ggf. Stunden später zu einem anderen Ereignis sollen die gespeicherten Items restored werden.
          Kann mir da bitte wer weiterhelfen?

          Vielen Dank!

          Kommentar


            #6
            Was spricht den dagegen die Variable storedStates aus dem verlinkten Beispiel global innerhalb der Regeldatei und nicht in der Regel zu definieren? Dann kann aus allen regeln der Datei darauf zugegriffen werden.

            Ich habe nur im Kopf, dass es noch einen Bug gibt, so dass Variablen auch in unterschiedlichen Dateien nicht den gleichen Namen haben sollten. Aber bdas ist ja kein Problem.

            Kommentar


              #7
              Wie mache ich eine Variable global?

              Folgendes möchte ich gerne umsetzen:
              Code:
              rule "Fritzbox Incoming Call"
              when
                  Item Incoming_Call changed
              then
                  if (Incoming_Call.state==ON) {
                      logInfo("Fritzbox rules", "Squeezebox Volume reduzieren")
              [B] [I]       val states = storeStates(sq_wohnen_volume, sq_schlafen_volume)[/I][/B]
                      sendCommand(sq_wohnen_volume, 20)
                      sendCommand(sq_schlafen_volume, 20)
                  } else {
                      logInfo("Fritzbox rules", "Squeezebox Volume wieder normal")
              [B] [I]       restoreStates(states)[/I][/B]
                  }
              end
              Wie muss diese rule-Datei angepasst werden, damit die Variable states global wird. Die states sollen gesetzt werden, wenn ein Anruf reinkommt und wieder restored werden, wenn der Anruf beendet ist.
              sq_xxx_volume entspricht dem Volume (Lautstärke) meiner Squeezeboxen.

              Danke und viele Grüße
              Michael

              Kommentar


                #8
                Abschnitte "Variable Declarations" in https://github.com/openhab/openhab/wiki/Rules

                Kommentar


                  #9
                  Zitat von Jockel Beitrag anzeigen
                  Abschnitte "Variable Declarations" in https://github.com/openhab/openhab/wiki/Rules
                  Hi,
                  daran hatte ich mir schon die Zähnen ausgebissen. Ich komme damit leider auch nicht weiter. Eine Variante, die nicht funktioniert wäre diese:
                  Code:
                  var states
                  
                  rule "Fritzbox Incoming Call"
                  when
                      Item Incoming_Call changed
                  then
                      if (Incoming_Call.state==ON) {
                          logInfo("Fritzbox rules", "Squeezebox Volume reduzieren")
                          states = storeStates(sq_wohnen_volume, sq_schlafen_volume)
                          sendCommand(sq_wohnen_volume, 20)
                          sendCommand(sq_schlafen_volume, 20)
                      } else {
                          logInfo("Fritzbox rules", "Squeezebox Volume wieder normal")
                          restoreStates(states)
                      }
                  end
                  Ich habe leider keine Ahnung, wie in Java Variablen gecastet oder deklariert werden. Ein Experte sieht vermutlich auf den ersten Blick den Fehler ...

                  Kommentar


                    #10
                    Servus Staehler!

                    ich glaube, wenn du die Variable nicht initialisierst, dann musst du zumindest den Typ mitgeben.

                    var states
                    ist also kein gültiger Ausdruck

                    Gültig wären z.B.:

                    var states = 0
                    oder
                    var states = "humblpfrumpf"
                    oder
                    var Number states

                    beim letzen Bsp. erfolgt keine Initialisierung, deshalb muss der Typ "Number" angegeben werden.

                    Im übrigen ist der Code in den Rules kein Java - auch wenn du dir das wünschen würdest

                    Gruß,
                    Thomas

                    Kommentar


                      #11
                      Servus Thomas,

                      dann stellt sich die Frage, was für einen Typ Variable muss ich definieren. Ist das ein Array, ein Zeiger auf ein Array, es sind ja mehrere States, die dort abgelegt werden können.
                      Auch wenn es kein Java ist, hat es doch irgendwas damit zu tun, oder? "Xtent - Moedernized Java" klingt zumindest danach ;-)

                      Trotzdem habe ich weder mit dem einen noch dem anderen Erfahrung und weiß nicht weiter. Ich hatte die Hoffnung, dass mir einer mühsame Probierarbeit oder Doku-Recherche erspart und den entscheidenden Tip geben kann.

                      Viele Grüße
                      Staehler

                      Kommentar


                        #12
                        Probier es im Kopf der Regel mal mit

                        Code:
                        import java.lang.Map.*
                        
                        var Map states = null
                        Aber ohne Garantie, habe ich nicht getestet

                        Kommentar

                        Lädt...
                        X