Ankündigung

Einklappen
Keine Ankündigung bisher.

Status des Garagentor mit Button in einer Zeile darstellen

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

    Status des Garagentor mit Button in einer Zeile darstellen

    Hallo zusammen,

    ich möchte gerne den Status des Garagentors mit einem Icon darstellen. Dabei ist mir nur wichtig, ob das Tor zu ist, auf ist oder gerade fährt. Aktuell habe ich das so realisiert. Leider habe ich dann aber immer eine zweizeilige Darstellung.

    mygarage.items
    String sGaragedoorState
    Switch swGarageGate "Garagentor" <garagedoor> { http=">[ON:POST:http://10.7.3.56/garagedoor?params=ON] >[OFF:POST:http://10.7.3.56/garagedoor?params=OFF]", autoupdate="false"}


    sitemap
    Switch item=swGarageGate mappings=[ON="Auf:Zu:Stopp"] icon="garagedoor" label="Garagentor [MAP(garagedoorswitch.map):%s]"
    Text item=sGaragedoorState icon="garagedoor" label="Garagentor [MAP(garagedoor.map):%s]"


    garagedoor.map
    open=offen
    closed=geschlossen
    ajar=fährt
    -=unknown


    Das Ergebnis sieht dann so aus
    Bildschirmfoto vom 2015-04-27 22:15:16.png

    Über eine Rule wird sGaragedoorState geändert wenn sich der Status des Garagentors ändert. Dann ändert sich auch die Anzeige.

    Ich hätte das jetzt gerne in einer Zeile mit dem Button. Hat dazu jemand eine Idee?

    Vielen Dank für Eure Unterstützung

    Gruß
    symar

    #2
    Hi symar,

    hätte ich auch gerne. Aber geht wohl nicht. Bei mir siehts so aus:
    Bildschirmfoto 2015-04-30 um 14.04.04.png

    Ich glaube, Rollershutter macht es halbwegs möglich...

    Grüße
    Sascha

    Kommentar


      #3
      Hi Sascha,
      ich habe einen Lösungsansatz. Ich glaube so könnte es funktionieren

      myGarage.rules
      Code:
      import org.openhab.core.library.*
      import org.openhab.model.script.actions.*
      import org.openhab.action.json.*
      import org.openhab.core.transform.*
      
      val org.eclipse.xtext.xbase.lib.Functions$Function1 GarageAction = [
          String sCommand |
              var String sJsonReturn
              var String sGarageOpen
              var String sGarageClose
              
              if (sCommand=="GARAGE" ) {
                    sJsonReturn = sendHttpGetRequest("http://10.7.3.56/digital/9")
                    sGarageOpen = transform("JSONPATH","$.return_value",sJsonReturn)
                    logInfo("runtime.busevents",sGarageOpen)
                    
                    sJsonReturn = sendHttpGetRequest("http://10.7.3.56/digital/7")
                    sGarageClose = transform("JSONPATH","$.return_value",sJsonReturn)
                    logInfo("runtime.busevents",sGarageClose)
      
                    
                    if (sGarageOpen != sGarageClose){
                        logInfo("runtime.busevents","sGarageOpen != sGarageClose")
                        if (sGarageOpen == "0"){
                            sGaragedoorState.postUpdate("open")
                        }
                        if (sGarageClose == "0"){
                            sGaragedoorState.postUpdate("closed")
                        }
                        
                    } else {
                        if (sGarageOpen == "1" && sGarageClose == "1") {
                            sGaragedoorState.postUpdate("ajar")  
                        } else {
                            sGaragedoorState.postUpdate("-")     
                        }
                    }
      
              }
      ]
      
      val org.eclipse.xtext.xbase.lib.Functions$Function1 SwitchAction = [
          String sCommand |
          if (sCommand=="ON"){
                swGarageGate.sendCommand("ON");
             } else {
                 swGarageGate.sendCommand("OFF");
             }
      ]
      
      rule "GARAGESTATUS"
          when Item sStatuscheckGarage received command then
              GarageAction.apply(receivedCommand)
      end
      
      rule "DriveGaragedoor"
        when Item sGaragedoorState received command then
                SwitchAction.apply(receivedCommand)    
      end
      myGarage.items
      Code:
      String sStatuscheckGarage
      String sGaragedoorState
      
      Switch swGarageGate              "Garagentor"                        <garagedoor>    { http=">[ON:POST:http://10.7.3.56/garagedoor?params=ON] >[OFF:POST:http://10.7.3.56/garagedoor?params=OFF]", autoupdate="false"}
      garagedoor.map
      Code:
      open=auf
      closed=zu
      ajar=fährt
      -=unbekannt
      ON=fährt
      default.sitemap
      Code:
      sitemap demo label="Menu" {
          Frame label="Garage" {
              Switch item=sGaragedoorState mappings=[ON="Auf:Zu:Stopp"] icon="garagedoor" label="Garagentor  [MAP(garagedoor.map):%s]"
          }
      }
      Garage1.png

      Garage2.png

      Garage3.png

      Gruß
      Symar

      Kommentar


        #4
        Hei symar, extrem cool! wenn ich den Code richtig verstanden habe, definierst Du da zwei Funktionen. Dazu hätte ich ein zwei Fragen
        1. Kann man da auch mehr als einen Parameter übergeben, und wäre es evtl. darüber möglich, eine "allgemeine" Rule zu schreiben, die dann für verschiedene gleichartige Items verwendet werden kann? Also insbesondere, wenn ich z.B. die Funktion mehrfach gleichzeitig mit verschiedenen PArametern aufriefe, kämen sich die verschiedenen Instanzen in die Quere?
        2. In Deinem Code kann ich auf den ersten Blick nicht erkennen, warum Du den Code überhaupt in eine Funktion ausgelagert hast.

        Kommentar


          #5
          Hallo Sascha,

          der Code muss nicht ausgelagert werden. Ich mache das immer so, um die Rules besser im Überblick zu haben. Ist aber reine Geschmacksache.

          Du kannst in den Lamdaausdrücken auch mehr als einen Parameter übergeben. Die Anzahl wird über $Function1 bestimmt. Bei $Function2 hast du zwei Übergabeparameter usw. Die Lamdafunktion können mehrfach aufgerufen werden. Das funktioniert ohne Probleme. Was ich noch nicht geschafft habe ist, die Lamdas in ein zentrales Rule zu packen und von anderen Rules darauf zuzugreifen.

          Gruß
          Symar

          Kommentar


            #6
            Du kannst das Lambda ausserhalb der Rule definieren und dann von anderen Rules drauf zugreifen.
            Holger

            Kommentar


              #7
              Zitat von symar Beitrag anzeigen
              Du kannst in den Lamdaausdrücken auch mehr als einen Parameter übergeben. Die Anzahl wird über $Function1 bestimmt. Bei $Function2 hast du zwei Übergabeparameter usw. Die Lamdafunktion können mehrfach aufgerufen werden. Das funktioniert ohne Probleme.
              Cool!
              Was ich noch nicht geschafft habe ist, die Lamdas in ein zentrales Rule zu packen und von anderen Rules darauf zuzugreifen.
              Du meinst dateiübergreifend? Das geht mit ziemlicher Sicherheit nicht, die einzelnen Dateien werden voneinander abgeschottet.

              Kommentar

              Lädt...
              X