Ankündigung

Einklappen
Keine Ankündigung bisher.

Init and Change()

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

    Init and Change()

    Hallo Zusammen,

    folgender Code liefert im Button keinen Anzeigewert:

    if Init and change(Google_Wind) then \\
    pdisplay(ID_Status_Wind,Google_Wind,WIND,INACTIVE, GREY,PageID_Status) \\
    endif

    Init ist wie folgt definiert:

    Init = AUS
    if after(systemstart(),5000u64) then \\
    Init = EIN \\
    endif

    Mein Verständnis ist, dass hier bei Init == EIN (also 5 Sek. nach Systemstart) und bei jedem change() eine Aktualisierung der Button Anzeige stattfinden sollte.

    Laut Debugger ist Init auf EIN und für Google_Wind liegt ein Wert vor, aber der Button bleibt trotzdem dauerhaft leer. Ohne Init erfolgt sofort eine Aktualisierung des Buttons.

    Darf change() nicht mit einer anderen Bedingung Und-Verknüpft werden?

    Patch: 2.300
    Eibstudio Mac: 2.300

    Viele Grüße

    Michael

    #2
    Zitat von Jambala Beitrag anzeigen
    .
    Darf change() nicht mit einer anderen Bedingung Und-Verknüpft werden?
    Doch, ist aber ein Bug in der 2.300:
    Hiermit konnte ich testen (ändern per Debugger):
    [highlight=epc]
    x=0
    Google_Wind=34f16
    if Init and change(Google_Wind) then x=3 endif
    Init = AUS
    if after(systemstart(),5000u64) then Init = EIN endif
    [/highlight]
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Hallo Michael,

      der Bug verhält sich aber äußerst merkwürdig.

      Ich habe bei mir auf einer Webpage die Google Wetterdaten und die Zeiten für Sonnenaufgang und Sonnenuntergang via Button dargestellt.

      Alle dazugehörigen Werte liegen laut Debugger ordnungsgemäß vor.

      Die Google Wetterdaten werden aber nur angezeigt, wenn ich in der Bedingung von pdisplay auf das Init verzichte und nur ein change() nutze. Bei Init or change() ... bleiben die Buttons ohne Information, also vermutlich der Bug den Du hier genannt hast.

      Bei den Zeiten für Sonnenaufgang und -untergang erfolgt jedoch nur eine Button-Anzeige wenn ich Init or change() verwende. Ohne das Init bleiben die Button auch nach Tagen ohne Information.

      Ich kann darin kein logisches Verhalten erkennen (auch für einen Bug nicht).

      Hier die wesentlichen Teile des EPC Codes dazu:

      Sonnenaufgang = stringformat(sunrisehour(),0,3,1,1) + $.$ + stringformat(sunriseminute(),0,3,2,2) + $ Uhr$

      -> Wert laut Debugger: 5.17 Uhr

      So funktioniert die Anzeige:

      if Init or change(Sonnenaufgang) then \\
      pdisplay(ID_Status_Sonnenaufgang,Sonnenaufgang,CLO CK,INACTIVE,GREY,PageID_Status) \\
      endif

      So funktioniert sie nicht:

      if change(Sonnenaufgang) then \\
      pdisplay(ID_Status_Sonnenaufgang,Sonnenaufgang,CLO CK,INACTIVE,GREY,PageID_Status) \\
      endif

      So funktioniert die Google Wolken Anzeige:

      if change(Google_Wolken) then \\
      pdisplay(ID_Status_Wetter,Google_Wolken,WEATHER,IN ACTIVE,GREY,PageID_Status) \\
      endif

      So funktioniert die Google Wolken Anzeige nicht:

      if Init or change(Google_Wolken) then \\
      pdisplay(ID_Status_Wetter,Google_Wolken,WEATHER,IN ACTIVE,GREY,PageID_Status) \\
      endif

      Im Anhang findest Du einen Screenshot der Webpage nach 2-3 Tagen Dauerbetrieb. Aktuell beinhaltet der dazugehörige Code für alle Buttons die Bedingung:

      if Init or change() then ...

      Wie Du sehen kannst funktioniert dies bei den Zeiten für Sonnenauf- und untergang, Azimuth und Elevation, aber nicht für sämtliche Google Wetterdaten.
      Sobald ich das Init bei den Wetterdaten wegnehme, funktionieren auch diese.

      Mit dem alten Patch hat dies ohne Unterschiede für alle Buttons funktioniert.

      Viele Grüße

      Michael
      Angehängte Dateien

      Kommentar


        #4
        Welche Versionen hast Du am Laufen? Falls nicht geschehen spiel mal die neuen Versionen Patch 2.303 und EibStudio 2.306 ein.

        Gruß,
        Bernd

        Kommentar


          #5
          Hallo Bernd,

          ich habe Patch 2.300 installiert und konnte noch nicht upgraden, weil das Zip-File vom Eibstudio 2.306 Mac auf dem Exertex Server beschädigt ist (beim Entpacken kommt Fehlermeldung).

          Viele Grüße

          Michael

          Kommentar


            #6
            Zitat von Jambala Beitrag anzeigen
            Hallo Bernd,
            ich habe Patch 2.300 installiert und konnte noch nicht upgraden, weil das Zip-File vom Eibstudio 2.306 Mac auf dem Exertex Server beschädigt ist (beim Entpacken kommt Fehlermeldung).
            Schau mal bitte, sollte jetzt gehen.
            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
            Enertex Produkte kaufen

            Kommentar


              #7
              Zitat von enertegus Beitrag anzeigen
              Schau mal bitte, sollte jetzt gehen.
              Nein immer noch Fehler beim Dekomprimieren, sowohl mit dem Standard Mac Archivierungsprogramm als auch StuffItExpander.

              Kommentar


                #8
                Zitat von Jambala Beitrag anzeigen
                Nein immer noch Fehler beim Dekomprimieren, sowohl mit dem Standard Mac Archivierungsprogramm als auch StuffItExpander.
                Hi,

                Hast Du das Archiv wirklich neu runtergeladen oder war es noch gecached?
                Bei mir geht das Dekomprimieren problemlos.
                Viele Grüße
                Martin

                There is no cloud. It's only someone else's computer.

                Kommentar


                  #9
                  Hoi

                  Im offenen Forum downloaden, da geht's.
                  Grüsse Bodo
                  Fragen gehören ins Forum, und nicht in mein Postfach;
                  EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

                  Kommentar


                    #10
                    Danke Bodo,

                    ich habe den Link im offenen Forum gefunden und das Zip File ist in Ordnung.

                    Die Datei hinter diesem Link ist defekt:

                    https://www.enertex.de/downloads/eib...o-mac-beta.zip

                    Viele Grüße

                    Michael

                    Kommentar


                      #11
                      Zitat von Jambala Beitrag anzeigen
                      Danke Bodo,
                      ich habe den Link im offenen Forum gefunden und das Zip File ist in Ordnung.
                      Wir haben die Version offiziell released.
                      offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                      Enertex Produkte kaufen

                      Kommentar


                        #12
                        Zitat von enertegus Beitrag anzeigen
                        Wir haben die Version offiziell released.
                        Ach so, ja dann ...

                        Bedeutet also ab dem Release zerstören sich die Pre-Release Versionen automatisch, oder wie ???

                        Kommentar


                          #13
                          Also ich hier mit Patch 2.306 keine Änderung im Verhalten feststellen. Die Anfangs beschriebenen Probleme sind unverändert.

                          Kommentar


                            #14
                            So mal zum Thema
                            [highlight=epc]
                            [WebServer]
                            page (1) [$A$,$Seite1$]
                            pbutton(2)[INFO]$Init$ pbutton(3)[INFO]$Init$

                            [EibPC]
                            Google_Wind=$nix$
                            a=10
                            if cycle(0,6) then a=a+10;Google_Wind=$windig $+convert(a,$$) endif

                            if Init and change(Google_Wind) then {
                            pdisplay(2,Google_Wind,WIND,INACTIVE, GREY,1)
                            } endif

                            if Init or change(Google_Wind) then {
                            pdisplay(3,Google_Wind,WIND,INACTIVE, GREY,1)
                            } endif

                            Init = AUS
                            if after(systemstart(),5000u64) then {
                            Init = EIN
                            } endif
                            [/highlight]
                            Der wesentliche Unterschied:
                            a Init and change : Button 2
                            b Init or change : Button 3

                            Bei a ist vor dem Init-Wechsel auf EIN die Anzeige inaktive und wechselt nach 6 Sekunden und Init auf EIN mit jeder Änderung (change) der Variablen Google_Wind. Das Verhalten ist ok, weil ja eine UND Verknüpfung vorliegt, und change nur impulsartig auf EIN und wieder auf AUS wechselt. Dies Bedeutet, dass mit jedem Change das AND erneut validiert wird und die if-Abfrage die Anzeige "ansteuert".

                            Bei b wechselt Init (nach 5 Sekunden) auf EIN und dann steht auf der Anzeige "nix" und wechselt nie mehr, da ja nun change machen kann, was es will: die Oder-Verknüpfung wird nie mehr auf AUS gehen, folglich wird pdisplay für Button 3 nicht mehr angesteuert.
                            1.
                            Jetzt ändere ich
                            [highlight=epc]
                            Google_Wind=stringformat(sunrisehour(),0,3,1,1) + $.$ + stringformat(sunriseminute(),0,3,2,2) + $ Uhr$
                            [/highlight]
                            Alles andere lasse ich gleich: Nun ändert sich die Anzeige entsprechend, die Anzeige des Button mit ID 2 ändert sich alle 6 Sekunden (Fall a), der andere wird sich nie mehr ändern.
                            2.
                            Nun ändere ich das Datum, erwartungsgemäß ändert sich Fall a zur neuen Zeit, Fall b nicht.


                            Wir haben ja da an der Validierung was geändert, um die neue 2.3xx nun (wie oft schon kritisiert) nachvollziehbarer zu machen.

                            Ich finde zumindest in diesem Beispiel keinen Bug, sondern das Verhalten ist erwartungsgemäß. Falls Dein Problem noch besteht, muss es eine andere Ursache haben. Kannst Du es mir in der komprimierten oben angedeuteten Form mal zumailen (eibpc@enertex.de)?
                            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                            Enertex Produkte kaufen

                            Kommentar


                              #15
                              Zitat von enertegus Beitrag anzeigen
                              Der wesentliche Unterschied:
                              a Init and change : Button 2
                              b Init or change : Button 3

                              Bei a ist vor dem Init-Wechsel auf EIN die Anzeige inaktive und wechselt nach 6 Sekunden und Init auf EIN mit jeder Änderung (change) der Variablen Google_Wind. Das Verhalten ist ok, weil ja eine UND Verknüpfung vorliegt, und change nur impulsartig auf EIN und wieder auf AUS wechselt. Dies Bedeutet, dass mit jedem Change das AND erneut validiert wird und die if-Abfrage die Anzeige "ansteuert".

                              Bei b wechselt Init (nach 5 Sekunden) auf EIN und dann steht auf der Anzeige "nix" und wechselt nie mehr, da ja nun change machen kann, was es will: die Oder-Verknüpfung wird nie mehr auf AUS gehen, folglich wird pdisplay für Button 3 nicht mehr angesteuert.
                              Hallo Michael,

                              mit dem Init ist das so eine Sache. Ursprünglich habe ich das nur eingeführt um den Code vor instabilen Zuständen beim Systemstart zu schützen.

                              Der folgende Code mit einer Und-Verknüpfung, wie von Dir vorgeschlagen, liefert aber erst frühestens beim Tageswechsel eine Anzeige, da der Zeitpunkt des Sonnenaufgangs sich max. 1x pro Tag ändert. Die erste Änderung von 0 auf z.B. 5.16 Uhr erfolgt aber i.d.R. innerhalb der üblichen 5 Sekunden des Inits und greift somit nicht direkt. Die Anzeige im Webserver bleibt so also min. bis Mitternacht leer. Anders sieht es natürlich beim gleichen Code aus, wenn anstatt dem Sonnenaufgang die Uhrzeit angezeigt werden soll. Die ändert sich ja bekanntlich häufiger am Tag.

                              [highlight=epc]
                              Sonnenaufgang=stringformat(sunrisehour(),0,3,1,1) + $.$ + stringformat(sunriseminute(),0,3,2,2) + $ Uhr$
                              if Init and change(sonnenaufgang) then pdisplay ... endif
                              [/highlight]

                              Für o.g. Fälle mit selten ändernden Werten habe ich nun diesen Code genommen:

                              [highlight=epc]
                              Sonnenaufgang=stringformat(sunrisehour(),0,3,1,1) + $.$ + stringformat(sunriseminute(),0,3,2,2) + $ Uhr$
                              if Init or change(sonnenaufgang) then pdisplay ... endif
                              [/highlight]

                              Für mich ist dabei die Erwartung, dass eine Werteanzeige beim Wechsel des Init von Aus auf Ein und bei jedem Wechsel der Sonnenaufgangszeit erfolgt. Den ursprünglich angestrebten Schutz vor instabilen Zuständen beim Systemstart hat man dabei nicht.

                              Möglicherweise kann man in solchen Fällen das Init auch gleich weglassen, aber hier offenbart sich für mich eine Merkwürdigkeit des EibPC. Ein if change(sonnenaufgang) ... endif hat die gleichen o.g. Konsequenzen wie ein if Init and change(sonnenaufgang) ... endif. Für eine unmittelbare Anzeige muß ich aktuell if Init or change(sonnenaufgang) ... endif nutzen.

                              Aus meiner Sicht gibt es somit keine generelle Empfehlung für AND oder OR in Zusammenhang mit Init.

                              Viele Grüße

                              Michael

                              Kommentar

                              Lädt...
                              X