FHEM Forum

FHEM => Automatisierung => Thema gestartet von: M_I_B am 09 November 2016, 08:37:04

Titel: Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: M_I_B am 09 November 2016, 08:37:04
Morgähn Kinnaz,

SuFu hat leider nix ergeben, daher mal hier, wobei es sich im Grunde um drei Fragen handelt...

1.:
Kann ich einen Slider als reine Anzeige setzen, also die Möglichkeit des Bewegens mit der Maus deaktivieren?

2.:
Wie kann man die Wertangabe des Sliders "vor" dem Slider unterbinden (siehe Bild)?

3.:
Gibt es eine (geschickte) Möglichkeit, den Slider dynamisch einzufärben? Also z.B. von blau über grün zu rot in Abhängigkeit eines Vergleiches zwischen dem Wert des Sliders und einem SOLL- Wert?


Das hat bestimmt schon mal wer gefragt oder gemacht, nur leider finde ich es über die SuFu nicht...

Titel: Antw:Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: rudolfkoenig am 09 November 2016, 10:30:55
Ich gehe davon aus (ohne es geprueft oder getestet zu haben), dass die Fragen mit Nein/Gar nicht/Nein zu beantworten sind. Soweit ich weiss, bis du der Erste mit diesen Fragen, und hast damit die Ehre, meine Annahmen zu verifizieren und ggf. Abhilfe implementieren zu duerfen :)
Titel: Antw:Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: justme1968 am 09 November 2016, 10:36:49
der wer vor dem slider müsste STATE sein. das bekommst du über stateFormat weg.

zu read-only und farbe: mit ein paar zeilen java script würde das gehen.

der colorpicker verwendet im hsv mode schon eine positions abhängige farbe.

genau so könnte man einen rangeSlider bauen der zwei zusätzliche parameter für den grün bereich hat.

gruss
  andre
Titel: Antw:Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: M_I_B am 09 November 2016, 11:10:13
@rudolfkoenig: Ich und irgend was implementieren? Ich DAU? *prust* Ne, so weit bin ich noch lange nicht ::)
Wundert mich aber, das noch niemand auf die Idee gekommen ist, die Slider als reine IST-Wert - Anzeige zu nutzen. Finde ich optisch recht gut und im Zusammenhang mit Slidern für SOLL-Werte auf einen Blick zu erfassen ...

@andre: Hmmm... mit stateFormat hatte ich schon rumgehampelt, allerdings ohne Erfolg. Mal ging der Slider nicht mehr, mal war er ganz weg, ... Bin ich wohl zu doof zu  ::)
Was das ReadOnly und Farbe betrifft: JS habe ich nicht auf'm Schirm, fällt also von meiner Seite aus flach. Aber die HSV-ColorPicker- Sache ist ja schon mal ein Ansatz. Den nutze ich ja schon für die China-RGBW- Teile (der hat übrigens eine Macke; wenn der im Raum nicht am Ende steht, funktionieren alle folgenden Slider nicht mehr)...
Titel: Antw:Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: justme1968 am 09 November 2016, 12:30:57
@M_I_B: das angehängte fhemweb_rangeslider.js file nach .../fhem/www/pgm2

[codedefine range dummy                                                       
attr range room range                                                     
attr range setList state:rangeslider,0,0.1,100,1,rmin:45,rmax:55,readonly:1
attr range webCmd state[/code]

mit attr range stateFormat {''} verschwindet die zahl vor dem slider.
eigentlich sollte der slider mit stateFormat nichts zu tun und beides sollte sich auch nicht in die quere kommen.
das ist aber scheinbar nicht so. sieht unten für rudi.

was genau ist das für ein problem mit dem colorpicker?

@rudi:
attr range2 room range
attr range2 setList state:slider,0,1,100
attr range2 stateFormat {''}
attr range2 webCmd state


es schaut so aus als ob sich der slider nicht (nur?) auf das event für state (range2-state) aktualisiert sondern auch noch beim event für STATE (range2). sobald bei stateFormat keine zahl steht 'spinnt' der slider beim anfassen, wenn sich state ändert und auch wenn man z.b. ein attribut setzt da er auf all das reagiert. das passiert nicht wenn man statt state ein anderes reading verwendet, dann geht auch die longpoll aktualisierung, aber wenn man den slider von hand verstellt wird die eigene setValueFn nicht aufgerufen. dadurch wird z.b. beim rangeslider von oben die farbe nicht mehr gesetzt.

ich vermute das ist auch der grund warum bei den abgeleiteten slidern nach dem seinenaufbau (manchmal) der slider wert nicht richtig initialisiert wird wenn ich in meinem js code nicht noch ein $(document).ready(function(arg) { newEl.setValueFn(currVal) }); drin habe.

edit: ich denke es liegt unter anderem an diesen zeilen: 894   if( $(newEl).find("[informId]").length == 0 && !$(newEl).attr("informId") ) {
895     if(reading && reading == "state")
896       $(newEl).attr("informId", devName);
897     else if(reading)
898       $(newEl).attr("informId", devName+"-"+reading);

hier wird explizit die informId so geändert das das event für STATE greif sobald das reading state heisst. ich denke das ist falsch. wenn ich den state sonderfall raus schmeisse funktionieren beide slider von oben wie erwartet. auch wenn stateFormat auf {''} gesetzt wird. inklusive longpoll und farben bei verstellen von hand, der slider spinnt nicht mehr wenn ein attribut gesetz wird.
Titel: Antw:Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: M_I_B am 09 November 2016, 12:56:03
@Andre:
Hey super! Danke für das Script! Baue ich nachher mal gleich ein ;D

Colorpicker- SLider- Dingens:
Damit ist ja das Ding ganz unten in der Anlage gemeint, wa?
Das Ganze im Raum resp. innerhalb einer Gruppe sortiere ich ja mit "sortby x". Wenn ich jetzt den Picker damit z.B. nach ganz oben verlege, dann funktionieren alle danach folgenden Slider nicht mehr. Ich habe den mal bei Umweltdaten einsortiert, einmal an 3. und einmal an 2. Stelle und das Ergebnis als Anlagen angefügt.
Titel: Antw:Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: justme1968 am 09 November 2016, 22:19:24
das problem kann ich mit:define slider1 dummy
attr slider1 room slider
attr slider1 setList state:colorpicker,HSV
attr slider1 webCmd state
define slider2 dummy
attr slider2 room slider
attr slider2 setList state:slider,0,1,100
attr slider2 webCmd state
nicht nachstellen. auch nicht wenn ich die beiden dumys auf unterschiedliche weisen in gruppen packe. bitte probiermal was man ändern muss damit es das problem gibt.
Titel: Antw:Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: justme1968 am 09 November 2016, 22:20:33
@rudi: nur damit es nicht unter geht. bitte schau dir mal das problem an das ich hier: https://forum.fhem.de/index.php/topic,60425.msg518198.html#msg518198 (https://forum.fhem.de/index.php/topic,60425.msg518198.html#msg518198) gefunden habe.
Titel: Antw:Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: rudolfkoenig am 10 November 2016, 15:40:36
Das war schon auf der TODO, ich habe nur mehr Zeit gebraucht, um darueber nachzudenken, wozu die Sonderhandlung gut war. Ich vermute, damit der slider immer das anzeigt, was links daneben steht. Bin jetzt zwar deinem Vorschlag gefolgt, und die Sonderbehandlung entfernt, ganz ueberzeugt von meinem eigenen Handeln bin ich aber nicht. Falls jemand gute Argumente hat, her damit :)
Titel: Antw:Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: justme1968 am 10 November 2016, 15:46:21
ich finde die änderung gut :)

das gleiche kann man ja immer noch anzeigen lassen wenn man will. es ist sogar der default. aber mit der änderung geht es eben auch anders und das ist sonst nicht möglich.

das links daneben gehört ja auch garnicht zum slider sondern ist STATE und wenn man webCmd anders konfiguriert steht es ja nicht unbedingt direkt neben dem slider.


ich glaube die sonderbehandlung kommt noch aus der zeit als das js komplett umgebaut wurde und es die event spezifischen readings noch garnicht wieder gab. die haben wir ja erst nach und nach wieder eingebaut.
Titel: Antw:Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: M_I_B am 10 November 2016, 23:37:23
... so ... war ein bisschen Busy mit anderen Aufgaben ...

Das JS funktioniert wunderbar, nachdem ich dahinter gekommen bin, das man erst mal ein ShutDown&Restart hinlegen muss, das es auch zum Tragen kommt  ::)

Einen dazu hätte ich aber noch in Bezug auf die Parameter- Zeile bezgl. rmin/rmax:
Wie kann ich da das Reading eines andren Dummy einbauen? Ich habe jetzt einen auf ...
setList state:rangeslider,20,0.1,80,1,rmin:{([HZSP]-[HYS])},rmax:{([HZSP]+5)},readonly:1
... gemacht, aber dat gei ja nu nimmernich. Muss ich vermutlich anders notieren, odda? Irgendwie muss das da aber rein, da sich ja der IST- Wert und die Hysterese ändern bei Umschaltung auf Nachtbetrieb und zurück resp. beim manuellen Verändern der jeweiligen Einstellungen...
Axso... Könnte man die dargestellten Farben für rmin, rmax und "alles ok" als RGB und/oder Klartext (lightblue z.B. > https://html-colors.org/de/web-farbtabelle/) in der Parametrierung mitgeben? Also wenn nix, dann default, wenn, dann eben das....

Zum Thema "Irrer Iwan Slider" mit stateFormat {''}: Kann ich die entsprechende Codestelle selber raus frickeln (wo?), oder wird die Änderung zeitnah ins Update gegeben?
Titel: Antw:Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: rudolfkoenig am 11 November 2016, 07:24:55
ZitatDas JS funktioniert wunderbar, nachdem ich dahinter gekommen bin, das man erst mal ein ShutDown&Restart hinlegen muss, das es auch zum Tragen kommt  (https://forum.fhem.de/Smileys/default/rolleyes.gif)
Bei mir reicht fuer JS Aktualisierung ein reload im Browser.

ZitatWie kann ich da das Reading eines andren Dummy einbauen?
Die {()} Konstrukte (intern SetMagic genannt) funktioniert nur fuer die set und setreading Befehle.
Wuerde fuer attr aber auch nicht viel helfen, weil es beim ausfuehren des Befehls ersetz wird, und nicht bei jede  Abfrage. Ich wuerde ein notify bauen, und damit setList aendern.

der "Irrer Iwan Slider" sollte nach dem update heute weg sein.
Titel: Antw:Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: M_I_B am 11 November 2016, 07:42:15
Zitat von: rudolfkoenig am 11 November 2016, 07:24:55Bei mir reicht fuer JS Aktualisierung ein reload im Browser.
Hmmm... Die Datei hatte ich ja schon vorgestern Abend rein kopiert und seit dem hatte ich reichlich Browser- Reloads / Starts und ebenso reichlich ReRead Config. Aber nach Einbau der Parameter hatte ich an Stelle des Sliders nur den KlickPfeil eines DropDown. Das war erst nach einem ShutDown/Restart richtig...

Zitat von: rudolfkoenig am 11 November 2016, 07:24:55Wuerde fuer attr aber auch nicht viel helfen, weil es beim ausfuehren des Befehls ersetz wird, und nicht bei jede  Abfrage.
Ok, das erklärt einiges ;D Da kann ich mir ja'n Wolf frickeln  ::) Dann mache ich das mal wie vorgeschlagen...

Zitat von: rudolfkoenig am 11 November 2016, 07:24:55der "Irrer Iwan Slider" sollte nach dem update heute weg sein.
Super! Dann brauche ich nicht an Dingen rumfrickeln, wovon ich keine Ahnung habe; finde ich gut  ;D ;D ;D
Titel: Antw:Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: Invers am 11 November 2016, 09:35:17
Bei mir half:
chown -c fhem:dialout /opt/fhem/www/pgm2/fhemweb_rangeslider.js

Titel: Antw:Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: M_I_B am 11 November 2016, 10:03:27
... ich bin jetzt nicht der Linux- Held, aber wenn ich das richtig lese, hast du damit dem User "fhem" und der Gruppe "Dialout" als Besitzer der Datei deklariert?

Ich weiß im Moment nicht, ob das bei mir Sinn macht. Denn nach dem Fhem- Neustart geht es ja; somit sollten die Rechte stimmen. Ich habe die Datei ja von einem Windows via als Root gemappter persistenter Samba- Verbindung auf den PI kopiert. Daher nehme ich an, das hier Rechte beim Kopieren gesetzt wurden, die Fhem das Anfassen er Datei gestattet.

EDIT hat mal nachgesehen:
-rw-r--r--  1 fhem dialout  39647 Nov  5 11:56 fhemweb.js
-rw-r--r--  1 fhem dialout   1168 Nov 15  2015 fhemweb_knob.js
-rwxrwxr--+ 1 root root      1209 Nov  9 12:57 fhemweb_rangeslider.js
-rw-r--r--  1 fhem dialout   3449 Aug 14 12:33 fhemweb_readingsGroup.js
-rw-r--r--  1 fhem dialout    658 Nov 15  2015 fhemweb_readingsHistory.js
-rw-r--r--  1 fhem dialout   6964 Aug 14 12:33 fhemweb_sortable.js


Also werden alle per SMB kopierten Dateien erwartungsgemäß unter dem user:gruppe Root abgelegt
Titel: Antw:Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: justme1968 am 11 November 2016, 10:08:27
das file braucht keine ausführungs rechte.
Titel: Antw:Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: M_I_B am 11 November 2016, 10:11:15
... du mich meinen?
Habe ich nicht explizit gesetzt. Alles was ich per SMB auf den PI kopiere erhält genau diese Rechte ...

EDIT:
Ich habe gerade das Update gefahren wegen "Irrer Iwan Slider". Das funktioniert so weit erst mal und macht optisch einen guten Satz nach vorne. Allerdings glaube ich erahnen zu können, warum der Code da drin war, welcher die Probleme verursacht hat?!? Denn jetzt erhalte ich reichlich Fehlermeldungen im FhemLog bei einem ReRead like ...
2016.11.11 10:34:34.859 1: PERL WARNING: Argument "" isn't numeric in subtraction (-) at (eval 14243) line 1.
2016.11.11 10:34:39.780 1: PERL WARNING: Argument "" isn't numeric in addition (+) at (eval 14308) line 1.
2016.11.11 10:34:39.781 1: PERL WARNING: Argument "" isn't numeric in numeric lt (<) at (eval 14308) line 1.
2016.11.11 10:34:39.783 1: PERL WARNING: Argument "???" isn't numeric in addition (+) at (eval 14309) line 1.
2016.11.11 10:34:39.783 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 14309) line 1.
2016.11.11 10:34:39.798 1: PERL WARNING: Argument "" isn't numeric in subtraction (-) at (eval 14311) line 1.
2016.11.11 10:34:39.799 1: PERL WARNING: Argument "" isn't numeric in addition (+) at (eval 14311) line 1.


... sowie in der UI exakt so viele Fehler wie (modifizierte) Slider vorhanden sind like ...
Usage: setstate <name> <state>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.


... sowie nach einem ReRead in der UI überall die "drei Fragezeichen" an der Stelle, wo vorher der nicht erwünschte Wert stand...

Also so geht es irgendwie nicht wirklich. Leider kann ich mangels Wissen nicht mehr dazu beitragen ...

EDIT2: ... und wenn ich einen Slider nur mit der Maus anklicke, ohne zu schieben, erhalte ich einen "undefiniert", wenn da vorher die Fragezeichen standen...
Titel: Antw:Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: M_I_B am 11 November 2016, 22:25:32
Zitat von: rudolfkoenig am 11 November 2016, 07:24:55Die {()} Konstrukte (intern SetMagic genannt) funktioniert nur fuer die set und setreading Befehle.
Wuerde fuer attr aber auch nicht viel helfen, weil es beim ausfuehren des Befehls ersetz wird, und nicht bei jede  Abfrage. Ich wuerde ein notify bauen, und damit setList aendern.

...ähhh ja ... Leichter Gesagt als getan; ich probiere seit ne'r Stunde rum und bekomme es nicht gebacken. Aktueller Stand:
define set_RL_HZSi DOIF ([HZSP] or [HYS]) (attr HZSi setList state:rangeslider,20,0.01,80,1,rmin:{([HZSP]-[HYS])},rmax:[HZSP],readonly:1)

Natürlich habe ich noch reichlich andere Versionen und Klammerungen durch, aber keine führte zum Erfolg; ist das erste Mal, das ich versuche, mit einem DOIF das Attribut eines Device zu ändern...
Titel: Antw:Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: justme1968 am 11 November 2016, 22:44:39
die warnungen liegen nicht an der änderung sondern daran das du STATE auf einen leeren string setzt und vermutlich irgendwo anders per Value(..) drauf zugreifst. nimm statt Value(...) besser ReadingsVal('<device>','state',0)

die meldungen beim start kommen daher das setstate nicht mir einem leeren string umgehen kann. der workaround ist stateFormat auf ein html leerzeichen zu definieren: attr <device> stateFormat {'&nbsp;'} statt dem leeren string wie oben vorgeschlagen.


das undefiniert beim klicken ist ein anderer alter fehler (der glaube ich auch schon mal weg war).
@rudi: val wird erst im mousemove initialisiert. das wird hiermit behoben (zeilennummern nicht ganz korrekt):Index: fhemweb.js
===================================================================
--- fhemweb.js (revision 12546)
+++ fhemweb.js (working copy)
@@ -1070,7 +1092,8 @@
     $(newEl).append('<input type="hidden" name="'+elName+
                         '" value="'+currVal+'">');

-  var lastX=-1, offX=0, maxX=0, val;
+  var lastX=-1, offX=0, maxX=0;
+  var val = currVal;

   newEl.activateFn = function() {
     if(currVal < min || currVal > max)
oder man sendet in onmouseup cmd nicht los wenn val === undefined ist. d.h. die maus zuvor nicht bewegt wurde.

das ist eher eine DOIF frage. keine ahnung wie die syntax da ansehen muss.
Titel: Antw:Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: M_I_B am 11 November 2016, 23:19:08
Zitat von: justme1968 am 11 November 2016, 22:44:39die warnungen liegen nicht an der änderung sondern daran das du STATE auf einen leeren string setzt und vermutlich irgendwo anders per Value(..) drauf zugreifst. nimm statt Value(...) besser ReadingsVal('<device>','state',0)
Naja, ich mache alles mit DOIF und greife natürlich "schreibend" darauf zurück. Die reinen Anzeige- Slider müssen ja von irgend wo her ihren Wert erhalten, also füttere ich die z.B. bei einem Event eines 1wire- Sensors mit dessen Daten. Value resp. ReadingsVal nutze ich in der Form gar nicht...

Zitat von: justme1968 am 11 November 2016, 22:44:39die meldungen beim start kommen daher das setstate nicht mir einem leeren string umgehen kann. der workaround ist stateFormat auf ein html leerzeichen zu definieren: attr <device> stateFormat {'&nbsp;'} statt dem leeren string wie oben vorgeschlagen.
Ok, das macht Sinn. versuche ich gleich noch eben, bevor ich mal ein Nickerchen mache ;)

EDIT: Nö, die Fehler haben sich nur in Hinsicht auf das Space geändert bei allen Slidern, also unabhängig davon, ob ein Slider einen Sollwert "liefert" oder einen Istwert "empfängt".
2016.11.11 23:41:06.839 1: PERL WARNING: Argument "&nbsp;" isn't numeric in numeric gt (>) at (eval 1001803) line 1.
2016.11.11 23:41:06.840 1: PERL WARNING: Argument "&nbsp;" isn't numeric in numeric lt (<) at (eval 1001803) line 1.
2016.11.11 23:41:06.878 1: PERL WARNING: Argument "&nbsp;" isn't numeric in numeric gt (>) at (eval 1001809) line 1.
2016.11.11 23:41:06.878 1: PERL WARNING: Argument "&nbsp;" isn't numeric in numeric lt (<) at (eval 1001809) line 1.
2016.11.11 23:41:12.855 1: PERL WARNING: Argument "&nbsp;" isn't numeric in subtraction (-) at (eval 1001813) line 1.
2016.11.11 23:41:12.932 1: PERL WARNING: Argument "&nbsp;" isn't numeric in subtraction (-) at (eval 1001834) line 1.
2016.11.11 23:41:13.832 1: PERL WARNING: Argument "&nbsp;" isn't numeric in subtraction (-) at (eval 1001857) line 1.
2016.11.11 23:41:13.890 1: PERL WARNING: Argument "&nbsp;" isn't numeric in subtraction (-) at (eval 1001878) line 1.
2016.11.11 23:41:30.914 1: PERL WARNING: Argument "&nbsp;" isn't numeric in addition (+) at (eval 1001943) line 1.
2016.11.11 23:41:30.915 1: PERL WARNING: Argument "&nbsp;" isn't numeric in numeric lt (<) at (eval 1001943) line 1.
2016.11.11 23:41:30.918 1: PERL WARNING: Argument "&nbsp;" isn't numeric in addition (+) at (eval 1001944) line 1.
2016.11.11 23:41:30.919 1: PERL WARNING: Argument "&nbsp;" isn't numeric in numeric gt (>) at (eval 1001944) line 1.


EDIT2: Hatte gerade die Eingebung ;) Problem gelöst durch explizites Anhängen von :state an jede Definition in den DOIF Abfragen.

Zitat von: justme1968 am 11 November 2016, 22:44:39das ist eher eine DOIF frage. keine ahnung wie die syntax da ansehen muss.
Jupp, dann gehe ich den DOIF'lern mal auf die Nerven mit der Frage ;)
Titel: Antw:Slider: Reine Anzeige / Farbe dyn. ändern?
Beitrag von: rudolfkoenig am 12 November 2016, 06:55:11
Leeres STATE erzeugt seit gestern keine Warnung mehr (da sie nicht geschrieben wird).
Habe den fhemweb.js Patch eingespielt, aber nicht getestet.