Ankündigung

Einklappen
Keine Ankündigung bisher.

Bedingung erfüllt dann Text Ausgabe in der UI

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

    Bedingung erfüllt dann Text Ausgabe in der UI

    Hallo,

    meine Thermostate an der Heizung geben mir eine Information ob diese im Automatikmodus laufen. Diese Information frage ich mit einen Switch item ab. Nun möchte ich aber gerne alle Thermostate ausgegeben haben die nicht im Automatikmodus laufen also Switch item= 0. Dazu müsste ich wohl eine Regel erstellen für jedes Thermostat ich habe nur leider keine Idee wie ich dieses am besten machen könnte. Hat einer von euch eine Idee? Es handelt sich hier nur um 4 Thermostate.

    Vielen dank schon mal und Gruß
    Torstem

    #2
    Naja, Du kannst es pragmatisch machen und die visibility der Thermostaten in der UI an den Wert des korrespondierenden Items binden:

    Text Item "Thermostat_1" visibility=[Thermostat_1_Auto==0] //das ist aus dem Kopf, also mit Vorsicht zu genießen, aber grundsätzlich sollte das so gehen

    Und das Ganze für jeden der Thermostaten.

    Oder Du lässt eine Rule laufen. Dazu packst Du alle Items in eine Gruppe (im Beispiel ThermoGruppe).

    Code:
    var String myString=""
    
    rule "autoliste"
    when
        Item ThermoGruppe changed
    then
        myString=""
        ThermoGruppe?.filter(mode | mode == 0).members.forEach(th | myString = myString + th.name + ", ")
        MyItem.postUpdate(myString.left(myString.length()-2))
    end
    ungetestet
    Die Idee ist, dass die Gruppe nach dem gewünschten Wert gefiltert wird. Anschließend wird aus den Namen der Items ein String zusammengebaut (die Items sollten natürlich entsprechende Namen haben), mit Komma getrennt. Zum Abschluss werden die letzten 2 Zeichen abgetrennt und das Ergebnis in das Item geschrieben, welches dann angezeigt wird. Ich bin mit nicht sicher, was passiert, wenn alle Thermostate auf Auto stehen, der String also leer ist. Aber vermutlich wird höchstens eine Warnung auftreten. Notfalls müsste man das noch abfangen, oder sich einen intelligenteren Code ausdenken

    Lösung 1 kommt komplett ohne Rule-File aus, dafür kommt Lösung 2 in der UI mit einer Zeile für die Info aus (wenn die Gruppe nicht zu groß ist...)

    Kommentar


      #3
      Danke für die schnelle Antwort leider bekomme ich in Designer mehrere Fehler angezeigt. Mein Rule-File sieht wie folgt aus:
      Code:
      import org.openhab.core.library.types.*
      import org.openhab.model.script.actions.*
      
      var String myString=""
      
      rule "autoliste"
      when
          Item Heiz_Auto changed
      then
          myString=""
          Heiz_Auto?.filter(mode | mode == 0).members.forEach(th | myString = myString + th.name + ", ")
          auto.postUpdate(myString.left(myString.length()-2))
      end
      Die Fehler sind in der Zeile
      Code:
        Heiz_Auto?.filter(mode | mode == 0).members.forEach(th | myString = myString + th.name + ", ")
      und lauten
      Multiple markers at this line
      - Couldn't resolve reference to JvmIdentifiableElement 'members'.
      - Couldn't resolve reference to JvmIdentifiableElement 'forEach'.
      - There is no context to infer the closure's argument types from.
      Consider typing the arguments or put the closures into a typed
      context.
      - Couldn't resolve reference to JvmIdentifiableElement 'name'.
      - This expression is not allowed in this context, since it doesn't
      cause any side effects.
      - Couldn't resolve reference to JvmIdentifiableElement 'filter'.

      Muss ich hier noch ein weiteren Import machen?

      Hier noch mein Item des Thermostat
      Code:
      Switch wohn_an                 "Automatikmodus Thermostat"         (Heiz_Auto)         {rwe="id=67473781-7fde-4f2c-8cfd-83dd52c26047,param=operationmodeauto"}
      Switch kinder_an             "Automatikmodus Thermostat"         (Heiz_Auto)         {rwe="id=0e78e5d1-c8fc-4f6a-b927-5b172e1d69a3,param=operationmodeauto"}
      Switch kueche_an            "Automatikmodus Thermostat"            (Heiz_Auto)            {rwe="id=de073da5-8f75-4abc-b76b-bc4355b69d50,param=operationmodeauto"}
      und das String für die Ausgabe
      Code:
      String auto                    "nicht im Atomatikmodus [%s]"                (Heizung)
      und die Ausgabe in der Sitemap
      Code:
      Text item=auto
      Habt ihr da noch eine Idee für mich?

      Gruß
      Torsten
      Zuletzt geändert von toto1975; 06.01.2016, 10:31.

      Kommentar


        #4
        Ein komplett anderer Ansatz (mal so zum überlegen):
        Warum packst du nicht alle Thermostate zusätzlich zu den bereits zugeordneten Gruppen in eine Gruppe "Thermostate"? Wenn du dann in der Oberfläche in diese Gruppe navigierst, siehst du auf einen Blick den Status aller Thermostate.

        Hab jetzt nochmal genau gelesen
        Wenn die drei genannten Thermostate alle sind, sind die ja eh alle schon in derselben Gruppe "Heiz_Auto". Dann brauchst du doch in der Sitemap nur zusätzlich die ganze Gruppe anzeigen lassen und gut ist's.

        Gruß,
        thoern

        Kommentar


          #5
          Die Fehlermeldungen deuten auf einen fehlenden import hin, da ich grade nicht zuhause bin, muss ich Dich leider auf heute abend vertrösten (oder jemand anderes weiß es aus dem Kopf...)

          Kommentar


            #6
            Kein Thema ich kann bis heute Abend warten... :-)

            Kommentar


              #7
              Hmm... ich hab grad nochmal nachgeschaut, bei mir sind da auch nicht mehr imports drin. Hast Du auch die Gruppe definiert?
              im Items-File
              Code:
              Group Heiz_Auto

              Kommentar


                #8
                Ich habe den Fehler gefunden: Da fehlte ein Members

                Code:
                 Heiz_Auto.members.filter(s | s.state == OFF).forEach(th | myString = myString + th.name + ", ")
                Jetzt läuft alles wie gewünscht. Besten Dank

                Gruß
                Torsten

                Kommentar

                Lädt...
                X