Ankündigung

Einklappen
Keine Ankündigung bisher.

Szenen-Widget mit Aktivstatus

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

    #16
    Zitat von ivande Beitrag anzeigen
    Wozu soll den "zeroval" gut sein, das hab ich nocht nicht verstanden?
    Ein Szene ist ja etwas was man nur "Einschalten" (=Setzen) kann, dann reagieren Lampen, Rolladen, .... und so weiter im Aktor auf die jeweilige Szenennummer und rufen den eingespeicherten Dimmwert, oder die eingespeicherte Rolladenposition für genau diese Szene ab. Ausschalten einer Szene gibt es ja aktiv nicht, nur der Wechsel auf eine andere Szene ist aktiv möglich, so dass man das Ausschalten auch nicht für Buttons gebrauchen kann.
    Es gibt aber ein Zerstören der Szene: Danach kann jederzeit die beteiligten Lampen oder Rolladen von diesen Werten wegbewegt werden (z.B. durch Einzeldimmen oder Einzelfahrt einer Rollade), die eigentliche Szene ist dann nicht mehr eingehalten, bzw. einfach gesagt, die Szene ist zerstört. Wenn man nun in der Visu oder auch bei Tastern aber sichtbar haben will, ob die Szene noch unabgeändert da ist, dann muss man eine Statusänderung bilden, wenn die Szene zerstört wird.
    Hier kommt genau "zeroval" ein Szenenwert für eine fiktive Szene, die einfach aussagt "keine Szene mehr gültig", ins Spiel. Die Szennummer ändert sich dadurch, der Status in der Visu (oder aber auch die LED auf Szenen-Tastern) erlischt.
    Für die Visu hier bedeutet das, der jeweilige Szenenbutton ist nicht mehr länger hervorgehoben. Dieser fiktive Wert für zerstörte Szene wird im Backend, z.B. in smarthome.py, gemacht, indem alle manuellen und einzel-Zerstörbefehle über ein logisches Oder zusammengeführt werden und dann eben dieses "zeroval" auf das Item Richtung Visu und KNX geschickt wird. Beispiel findest du hier.

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

    Kommentar


      #17
      Danke für die Erklärung - hab wieder was dazugelernt.. die Zerstörung von Szenen hab ich bei mir noch gar nicht drinnen, ist aber eine guter Tipp :-)

      wenn allso ein zerstörte Szene (weil z.B. Leuchten manuell gedimmt wurden..) von SH kommt, welche nicht in der Liste ist ({{ mydevice.scenes('szene', 'Szene', [1, 2, 31, 4, 19, 6],..) z.B. 0 oder 99,.. dann darf kein Button als aktiv angezeigt werden.

      zeroval = 66 bedeutet dann: SH schickt bei Zerstörter Szene immer eine 66?


      wenn ich es richtig gepeilt habe dann dürfte dies so funktionieren:

      ich glaub so werden nur gültige Szenen angezeigt (also alle Szenenwelche welche in der übergebenen Liste [1, 2, 31, 4, 19, 6] sind) - Es wird auch nichts anderes an SH gesendet ausser [1, 2, 31, 4, 19, 6].
      Kommte von SH eine Szene welche nicht in der Liste ist, wird kein Button aktiviert..
      zeroval würde es so dann nicht brauchen..

      HTML-Code:
      /*
       * scenes()
       *
       * @param unique id for this widget
       * @param a numeric item for the scene number
       * @param vals as a list of scene numbers for every button
       * @param pics as a list of icons for every button
       * @param type: 'micro', 'mini', 'midi' (optional, default: 'midi')
       * @param orientation of the controlgroup (optional, default: 'horizontal')
       * @param col_on is the color for the on state of the buttons (optional, default: 'icon1')
       */
      {% macro scenes(id, gad_room, vals, pics, type, orientation, col_on ) %}
          {% import "basic.html" as basic %}
      
      
          <div class="basic">
            <span data-role="controlgroup" data-type="{{ orientation|default('horizontal') }}">
              {% for i in 0..(vals|length - 1) %}
                  {{basic.stateswitch(id|_(vals[i]), gad_room~'.Status.Szene', type|default('midi'), [vals[i], vals[i]], pics[i], vals[i], [col_on|default('icon1'), ''])}}
              {% endfor %}
            </span>
          </div>
      {% endmacro %}


      Gruß Ivan
      Zuletzt geändert von ivande; 05.03.2017, 22:47.

      Kommentar


        #18
        zeroval, d.h. die Dummy-Szenenummer ist nur dafür da den Status von Szenennummern in der Liste gezielt auszuschalten, hat nie was mit Einschalten zu tun und auch nichts damit zu tun, das andere Szenennummern nicht in der Liste sind.

        Warum brauchst Du soviele Szenen in einer button-Gruppe bzw. einer GA. Ich habe pro Raum max. 4 (+1 fürs Putzen) Szenennummern und nochmal ein zentrales Objekt in einer anderen Buttongruppe/GA. Also (Anz. Räume + 1) = Anz Buttongruppen = Anzahl GAs. Verscheidene Räume über die gleiche Szenen-GA halte ich für nicht zielführig, ausser es sind Zentralobjekte.

        Gehe jetzt schlafen, mehr Diskussion gerne morgen.

        Ralf

        Kommentar


          #19
          ich bin was die Beleuchtung + Szenen anbelangt noch in Experimentierphase.. fast Täglich gibt es kleine Änderungen,..
          In der Visu muss ich die Szenen erst einpflanzen: ich möchte dort jede Szene einstellbar machen: Leuchten z.B. am Slider rauf und runterdimmen. RGB einstellen,.. bis es passt und dann "speichern"
          neu: alle Szenen kann ich nun in der Visu per Button aktivieren voerher musste ich die Szenenummer eingeben (danke)

          jeder Raum hat seine eigene Szenen - GA
          es gibt in jedem Raum vier "Grund"-Szenen (0,1,10 und 11) die sind in jedem Raum gleich
          alle weiteren Szenen z.B. (12,13,14,..) sind in jedem Raum individuell

          z.B: Küche
          0 Schlafen (Aus mit PM-Sperre) nicht aktiv (nur in Schlafzimmer + Wohnzimmer aktiv)
          1 Aus (wenn keine Präsenz oder per Taster)
          10 GrundbeleuchtungNacht (wird von PM aktiviert)
          11 GrundbeleuchtungTag (wird von PM aktiviert)

          12 Kochen (wird perTaster oder Kochfeld aktiviert)
          13 Essen (wird perTaster aktiviert)
          14 Party (wird perTaster aktiviert)

          Gruß

          Kommentar


            #20
            Hallo Ivan,

            mit Szenen habe ich erstmal zwei Jahre gewartet, bis sich die Familie in das Haus eingelebt hat und ich genau weiß was man/frau braucht. Zeitlich ginge es auch nicht anders, weil ich hatte an anderen Fronten im Haus genug zu tun. Jetzt sind wir aus dem "wünsch dir was / denk dir was aus" Phase raus und die Familie und ich weiß exakt was wir für Szenen brauchen. Wir haben auch bei den Rolladen viel über die zentrale Wetterstation ("Quadra") und die Präsenzmelder in den Durchgangsbereichen und Bädern automatiisert. Sowohl die Rolladen- als auch die Präsenzmelderlicht-Steuerung haben einen Automatikbetrieb, trotzdem können manuelle Einstellungen durchgeführt werden, nach 2 Stunden fällt dann das System wieder in den Automatikmodus, oder man kann auch manuell den Automatikmodus wieder einschalten (hierzu musste ich auch ein paar Widgets anpassen).

            Daher kammen nicht mehr als die 4 (+1) Szenen für jeden Raum raus, Sonderszenen haben noch die Küche, die Aussenbereiche und es gibt ein paar zentrale Szenen, insbesondere im Bezug auf die Alarmanlage und Meldeanlage. Normalerweise haben wir die folgenden Szenen:
            1. Tag-Modus: Licht-Aus und Rolladen-Auf.Während Rolladen auffahren ist das Licht noch an und dimmt sich über die Fahrt weg (sozusagen Helligkeitsregelung ohne Sensor, funktioniert ausgezeichnet).
            2. Abend-Modus: Licht-Ein auf 50% und Rolladen-Zu (wenn noch nicht durch Automatik erfolgt).
            3. Cocktail/Fernseh/...-Modus: Licht-Ein auf 10% und Rolladen-Zu (wenn noch nicht durch Automatik erfolgt). Machmal auch tagsüber notwendig :-)
            4. Nacht-Modus: Licht-Aus, Rolladen-Zu, Schalter- und Display-Beleuchtung minimal und in angrenzenden Fluren und Bädern niedrigere Sollwert für die Helligkeitsregelung der dortigen Präsenzmelder.
            5. Putz-Modus: Trotz Tageslicht, Licht-Ein auf 90% und Betätigungssperre bei allen Touchtastern.

            1. und 2. gibt es immer auch auf Tastern, der Rest nur smart.

            Die Szenenrückmeldung ist der Familie sehr wichtig. Fragen, wie ist das jetzt der Fall, habe ich das gedrückt, haben wir das eingestellt, ... (meist sehr unlogische Fragen) erübrigen sich, der WAF steigt. Szenenspeicherung und -verändern habe ich übrigens schnellstmöglich wieder ausgeschaltet, einfach zuviel Konfliktpotential in der Familie. Entweder mache ich das noch in der smartVISU per Codepad gesichert oder alles nur über ETS. Einige Aktoren, insbesondere ABB und Rademacher (Rolladen) haben da zudem auch ein paar Schwierigkeiten.

            Momentan bin ich dabei Widgets für Licht und Rolladen mit Automatik/Maunell-Funktionen und Stati zu versehen, damit man weiß in welchem Zustand man sich befindet. Führt leider zu ähnlichen Aktionen wie hier bei den Szenen. Z.B. will ich beim Automatikbetrieb sehen, wo die Rollade steht, aber der Balken im Slider soll dann nicht gehighleitet ("orange") sondern normalfarbig ("weiß") sein. Dazu das Fenster-Symbol mit Automatik- und Hand-Zusatzsymbolen. Dito. für die Lichtwidgets die durch die Präsenzmelder in der Helligkeit gesteuert werden.

            Grüße, Ralf.

            Kommentar


              #21
              Ich hatte bereits an einem Windet basic.select begonnen, welches die Wertauswahl per Drop-Down-Menu oder als Liste von Buttons ermöglicht.
              Ihr habt mir die Arbeit für den Button-Teil nun abgenommen, danke. Die Lösung von ivande in #17 ohne zeroval gefällt mir und ich werde diese so ähnlich übernehmen, wenn es erlaubt ist.

              Noch ein paar kleine Hinweise:
              • Die ID darf bei basic.stateswitch auch leer gelassen werden, so muss diese nicht extra aus dem Wert gebildet werden.
                Was macht eigentlich das |_ das habe ich noch nie gesehen?
              • Anstelle von {% for i in 0..(vals|length - 1) %} könnte man auch {% for val in vals %} schreiben. val kann dann direkt verwendet werden, für pics[i ] schreibt man pics[loop.index0]
              • Anstatt gad_room zu übergeben und dann im Widget hardcoded durch '.Status.Szene' zu ergänzen, wird in meiner Version direkt das Item für die Szene verlangt werden.

              Kommentar


                #22
                Zitat von smai Beitrag anzeigen
                Die Lösung von ivande in #17 ohne zeroval gefällt mir ...
                Wichtig ist nur, das es dann nicht als Szenenwidget bezeichnet wird, denn Szenen kann man nicht ausschalten, sondern nur aktivieren., d.h. Einschalten. Und da macht die Lösung direkt mit basic.stateswitch() nur dann Sinn, wenn man die Aktivitäten von der Darstellungsschicht trennt. Aktiv darf bei einem Drücken nur der Szenen-Ein-Wert gesendet werden, kein Aus-Wert. Auf der Darstellungsschicht, muss jeder einzelne Button aber auf unterschiedliche Werte des Items reagieren. Diese Trennung ist heute aber nicht in basic.stateswitch() drinnen. Wenn es nach wie vor Aus-Schaltaktionen zum Backend gibt, ist es für Szenen nicht zu gebrauchen.
                Zudem, wenn man zeroval auf dem Haupt-Item vermeiden will, muss man ein weiteres "Szene zerstört"-item einführen, sonst läuft es nicht.

                Deshalb, solange es nicht so erfüllt ist, bitte nicht Szenenwidget oder Szenebuttom nennen. Ein Scenebuttom hat in der Aktivität nur Tastfunktion für Ein, kein Aus und in der Darstellung aber zwei Zustände aktiv und inaktiv. Inaktiv kann über eine andere Szenenummer order eine anderes Item für "Szene zerstört" erreicht werden. Bei allem anderen bitte umbenennen, das ist nicht für Szenen geeignet.

                Ralf.

                Kommentar


                  #23
                  Das ist bei Ivans Lösung ja der Fall.
                  Er erreicht dies, indem er zwei Mal denselben Wert setzt, das erste Mal mit Farbe, das zweite Mal ohne.
                  In 2.8 würde das etwa folgendem entsprechen, also val_on gleich wie val_off:
                  HTML-Code:
                  {{ basic.dual(id, item, '', '', val, val, 'midi', 'icon1', '') }}
                  Ich werde es übrigens nicht Szenenbutton nennen, sondern wie erwähnt basic.select, weil es für alles mögliche eingesetzt werden kann.
                  Zuletzt geändert von smai; 07.03.2017, 16:39.

                  Kommentar


                    #24
                    Zitat von smai Beitrag anzeigen
                    Er erreicht dies, indem er zwei Mal denselben Wert setzt, das erste Mal mit Farbe, das zweite Mal ohne.
                    Ok, nehmen wir an der Button sendet ein 3 für Szene 3 Ein, beides mal ist die 3 für Farbe und ohne Farbe hinterlegt. Nun kann ich verstehen, das evl. mit dem Ein auf dem Button die Farbe gewählt wird. Wie geht dann die Farbe weg, wenn auf dem Item dann vom Backend her eine 1, 2 oder 4 kommt? Was ist der Mechanismus dahinter, ungleich 3 für ohne Farbe kann man ja ohne weiteres nicht konfigurieren?

                    Kommentar


                      #25
                      Ist ein empfangener Wert mehrmals in der Liste vorhanden, wird die erste passende Farbe genommen.
                      Kommt hingegen ein nicht vorhandener Wert, dann wird die letzte aller Farben aus der Liste verwendet.
                      Ist zwar nirgends so dokumentiert, hat Ivan aber anscheinend herausgefunden.

                      Dies entspricht wohl dem Verhalten von basic.dual oder basic.multistate in 2.8. Jedenfalls hatte ich die Implementierung auf Druck von psilo so geändert.

                      Noch eine Frage:
                      Hat eigentlich orientation=vertical in 2.8 funktioniert? In 2.9 tut sie es nämlich nicht

                      Kommentar


                        #26
                        Zitat von smai Beitrag anzeigen
                        Ist zwar nirgends so dokumentiert, hat Ivan aber anscheinend herausgefunden.
                        Ja, dann verstehe ich es, das war mir unklar. Dann sollte man dieses Verhalten mit in die Dokumention aufnehmen.

                        Zitat von smai Beitrag anzeigen
                        Dies entspricht wohl dem Verhalten von basic.dual oder basic.multistate in 2.8.
                        Das hatte ich in 2.8. so auch mal in einer Variante probiert. Aber es waren dann nachher mehrere Buttons rot. Und irgendwann war das Verhalten nicht mehr eindeutig, es ging sogar der graphische aufbau kaputt, Icons ware nohne Button zu sehen, die Kontur von Buttons war machnmal defekt. Deshalb hatte ich dann mit dem anderen Ansatz angefangen. Aber schön das es die ungleich-Wert-lösung gibt.


                        Zitat von smai Beitrag anzeigen
                        Hat eigentlich orientation=vertical in 2.8 funktioniert? In 2.9 tut sie es nämlich nicht
                        In 2.8 funktioniert es und bei 2.9 in einem anderen Wdget (Hand/Automatik bei Rolladen) auch, siehe:

                        vertical.jpg

                        (Dafür machen die Umlaute in 2.9 Schwierigkeiten, wo in 2.8 alles klappte und die 2.9. ist identisch vom OS von der 2.8 geklont)

                        Kommentar


                          #27
                          smai tsss.. Druck... tsss es war doch nur ehrliches Feedback

                          Kommentar


                            #28
                            Eigentlich wollte ich das gar nicht unbedingt dokumentieren bzw. als offizielle Möglichkeit propagieren, weil es doch eher gebastel ist.
                            Die funktionierende controlgroup überrascht mch, muss das genauer anschauen.

                            Wegen den Umlauten: Hast du evtl. die Dateien mit anderer Kodierung gespeichert ( z.B. ASCII statt UTF-8)?

                            Du brauchst übrigens nicht unbedingt eine separate VM, kannst die 2.9 auch einfach in einem anderen Verzeichnis auf demselben Webserver haben.

                            Kommentar


                              #29
                              Zitat von smai Beitrag anzeigen
                              Du brauchst übrigens nicht unbedingt eine separate VM, kannst die 2.9 auch einfach in einem anderen Verzeichnis auf demselben Webserver haben.
                              Ich habe lieber wegen dem Monitoring der KNX-Telegramme und so möglichen Ursachen auf die Spur zu kommen, das Ganze in VMs, da weiß man dann genau wer der Auslöser ist und muss nicht Annahmen treffen. Bei zwei gleichzeitigen Visus machts evtl. noch nicht den Ausschlag, aber wenn man auch am Backend noch dreht, ist es schon besser ...

                              Kommentar


                                #30
                                Ralf, kannst du mir verraten, wie dein Markup der vertikalen Controlgroup aussieht?
                                Mit inline Buttons wie sie in der SV verwendet werden, kriege ich das auch im einfachsten Beispiel nicht hin, siehe https://www.w3schools.com/code/tryit...e=FDFJA73VMTJD

                                EDIT:
                                Ich habe es mit folgendem CSS geschaft, hast du evtl. etwas ähnliches?
                                Code:
                                .ui-controlgroup-vertical .ui-controlgroup-controls {
                                    display: inline-block;
                                }
                                .ui-controlgroup-vertical .ui-btn-inline {
                                    display: block;
                                }
                                Zuletzt geändert von smai; 08.03.2017, 10:03.

                                Kommentar

                                Lädt...
                                X