Ankündigung

Einklappen
Keine Ankündigung bisher.

Szenen (KNX) Flip-flop-Status

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

    Szenen (KNX) Flip-flop-Status

    Liebe smarthome'ler,

    bin am Konfigurieren, Thema sind diesmal Szenen. Ich würde gerne solange eine Szene anhält einen Status von 1 haben und wenn die Szene durch eine andere erserzt wird oder man manuelle Korrekturen an manuellen Einstellungen macht, dann 0 senden. Das kann man dann für Statusvisualisierungen verwenden.

    Im Grunde ist es ein Flip-flop:

    Ein - entsprechender Szenenabruf
    Aus - Liste von möglichen GA (gemischte DPTs) die zu einer Änderungen herbeiführen können

    Ich seh momentan den Wald vor lauter Bäumen nicht. Hat irgendeiner eine Idee in welche Richtung man soetwas implementieren kann?

    Viele Grüße und schonal Dank im Voraus,

    Ralf.

    #2
    Hallo Ralf,

    wenn ich es richtig verstanden habe, möchtest du anzeigen ob eine Szene aktiv ist oder nicht. Aktiv wird die Szene durch Aufruf. Inaktiv soll die Szene werden, sobald eine andere Szene aufgerufen wird oder die Szene verändert wird. Richtig?

    Das würde ich dann so lösen (ungetestet):
    items.conf:
    Code:
    [Szene]
       type = scene
       knx_dpt = 5
       knx_listen = x/x/x
    [Szene0Aktiv]
       type = bool
       eval_trigger = lampe1 | lampe2 | lampe 3 # alle Items, die Teil der Szene sind
       eval = False
    [lampe1]
       type =bool
       knx_dpt = 1
       knx_listen = ...
    [lampe2]
    ...
    [lampe3]
    ...
    Szene1.conf:
    Code:
    0 lampe1 1
    0 lampe2 1
    0 lampe3 1
    0 Szene0Aktiv 1
    1 lampe1 1
    1 lampe2 0
    1 lampe3 0
    1 Szene0Aktiv 0
    Im Beispiel wäre das Item SzeneAktiv True, wenn Szene 0 aktiv wird, sobald Szene 1 aktiv wird oder jemand an einer der drei Lampen rumspielt wird SzeneAktiv False.

    Ich bin mir nicht 100% sicher ob das obige Beispiel funktioniert: Es funktioniert nur, wenn der Eval beim Szenenaufruf nicht ausgeführt wird.

    Kleine Anmerkrung zu Szenen: Bei KNX beginnen die Szenen bei 1, im smarthome bei 0. Hintergrund ist, das KNX bei Szene 1 eine 0 auf dem Bus schickt (bei Szene 2 eine 1 usw.). Dadurch gibt es immer einen Versatz um +1 der KNX Szene gegenüber der SH Szene.

    Gruß, Daniel

    Kommentar


      #3
      Zitat von dafra Beitrag anzeigen
      wenn ich es richtig verstanden habe, möchtest du anzeigen ob eine Szene aktiv ist oder nicht. Aktiv wird die Szene durch Aufruf. Inaktiv soll die Szene werden, sobald eine andere Szene aufgerufen wird oder die Szene verändert wird. Richtig?
      Hallo Daniel,

      erstmal vielen Dank das Du antwortest und mir hilfst. Im Prinzip ist das was Du schreibst richtig. Allerdings soll die Szene in den beteiligten KNX-Aktoren abgebildet werden, diese empfangen die Szenennummer per 1-Byte GA (DPT17.001) und interpretieren sie. Es gibt 6 "richtige" Szenennummern und zusätzlich eine "falsche" Szenennummer 0 für "keine Szene bzw. Szene abgeändert". Auf die Nummer 0 hört kein Aktor, ich verwende sie, um in der smartVISU es mit der Verwendung des "basic.dual"-buttons einfacher zu haben. Das Hauptproblem ist damit, diese 0 zu bilden, wenn sich irgendetwas ändert, z.B. jemand die ein oder andere Lampe angemacht hat oder etwas mehr gedimmt hat.

      Allerdings habe ich Teile Deines Beispiels verstanden und es war auch extrem hilfreich, und habe das jetzt mal auf dem Papier umgeschrieben (heute Abend kann ich erst testen, da auf Arbeit). Es müsste dann so aussehen:

      Code:
      [Szene]
         knx_dpt = 17
         knx_listen = x/x/x
         knx_send = x/x/x
         eval = 0
         eval_trigger = Lampe1 | Lampe2 | Lampe 3 # alle Items, die Teil der Szene sind, die Szene selber also nicht
      
      [Lampe1]
        ...
      [Lampe2]
        ...
      [Lampe3]
        ...
      Irgendwie kommt mir das aber sehr einfach vor, ich bin mir auch nicht sicher, ob bei eval_trigger wirklich die Szene selber ausgenommen werden kann, d.h. evtl. ist diese implizit ja immer mit in eval_trigger drinnen. Kann das so klappen?

      Viele Grüße,

      Ralf

      Zuletzt geändert von ralf9000; 28.02.2017, 11:30.

      Kommentar


        #4
        So kurzes Feedback, nachdem ich gestern etwas Zeit zum Probieren gehabt habe. Leider ist es so, dass eval von [Szene] immer aufgerufen wird und nicht nur bei den Items die unter eval_trigger angegeben sind. Deshalb musste noch ein weiteres Hilfs-Item [SzeneIstUngültig] ran. Der funktionierende Code ist nun:

        Code:
        [Szene]
           type = num
           knx_dpt = 17
           knx_listen = x/x/x
           knx_send = x/x/x
        
        [SzeneIstUngueltig]
           type = num
           eval = sh.Szene(0)                      # 0 wird von mir als Dummy-Szenenwert verwendet
           eval_trigger = Lampe1 | Lampe2 | Lampe3 # alle Items, die Teil der Szene sind, die Szene selber also nicht
        
        
        [Lampe1]
          ...
        [Lampe2]
          ...
        [Lampe3]
          ...
        Den Dummy Szenen-Wert kann man auch auf was anderes, z.B. im Bereich 64-127 (keine gültige Szenennummer bei KNX) ändern. Wichtig ist nur, das in keinen Aktor diese Dummy-Szenennummer verwendet wird. Für mich hat das aber so noch Vorteile, weil ich kann auch auf den KNX-Szenentastern die Gültigkeit der Szene anzeigen, in dem ich auf die gültige Szenennummer (ungleich 0) die LED am Taster anmache.

        Die Visualisierung der Szenen in smartVISU habe ich auch mit einem geändertem Widget fast fertig, das werde ich dann Heute oder Morgen im smartVISU-Unterforum noch posten. Leider war das auch nicht so einfach, da basic.buttom keine Symboländerung (Rückmeldung) kann und basic.dual, der die Symboländerung beherrscht, dann aber zwei Werte, den eigentlichen Szenenwert und den Dummy-Szenen-Wert senden möchte. Musste also beide Code-Welten dort verheiraten.

        Viele Grüße,

        Ralf
        Zuletzt geändert von ralf9000; 02.03.2017, 09:56.

        Kommentar


          #5
          Zur passenden Visu geht es hier ins smartVISU-Unterforum ...

          Kommentar


            #6
            Hallo Ralf,

            vielen Dank für deine Rückmeldungen. Deine Lösung verfolgt einen anderen Ansatz aber wie du es gelöst hast, kann man es natürlich genau so gut machen - auch wenn ich deine Lösung etwas "dreckig" finde ;-) Ist aber Geschmacksache.

            Gruß, Daniel

            Kommentar


              #7
              Zitat von dafra Beitrag anzeigen
              ... auch wenn ich deine Lösung etwas "dreckig" finde ;-) Ist aber Geschmacksache.
              Hallo Daniel,

              ich verstehe Dich, die "dreckige 0", die Du wahrscheinlich meinst, gefällt mir auch nicht sehr. Aber ich möchte, dass die Szenen im Haus auch ohne 'smarthome.py' alleine auf dem KNX-Bus funktionieren, für mich ist es eigentlich nur eine Luxusfunktion für die Visualisierung. Und da stört der Umweg über die "dreckige 0" kaum. Mit einem weiteren Item könnte ich die auch vom KNX verbannen, aber dass bräuchte ich für jede Szene noch ein weiteres Item plus KNX-GA für die Visualisierung der Szenenaktivität ("Taster-LEDs").
              Das hier funktioniert aber auch von Szene zu Szene bis auf den Wechsel zu 0 ("Szene zerstört") ganz ohne 'smarthome.py' auf dem KNX allein.

              Grüße, Ralf.
              Zuletzt geändert von ralf9000; 03.03.2017, 21:15.

              Kommentar


                #8
                die "dreckige 0", die Du wahrscheinlich meinst
                ...genau :-) Und fremde Items im Eval schreiben finde ich auch "dreckig".

                Was mich etwas wundert: Meine Aktoren interpretieren eine 0 auf dem Bus als Szene 1. Die SH-Szene 0 (== 0 auf dem Bus) ist daher von den KNX Aktoren durchaus verwertbar.

                Wenn ich so drüber nachdenke, bräuchtest du anstatt der 0 eigentlich ein RS-Flip-Flop: Setzen wenn Szene aufgerufen wird, Rücksetzen wenn Teilnehmer der Szenen manuell geändert wird. Dieses Item könntest du dann deinem Widget anstatt der 0 übergeben...

                Was ich übrigens genau so handhabe wie du: Soweit es geht direkt in KNX implementieren, damit bei einem SH Ausfall eine gewisse Grundfunktionalität noch gewährleistet ist.

                Grüße, Daniel

                Kommentar


                  #9
                  Zitat von dafra Beitrag anzeigen
                  Meine Aktoren interpretieren eine 0 auf dem Bus als Szene 1. Die SH-Szene 0 (== 0 auf dem Bus) ist daher von den KNX Aktoren durchaus verwertbar.
                  Soll es ja auch, ich brauche den Wechsel von einer "gültigen" (d.h. wo auch etwas in den Aktoren hinter der Szenennummer ist) Szenennummer auf die "ungültige" (d.h. für die nichts in den Aktoren hinterlegt ist) 0, dieser muss für die Taster (Sensoren) sichtbar sein, die machen die LED ja dann aus. Fällt SH aus, geht die LED nur nicht aus, das ist alles, also nur Komfort. Die Szenenlogik läuft davon unbeeindruckt. Und man hat kein weitere GA auf dem KNX-Bus. Weiterer Luxus ist die Visualisierung, die super läuft, aber ich für die Grundfunktionalität nicht brauche.

                  Du kannst aber auch die 0 gegen eine 64 austauschen, das ist völlig egal. Dann verlierst Du keine einzige Szenenummer, aber wer braucht den schon 64 Szenen, mit 63 kann man auch auskommen :-)

                  Ralf

                  Kommentar


                    #10
                    Szenen gehen 1 bis 64, Telegrammwerte aber 0-63

                    Kommentar


                      #11
                      64 ist Speichern der Szene 1. Also so einfach wird das eventuell dann doch nicht.

                      Kommentar


                        #12
                        Zitat von Eugenius Beitrag anzeigen
                        Szenen gehen 1 bis 64, Telegrammwerte aber 0-63
                        Genau und die "dreckige 0" ist ja keine Szene sondern ein Hilfskonstrukt, was nur signalisiert das die Szene vorbei ist und nicht mehr gültg ist. Da kann man dann die 64 für nehmen, wenn man unbedingt 64 Szenen (Nummern 0-63) braucht.

                        Zitat von vento66 Beitrag anzeigen
                        64 ist Speichern der Szene 1. Also so einfach wird das eventuell dann doch nicht.
                        Nach DPT18.001 ist Speichern von Szene 1 das Senden von 128, der Bereich von 64-127 ist "leer". Immer 128 draufaddieren, so funktioniert es bei KNX zumindest in meinem Haus. Der Bereich 64-127 und der obere Bereich sind "Reserved" in der Spezifikation für Zukünftiges, fange man also damit an ...
                        Zuletzt geändert von ralf9000; 04.03.2017, 09:23.

                        Kommentar


                          #13
                          Hallo,
                          im Wiki gibt es dazu einen einen Beitrag https://github.com/smarthomeNG/smart...-mit-smartVISU
                          Wäre das nicht auch eine Möglichkeit?

                          Kommentar


                            #14
                            Zitat von Sisamiwe Beitrag anzeigen
                            Wäre das nicht auch eine Möglichkeit?
                            Wie ich das verstehe, klappen dann Szenen nur mit aktivem smarthome.py, ich benötige aber die Szenen rein auf KNX und smarthome.py/smartVISU ist Luxuskomfort, der zum Betrieb des Hauses nicht unbedingt notwendig ist. Dies aus Zuverlässigkeitsgedanken heraus. Daher nutze ich auch die KNX-1Byte Szenennummern, die die Aktoren zu interpretieren wissen. Eine Zerlegung auf smarthome.py in Einzelaktionen möchte ich daher nicht.

                            Kommentar

                            Lädt...
                            X