Ankündigung

Einklappen
Keine Ankündigung bisher.

ko in openhab negieren

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

    ko in openhab negieren

    Hallo zusammen,
    ich hab mal ne ganz banale Frage...
    wie kann ich ein openhab thing negieren?

    mit mappings komm ich leider nicht weit, da das icon die Funktion direkt darstellt,
    also auf mit Symbol "Fenster auf"

    Code:
            //things
            //-Fensterkontakte    
            Type contact       : HWR_WIN    "Window"               [ ga="1.009:<4/4/1" ]
            Type contact       : WHZ_WIN    "Window"               [ ga="1.009:<4/4/2" ]
            Type contact       : ESZ_WIN    "Window"               [ ga="1.009:<4/4/3" ]


    Code:
           //sitemap
           Text label="Fensterkontakte" icon="Window" {
           Switch        item=HWR_WIN icon="Window" label="HWR" mappings=["CLOSED"="auf", "OPEN"="zu"]
           Text          item=WHZ_WIN
           Text          item=ESZ_WIN
           }


    2019-08-28_18h31_02.jpg


    KNX-seitig soll der Kontakt drahtbruchsicher ausgeführt sein (AUF=1 ZU =1)

    hab ihr evtl einen Ansatz für mich? Oder denk ich zu kompliziert?

    Gruß bbc
    Zuletzt geändert von bbcare; 28.08.2019, 17:54.

    #2
    Hi

    Zitat von bbcare Beitrag anzeigen

    Code:
    //sitemap
    Text label="Fensterkontakte" icon="Window" {
    Switch item=HWR_WIN icon="Window" label="HWR" mappings=["CLOSED"="auf", "OPEN"="zu"]
    Text item=WHZ_WIN
    Text item=ESZ_WIN
    }
    Sollte Closed nicht zu sein??

    Zitat von bbcare Beitrag anzeigen
    KNX-seitig soll der Kontakt drahtbruchsicher ausgeführt sein (AUF=1 ZU =1)
    Das wird schwierig ;-) Wo sollte denn die 0 sein?? Und kannst Du dies dort nicht einfach tauschen??

    Gruß,
    Jörg

    Kommentar


      #3
      aaaah... AUF=0 ZU =1 natürlich...

      mappings=["CLOSED"="auf", "OPEN"="zu"
      hatte das zum testen mal gedreht

      ich bekommen vom Fensterkontakt ein 1 Signal, wenn der Griff geschlossen ist.
      wenn das Fenster geöffnet oder manipuliert wird, fällt das signal auf 0 ab

      Das ist aber leider nicht mit dem Openhab Symbol konform



      Kommentar


        #4
        openHAB sieht dieses Verhalten nicht vor. Du musst das Item (nicht das Thing) negieren. Das geht nur mittels eines Proxy Items. Alternativ kannst Du natürlich auch das Window Icon mit umgedrehten Namen unter einem anderen Namen abspeichern, aber so richtig elegant ist das auch nicht.

        Kommentar


          #5
          Super Danke!!!!

          so. erstmal mit nem Proxy Item gelößt


          Code:
          rule "invert"
          when
              Member of sensors changed
          then
              if (<contactitem>.state == OPEN) {
                  invert<contactitem>.postUpdate(CLOSED)
              }
              else {
                  invert<contactitem>.postUpdate(OPEN)
              }
          end

          Items:
          Code:
          Contact   <contactitem>         "Fenster [%s]"   <window>  (sensors)  { channel="knx:device:bridge:generic:<contactitem>" }
          Contact   invert<contactitem>   "Fenster [%s]"   <window>  (sensors)
          Things:
          Code:
          Type contact       : <contactitem>          "Window"            [ ga="1.019:<.../.../...." ]
          Type contact       : invert<contactitem>    "Window"
          Zuletzt geändert von bbcare; 31.08.2019, 21:10.

          Kommentar


            #6
            Aber vllt kenn ja noch jemand eine elegantere Lösung

            Kommentar


              #7
              Na ja, so ungefähr. Schau mal:
              Beispielitems:
              Code:
              Group:Contact gInput
              Group:Contact gOutput
              Contact In_Item01 "Input 01[%s]" (gInput) {...}
              Contact In_Item02 "Input 02[%s]" (gInput) {...}
              Contact In_Item03 "Input 03[%s]" (gInput) {...}
              Contact In_Item04 "Input 04[%s]" (gInput) {...}
              Contact Out_Item01 "Output 01[%s]" (gOutput)
              Contact Out_Item02 "Output 02[%s]" (gOutput)
              Contact Out_Item03 "Output 03[%s]" (gOutput)
              Contact Out_Item04 "Output 04[%s]" (gOutput)
              Rule:
              Code:
              rule "invert contact"
              when
                  Member of gInput changed
              then
                  gOutput.members.filter[ i | i.name.contains(triggeringItem.name.split("_").get(1)) ].head.postUpdate(if(triggeringItem.state == CLOSED) OPEN else CLOSED)
              end
              Ich teile die Zeile mal auf:
              Code:
              rule "invert contact"
              when
                  Member of gInput changed           // ein Member der Gruppe gInput hat seinen Status geändert
              then
                  gOutput.members.                   // nimm die Member der Gruppe gOutput
                  filter[ i |                        // suche daraus die Items, für die gilt
                  i.name.                            // der Name des Items
                  contains(triggeringItem.           // enthält vom auslösenden Item
                  name.                              // aus dessen Namen
                  split("_").                        // einen der Teilstrings, die entstehen, wenn man am Unterstrich den Namen auftrennt
                  get(1)) ].                         // und zwar den 2. Teilstring
                  head.                              // nimm aus der entstehenden Liste das erste Item
                  postUpdate(                        // und setze dessen Status
                  if(triggeringItem.state == CLOSED) // falls das auslösende Item den Status CLOSED hat,
                  OPEN                               // setze OPEN,
                  else                               // ansonsten
                  CLOSED)                            // CLOSED
              end
              Die Rule sollte exakt so funktionieren (allerdings hab ich bestimmt irgendwo einen Tippfehler drin...)
              Es ist dabei egal, wie die Items heißen, solange der 2. Teilstring alle Items eindeutig unterscheidet und in beiden Gruppen jeweils exakt ein Item zu einem der anderen Gruppe passt (die Items könnten auch ein_verrücktesItem und einAnderes_verrücktesItem heißen, das wäre genauso ein gültiges Paar. Die Idee ist einfach, in beiden Gruppen die Items über den Teilstring eindeutig identifizieren zu können, dann kann die Rule mit minimalem Aufwand alle Items abfrühstücken.
              Zuletzt geändert von udo1toni; 31.08.2019, 21:58.

              Kommentar


                #8
                das sieht verdammt gut aus. werde ich am Wochenende mal in Angriff nehmen.
                Danke!

                Kommentar

                Lädt...
                X