FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Guybrush am 13 Mai 2025, 15:42:55

Titel: widgetList in SetFn ?
Beitrag von: Guybrush am 13 Mai 2025, 15:42:55
Ich brauche für ein Modul eine Möglichkeit, mit der man bei einem Set Befehl 2 Dropdown Felder nutzen kann. Ich hab das versucht mit widgetList zu realisieren, aber das funktioniert nicht. Geht das denn nur bei z.B. setList und nicht innerhalb einer Set Funktion eines Moduls?

hier mal die Funktion aufs wesentliche zusammengekürzt:

sub JUDO_Set($@) {
  my ($hash, @param) = @_;
  return "Unknown argument $cmd, choose one of scene:widgetList,9,select,15min,30min,45min,60min,2h,6h,12h,permanent,3,select,Szene1,Szene2";
}

Ich ging jetzt eigentlich davon aus, dass mir damit nun 2 Dropdowns angezeigt werden. Ich seh aber nur eines mit allen Angaben von "widgetList,9,...Szene2"
Hab ich da einen Denkfehler oder geht das grundsätzlich nicht?
Titel: Aw: widgetList in SetFn ?
Beitrag von: erwin am 13 Mai 2025, 17:32:30
Hi,
das schaut eigentlich ok aus, zur Sicherheit, poste doch das widgetOverride Attribut...
l.g. erwin
PS: Ein Beispiel von mir:
widgetOverride blink@set:widgetList,2,textField,Anzahl_blinks,2,textField,Dauer(sec) Blinker@set:widgetList,4,select,on,off,blink,2,textField,Anzahl_blinks,2,textField,Dauer(sec)
Titel: Aw: widgetList in SetFn ?
Beitrag von: Guybrush am 13 Mai 2025, 19:23:30
Doofe Frage - wie setz ich das im Code?  :P

Ich schreib grad ein Modul für die Anbindung meiner Enthärtungsanlage an FHEM
Titel: Aw: widgetList in SetFn ?
Beitrag von: erwin am 13 Mai 2025, 20:26:54
ok, ich war evtl. unpräzise:

1) um im WEB Interface mehrere select, Eingabefelder, ... zu haben, musst du attr xxx widgetOverride widgetList ..... in deinem device verwenden. Natürlich kannst du dieses Attribut auch während der device definition (z.b. in define-funktion) setzen.
2) die set-Fn im code ist dazu da, die Eingaben die du in die (mehrfachen ) Felder gemacht hast zu verarbeiten. Der Trick hierbei ist dass die Werte Kommasepariert (siehe cmd-ref) an die setFn übergeben werden.
sub X_Set ($$@)
{  my ( $hash, $name, $cmd, @args ) = @_;
   . . .
In deinem Beispiel würde in $args[0] der string "15min,szene2" stehen.
Das musst du im code auseinanderdröseln...
l.g. erwin
Titel: Aw: widgetList in SetFn ?
Beitrag von: Beta-User am 13 Mai 2025, 23:29:21
Die Widgets werden aus der Antwort zu getAllSets() generiert. Einfach das Widget im Rückgabestring auf "?" angeben und "gut ist".

Edit: Also eigentlich so, wie du es gemacht hattest :o ...
Hmmmm. Ist in Anfängerfragen ggf. nicht optimal untergebracht.
Titel: Aw: widgetList in SetFn ?
Beitrag von: Guybrush am 14 Mai 2025, 09:59:07
Zitat von: Beta-User am 13 Mai 2025, 23:29:21Hmmmm. Ist in Anfängerfragen ggf. nicht optimal untergebracht.

ich wollte erst unter development posten, aber dort konnte ich kein neues Thema erstellen  :P  In welchem board wäre es denn besser?
Titel: Aw: widgetList in SetFn ?
Beitrag von: Guybrush am 14 Mai 2025, 10:02:26
Zitat von: Beta-User am 13 Mai 2025, 23:29:21Die Widgets werden aus der Antwort zu getAllSets() generiert. Einfach das Widget im Rückgabestring auf "?" angeben und "gut ist".

Edit: Also eigentlich so, wie du es gemacht hattest :o ...

das irritiert mich ja auch.

das ist die vollständige def:
return "Unknown argument $cmd, choose one of password desiredWaterHardness:slider,0,1,20 saltSupplyWarning waterMaxDuration waterMaxFlow waterMaxVolumeFlow leakageProtection:open,close regeneration:noArg scene:widgetList,9,select,15min,30min,45min,60min,2h,6h,12h,permanent,3,select,Szene1,Szene2";

slider bei desiredWaterHardness geht, regeneration noArg wird auch berücksichtigt und dropdown bei leakageProtection geht auch. nur das doppelte / widgetList bei scene nicht.
Titel: Aw: widgetList in SetFn ?
Beitrag von: Beta-User am 14 Mai 2025, 10:14:49
Zitat von: Guybrush am 14 Mai 2025, 09:59:07
Zitat von: Beta-User am 13 Mai 2025, 23:29:21Hmmmm. Ist in Anfängerfragen ggf. nicht optimal untergebracht.

ich wollte erst unter development posten, aber dort konnte ich kein neues Thema erstellen  :P  In welchem board wäre es denn besser?
Hmmm, entweder als Tester oder Developer registrieren, dann geht es in Development, oder Frontend (FHEMWEB).
Zitat von: Guybrush am 14 Mai 2025, 10:02:26nur das doppelte / widgetList bei scene nicht.
Das "select"-Widget muss auch vorab geladen werden, vielleicht liegt es daran?

Allerdings irritiert mich dabei
Zitat von: Guybrush am 13 Mai 2025, 15:42:55Ich seh aber nur eines mit allen Angaben von "widgetList,9,...Szene2"
Das impliziert, dass "select" geladen worden wäre? Vielleicht mal testweise einen der anderen set-Befehle (leakageProtection?) mit select zurückgeben?
Titel: Aw: widgetList in SetFn ?
Beitrag von: Guybrush am 14 Mai 2025, 20:15:02
ich hb ja das select. aber eben nur eins wo auch ,3,select,Szene1,Szene2 etc drin steht. der trennt das nicht sondern stellts als ein dropdown dar
Titel: Aw: widgetList in SetFn ?
Beitrag von: Beta-User am 14 Mai 2025, 20:18:56
Zitat von: Guybrush am 14 Mai 2025, 20:15:02ich hb ja das select. aber eben nur eins wo auch ,3,select,Szene1,Szene2 etc drin steht. der trennt das nicht sondern stellts als ein dropdown dar
Was spricht dagegen, leakageProtoction mal tastweise als "einfaches" select zu ergänzen?
Titel: Aw: widgetList in SetFn ?
Beitrag von: Guybrush am 14 Mai 2025, 20:24:20
Zitat von: Beta-User am 14 Mai 2025, 20:18:56Was spricht dagegen, leakageProtoction mal tastweise als "einfaches" select zu ergänzen?

dass ich grad faul auf der couch liege und nur ein blödes ipad hier hab  ;D teste ich aber morgen mal
Titel: Aw: widgetList in SetFn ?
Beitrag von: Guybrush am 15 Mai 2025, 15:24:27
Magie. Gerade mit select bei leakageProtection getestet, was direkt ging. das widgetList ging dann aber auch, auch nachdem ich das select wieder entfernt hab bei leakageProtection... keine Ahnung was da los war, aber danke

das geht hier jedenfalls nun wie gewollt:
return "Unknown argument $cmd, choose one of password desiredWaterHardness:slider,0,1,20 saltSupplyWarning waterMaxDuration waterMaxFlow waterMaxVolumeFlow leakageProtection:open,close regeneration:noArg scene:widgetList,12,select,Alltag,Körper,Garten,Urlaub,Wäsche,Hochdruck,Pool,Heizung,Custom1,Custom2,Custom3,9,select,15min,30min,45min,60min,2h,6h,12h,permanent checkAddresses:noArg";
Titel: Aw: widgetList in SetFn ?
Beitrag von: Beta-User am 15 Mai 2025, 15:58:34
Zitat von: Guybrush am 15 Mai 2025, 15:24:27Magie. Gerade mit select bei leakageProtection getestet, was direkt ging. das widgetList ging dann aber auch, auch nachdem ich das select wieder entfernt hab bei leakageProtection... keine Ahnung was da los war, aber danke

das geht hier jedenfalls nun wie gewollt:
return "Unknown argument $cmd, choose one of password desiredWaterHardness:slider,0,1,20 saltSupplyWarning waterMaxDuration waterMaxFlow waterMaxVolumeFlow leakageProtection:open,close regeneration:noArg scene:widgetList,12,select,Alltag,Körper,Garten,Urlaub,Wäsche,Hochdruck,Pool,Heizung,Custom1,Custom2,Custom3,9,select,15min,30min,45min,60min,2h,6h,12h,permanent checkAddresses:noArg";
Das funktioniert vermutlich nur bis zum nächsten FHEM-Start - das Widget muss halt irgendwie (!) vorher geladen worden sein...
Titel: Aw: widgetList in SetFn ?
Beitrag von: Guybrush am 15 Mai 2025, 17:43:05
auf meiner Testumgebung hab ich FHEM heute sicher 20-30x neu gestartet. läuft immer noch  ;D
Titel: Aw: widgetList in SetFn ?
Beitrag von: Beta-User am 15 Mai 2025, 20:08:22
Zitat von: Guybrush am 15 Mai 2025, 17:43:05auf meiner Testumgebung hab ich FHEM heute sicher 20-30x neu gestartet. läuft immer noch  ;D
Vielleicht muss das nur bereits im Browser -Cache sein?
Titel: Aw: widgetList in SetFn ?
Beitrag von: Guybrush am 16 Mai 2025, 08:03:03
teste ich nachher auch nochmal, aber ich mach eigentlich immer ein forced refresh, wo das dann auch alles neu geladen wird
Titel: Aw: widgetList in SetFn ?
Beitrag von: Guybrush am 16 Mai 2025, 09:37:32
funktioniert auch mit geleertem cache!
Titel: Aw: widgetList in SetFn ?
Beitrag von: Beta-User am 16 Mai 2025, 10:00:15
Hmmm, dann ist auch gut.

Der Sinn der von Rudi gemachten Einschränkung "das widget muss bereits geladen sein" verstehe ich dann zwar insgesamt nicht, aber wichtig ist ja, dass es am Ende macht, was du möchtest ;D .
Titel: Aw: widgetList in SetFn ?
Beitrag von: ch.eick am 17 Mai 2025, 07:49:12
Moin zusammen,
Um welche JUDO geht es denn hier?
Ich habe meine nur mit httpmod in Fhem.
Eventuell wäre es schön im Titel den Gerätetyp noch zu ergänzen.

VG Christian
Titel: Aw: widgetList in SetFn ?
Beitrag von: Guybrush am 17 Mai 2025, 09:16:09
Um alle Geräte von Judo, die die neue REST API unterstützen. Da läuft dann nichts über die Judo Cloud. Einziges Problem ist, dass die Schnittstelle nicht vollständig dokumentiert ist. Aber läuft soweit schon stabil bei mir

ich hab z.b. eine i-Soft Pro
Titel: Aw: widgetList in SetFn ?
Beitrag von: ch.eick am 17 Mai 2025, 17:20:46
Zitat von: Guybrush am 17 Mai 2025, 09:16:09Um alle Geräte von Judo, die die neue REST API unterstützen. Da läuft dann nichts über die Judo Cloud. Einziges Problem ist, dass die Schnittstelle nicht vollständig dokumentiert ist. Aber läuft soweit schon stabil bei mir

ich hab z.b. eine i-Soft Pro
In meiner Implementierung wird auch die lokale API verwendet.
Titel: Aw: widgetList in SetFn ?
Beitrag von: Guybrush am 17 Mai 2025, 19:11:29
https://forum.fhem.de/index.php?topic=141675.0

kannst du gerne mal testen und feedback geben
Titel: Aw: widgetList in SetFn ?
Beitrag von: ch.eick am 18 Mai 2025, 11:09:13
Zitat von: Guybrush am 17 Mai 2025, 19:11:29https://forum.fhem.de/index.php?topic=141675.0

kannst du gerne mal testen und feedback geben
Mir ging es darum, dass Du die Funktionalität übernehmen könntest ;-)
Titel: Aw: widgetList in SetFn ?
Beitrag von: Guybrush am 18 Mai 2025, 11:12:11
die von dir dort beschriebene Vorgehensweise funktioniert bei mir nicht. Hatte ich zuvor auch gesehen, dass du da schon ein proof of concept implementiert hattest. Ich habe bei meiner Enthärtungsanlage nur den port 80 bzw 443 offen, je nachdem ob SSL aktiviert ist oder nicht. Möglich, dass es bei neuen Geräten nur noch über die REST API geht. die Anlage hat nicht mal ein webinterface. scheinbar geht da nur die api oder cloud..