Ankündigung

Einklappen
Keine Ankündigung bisher.

Fensterkontakte inkl. gekippt (Logik)

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

    Fensterkontakte inkl. gekippt (Logik)

    Hallo,

    ich habe je Fenster zwei Items:
    -Geschlossen
    -Gekippt

    Daraus möchte ich einen Status (0-2) machen, mit dieser Matrix:
    gekippt____ 0 0 1
    geschlossen 0 1 0
    status_____ 0 1 2

    Jetzt könnte man das sicher mit einer Logik machen, aber ein Eval reicht sicher.

    Hier ein Auszug aus der Item.conf (der Pfad zum Fenster ist eigentlich länger, für die Lesbarkeit habe ich es etwas gekürzt)
    Code:
    [eg]
    [[Fenster_rechts]]
        [[[gekippt]]]
            type = num
            knx_dpt = 1
            knx_cache = 8/1/5
            sqlite = true
        [[[geschlossen]]]
            type = num
            knx_dpt = 1
            knx_cache = 8/1/4
            sqlite = true
        [[[status]]]
            type = num
            sqlite = true
    Jetzt habe ich folgende Ideen
    Idee 1)
    Dem "gekippt" würde ich jetzt einen eval=value*2. Aber was wäre der eval_trigger (soll immer getriggert werden, wenn sich das Item selbst ändert)? Funktioniert eval_trigger=self?
    Dem "status" würde ich ein eval=sum geben. Geht als eval_trigger ein "self.return_parent().geschlossen|self.return_pare nt().gekippt"?

    Idee 2)
    Dem "status" würde ich ein eval=self.return_parent().geschlossen+2*self.retur n_parent().gekippt geben.
    Da bleibt obige Frage zum eval_trigger.
    Spricht etwas FÜR Idee 1?

    Idee 3) (edit:geht nicht)
    Dem "gekippt" würde ich jetzt einen eval=value*2. Frage zum Trigger wie oben
    Das Summieren macht die SmartVisu (basic.symbol mit mehreren GAs; Edit: Hier wird aber ein logisches 'and' gemacht, und keine Summe gebildet. Geht also nicht.)

    Welche Variante würdet ihr wählen?


    Edit: Man schreibt es auf und dann erinnert man sich.
    Haben wir hier schonmal diskutiert. Robert hatte einen Patch dafür geschrieben:
    https://knx-user-forum.de/344599-post11.html
    @Marcus: Spricht etwas dagegen, den einzubauen? Die Wildcards wären sehr praktisch.

    Gruß,
    Hendrik

    #2
    Guten Morgen

    Zuerst mal: Was willst du denn am Ende erreichen, sprich, was willst du mit der "Matrix" tun? Ich vermute du willst den korrekten Zustand des Fensters in der Visu anzeigen lassen. Also Status 0 bedeutet "Fenster ist geschlossen", Status 1 bedeutet "Fenster ist geöffnet" und 2 gleich "Fenster gekippt"? Geht es nur um die einzelnen Fenster oder auch um einen "Gesamtstatus" (min. ein Fenster ist NICHT geschlossen o.ä.)?

    Ich schätze du hast simple Reed Kontakte in den Fensterflügeln? Ist dann immer nur ein Kontakt offen?
    Ich habe den Verdacht dass du da völlig ohne eval oder Logik auskommen kannst.

    Und bei der Itemdefinition bist du dir sicher? Ein type = num aber knx_dpt = 1 bei geschlossen und gekippt?

    Gruß, Martin

    Kommentar


      #3
      Hallo,

      Zitat von Sipple Beitrag anzeigen
      Zuerst mal: Was willst du denn am Ende erreichen, sprich, was willst du mit der "Matrix" tun? Ich vermute du willst den korrekten Zustand des Fensters in der Visu anzeigen lassen. Also Status 0 bedeutet "Fenster ist geschlossen", Status 1 bedeutet "Fenster ist geöffnet" und 2 gleich "Fenster gekippt"?
      Ja genau.

      Geht es nur um die einzelnen Fenster oder auch um einen "Gesamtstatus" (min. ein Fenster ist NICHT geschlossen o.ä.)?
      Gesamtstatus ist mir auch wichtig. Das wäre der nächste Schritt.

      Ich schätze du hast simple Reed Kontakte in den Fensterflügeln? Ist dann immer nur ein Kontakt offen?
      Ja, genau.
      Ich habe den Verdacht dass du da völlig ohne eval oder Logik auskommen kannst.
      Ah, du meinst sowas:
      Code:
         	{{ basic.symbol('og.Schlafzimmer.Fensterstatus2', 'og.Schlafzimmer.Reed.Fenster.geschlossen', 'Fenster', icon0~'fts_window_1w.svg', 0) }}
         {{ basic.symbol('og.Schlafzimmer.Fensterstatus3', 'og.Schlafzimmer.Reed.Fenster.geschlossen', 'Fenster', icon1~'fts_window_1w_open.png', 1) }}
         {{ basic.symbol('og.Schlafzimmer.Fensterstatus4', 'og.Schlafzimmer.Reed.Fenster.gekippt', 'Fenster', icon1~'fts_window_1w_tilt.png', 1) }}
      Ich hatte zunächst an basic.slider gedacht. Die Option mit basic.symbol hatte ich nicht erwogen.


      Und bei der Itemdefinition bist du dir sicher? Ein type = num aber knx_dpt = 1 bei geschlossen und gekippt?
      Ok, bool würde wohl reichen :-)

      Gruß,
      Hendrik

      Kommentar


        #4
        Ja, genau so.

        Und für den Gesamtstatus dann sowas in der Art:

        Code:
                        {{ basic.symbol('OV_Fenster_Offen_Menu', ['Schlafzimmer.Fenster.Zustand_1', 'Galerie.Fenster.Zustand_1', 
                        'Galerie.Dachfenster.Zustand', 'Badezimmer.Dachfenster.Zustand', 'Gaestezimmer.Dachfenster.Zustand', 
                        'Wohnzimmer.Terrassentuer.Zustand_1', 'Wohnzimmer.Fenster_Mitte_Rechts.Zustand_1', 'Wohnzimmer.Fenster_Mitte_Links.Zustand_1', 
                        'Wohnzimmer.Fenster_Links_Rechts.Zustand_1', 'Wohnzimmer.Fenster_Links_Links.Zustand_1', 'Kueche.Fenster.Zustand_1', 
                        'WC.Fenster.Zustand_1', 'Hobbyraum.Fenster.Zustand_1', 'Technikraum.Fenster.Zustand_1', 'Waschhaus.Fenster.Zustand_1', 'Flur.Haustuer.Zustand'], 
                        '', './icons/rd/fts_window_1w_open.png', 1) }}
        Bei dir musst du leider für jedes Fenster zwei Items verwenden. Wenn "alles zu" nicht interessiert, brauchst nur ein basic_symbol. Ansonsten ein zweites mit ...., 0, 'and').... am Ende

        Gruß, Martin

        Kommentar


          #5
          Super, danke, so mache ich es.

          Trotzdem: Für den Lerneffekt: Wie hätte man es sonst gemacht? Was ist mit dem Patch?

          Gruß,
          Hendrik

          Kommentar


            #6
            Funktioniert so doch nicht :-(

            Wenn das Fenster gekippt ist, werden zwei Symbole angezeigt, das für offen und für gekippt, denn die GA von geschlossen ist ja 0 und die von gekippt ist 1.

            Code:
            	{{ basic.symbol('og.Schlafzimmer.Fensterstatus2', 'og.Schlafzimmer.Reed.Fenster.geschlossen', 'Fenster', icon0~'fts_window_1w.svg', 1) }}
               {{ basic.symbol('og.Schlafzimmer.Fensterstatus3', 'og.Schlafzimmer.Reed.Fenster.geschlossen', 'Fenster', icon1~'fts_window_1w_open.png', 0) }}
               {{ basic.symbol('og.Schlafzimmer.Fensterstatus4', 'og.Schlafzimmer.Reed.Fenster.gekippt', 'Fenster', icon1~'fts_window_1w_tilt.png', 1) }}
            Bei der zweiten Zeile bräuchte man eine Prüfung "... und nicht gekippt".

            Bleiben also nur meine o.g. Varianten über ein weiteres Objekt?

            Gruß,
            Hendrik

            Kommentar


              #7
              Doch, das geht:

              Code:
              {{ basic.symbol('og.Schlafzimmer.Fensterstatus-Geschlossen', ['og.Schlafzimmer.Reed.Fenster.geschlossen', 'og.Schlafzimmer.Reed.Fenster.gekippt'] , 'Fenster', icon0~'fts_window_1w.[URL="http://redaktion.knx-user-forum.de/lexikon/svg/"]svg[/URL]', 0, 'and') }}    
              
              {{ basic.symbol('og.Schlafzimmer.Fensterstatus-Offen', 'og.Schlafzimmer.Reed.Fenster.geschlossen', 'Fenster', icon1~'fts_window_1w_open.png', 1) }}
              
              {{ basic.symbol('og.Schlafzimmer.Fensterstatus-Gekippt', 'og.Schlafzimmer.Reed.Fenster.gekippt', 'Fenster', icon1~'fts_window_1w_tilt.png', 1) }}
              Ungetestet, aber so sollte es gehn. Hab mal auch die ID's etwas angepasst, dann sieht man es leichter.

              Kommentar


                #8
                Hallo,

                danke für die Idee. Aber da ist noch ein Problem drin:
                Die GA für Geschlossen ist bei Geschlossen 1 und sonst 0 -nicht umgekehrt, wie in deinem Beispiel angenommen.

                Statt "and" bräuchte ich "nand". Dann würde es gehen.
                So geht's aber:
                Code:
                {{ basic.symbol('og.Schlafzimmer.Fensterstatus-Geschlossen', ['og.Schlafzimmer.Reed.Fenster.geschlossen', 'og.Schlafzimmer.Reed.Fenster.gekippt'] , 'Fenster', icon0~'fts_window_1w_open.svg', 0, 'and') }}    
                {{ basic.symbol('og.Schlafzimmer.Fensterstatus-Offen', 'og.Schlafzimmer.Reed.Fenster.geschlossen', 'Fenster', icon1~'fts_window_1w.png', 1) }}
                {{ basic.symbol('og.Schlafzimmer.Fensterstatus-Gekippt', 'og.Schlafzimmer.Reed.Fenster.gekippt', 'Fenster', icon1~'fts_window_1w_tilt.png', 1) }}
                Danke!

                Trotzdem würde ich mich freuen noch etwas über die eval_trigger Fragen zu hören (egal von wem; zum Patch natürlich am liebsten von Marcus :-).

                Jetzt habe ich aber noch eine andere Funktion, für die ich keine Lösung sehe:
                Zweiflügliges Fenster, wobei beide Elemente nur gedreht werden können (nicht gekippt).
                Statii:
                beide zu
                beide auf
                links auf
                rechts auf

                Zugegeben. Spielerei. (die letzten beiden), aber die Information ist da und will dargestellt werden.
                Dafür bräuchte ich eine Verknüpfung bei der die Reihenfolge wichtig ist. Sprich "Fenster links ist auf, aber nicht Fenster rechts"
                Ich wollte mir eigentlich ein XOR hineinpatchen, aber das kann ja nicht unterscheiden, welches Fenster offen ist.

                Ideen?


                Gruß,
                Hendrik

                Kommentar


                  #9
                  Alles was du da machst ist genau das was ich letzte Woche gemacht habe, inkl. der zweiflügligen Fenster, siehe Bild

                  Nur hab ich die Hoppe Griffe und ein Enocean Gatweay, da geht das insgesamt einfacher. Dafür hätte ich die komplette Lösung.

                  In deinem Fall würde ich aber inzwischen umschwenken auf eine klassische Logik, da ist das imho übersichtlicher und schöner zu lösen. Ich habe auch erst auf Biegen und Brechen versucht alles über eval/eval_trigger zu machen und bin dann davon wieder weg gekommen. Mag sein, dass manches programmiertechnisch smarter zu lösen ist, aber ob es dann leichter zu verstehen und in 5 Jahren zu - sagen wir mal - "warten" ist, bleibt die Frage. Meine Logiken machen exakt was sie sollen und ich denke in ein paar Jahren versteh ich sie immer noch

                  Gruß, Martin
                  Angehängte Dateien

                  Kommentar


                    #10
                    :-)

                    Naja, für meinen Sonderwunsch brauche ich wohl eine Logik.. Nicht so schlimm.

                    Gruß,
                    Hendrik

                    Kommentar


                      #11
                      ...

                      ich hab vor einiger Zeit genau das in der Smartvisu gemacht, anbei als Test, bei dem man die Kontakte simulieren kann.

                      die logik dazu sieht so aus:

                      Code:
                      [Test]
                          [[window1]]
                              name = Window 1
                              type = bool 
                              visu_acl = w 
                              knx_dpt = 1
                              knx_listen = 4/2/0
                          [[window2]]
                              name = Window 2
                              type = bool         
                              visu_acl = w 
                              knx_dpt = 1
                              knx_listen = 4/2/1
                          [[window3]]
                              name = Window 3
                              type = num
                              visu_acl = rw
                              eval    = sh.Test.window3.side1_locked()*4+sh.Test.window3.side1_tilt()*2+sh.Test.window3.side2_closed()
                              eval_trigger = Test.window3.side1_locked | Test.window3.side1_tilt | Test.window3.side2_closed
                              [[[side1_locked]]]
                                  name = Window 3 Side1 locked
                                  type = bool
                                  visu_acl = rw
                              [[[side1_unlocked]]]
                                  name = Window 3 Side1 unlocked
                                  type = bool
                                  visu_acl = rw
                              [[[side1_tilt]]]
                                  name = Window 3 Side1 tilt
                                  type = bool
                                  visu_acl = rw
                              [[[side2_closed]]]
                                  name = Window 3 Side2 closed
                                  type = bool
                                  visu_acl = rw
                      lg, Chris
                      Angehängte Dateien

                      Kommentar


                        #12
                        Hi Hendrik,

                        Zitat von henfri Beitrag anzeigen
                        @Marcus: Spricht etwas dagegen, den einzubauen? Die Wildcards wären sehr praktisch.
                        ja, ich empfinde es als ziemlich kompliziert (da zu beschreiben und zu verwenden).

                        Bis bald

                        Marcus

                        Kommentar


                          #13
                          Danke Chris. Funktioniert so jetzt hier.


                          Zitat von mknx Beitrag anzeigen
                          ja, ich empfinde es als ziemlich kompliziert (da zu beschreiben und zu verwenden)
                          Vorschlag (OpenSource heißt ja, dass man sich beteiligen darf):
                          Ich schreib die Doku.

                          Gruß,
                          Hendrik

                          Kommentar


                            #14
                            Hallo Martin,

                            genau dies möchte ich auch umsetzen (Gira HS). Ich habe Fenster die nur offen oder gekippt sein können und Fenster mit zusätzlichen Stulp.

                            Kannst du bitte mal einen Lösungsansatz zeigen, wie deine Logik dazu aussieht und wie du die Liste der Fenster, die einen kritischen Status haben, erzeugst?

                            LG
                            Sylvio

                            Kommentar


                              #15
                              Beispiel

                              Zitat von Sipple Beitrag anzeigen
                              Alles was du da machst ist genau das was ich letzte Woche gemacht habe, inkl. der zweiflügligen Fenster, siehe Bild

                              Nur hab ich die Hoppe Griffe und ein Enocean Gatweay, da geht das insgesamt einfacher. Dafür hätte ich die komplette Lösung.

                              ...
                              Gruß, Martin

                              Hallo Martin,
                              ich möchte auch meine Fensterkontakte (2 je Fenster) mit Smathome.py auswerten und wie Du visualisieren.
                              Welche Visu hast Du benutzt?
                              Würdest Du mir Deine Konfig von der Griffauswertung und der Visu als Beispielvorlage zukommen lassen.

                              Momentan komme ich einfach nicht weiter.
                              Ich wäre Dir endlos dankbar!

                              Gruß Sönke

                              Kommentar

                              Lädt...
                              X