Autor Thema: Erster Eintrag der "set" Liste macht kein "refresh"  (Gelesen 779 mal)

Online Adimarantis

  • Developer
  • Full Member
  • ****
  • Beiträge: 445
Erster Eintrag der "set" Liste macht kein "refresh"
« am: 19 September 2021, 21:53:11 »
Hallo,

mir ist schon länger aufgefallen, dass beim ersten Eintrag der "set" Liste die Kurzhilfe nur dann angezeigt wird, wenn man auf einen anderen Eintrag und dann wieder zurück geht.
Zugegeben etwas schwierig zu lösen da ja meist "set" und "get" auf den ersten Eintrag initialisiert werden, wenn man die Seite öffnet - was sollte man nehmen?

Jetzt ist mir aber noch ein Unterschied aufgefallen, der eindeutiger ist:
Bei jedem "set" Befehl wird der Seite nach Ausführung "refreshed", d.h. auch die FW_detailFn aufgerufen, so das dortige dynamische Inhalte aktualisert werden.
Nur beim ersten Befehl der "set" Liste passiert das nicht - da bleibt alles so stehen, was mich gerade in der Modulentwicklung (aufgrund der dynamischen Inhalte) extrem stört. Ist das so gewollt, ein Bug - oder mache ich etwas falsch?

Jörg
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , (50_SPI_MAX31865)

Online Adimarantis

  • Developer
  • Full Member
  • ****
  • Beiträge: 445
Antw:Erster Eintrag der "set" Liste macht kein "refresh"
« Antwort #1 am: 20 September 2021, 08:46:48 »
Vielleicht noch eine Anregung:

Es wäre Klasse, wenn man irgendwie beinflussen könnte, welches der erste Eintrag in der Liste ist (statt einfach alphabetisch). Das wäre auch ein Workaround für mein Problem.
Ich schätze mal deswegen hat Telegrambot ein redundantes set "_msg", denn das ist ja die Kernfunktionalität und steht sinnvollerweise als default vorne.
Mir gefallen redundante Einträge aber nicht so (macht die set Liste unübersichtlicher).
Eine Idee: Wenn z.B. "_msg" und "msg" definiert ist (Telegrambot), dann werden beide Einträge in der Liste zusammengeführt und nur als "msg" dargestellt, aber an den Anfang gestellt.
Oder einfach im Type ("default,textField" oder "*textField").
Oder noch gezielter im Type mit Sortierung: "1:textField" , "2:noArg" ....
Oder gibts es das gar schon und ich finde es einfach nicht in der Doku?

Jörg

Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , (50_SPI_MAX31865)

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24499
Antw:Erster Eintrag der "set" Liste macht kein "refresh"
« Antwort #2 am: 20 September 2021, 12:41:54 »
Zitat
Bei jedem "set" Befehl wird der Seite nach Ausführung "refreshed", d.h. auch die FW_detailFn aufgerufen, so das dortige dynamische Inhalte aktualisert werden. Nur beim ersten Befehl der "set" Liste passiert das nicht
Das kann ich so nicht nachstellen, ich sehe den refresh nur bei attr oder bei "set attrTemplate". Kannst du mir was Konkretes zum Nachstellen zeigen?

Wegen Sortieren: erstens bin ich unsicher, ob eine Modulspezifische Sortierung ueberhaupt sinnvoll ist.
Wenn Andere sich auch dafuer aussprechen, dann muesste man eine Modul- und eine Instanzpezifische Moeglichkeit schaffen, die Liste zu sortieren. Einen Hack wie Prefix oder doppelte Eintraege will ich vermeiden, weil diese Liste nicht nur in FHEMWEB verwendet wird.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15717
Antw:Erster Eintrag der "set" Liste macht kein "refresh"
« Antwort #3 am: 20 September 2021, 13:09:58 »
Weiß nicht, ob man es modulspezifisch braucht, und ob es überhaupt in allen Fällen wünschenswert ist, das sortieren zu können, aber attrTemplate vorne oder blink als 2. finde ich eigentlich auch nicht in allen Fällen die optimale Lösung, dto. für case-Sensivität.

Evtl. könnte man einfach die Reihenfolge beachten, die getAllSets liefert? Dann hätte es der Modulautor durch das
return "Unknown argument, choose one of execNow:noArg active:noArg inactive:noArg"
      if $arr[1] eq '?';
in der Hand...?
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24499
Antw:Erster Eintrag der "set" Liste macht kein "refresh"
« Antwort #4 am: 20 September 2021, 13:30:26 »
Zitat
Evtl. könnte man einfach die Reihenfolge beachten, die getAllSets liefert?
Erstens ist das nicht ganz so einfach (sort ist relativ tief versteckt), zweitens wuerde das zunaechst zu "Unordnung" in den meisten Modulen fuehren.

Online Adimarantis

  • Developer
  • Full Member
  • ****
  • Beiträge: 445
Antw:Erster Eintrag der "set" Liste macht kein "refresh"
« Antwort #5 am: 20 September 2021, 13:32:17 »
Zitat
Evtl. könnte man einfach die Reihenfolge beachten, die getAllSets liefert?
Grundsätzlich würde das funktionieren - schmeisst nur bei allen Modulen die sich auf die Sortierung verlassen die sets möglicherweise durcheinander, was potentiell die Anwender verwirren wird. (da war Rudi schneller)

Vor kurzem wurde ja eine Gruppierung in den Attributen eingebaut, was die Übersichtlichkeit sehr erhöht hat. Sowas wäre bei Modulen die sehr viele sets/gets haben auch recht nett - greift natürlich noch tiefer in das Konzept ein.

Ich finde ja generell, dass der Rückgabewert der "set" Funktion geparsed wird ein gewöhnungsbedürftiges Konzept. Ich weiss, ich mache da jetzt ein grosses Fass auf, aber da könnte man sich auch überlegen einen spezifischen API Call zur Verfügung zu stellen (nimmt einen %sets Hash als Parameter) - da könnte man dann auch Sortierung, Divider, Überschriften etc. abbilden da es nicht rückwärtskompatibel sein muss.

Zitat
Das kann ich so nicht nachstellen, ich sehe den refresh nur bei attr oder bei "set attrTemplate". Kannst du mir was Konkretes zum Nachstellen zeigen?
Ok, ich hatte gehofft das es da einen offensichtlichen Unterschied gibt. Dann muss ich mal sehen, das ich ein Minimalmodul baue. Vielleicht habe ich ja selbst noch irgendeinen Unterschied drin, der mir bei meinem doch recht grossen Modul einfach nicht auffällt.
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , (50_SPI_MAX31865)

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15717
Antw:Erster Eintrag der "set" Liste macht kein "refresh"
« Antwort #6 am: 20 September 2021, 13:42:24 »
Das mit der Verwirrung ist klar, eventuell müßte man da irgendeine Art Übergangszeit einplanen, modulseitig ein Flag setzen können o.Ä..

Andererseits ist es an dieser Stelle ja von den Maintainern relativ leicht zu "reparieren", und man könnte klarer machen, was ggf. "im Modul" abgebildet wird, und was dann an SetExtensions weitergegeben wird (falls es z.B. eine modulinterne Implementierung für on-for-timer gibt). Hier entstehen nämlich andererseits auch immer wieder Fragen, weil nicht klar ist, dass z.B. bei CUL_HM der Timer auf dem Aktor läuft (kein gutes Beispiel, denn das reicht "den Rest" nicht an SetExtensions durch).

Nachtrag: Da jede neue Art der Sortierungsmöglichkeit Rückfragen der User provozieren wird, ist es m.E. fast egal, wie herum man das angeht... Der eigentliche Unterschied zu einem zusätzlichen Hash besteht dann darin, dass es der jeweilige Maintainer in der Hand hätte, wann bestimmte Sortierungen dann greifen.
« Letzte Änderung: 20 September 2021, 13:47:02 von Beta-User »
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Online Adimarantis

  • Developer
  • Full Member
  • ****
  • Beiträge: 445
Antw:Erster Eintrag der "set" Liste macht kein "refresh"
« Antwort #7 am: 20 September 2021, 16:16:44 »
Ok, mein Minimodul mit 2 "sets" verhält sich wie gewünscht.
Ich finde nur nicht was mein Modul bei diesem einen "set" Punkt anders macht - und bevor ich den Namen so geändert hatte, das es "erster" wurde hatte es auch geklappt (oder ich hab im selben Zuge was anderes geändert?). Da muss ich wohl selber erstmal weiter stöbern.

Die Diskussion was man an der Sortierung/Darstellung der "sets" verbessern könnte, finde ich aber weiter interessant. Kommentare dazu?

Jörg
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , (50_SPI_MAX31865)

Online Adimarantis

  • Developer
  • Full Member
  • ****
  • Beiträge: 445
Antw:Erster Eintrag der "set" Liste macht kein "refresh"
« Antwort #8 am: 20 September 2021, 17:39:07 »
Ich glaube ich das Szenario gefunden!

Das Problem tritt auf, wenn es ein Reading gibt, das den selben Namen hat wie das "set"!

Wenn man das reading mit setreading/deletereading erstellt/löscht kann man das wunderbar nachstellen.

Ich hänge mal mein Mini Modul an.
Wenn man hier die beiden "set" Befehle ausführt, dann wird dynamisch das Detail geändert und immer aktualisert.
sobalb man z.B.
setreading test account xxxxmacht, funktioniert das plötzlich für das eine "set" nicht mehr wie gewohnt (erst nach einem Browser refresh)

Ich hoffe damit kann man der Sache auf den Grund gehen.

Gruß,
Jörg
« Letzte Änderung: 20 September 2021, 17:43:57 von Adimarantis »
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , (50_SPI_MAX31865)

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24499
Antw:Erster Eintrag der "set" Liste macht kein "refresh"
« Antwort #9 am: 21 September 2021, 11:20:05 »
Zitat
Das Problem tritt auf, wenn es ein Reading gibt, das den selben Namen hat wie das "set"!
Wenn bei set oder attr ein Element mit dem gleichen informid Attribut auf der Seite vorhanden ist, dann wird kein reload durchgefuehrt, weil in diesem Fall nur der Inhalt des Readings/Attributes aktualisiert werden muss, und das passiert automatisch per longpoll, d.h. man kann das Laden der Seite sparen.

Online Adimarantis

  • Developer
  • Full Member
  • ****
  • Beiträge: 445
Antw:Erster Eintrag der "set" Liste macht kein "refresh"
« Antwort #10 am: 21 September 2021, 13:51:42 »
Ok, heisst das ich muss einfach darauf achten, dass sets, gets, attribute und readings immer unterschiedliche Namen haben müssen?

Mir ist das schon an anderer Stelle aufgefallen, dass sich manche attr oder set Kommandos "komisch anfühlen" - wohl weil man kein optisches Feedback (durch den refresh) bekommt. Da ist man dann versucht mehrmals zu klicken weil man das Gefühl hat FHEM reagiert nicht. Ich schätze mal auch hier die Namensgleichheit zuschlägt.

Kann man diese ID nicht eindeutiger machen um dieses Verhalten konsistenter zu machen?
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , (50_SPI_MAX31865)

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24499
Antw:Erster Eintrag der "set" Liste macht kein "refresh"
« Antwort #11 am: 21 September 2021, 14:48:07 »
Noch eindeutiger als gleich?

Online Adimarantis

  • Developer
  • Full Member
  • ****
  • Beiträge: 445
Antw:Erster Eintrag der "set" Liste macht kein "refresh"
« Antwort #12 am: 21 September 2021, 15:32:45 »
Was meinst du jetzt?

Ich würde bevorzugen, wenn sich alle Aktionen gleich verhalten und nicht davon abhängen ob es Readings mit dem gleichen Namen gibt.
Vielleicht noch ein Aspekt hierbei:
Wenn ich einen "set" Befehl ausführe, der nicht der erste in der Liste ist, dann springt die "set" liste zurück auf den ersten Eintrag.
Wenn es aber ein reading mit dem selben Namen gibt, dann bleibt "set" auf dem aktuellen Befehl stehen.

Kann ich den "refresh" irgendwie manuell auslösen? (sonst muss ich für meinen Anwendungsfall jetzt wirklich readings oder set Befehle umbenennen um das erwünschte Verhalten zu bekommen)

Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , (50_SPI_MAX31865)

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24499
Antw:Erster Eintrag der "set" Liste macht kein "refresh"
« Antwort #13 am: 21 September 2021, 15:54:04 »
Zitat
Ich würde bevorzugen, wenn sich alle Aktionen gleich verhalten und nicht davon abhängen ob es Readings mit dem gleichen Namen gibt.
Ich bin anderer Ansicht: Ich versuche bestimmte haeufig auftretende Faelle zu optimieren.
Das "Zurueckspringen" ist ein Artifakt des Seite-Neu-Ladens.

Zitat
Kann ich den "refresh" irgendwie manuell auslösen? (sonst muss ich für meinen Anwendungsfall jetzt wirklich readings oder set Befehle umbenennen um das erwünschte Verhalten zu bekommen)
Du kannst per eigenes JavaScript das Verhalten ueberschreiben.

Online Adimarantis

  • Developer
  • Full Member
  • ****
  • Beiträge: 445
Antw:Erster Eintrag der "set" Liste macht kein "refresh"
« Antwort #14 am: 21 September 2021, 16:20:03 »
Ich bin anderer Ansicht: Ich versuche bestimmte haeufig auftretende Faelle zu optimieren.
Da bin ich bei dir. Ich plädiere einfach nur für ein deterministisches Verhalten. Ich weiss nicht wie viele Stunden ich jetzt gesucht habe, bis ich drauf gekommen bin dass die Ursache des "Problems" einfach die Namensgleichheit zwischen "set" und "reading" ist.
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , (50_SPI_MAX31865)

 

decade-submarginal