Ankündigung

Einklappen
Keine Ankündigung bisher.

Schaltzeitindex in Logik verwenden

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

    X1 Schaltzeitindex in Logik verwenden

    Ich möchte beim Auslösen einer bestimmten Schaltzeit eine Logik triggern. Leider ist die Doku an dieser Stelle etwas spärlich: Ich vermute, ich kann das über die Elemente "Ausgelöst" und "Schaltzeitindex" der Zeitschaltuhr realisieren. Was ich nicht verstehe:
    • Wo bekomme ich den Schaltzeitindex der Zeitschaltuhr her? Annahme: Das sind die jeweiligen Nummern vor den Schaltzeiten der Zeitschaltuhr im GPA, korrekt?
    • Zählt der Index ab 0 oder 1 (GPA zählt ab 1)?
    • Wie/wann wird der Zeitschaltindex aktualisiert? Steht in der Variablen immer der zuletzt ausgelöste Index? Ich muss auf den Trigger ("Ausgelöst") reagieren, aber nur bei einer bestimmten Schaltzeit ("Schaltzeitindex" = x).

    #2
    Und ich habe gleich noch 'ne Frage, bzw. vmtl. einen Knoten im Hirn. Für die Anwendung oben will ich eine Funktion nach dem Schema (Pseudocode)

    IF <Zeitschaltuhr hat ausgelöst> AND <Schaltzeitindex korrekt> THEN
    DO <irgendwas>
    ELSE
    DO NOTHING
    realisieren. Den ersten Teil kriege ich problemlos hin (AND, Vergleicher, Inverter...), aber den "do nothing" Zweig kriege ich nicht hin. Gibt es eine Äquivalent zu exit oder break?

    Kommentar


      #3
      Das Else wird einfach nicht ausformuliert, wenn die Bedingung nicht stimmt, tut sich einfach nichts. Für ein echtes Else musst du die Gegenfunktion auch getrennt afragen, also Vergleicher >5 --> Aktion Y parallel dazu Vergleicher <= 5 --> Aktion Z

      Gruß
      Florian

      Kommentar


        #4
        Ich habe eine Zeitschaltuhr, die morgens um 6h eine Außenbeleuchtung einschaltet, die mit Sonnenaufgang abgeschaltet wird. Im Sommer liegt der Sonnenaufgang aber vor 6h, d.h. das Licht wird unnötig angeschaltet und bleibt dann auch an...

        Ich habe eine interne Variable angelegt, die speichert, ob die "Abschaltung" schon stattgefunden hat, d.h. ich kann prüfen, ob die Schaltzeit ausgeführt wurde (siehe Frage 1) und ob die Schaltzeit "Ausschalten" bereits ausgeführt wurde (interne Variable). Bei vorliegen dieser Bedingung will ich die Einschaltbefehle "überschreiben" (also "AUS" senden) sonst nicht. Einen Sonnenaufgangs-/Sonnenuntergangs-Baustein habe ich nicht gefunden.

        Mein Problem: Auch wenn die Bedingung nicht vorliegt, krieg' ich nur Logiken zusammen, die dann auch was ausführen. Soll heissen: Der "else"-Pfad wird bei jeder Schaltzeit getriggert.

        Hier mal ein Beispiel:

        Unbenanntes Bild.png

        Bei Vorliegen der korrekten Bedingung ist alles gut. Aber jede andere Bedingung - Abschaltung morgens wurde noch nicht ausgelöst, andere Schaltzeit, als die, um die es geht - schaltet meine Lampen ein, weil die Logik auf Grund der Statusänderung auch ausgeführt wird. Das einzige, was mir noch einfallen würde, wäre im Prinzip bei Eintreten der Bedingung alle Werte über einen Wertgenerator manuell zu setzen... Aber das muss doch eleganter gehen (hoffe ich)?

        Vielleicht ist meine Fragestellung so verständlicher.
        Angehängte Dateien
        Zuletzt geändert von DiMa; 28.12.2020, 15:30.

        Kommentar


          #5
          Zitat von DiMa Beitrag anzeigen
          Einen Sonnenaufgangs-/Sonnenuntergangs-Baustein habe ich nicht gefunden
          Den hat Gira auch besonders gut versteckt: Schau mal in die Festlegung der Schaltzeitpunkte der Uhr
          You do not have permission to view this gallery.
          This gallery has 1 photos.

          Kommentar


            #6
            Geht aber auch direkt aus der App raus mit einer Zeitschaltuhr. Auch dort kann man als Zeitpunkt Sonnenauf- bzw -untergang auswählen, und die Schaltzeit relativ verschieben.

            Hier kann man dann simple einfach bswp. 2 Stunden vor Sonnenaufgang einschalten. Und sofern das erst ab 6 Uhr sein soll, halt einfach den entsprechenden Kanal zwischen sagen wir 2 und 6 Uhr morgens sperren.

            Sprich: einfach in der App die Zeitschaltuhr nach Wunsch erstellen, und in der Logik einfach den Kanal wie oben genannt sperren (oder auch wieder mit einer Zeitschaltuhr in der App, wenn der Zeitpunkt flexibel angepasst werden soll). Fertig. Wäre für mich eine deutlich elegantere und flexiblere Lösung als Deine Logik?

            Kommentar


              #7
              Zitat von knxPaul Beitrag anzeigen
              Schau mal in die Festlegung der Schaltzeitpunkte der Uhr
              Das ist die Funktion, die ich in der Zeitschaltuhr verwende. Nutzt mir aber für die Logik nichts und auf den Sonnenauf-/-untergangs-Zeitpunkt kann ich mittels Logik auch nicht zugreifen.

              Zitat von matthiaz Beitrag anzeigen
              Geht aber auch direkt aus der App raus mit einer Zeitschaltuhr.
              Erstens löst das mein Problem auch nicht und zweitens ist der Zugriff auf Funktionsuhren mittels Logik bis Gira die vergessene Funktion(en) nachliefert eine rein theoretische Möglichkeit 😉 Siehe meinen Thread zum Thema.

              Zitat von matthiaz Beitrag anzeigen
              Hier kann man dann simple einfach bswp. 2 Stunden vor Sonnenaufgang einschalten.
              Das ist aber nicht gewünschte Funktionalität. Ich will schliesslich nicht im Sommer von 3:30h - 5:30h das Licht anmachen 😉

              Kommentar


                #8
                Zitat von DiMa Beitrag anzeigen
                gewünschte Funktionalität
                Meinst Du so etwas: Künstliches Licht nur innerhalb eines bestimmten Zeitfensters und nur dann, wenn es dunkel ist?
                You do not have permission to view this gallery.
                This gallery has 1 photos.

                Kommentar


                  #9
                  Zitat von DiMa Beitrag anzeigen
                  Das ist aber nicht gewünschte Funktionalität. Ich will schliesslich nicht im Sommer von 3:30h - 5:30h das Licht anmachen 😉
                  Das mit dem Kanal sperren hast Du aber auch gelesen, oder?

                  Kommentar


                    #10
                    Zitat von matthiaz Beitrag anzeigen
                    Kanal sperren
                    Legende für mein Bild in #8:
                    • Zeile Uhr sind die Stunden
                    • Zeile Licht ist der gewünschte Zeitbereich für die Beleuchtung in gelb
                    • Zeilen Winter und Sommer markiert den Bereich zwischen Sonnenaufgang und Sonnenuntergang in orange
                    • Zeile Ausgang Winter zeigt das Verknüpfungsergebnis für den Winter in grün
                    • Zeile Ausgang Sommer ist leer, weil da kein künstliches Licht ein- oder ausgeschaltet werden muss.
                    Die geforderte Sperre würde ich mit einem logischen UND realisieren, so einfach wie möglich 😁😄

                    Kommentar


                      #11
                      Zitat von knxPaul Beitrag anzeigen
                      Die geforderte Sperre würde ich mit einem logischen UND realisieren, so einfach wie möglich
                      Ähh ja, das war auch mein Ansatz, die Probleme damit habe ich in meinen Beiträgen beschrieben - siehe #2. Mein Problem ist ja nicht den "Auslösezustand" zu erkennen, sondern zu verhindern, dass die Logik in allen anderen Fällen auch was macht 😉 In OpenHAB & Co. ist das ein Vierzeiler, aber an diesem Regeltechnik-Ansatz vom X1 beiß' ich mir die Zähne aus.

                      Zitat von matthiaz Beitrag anzeigen
                      Das mit dem Kanal sperren hast Du aber auch gelesen, oder?
                      Ja, aber ob ich ein Sperrobjekt auslöse oder eine Schaltfunktion betätige, hat die gleichen Probleme, die ich beschrieben habe: Die Sperre wird auch gesetzt (oder gelöscht) wenn eine andere Schaltzeit als die um die es geht ausgelöst wird. Natürlich könnte ich auch einfach eine absolute Zeit Sperren - aber dann wird es so unelegant, dass ich einfacher eine eigene Zeitschaltuhr nur für diese Auslösung anlege - da geht's dann mit einer einfachen UND Verknüpfung für den Auslösefall und nix sonst, weil es keine Rolle spielt, da der Trigger dann "auslösezeitspezifisch" ist.

                      Aber ich habe noch die Hoffnung, dass sich das eleganter lösen lässt, sonst könnte man sich die interne Variable für den Schaltzeitindex ja komplett sparen 😊 Ich probier's noch mal mit einer "ungleich"-Bedingung im Vergleicher, das könnte auch zum Ziel führen, vielleicht kann man damit wie von Beleuchtfix angeregt den else-Zweig explizit ausbilden...
                      Zuletzt geändert von DiMa; 28.12.2020, 19:59.

                      Kommentar


                        #12
                        Keine Ahnung, was an 2 Zeitschaltuhren in der APP unelegant ist?
                        1) Aktor Kanal Sperren bis 6
                        2) Aktor Schalten mit 1 Stunde vor Sonnenaufgang + Schalten um 6 Uhr (damit Du da halt definitiv Licht hast) + Aktor Ausschalten nach Sonnenaufgang

                        Brauch nicht einmal ne Logik...

                        Kommentar


                          #13
                          Keine Ahnung, was ihr hier so anstellen wollt, Dämmerung 1/0 direkt an das Schaltobjekt im Aktor. Die Uhr sperrt den Aktorkanal. Je nach Hersteller schaltet der Aktor auch nicht wieder ein, wenn die Sperre zurückgenommen wird und es bereits hell ist. (Rücknahme der Sperre folgt dem Schaltzustand) oder so ähnlich.

                          Kommentar


                            #14
                            Ich wusste, es ist ein Fehler, den Anwendungsfall zu beschreiben 😉

                            Ich weiß die Hilfe wirklich zu schätzen, aber die Funktion an sich ist nicht mein Problem. Die läuft aktuell mit vier Zeilen Code in OpenHAB. Mit allen möglichen Zeitschaltuhren kann man das auch lösen. Und selbstverständlich auch komplett ohne Logik-Engine 😉

                            ich versuche das aber mit einer Logik im X1 zu lösen, weil ich mich für deutlich komplexere Anwendungsfälle in die Logiken einarbeiten möchte.

                            Ich fasse nochmals meine eigentlichen Fragen zum X1 aus den ersten beiden Posts zusammen:
                            • Wo bekomme ich den Schaltzeitindex der Zeitschaltuhr her? Annahme: Das sind die jeweiligen Nummern vor den Schaltzeiten der Zeitschaltuhr im GPA, korrekt?
                            • Zählt der Index ab 0 oder 1 (GPA zählt ab 1)?
                            • Wie/wann wird der Zeitschaltindex aktualisiert? Steht in der Variablen immer der zuletzt ausgelöste Index? Ich muss auf den Trigger ("Ausgelöst") reagieren, aber nur bei einer bestimmten Schaltzeit ("Schaltzeitindex" = x).
                            • Wie baut man einen "else"-Zweig im X1 Logik-Editor?

                            Kommentar


                              #15
                              Zitat von DiMa Beitrag anzeigen
                              in die Logiken einarbeiten
                              ist ein sehr lobenswertes Ziel, das ich gerne unterstütze.

                              Um zu einem gemeinsamen Verständnis zu kommen:
                              KNX ist ein ereignisgesteuertes System; auf dem Bus herrscht solange Ruhe, bis etwas passiert, und dann wird ein Telegramm gesendet. Manche Menschen interpretieren das Telegramm als Zustandswechsel, merken sich Zustände und bauen so gedanklich eine Logik mit Zuständen. Der Simulator im GPA macht das auch so. Das bildet das KNX-System gut, aber nicht vollständig korrekt ab! Daher gibt es im X1/L1 ganz besondere Logik-Bausteine.

                              Zitat von DiMa Beitrag anzeigen
                              Ich möchte beim Auslösen einer bestimmten Schaltzeit eine Logik triggern.
                              Eine Logik triggern ist also nichts anderes als ein Telegramm. Nun hat das Telegramm einen Inhalt, nehmen wir 1-Bit mit '0' oder '1'. Bei jedem Telegramm wird die Logik ausgeführt, der Ausgangszustand kann gleich bleiben oder sich ändern.
                              Eine wichtiger Logik-Baustein ist 'Send-by-Change'; er leitet am Eingang empfangene Telegramme nur dann an den Ausgang weiter, wenn der Telegrammwert am Eingang sich von dem vorherigen Telegrammwert unterscheidet.

                              1. Rückfrage: Soll jedes Telegramm die Logik triggern oder beispielsweise nur ein '1'-Telegramm? Dann wäre der Logik-Baustein 'Filter' geeignet, nur ein bestimmtes Telegramm in die Logik gelangen zu lassen.

                              2. Rückfrage: Welche Funktion hat der Inverter im Bild von #4 ? Ich interpretieren den als ELSE-Zweig ohne 'DO <irgendwas>' in #2. Schreibst Du mir bitte den Pseudocode für die gewünschte Funktion 😄 nur zum Üben für die X1-Logiken.


                              Kommentar

                              Lädt...
                              X