New FHEM Tablet UI

Begonnen von setstate, 22 Februar 2015, 23:37:24

Vorheriges Thema - Nächstes Thema

bjoernbo

ne......so nicht :-)


Zitat<div type="thermostat" device="Julia.Wandthermostat" data-get="desired-temp"  data-temp="measured-temp"
        class="cell left"></div>
<div type="thermostat" device="Julia.Wandthermostat" data-get="humidity" data-temp="measured-temp"
        class="cell left"></div> 

es soll unterhalb der 21.5° stehen.

(//)
Raspberry Pi 3 - FB6490C - Synology NAS DS916+ - NETATMO - HUE - SIEMENS G-Tag'S - FTUI - EchoDOT -

Brockmann

Zitat von: bjoernbo am 11 März 2015, 09:54:53
es soll unterhalb der 21.5° stehen.
Das ist mit Bordmitteln derzeit wohl nicht zu schaffen, da müsste der Typ Thermostat erweitert werden.
Du könntest die Feuchtigkeit allenfalls klein über dem Thermostaten anzeigen lassen.

bjoernbo

das wäre eine alternative. Hast du einen Codeausschnitt für mich?
Danke.
Raspberry Pi 3 - FB6490C - Synology NAS DS916+ - NETATMO - HUE - SIEMENS G-Tag'S - FTUI - EchoDOT -

Brockmann

Zitat von: bjoernbo am 11 März 2015, 10:12:56
das wäre eine alternative. Hast du einen Codeausschnitt für mich?

<li data-row="1" data-col="2" data-sizex="2" data-sizey="1">
<header>WOHNZIMMER</header>
<div class="container">
  <div class="left">
<div type="thermostat" device="WZ_Heizung" data-get="desired-temp" data-temp="measured-temp" class="cell"><div type="label" device="WZ_Sensor" data-part="4" data-unit="%" class="cell small"></div></div>
  </div>
  <div class="right">
<div type="label" device="WZ_Heizung" data-get="measured-temp" data-unit="%B0C%0A" class="cell big"></div>
<div type="label" device="WZ_VD_WZ" data-get="ValvePosition" data-fix="0" data-unit="%" class="cell big right"></div>
  </div>
<div class="container">
</li>

nesges

Zitat von: bjoernbo am 11 März 2015, 09:54:53
ne......so nicht :-)
es soll unterhalb der 21.5° stehen.

Dass es mit data-temp="measured-temp" in der humidity-Anzeige nicht funktionieren kann ist doch vollkommen klar. Ob data-temp="humidity" das gewünschte liefern würde, weiss ich nicht; aber das würde ich zumindest mal versuchen. Zudem die Knob-Anzeige der Thermostate nur bis zum Wert 30 läuft. Wenn das für dich ausreichend ist, kann ich einen guten HNO-Arzt empfehlen ;)

Brockmanns-Lösung macht einfach wesentlich mehr Sinn, du brauchst dazu ein <div type="label">, Beispiele sind in der Standard-index.html genügend enthalten.

Sollten wir solche Fragen evtl. in einen zweiten Thread auslagern? Hier geht's ja weniger um das UI, als um Basics.

Brockmann

Longpoll klappt bei mir nicht bei allen Elementen. Ich habe eine Homematic-Wetterstation, die regelmäßig alle Werte im state aktualisiert:

2015-03-11 10:46:13 CUL_HM Wetterstation T: 5.4 H: 88 W: 2.7 R: 5.9 IR: 0 WD: 290 WDR: 67.5 S: 141 B: 115


Nun habe ich beispielsweise den Helligkeitswert wie folgt in die UI eingefügt:

<div type="label" device='Wetterstation' data-get="state" data-unit="Hell." data-part="18" data-fix="0" class="cell big"></div>


Da wird beim Aufrufen der Seite zwar der aktuelle Wert angezeigt (und vermutlich alle 30 Minuten aktualisiert). Aber die Anzeige wird nicht aktualisiert, wenn die Wetterstation den state aktualisiert?

setstate

Zitat von: Brockmann am 11 März 2015, 10:09:48
Das ist mit Bordmitteln derzeit wohl nicht zu schaffen, da müsste der Typ Thermostat erweitert werden.
Du könntest die Feuchtigkeit allenfalls klein über dem Thermostaten anzeigen lassen.

Das kann das Thermostat-Control schon. Habe ich aber noch nicht so groß ausposaunt, weil ich mir noch nicht sicher bin, ob ich das so schön finde.

Ich hatte das für den Valve Value gedacht, andere Parameter könnte man damit aber bestimmt auch anzeigen. Zumindest die Humanity, weil % ist hardcoded angehangen.

<div type="thermostat" device="WohnzimmerHeizung_Clima" data-get="desired-temp" data-temp="measured-temp" data-valve="ValvePosition" class="cell"></div>


In der README habe ich dazu noch diesen kurzen Satz als Anmerkung: The wigets will show the valve value only in case of a valid data-valve attribute. The default for data-valve ist null. That means, a empty data-valve attribute hides the valve label for the widget.

setstate

Zitat von: Brockmann am 11 März 2015, 11:01:22
Longpoll klappt bei mir nicht bei allen Elementen. Ich habe eine Homematic-Wetterstation, die regelmäßig alle Werte im state aktualisiert:

2015-03-11 10:46:13 CUL_HM Wetterstation T: 5.4 H: 88 W: 2.7 R: 5.9 IR: 0 WD: 290 WDR: 67.5 S: 141 B: 115


Nun habe ich beispielsweise den Helligkeitswert wie folgt in die UI eingefügt:

<div type="label" device='Wetterstation' data-get="state" data-unit="Hell." data-part="18" data-fix="0" class="cell big"></div>


Da wird beim Aufrufen der Seite zwar der aktuelle Wert angezeigt (und vermutlich alle 30 Minuten aktualisiert). Aber die Anzeige wird nicht aktualisiert, wenn die Wetterstation den state aktualisiert?

Hallo Brockmann,

das muss ich mir Zuhause mal im Debugger ansehen, Ferndiagnose ist jetzt schwer ...

bjoernbo

Mir ist eben aufgefallen, dass wenn ich die Temperatur einstelle, diese nach 3 Minuten wieder in ihren vorherigen Zustand zurückspringt. Sprich, derzeit sind 21 Grad eingestellt. Ich habe dann die Temperatur auf 17 gesenkt und nach 3 Minuten, bzw. einem reload der Seite wurden wieder die 21 Grad angezeigt. Kann jem. das Problem bestätigen.

Anbei ein Beispielcode. Es betrifft bei mir alle Thermostate!

Zitat<li data-row="1" data-col="2" data-sizex="2" data-sizey="1">
        <header>SCHLAFZIMMER</header>
        <div type="thermostat" device="Schlafzimmer.Wandthermostat" data-get="desired-temp" data-temp="measured-temp"
         class="cell center">
        <div type="label" device="Schlafzimmer.Wandthermostat" data-get="humidity" data-unit=" %" class="cell small">
        </div></div>
</li>
Raspberry Pi 3 - FB6490C - Synology NAS DS916+ - NETATMO - HUE - SIEMENS G-Tag'S - FTUI - EchoDOT -

nesges

Ich kämpfe noch mit meinen Milights und glaube das Problem eingegrenzt zu haben. Das MilightDevice löst für manche Readings gar keine oder keine gleichnamigen Events aus. Bei aktivem longpoll führt das offenbar dazu, dass das UI noch den alten Stand liest. Im Browser äussert sich das darin, dass das jeweilige Widget zuerst den geschalteten Status anzeigt und kurze Zeit später auf den Zustand vor dem Schalten zurück springt.

Plastischstes Beispiel dafür ist vielleicht der volume-Knob, über den ich den Dim-Level steuern möchte:
<div type="volume" device="MILIGHT_Zone1_Wohnzimmer" class="cell" data-get="brightness" data-set="dim" data-max="100"></div>

1.) Beim Einschalten habe ich Dim-Level 50. Wird korrekt angezeigt.
2.) Ich ändere per Widget auf 75. Wird kurz angezeigt.
3.) Wird automatisch aktualisiert -> es wird wieder Level 50 angezeigt.
4.) Manueller Browser-Refresh -> Level 75

Was ich dabei nicht verstehe: longpoll würde doch auf ein Event warten. Wenn kein Event kommt, dürfte keine longpoll-Aktualisierung durchgeführt werden und Punkt 3 dürfte nicht passieren. Wenn ein Event kommt, hätte es den richtigen Wert. Gibt es hier noch einen weiteren Mechanismus der eine Aktualisierung direkt nach dem set ausführt? Oder funktioniert longpoll hier anders als in fhem?

Eine mögliche Lösung für mich wäre longpoll pro Device deaktivieren zu können. Wäre das machbar? Oder liegt das Problem evtl. an ganz anderer Stelle?

PS: Das volume-Widget hatte ich um's senden eines beliebigen set-Befehls erweitert, das Problem lässt sich aber auch an einem unveränderten switch-widget nachvollziehen.

Brockmann

Zitat von: bjoernbo am 11 März 2015, 19:30:31
Mir ist eben aufgefallen, dass wenn ich die Temperatur einstelle, diese nach 3 Minuten wieder in ihren vorherigen Zustand zurückspringt. Sprich, derzeit sind 21 Grad eingestellt. Ich habe dann die Temperatur auf 17 gesenkt und nach 3 Minuten, bzw. einem reload der Seite wurden wieder die 21 Grad angezeigt. Kann jem. das Problem bestätigen.

Ja, jetzt wo Du es sagst. Achte mal drauf, was im Popup der UI steht.
Bei mir kommt da set WZ_Heizungundefined 20 anstelle von set WZ-Heizung desired-temp 20. Damit kann der Wert natürlich nicht verändert werden. Klingt für mich nach einem kleinen Bug.

bjoernbo

Hallo Brockmann, kann deine Meldung bestätigen! Ist ein kleiner "bug"?!


(//)
Raspberry Pi 3 - FB6490C - Synology NAS DS916+ - NETATMO - HUE - SIEMENS G-Tag'S - FTUI - EchoDOT -

nesges

Mach bitte mal eine vollständige Widget-Definition mit data-set, data-get und data-temp. Teste damit und poste sie hier. Und zeig auch mal das fhem-Define des abgefragten Devices.

bjoernbo

Mit beigfügter Konfiguration hat es doch vor ein paar Tagen funktioniert  :-\
Zitat<header>WOHNZIMMER</header>
        <div class="container">
          <div class="left">
                 <div type="thermostat" device="Wohnzimmer.Wandthermostat" data-get="desired-temp" data-temp="measured-temp"
               class="cell">
<div type="label" device="Wohnzimmer.Wandthermostat" data-get="humidity" data-unit=" %" class="cell small">
        </div>

Mit "data-set" habe ich noch nicht gearbeitet und es wäre mir neu, wenn ich dies nun bei den Thermostaten anwenden müsste. Wie müsste das "data-set" aussehen  ::)
Raspberry Pi 3 - FB6490C - Synology NAS DS916+ - NETATMO - HUE - SIEMENS G-Tag'S - FTUI - EchoDOT -

nesges

Wie das auszusehen hätte, müsstest eigentlich DU sagen können - du hast ja das Device in fhem angelegt und sagst mir nicht was für ein Gerät das ist.

Ok, anders rum:
* Liefert dein Device ein Reading "desired-temp"?
* Liefert dein Device ein Reading "measured-temp"?

Das wären die Defaults des Widgets, wenn data-get/temp nicht gesetzt sind. Beim set hat sich ein Bug eingeschlichen. Passe fhem-tablet-ui.js ab Zeile 133 wie folgt an:

//default reading parameter name
$(this).data('get', $(this).data('get') || 'desired-temp');
$(this).data('set', $(this).data('set') || 'desired-temp');
$(this).data('temp', $(this).data('temp') || 'measured-temp');

knob_elem.knob({
'reading': $(this).data('set'),


Das unter der Annahme, dass "desired-temp" als Standard tauglich wäre - daher meine Frage nach deiner Konfiguration. Bitte mal testen ob's funktioniert. Falls nicht, müsste ich wissen wie der korrekte Befehl zum setzen der Wunschtemperatur lautet.

@setstate: Ich schick dir dazu einen Pull-Request auf github