Ankündigung

Einklappen

Sammelbestellung ETS6 Vollversionen aktiv!

Sammelbestellung für ETS6 Vollversionen (Prof., Home, Lite) mit 40% Rabatt aktiv! Infos im Forum!
Mehr anzeigen
Weniger anzeigen

Änderung Verhalten webinput()

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

    Änderung Verhalten webinput()

    In der 5.4 lief folgender verkürzter Code problemlos:
    Code:
    if change(webinput(ID)) then var = webinput(ID); endif;
    Damit will ich eine Variable, die an mehreren Stellen und nicht nur durch webinput() geändert werden kann, kontrolliert ändern.

    Das geht nun nicht mehr, spätestens ab Firmware 5.506. Der then-Zweig wird zwar ausgeführt, aber webinput() liefert dort nun nur noch einen Leerstring. Also change() triggert, aber das zweite webinput() ist leer.

    Weder Changelog noch Doku geben ein Hinweis auf diese Änderung.

    Ist es ein Bug oder ein Feature? Die Doku lässt da Freiraum, wobei ich die Rückgabe eines Leerstrings für fachlich falsch halte.

    Wenn es so bleibt, ist es ärgerlich, denn es zwingt zur Einführung weiterer eigentlich temporärer/lokaler Variablen mit mehr Code:

    Code:
    var_webinput = webinput(ID)
    if change(var_webinput) then var = var_webinput; endif;
    KNX, openHAB 4.3, EibPC²

    #2
    Hi,

    vermutlich ein Bug. Wahrscheinlich dann bereits ab 5.5xx, da hier einiges an der Visu-Kommunikation "optimiert" wurde. Anführungszeichen wegen neuer Fehler, generell ist die Kommunikation schon deutlich verbessert

    Kommentar


      #3
      Ok. Wann kann ich mit einem Fix rechnen?

      Wenn es zu lange dauert, muss ich den Code umbauen.

      Wo wir gerade bei webinput() sind: Zurzeit wird die Änderung bei der Eingabe eines jeden Zeichens getriggert. Das ist sinnvoll, wenn man während der Eingabe Prüfungen laufen lassen und dem User Hinweise geben will.

      Der Nachteil ist, dass man eigentlich nie weiß, wann die Eingabe tatsächlich abgeschlossen ist. Hier fehlt der Hinweis auf den Fokuswechsel, der eine Eingabe abschließt.
      ​​​​​

      Es wäre daher schön, wenn man in Erfahrung bringen könnte, dass der Fokuswechsel stattgefunden hat, ggf. als weiterer Parameter von webinput().
      Zuletzt geändert von Tokamak; 13.06.2026, 11:08.
      KNX, openHAB 4.3, EibPC²

      Kommentar


        #4
        das ist ne gute Idee!

        Kommentar


          #5
          Hi,

          Zitat von Tokamak Beitrag anzeigen
          Wo wir gerade bei webinput() sind: Zurzeit wird die Änderung bei der Eingabe eines jeden Zeichens getriggert.
          Das dürfte nicht der Fall sein und zumindest mit Chrome Version 149.0.7827.102 (Linux) und Edge Version 149.0.4022.69 (Win) wird der neue Wert auch erst bei Bestätigung durch Enter oder Fokuswechsel ausgelöst.

          Zitat von Tokamak Beitrag anzeigen
          Das geht nun nicht mehr, spätestens ab Firmware 5.506
          Bei 5.407 geht es tatsächlich. Dies ist nun auch bei 5.508 wieder der Fall und sollte sich identisch verhalten.

          Aber:
          Die Abfrage/Zuweisung innerhalb eines if ist potentiell problematisch, weil das webinput durch das if auch nur dann ausgewertet wird, wenn die Bedingung erfüllt ist. Bei change() ist dies erst im nächsten Zyklus der Fall. Voraussetzung, dass die Zuweisung innerhalb des if korrekt ist, ist, dass zwischenzeitlich keine anderen Rückgaben aus der Visu kamen.
          Falls doch bekommt der webinput innen keinen oder einen anderen neuen Wert, weil die aktuelle Rückmeldung von einem anderen Webelement stammt oder bereits ein neuer Wert aus dem webinput kommt.
          Intern wird pro 2 Zyklen nur maximal 1 Webresponse verarbeitet, der dann zu n Funktionen gehören kann (sofern sie die gleiche ID/PageID verwenden)

          Folge ist, dass Code wie dieser in den seltensten Fällen sinnvoll ist:

          Code:
          x13=$$
          if after(change(webinput(wi12)), 5000u64) then x13=webinput(wi12); pdisplay(wb13, CLOCK_STRING + $: $+x13 , CLOCK, ACTIVE, BLINKRED, wb13_P); endif
          Mögliches Verhalten:
          Wenn in den 5 Sekunden nach Änderung
          • kein anderer Webresponse verarbeitet werden muss, bekommt x13 den eingegebenen Wert und das pdisplay zeigt diesen an
          • ein anderer Webresponse verarbeitet werden muss, der auch vom wi12 kommt, wird 5 Sekunden nach dem Ersten der aktuelle Wert des Letzten übernommen.
          • ein anderer Webresponse von einem anderen Element als wi12 verarbeitet werden muss, aktualisiert der innere webinput seinen Zustand nicht, da das Webresponse 5 Sekunden nach dem change() nicht mehr zu wi12​ gehört.

          Kommentar

          Lädt...
          X