Ankündigung

Einklappen
Keine Ankündigung bisher.

Best Practice Systemstart

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

    Best Practice Systemstart

    Hi Leute,
    da mein Code Teil mittlerweile schon einige Zeilen umfasst und ich an vielen Punkten
    Code:
    if after(systemstart(),xxxxu64)
    aufrufe, wollte ich jetzt mal nachfragen, wie ihr das so macht.

    Speziell geht es in meinem Code um den Webserver Teil, den ich gerne nach einem Systemstart mit diversen Stati und Meldungen wieder befüllen will.

    Wie macht ihr das so? Welche Zeit gebt ihr da vor?
    Tippt ihr da auch irgendeine Zeit dahinter ein? Sollte man generell eine gewisse Zeit warten, nachdem der EibPc gestartet wurde, um nicht Kollisionen hervorzurufen?

    Schreibt ihr alle pdisplay gleich in einen Befehl
    Code:
    if after(systemstart(),xxxxu64) then {
    pdisplay.........;
    pdisplay.........;
    x;
    y;
    z;
    } endif
    oder doch eher im Code an die passende Stelle wo es gerade um diese Funktion geht?! (wie Rollo zu Rollo, Heizung zu Heizung.....)

    Fragen über Fragen, hoffentlich weis der eine oder andere was ich meine!
    Soll lediglich der Verbesserung und Verschönerung meines Codes dienen!

    Danke und schönen Sonntag noch
    MfG MrKnx

    #2
    Zitat von MrKNX Beitrag anzeigen
    Hi Leute,
    da mein Code Teil mittlerweile schon einige Zeilen umfasst und ich an vielen Punkten
    Code:
    if after(systemstart(),xxxxu64)
    aufrufe, wollte ich jetzt mal nachfragen, wie ihr das so macht.
    Grundsätzlich: Wenn es läuft, dann warum ändern?
    Aus Systemsicht: Zuviele after-Timer (>2000) machen den EibPC eher lahm. Daher vielleicht selbst abschätzen.
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Ich hab ein "if after(systemstart()) LOS=EIN"

      und dann an entsprechender Stelle "if LOS then ...."
      ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

      Kommentar


        #4
        Never change a running system ist auch meine Devise, aber es kommen immer mehr Codezeilen dazu.

        Deshalb ja auch die Frage, um nicht ganz die Übersicht zu verlieren.

        @ enertegus
        kann man generell sagen, wieviel Zeit nach Systemstart man reservieren sollte oder ist das komplett egal?

        @ Uwe
        ich hatte auch schon gedacht, das ganze über eine Variable zu lösen, jedoch brauche ich dann nicht wieder die "after" Funktion dafür, wenn ich die Variable im Code öfters als Bedingung einsetze?

        Oder wäre dies von der Performance egal ob ich zB. 10mal im Eibpc Code die Funktion
        Code:
        if after(systemstart(),xxxxu64) then Webinit = EIN endif
        if (Webinit) then......
        if (Webinit) then.....
        x
        y
        z
        aufrufe?!
        MfG MrKnx

        Kommentar


          #5
          After() brauchst du dann nur das einemmal und dein Beispiel passt. Das ist definitiv performanter als viele after()
          ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

          Kommentar


            #6
            Danke Uwe.
            Gibt es hier vielleicht noch andere Meinungen dazu?

            MfG MrKnx

            Kommentar


              #7
              Hallo,

              habe jetzt alle meine Webserver relevanten "if after systemstart()" in meinem Code durch eine WebInit Variable ersetzt.
              Diese WebInit setze ich am Anfang meines Codes durch
              Code:
               
               if after(systemstart(),xxxxu64) then Webinit = EIN endif
              auf EIN.
              Im Code selbst rufe ich dann an einigen Stellen (ca.10) die WebInit Variable auf und befühle dadurch meinen Webserver.

              Wie ich es mir gedacht habe, funktioniert es so leider nicht zuverlässig, da nach dem Systemstart leider nicht alle Stati in den Webserver geschrieben werden.
              Muss ich hier doch wieder mit "if after(WebInit,xxxxu64)" arbeiten???

              Wenn ich die Variable WebInit wieder durch "after(systemstart(),xxxxu64)" ersetze und diese zeitlich ein wenig voneinander trenne durch ca. 1000u64 dann funktioniert alles wieder......
              MfG MrKnx

              Kommentar


                #8
                Hast du Webinit auch mit AUS initialisiert?
                ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                Kommentar


                  #9
                  Zitat von MrKNX Beitrag anzeigen
                  habe jetzt alle meine Webserver relevanten "if after systemstart()" in meinem Code durch eine WebInit Variable
                  Wie ich es mir gedacht habe, funktioniert es so leider nicht zuverlässig, da nach dem Systemstart leider nicht al
                  Dazu müsste man den Code kennen. An sich wird die Funktion schon tun, was sie soll, zumindest ist mir kein solches Verhalten bekannt.
                  offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                  Enertex Produkte kaufen

                  Kommentar


                    #10
                    Zitat von Uwe! Beitrag anzeigen
                    Hast du Webinit auch mit AUS initialisiert?
                    Natürlich
                    Code:
                    WebInit = AUS
                    MfG MrKnx

                    Kommentar


                      #11
                      Wie Michael schreibt, zeig doch mal deinen Code. Bei mir läuft das einwandfrei.
                      ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                      Kommentar


                        #12
                        Gerne.
                        Ich poste jetzt mal nur die Ausschnitte aus meinem Code um die es geht.
                        Ich lasse die Buttons je nach Zustand im Webserver unterschiedlich anzeigen.

                        Code:
                        // Webserver nach Systemstart mit Werten füllen
                        WebInit = AUS
                        if after(systemstart(),20000u64) then WebInit = EIN endif
                        //
                        if change(RolloRegenFreigabe) or (WebInit) then {
                            if (RolloRegenFreigabe) then {
                                pdisplay(19,$...zugelassen$,SWITCH,ACTIVE,GREEN,6);
                                pdisplay(26,$Regenschutz zugelassen $ + convert(settime(),$$),BLIND,STATE5,GREEN,RolloSideID);
                            } else {
                                pdisplay(19,$...verweigert$,SWITCH,INACTIVE,GREY,6);
                                pdisplay(26,$Regenschutz verweigert $ + convert(settime(),$$),BLIND,STATE5,GREY,RolloSideID);
                            } endif
                        } endif
                        //
                        if event("KG Schuko Multimedia 19 Zoll rückmelden-8/2/11") or (WebInit) then {
                          if ("KG Schuko Multimedia 19 Zoll rückmelden-8/2/11") then {
                            if (!Schlafmodus) or (!"Musikszene SZ schalten-4/0/9") then {
                                Vol_Wert_Tag = EIN
                            } else {
                                Vol_Wert_Nacht = EIN
                            } endif;
                            pdisplay(2,$$,PLAY,DISPLAY,GREEN,RussoundID);
                            pdisplay(3,$$,SWITCH,DISPLAY,GREEN,RussoundID);
                            pdisplay(4,$$,SWITCH,DISPLAY,GREEN,RussoundID);
                            pdisplay(5,$$,SWITCH,DISPLAY,GREEN,RussoundID);
                            pdisplay(6,$$,SWITCH,DISPLAY,GREEN,RussoundID);
                            pdisplay(7,$$,SWITCH,DISPLAY,GREEN,RussoundID);
                            pdisplay(8,$$,SWITCH,DISPLAY,GREEN,RussoundID);
                        //    pdisplay(9,$$,SPEAKER,DISPLAY,GREEN,RussoundID);
                        //    pdisplay(10,$$,SPEAKER,DISPLAY,GREEN,RussoundID);
                        //    pdisplay(11,$$,SPEAKER,DISPLAY,GREEN,RussoundID);
                        //    pdisplay(12,$$,SPEAKER,DISPLAY,GREEN,RussoundID);
                        //    pdisplay(13,$$,SPEAKER,DISPLAY,GREEN,RussoundID);
                        //    pdisplay(14,$$,SPEAKER,DISPLAY,GREEN,RussoundID);
                            if (MusikMorgenStart) then pdisplay(15,$Guten Morgen$,PLAY,ACTIVE,GREEN,5) endif;
                            if (MusikAbendStart) then pdisplay(15,$Gute Nacht$,PLAY,ACTIVE,GREEN,5)endif;
                            if (!MusikMorgenStart) and (!MusikAbendStart) then {
                                pdisplay(15,$inaktiv$,INFO,DISPLAY,GREY,5);
                            } endif;
                            pdisplay(16,EinschaltlautstaerkeInfo,INFO,DISPLAY,GREEN,RussoundID);
                            pdisplay(17,RussRawData,INFO,DISPLAY,GREEN,RussoundID);
                            pdisplay(18,$$,INFO,DISPLAY,GREEN,RussoundID);
                            pdisplay(19,$$,INFO,DISPLAY,GREEN,RussoundID);
                            pdisplay(20,$$,INFO,DISPLAY,GREEN,RussoundID);
                            pdisplay(21,$$,INFO,DISPLAY,GREEN,RussoundID);
                            pdisplay(22,$$,INFO,DISPLAY,GREEN,RussoundID);
                            pdisplay(23,$$,INFO,DISPLAY,GREEN,RussoundID);
                          } else {
                            pdisplay(2,$$,PLAY,DARKRED,GREY,RussoundID);
                            pdisplay(3,$$,SWITCH,DARKRED,GREY,RussoundID);
                            pdisplay(4,$$,SWITCH,DARKRED,GREY,RussoundID);
                            pdisplay(5,$$,SWITCH,DARKRED,GREY,RussoundID);
                            pdisplay(6,$$,SWITCH,DARKRED,GREY,RussoundID);
                            pdisplay(7,$$,SWITCH,DARKRED,GREY,RussoundID);
                            pdisplay(8,$$,SWITCH,DARKRED,GREY,RussoundID);
                            pdisplay(9,$$,SPEAKER,DARKRED,GREY,RussoundID);
                            pdisplay(10,$$,SPEAKER,DARKRED,GREY,RussoundID);
                            pdisplay(11,$$,SPEAKER,DARKRED,GREY,RussoundID);
                            pdisplay(12,$$,SPEAKER,DARKRED,GREY,RussoundID);
                            pdisplay(13,$$,SPEAKER,DARKRED,GREY,RussoundID);
                            pdisplay(14,$$,SPEAKER,DARKRED,GREY,RussoundID);
                            pdisplay(15,$$,INFO,DARKRED,GREY,RussoundID);
                            pdisplay(16,EinschaltlautstaerkeInfo,INFO,DARKRED,GREY,RussoundID);
                            pdisplay(17,RussRawData,INFO,DARKRED,GREY,RussoundID);
                            pdisplay(18,$$,INFO,DARKRED,GREY,RussoundID);
                            pdisplay(19,$$,INFO,DARKRED,GREY,RussoundID);
                            pdisplay(20,$$,INFO,DARKRED,GREY,RussoundID);
                            pdisplay(21,$$,INFO,DARKRED,GREY,RussoundID);
                            pdisplay(22,$$,INFO,DARKRED,GREY,RussoundID);
                            pdisplay(23,$$,INFO,DARKRED,GREY,RussoundID);
                          } endif
                        } endif
                        //
                        if (WebInit) then {
                            pdisplay(2,$$,SWITCH,DARKRED,GREY,11);
                            pdisplay(5,$$,TEMPERATURE,DISPLAY,GREY,11);
                            pdisplay(7,$$,INFO,DISPLAY,GREY,11);
                            pdisplay(9,$$,INFO,DISPLAY,GREY,11);
                            pdisplay(12,$$,SWITCH,DARKRED,GREY,11);
                            pdisplay(14,$$,SWITCH,DARKRED,GREY,11);
                            pdisplay(15,$$,INFO,DISPLAY,GREY,11);
                            pdisplay(16,$$,INFO,DISPLAY,GREY,11);
                            pdisplay(17,$$,INFO,DISPLAY,GREY,11);
                            pdisplay(18,$$,INFO,DISPLAY,GREY,11);
                        } endif
                        //
                        Wie gesagt, so ca. sieht es noch an 5-6 anderen Positionen in meinem Code aus. Der erste Rolloteil hat noch funktioniert, ab dem Russound Teil nicht mehr.
                        Gleichen Code nur an allen Stellen zeitversetztes "after Systemstart()" und es funktioniert.

                        Nach dem letzten Abschnitt setze ich WebInit wieder auf aus.
                        Zuletzt geändert von MrKNX; 11.12.2016, 21:21. Grund: Kopierfehler
                        MfG MrKnx

                        Kommentar


                          #13
                          so auf den ersten Blick würde ich sagen, dass liegt an deiner verschachtelten if-Abfrage!

                          Die erste if ist kurz nach Systemstart immer erfüllt, da WebInit=EIN. Aber dann fragst Du ja noch ein zweites if ab und dem ist das WebInit dann egal.
                          ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                          Kommentar


                            #14
                            Hallo,
                            du beziehst dich auf meine RolloRegenFreigabe.?
                            Ist aber eigentlich so beabsichtigt, da die zweite IF erst durch die WebInit ==EIN abgefragt wird und da geht es nurmehr darum, ob RolloRegenFreigabe EIN ist oder AUS.!

                            Oder funktioniert das so nicht?
                            MfG MrKnx

                            Kommentar


                              #15
                              Rollo und Multimedia. Verschachtelte if-Abfragen sind generell tricky.

                              was ist den mit dem Block (if (WebInit) then {) ganz unten? Der sollte funktionieren.
                              ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                              Kommentar

                              Lädt...
                              X