Ankündigung

Einklappen
Keine Ankündigung bisher.

Init

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

    Init

    Hallo Zusammen,

    die folgende Init Definition kann aus meiner Sicht nur die ersten 5 Sekunden nach dem Systemstart auf AUS gehen und sollte anschließend bis zum nächsten Systemstart auf EIN bleiben.

    Init=after(systemstart(),5000u64)

    Bei mir ist Init jedoch aktuell auf AUS obwohl der letzte Systemstart mehrere Tage her ist. Wie kann dies sein?

    Es läuft der Patch 2.300.

    Viele Grüße

    Michael

    #2
    Zitat von Jambala Beitrag anzeigen
    Hallo Zusammen,
    die folgende Init Definition kann aus meiner Sicht nur die ersten 5 Sekunden
    After macht nur einen Impuls. Im Handbuch ist hier eine Grafik, die das erläutert. Das Verhalten ist also richtig.
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Wie löse ich dann schlauerweise das Problem, dass mein sonnenstandgeführtes Beschattungsprogramm, selbst wenn es gar nicht aktiviert ist, bei einem Systemstart zwischen 20 Uhr (Schlafenszeit der Tochter) und Sun=Aus (im Sommer nach 22 Uhr) alle Rolläden hochfährt?

      Bisher hatte ich folgenden Code im Einsatz (hier nur die Beendigung der letzten Fassade):

      [highlight=epc]
      // SAB: Vordere Fassade (207° Süd West), Beschattung beenden
      if "Beschattung Ein/Aus-5/2/0"==AUS and event("Beschattung Ein/Aus-5/2/0") and sun()==EIN \\
      or ("Beschattung Ein/Aus-5/2/0"==EIN and azimuth()<117f32) \\
      or ("Beschattung Ein/Aus-5/2/0"==EIN and azimuth()>270f32) then \\
      write("Büro Auf/Ab-3/1/0",AUS); \\
      write("Diele Auf/Ab-3/1/3",AUS); \\
      write("Kinderzimmer R/V Auf/Ab-3/2/15",AUS); \\
      write("Diele Tür Auf/Ab-3/2/0",AUS); \\
      write("Diele Fenster Auf/Ab-3/2/3",AUS); \\
      write("Kinderzimmer L/V Auf/Ab-3/2/9",AUS); \\
      endif
      [/highlight]

      Eigentlich dürfte aus meiner Sicht bei einem Systemstart nichts passieren, da zwar der KNX Taster "Beschattung Ein/Aus-5/2/0" = AUS ist, aber kein Event stattgefunden hat. In der Praxis ist dem jedoch nicht so.

      Die folgende Änderung verhindert das Hochfahren der Rolläden bei Systemstart zwar, aber so kann ich das Beschattungsprogramm nicht mehr durch den Taster "Beschattung Ein/Aus-5/2/0" manuell beenden, weil Init ja nicht dauerhaft auf Ein ist.

      [highlight=epc]
      if Init and "Beschattung Ein/Aus-5/2/0"==AUS and event("Beschattung Ein/Aus-5/2/0") and sun()==EIN \\
      or ("Beschattung Ein/Aus-5/2/0"==EIN and azimuth()<117f32) \\
      or ("Beschattung Ein/Aus-5/2/0"==EIN and azimuth()>270f32) then \\
      write("Büro Auf/Ab-3/1/0",AUS); \\
      write("Diele Auf/Ab-3/1/3",AUS); \\
      write("Kinderzimmer R/V Auf/Ab-3/2/15",AUS); \\
      write("Diele Tür Auf/Ab-3/2/0",AUS); \\
      write("Diele Fenster Auf/Ab-3/2/3",AUS); \\
      write("Kinderzimmer L/V Auf/Ab-3/2/9",AUS); \\
      endif
      [/highlight]

      Viele Grüße

      Michael

      Kommentar


        #4
        Das sollte gehen: [highlight=epc]
        if (systemstart()) then init=0 endif
        if (after(systemstart(),5000u64)) then init=1 endif
        [/highlight]
        Tessi

        Kommentar


          #5
          Oder auch
          [highlight=epc]
          init = after(systemstart(),5000u64))
          [/highlight]

          Kommentar


            #6
            Zitat von bmx Beitrag anzeigen
            Oder auch
            [highlight=epc]
            init = after(systemstart(),5000u64))
            [/highlight]
            Das wird nicht so sein, wie es jambala will. Er möchte ja, dass die Variable auf EIN bleibt, was hier aber nicht der Fall ist.
            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
            Enertex Produkte kaufen

            Kommentar


              #7
              Zitat von bmx Beitrag anzeigen
              Oder auch
              [highlight=epc]
              init = after(systemstart(),5000u64))
              [/highlight]
              Das hatten wir schon am Anfang und es macht nicht was gewünscht ist. systemstart() liefert im ersten aller Verarbeitungszyklen eine 1, danach immer nur 0. Damit wird dann after() getriggert, welches dann seinerseits 5s danach für genau einen Verarbeitungszyklus eine 1 liefert, sonst aber immer eine 0. Zum Triggern ist das ganz gut, für eine Zuweisung aber eher nicht: 5s nach Systemstart wird init durch after auf 1 gesetzt weil sich after() a) geändert hat und b) nun den Wert 1 liefert. Aber schon im nächsten Verarbeitungszyklus geht after() wieder auf 0 und init folgt, weil sich after() a) erneut geändert hat und b) nun den Wert 0 liefert. Nun soll aber init auf 1 bleiben!

              Zitat von Tessi Beitrag anzeigen
              Das dagegen sollte gehen: [highlight=epc]
              if (systemstart()) then init=0 endif
              if (after(systemstart(),5000u64)) then init=1 endif
              [/highlight]
              Die erste Zeile ist wahrscheinlich überflüssig, da beim Systemstart sowieso alle Variablen auf 0 sein sollten, geprüft habe ich das bisher aber nicht.
              In der zweiten Zeile triggert der Wechsel von after() von 0 auf 1 den then-Zweig und init wird auf 1 gesetzt. Der anschließende Wechsel von after() von 1 zurück auf 0 würde nur einen (hier nicht vorhandenen) else-Zweig triggern, init bleibt also auf 1.


              Ob das allerdings das Problem löst...
              Tessi

              Kommentar


                #8
                [QUOTE=Tessi;231164
                Die erste Zeile ist wahrscheinlich überflüssig, da beim Systemstart sowieso alle Variablen auf 0 sein sollten[/QUOTE]
                Init hat als Anfangswert den bei der Definition.
                offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                Enertex Produkte kaufen

                Kommentar


                  #9
                  Stimmt, statt
                  [highlight=epc]
                  if (systemstart()) then init=0 endif
                  [/highlight]kann man kürzer und besser schreiben:
                  [highlight=epc]
                  init=0
                  [/highlight]
                  Aber wenn dies hier
                  [highlight=epc]
                  init = after(systemstart(),5000u64))
                  [/highlight] das einzige Statement ist, in dem Init etwas zugewiesen wird, welchen Wert hat init dann vor Ablauf der 5 Sekunden?
                  Tessi

                  Kommentar


                    #10
                    Zitat von Tessi Beitrag anzeigen
                    welchen Wert hat init dann vor Ablauf der 5 Sekunden?
                    0b01, da ja after() auch erst mal auf 0b01 steht.
                    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                    Enertex Produkte kaufen

                    Kommentar


                      #11
                      D.h. bei Systemstart sind zunächst alle Ausdrücke invalid und werden ausgewertet und ggf. zugewiesen?

                      Ich sollte das Kapitel über das Validierungsschema wohl noch einmal lesen...
                      Tessi

                      Kommentar


                        #12
                        Zitat von Tessi Beitrag anzeigen
                        D.h. bei Systemstart sind zunächst alle Ausdrücke invalid und werden ausgewertet und ggf. zugewiesen?
                        Beim Systemstart erfolgt die Initialisierung der Variablen - so wie diese eben definiert sind.
                        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                        Enertex Produkte kaufen

                        Kommentar


                          #13
                          Warum löst denn beim Systemstart überhaupt die if Abfrage aus?

                          if "Beschattung Ein/Aus-5/2/0"==AUS and event("Beschattung Ein/Aus-5/2/0") then ...

                          "Beschattung Ein/Aus-5/2/0" ist zwar Aus, aber ein event tritt och nur auf wenn der Taster auch betätigt wurde. Dies ist aber beim Systemstart nicht der Fall.

                          Viele Grüße

                          Michael

                          Kommentar


                            #14
                            Zitat von enertegus Beitrag anzeigen
                            Init hat als Anfangswert den bei der Definition.
                            Das nennt man Deklaration.
                            BR
                            Marc

                            Kommentar


                              #15
                              Zitat von enertegus Beitrag anzeigen
                              0b01, da ja after() auch erst mal auf 0b01 steht.
                              after() "steht" nicht auf 0b01, sondern es liefert den Wert 0b01.
                              BR
                              Marc

                              Kommentar

                              Lädt...
                              X